{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.WBrL8Nvx/b1/dune-functions_2.10.0-2_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.WBrL8Nvx/b2/dune-functions_2.10.0-2_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,3 +1,3 @@\n \n 1f1fda5446deb3a67be8ddd92377c673 91628 libdevel optional libdune-functions-dev_2.10.0-2_amd64.deb\n- a44abc8bb5c2cfb0de4e79a2310abc57 2609496 doc optional libdune-functions-doc_2.10.0-2_all.deb\n+ c8ad7c66e7ff4740f36f5d7f1d92217a 2609480 doc optional libdune-functions-doc_2.10.0-2_all.deb\n"}, {"source1": "libdune-functions-doc_2.10.0-2_all.deb", "source2": "libdune-functions-doc_2.10.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 2024-11-18 22:19:43.000000 debian-binary\n--rw-r--r-- 0 0 0 13736 2024-11-18 22:19:43.000000 control.tar.xz\n--rw-r--r-- 0 0 0 2595568 2024-11-18 22:19:43.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 13816 2024-11-18 22:19:43.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 2595472 2024-11-18 22:19:43.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,12 +1,14 @@\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@@ -19,16 +21,14 @@\n usr/share/doc/libdune-functions-doc/doxygen/a00026_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00029.html\n usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00032.html\n usr/share/doc/libdune-functions-doc/doxygen/a00032_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00035.html\n usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html\n-usr/share/doc/libdune-functions-doc/doxygen/a00038.html\n-usr/share/doc/libdune-functions-doc/doxygen/a00038_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00041.html\n usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00044.html\n usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00047.html\n usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00050.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,144 +3,144 @@\n drwxr-xr-x 0 root (0) root (0) 0 2024-11-18 22:19:43.000000 ./usr/share/\n drwxr-xr-x 0 root (0) root (0) 0 2024-11-18 22:19:43.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/\n -rw-r--r-- 0 root (0) root (0) 1032 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/changelog.Debian.gz\n -rw-r--r-- 0 root (0) root (0) 5502 2024-09-05 06:39:05.000000 ./usr/share/doc/libdune-functions-doc/changelog.gz\n -rw-r--r-- 0 root (0) root (0) 3358 2024-11-14 20:25:37.000000 ./usr/share/doc/libdune-functions-doc/copyright\n drwxr-xr-x 0 root (0) root (0) 0 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/\n--rw-r--r-- 0 root (0) root (0) 8254 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002.html\n--rw-r--r-- 0 root (0) root (0) 54827 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002_source.html\n--rw-r--r-- 0 root (0) root (0) 8235 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008.html\n--rw-r--r-- 0 root (0) root (0) 17577 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008_source.html\n--rw-r--r-- 0 root (0) root (0) 8068 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011.html\n--rw-r--r-- 0 root (0) root (0) 48738 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011_source.html\n--rw-r--r-- 0 root (0) root (0) 5920 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014.html\n--rw-r--r-- 0 root (0) root (0) 13339 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014_source.html\n--rw-r--r-- 0 root (0) root (0) 6406 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017.html\n--rw-r--r-- 0 root (0) root (0) 29529 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html\n--rw-r--r-- 0 root (0) root (0) 4706 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020.html\n--rw-r--r-- 0 root (0) root (0) 14586 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020_source.html\n--rw-r--r-- 0 root (0) root (0) 5683 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023.html\n--rw-r--r-- 0 root (0) root (0) 37242 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html\n+-rw-r--r-- 0 root (0) root (0) 5920 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002.html\n+-rw-r--r-- 0 root (0) root (0) 13339 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002_source.html\n+-rw-r--r-- 0 root (0) root (0) 7538 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005.html\n+-rw-r--r-- 0 root (0) root (0) 39745 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005_source.html\n+-rw-r--r-- 0 root (0) root (0) 4706 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008.html\n+-rw-r--r-- 0 root (0) root (0) 14586 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008_source.html\n+-rw-r--r-- 0 root (0) root (0) 6406 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011.html\n+-rw-r--r-- 0 root (0) root (0) 29529 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011_source.html\n+-rw-r--r-- 0 root (0) root (0) 8235 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014.html\n+-rw-r--r-- 0 root (0) root (0) 17577 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014_source.html\n+-rw-r--r-- 0 root (0) root (0) 5103 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017.html\n+-rw-r--r-- 0 root (0) root (0) 23183 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html\n+-rw-r--r-- 0 root (0) root (0) 5683 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020.html\n+-rw-r--r-- 0 root (0) root (0) 37242 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020_source.html\n+-rw-r--r-- 0 root (0) root (0) 8068 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023.html\n+-rw-r--r-- 0 root (0) root (0) 48738 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html\n -rw-r--r-- 0 root (0) root (0) 10144 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026.html\n -rw-r--r-- 0 root (0) root (0) 136554 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026_source.html\n--rw-r--r-- 0 root (0) root (0) 7538 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029.html\n--rw-r--r-- 0 root (0) root (0) 39745 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html\n--rw-r--r-- 0 root (0) root (0) 5103 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032.html\n--rw-r--r-- 0 root (0) root (0) 23183 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032_source.html\n--rw-r--r-- 0 root (0) root (0) 7848 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035.html\n--rw-r--r-- 0 root (0) root (0) 16631 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html\n--rw-r--r-- 0 root (0) root (0) 5525 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038.html\n--rw-r--r-- 0 root (0) root (0) 27268 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038_source.html\n--rw-r--r-- 0 root (0) root (0) 6896 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041.html\n--rw-r--r-- 0 root (0) root (0) 48771 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html\n--rw-r--r-- 0 root (0) root (0) 6160 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044.html\n--rw-r--r-- 0 root (0) root (0) 28132 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html\n--rw-r--r-- 0 root (0) root (0) 5333 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047.html\n--rw-r--r-- 0 root (0) root (0) 52266 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html\n--rw-r--r-- 0 root (0) root (0) 5268 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050.html\n--rw-r--r-- 0 root (0) root (0) 31670 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050_source.html\n--rw-r--r-- 0 root (0) root (0) 4592 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053.html\n--rw-r--r-- 0 root (0) root (0) 18943 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053_source.html\n--rw-r--r-- 0 root (0) root (0) 23371 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056.html\n--rw-r--r-- 0 root (0) root (0) 71415 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056_source.html\n--rw-r--r-- 0 root (0) root (0) 6961 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059.html\n--rw-r--r-- 0 root (0) root (0) 20704 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059_source.html\n+-rw-r--r-- 0 root (0) root (0) 6394 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029.html\n+-rw-r--r-- 0 root (0) root (0) 11402 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html\n+-rw-r--r-- 0 root (0) root (0) 9887 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032.html\n+-rw-r--r-- 0 root (0) root (0) 38530 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032_source.html\n+-rw-r--r-- 0 root (0) root (0) 8254 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035.html\n+-rw-r--r-- 0 root (0) root (0) 54827 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html\n+-rw-r--r-- 0 root (0) root (0) 7848 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041.html\n+-rw-r--r-- 0 root (0) root (0) 16631 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html\n+-rw-r--r-- 0 root (0) root (0) 6290 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044.html\n+-rw-r--r-- 0 root (0) root (0) 23469 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html\n+-rw-r--r-- 0 root (0) root (0) 5078 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047.html\n+-rw-r--r-- 0 root (0) root (0) 11203 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html\n+-rw-r--r-- 0 root (0) root (0) 5657 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050.html\n+-rw-r--r-- 0 root (0) root (0) 12836 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050_source.html\n+-rw-r--r-- 0 root (0) root (0) 10246 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053.html\n+-rw-r--r-- 0 root (0) root (0) 53025 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053_source.html\n+-rw-r--r-- 0 root (0) root (0) 7865 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056.html\n+-rw-r--r-- 0 root (0) root (0) 28322 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056_source.html\n+-rw-r--r-- 0 root (0) root (0) 15790 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059.html\n+-rw-r--r-- 0 root (0) root (0) 50423 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059_source.html\n -rw-r--r-- 0 root (0) root (0) 8790 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00062.html\n -rw-r--r-- 0 root (0) root (0) 13441 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00062_source.html\n--rw-r--r-- 0 root (0) root (0) 4585 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065.html\n--rw-r--r-- 0 root (0) root (0) 14592 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065_source.html\n--rw-r--r-- 0 root (0) root (0) 7754 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068.html\n--rw-r--r-- 0 root (0) root (0) 29915 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068_source.html\n--rw-r--r-- 0 root (0) root (0) 5078 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071.html\n--rw-r--r-- 0 root (0) root (0) 11203 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071_source.html\n--rw-r--r-- 0 root (0) root (0) 7865 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074.html\n--rw-r--r-- 0 root (0) root (0) 28322 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074_source.html\n--rw-r--r-- 0 root (0) root (0) 5657 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077.html\n--rw-r--r-- 0 root (0) root (0) 12836 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077_source.html\n--rw-r--r-- 0 root (0) root (0) 6290 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080.html\n--rw-r--r-- 0 root (0) root (0) 23469 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html\n--rw-r--r-- 0 root (0) root (0) 15790 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083.html\n--rw-r--r-- 0 root (0) root (0) 50423 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083_source.html\n--rw-r--r-- 0 root (0) root (0) 10246 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086.html\n--rw-r--r-- 0 root (0) root (0) 53025 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086_source.html\n--rw-r--r-- 0 root (0) root (0) 6394 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089.html\n--rw-r--r-- 0 root (0) root (0) 11402 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html\n--rw-r--r-- 0 root (0) root (0) 9887 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092.html\n--rw-r--r-- 0 root (0) root (0) 38530 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092_source.html\n+-rw-r--r-- 0 root (0) root (0) 5268 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065.html\n+-rw-r--r-- 0 root (0) root (0) 31670 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065_source.html\n+-rw-r--r-- 0 root (0) root (0) 5333 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068.html\n+-rw-r--r-- 0 root (0) root (0) 52266 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068_source.html\n+-rw-r--r-- 0 root (0) root (0) 6160 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071.html\n+-rw-r--r-- 0 root (0) root (0) 28132 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071_source.html\n+-rw-r--r-- 0 root (0) root (0) 23371 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074.html\n+-rw-r--r-- 0 root (0) root (0) 71415 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074_source.html\n+-rw-r--r-- 0 root (0) root (0) 6961 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077.html\n+-rw-r--r-- 0 root (0) root (0) 20704 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077_source.html\n+-rw-r--r-- 0 root (0) root (0) 6896 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080.html\n+-rw-r--r-- 0 root (0) root (0) 48771 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html\n+-rw-r--r-- 0 root (0) root (0) 5525 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083.html\n+-rw-r--r-- 0 root (0) root (0) 27268 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083_source.html\n+-rw-r--r-- 0 root (0) root (0) 4592 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086.html\n+-rw-r--r-- 0 root (0) root (0) 18943 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086_source.html\n+-rw-r--r-- 0 root (0) root (0) 7754 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089.html\n+-rw-r--r-- 0 root (0) root (0) 29915 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html\n+-rw-r--r-- 0 root (0) root (0) 4585 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092.html\n+-rw-r--r-- 0 root (0) root (0) 14592 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092_source.html\n -rw-r--r-- 0 root (0) root (0) 8627 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095.html\n -rw-r--r-- 0 root (0) root (0) 55489 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095_source.html\n--rw-r--r-- 0 root (0) root (0) 8153 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098.html\n--rw-r--r-- 0 root (0) root (0) 47706 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html\n--rw-r--r-- 0 root (0) root (0) 8228 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101.html\n--rw-r--r-- 0 root (0) root (0) 47104 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101_source.html\n--rw-r--r-- 0 root (0) root (0) 8482 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104.html\n--rw-r--r-- 0 root (0) root (0) 96437 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html\n--rw-r--r-- 0 root (0) root (0) 8829 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107.html\n--rw-r--r-- 0 root (0) root (0) 40245 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html\n+-rw-r--r-- 0 root (0) root (0) 10935 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098.html\n+-rw-r--r-- 0 root (0) root (0) 221442 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html\n+-rw-r--r-- 0 root (0) root (0) 9035 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101.html\n+-rw-r--r-- 0 root (0) root (0) 36744 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101_source.html\n+-rw-r--r-- 0 root (0) root (0) 8625 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104.html\n+-rw-r--r-- 0 root (0) root (0) 60013 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html\n+-rw-r--r-- 0 root (0) root (0) 7430 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107.html\n+-rw-r--r-- 0 root (0) root (0) 35449 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html\n -rw-r--r-- 0 root (0) root (0) 7186 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110.html\n -rw-r--r-- 0 root (0) root (0) 31410 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110_source.html\n--rw-r--r-- 0 root (0) root (0) 13368 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113.html\n--rw-r--r-- 0 root (0) root (0) 24023 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html\n--rw-r--r-- 0 root (0) root (0) 10935 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116.html\n--rw-r--r-- 0 root (0) root (0) 221442 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116_source.html\n--rw-r--r-- 0 root (0) root (0) 8697 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119.html\n--rw-r--r-- 0 root (0) root (0) 44628 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html\n--rw-r--r-- 0 root (0) root (0) 8080 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122.html\n--rw-r--r-- 0 root (0) root (0) 27402 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html\n--rw-r--r-- 0 root (0) root (0) 8657 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125.html\n--rw-r--r-- 0 root (0) root (0) 71257 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125_source.html\n--rw-r--r-- 0 root (0) root (0) 8625 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128.html\n--rw-r--r-- 0 root (0) root (0) 60013 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128_source.html\n--rw-r--r-- 0 root (0) root (0) 9035 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131.html\n--rw-r--r-- 0 root (0) root (0) 36744 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131_source.html\n--rw-r--r-- 0 root (0) root (0) 4939 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134.html\n--rw-r--r-- 0 root (0) root (0) 50087 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134_source.html\n--rw-r--r-- 0 root (0) root (0) 8357 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137.html\n--rw-r--r-- 0 root (0) root (0) 22357 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137_source.html\n--rw-r--r-- 0 root (0) root (0) 9102 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140.html\n--rw-r--r-- 0 root (0) root (0) 73644 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140_source.html\n+-rw-r--r-- 0 root (0) root (0) 7323 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113.html\n+-rw-r--r-- 0 root (0) root (0) 24861 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html\n+-rw-r--r-- 0 root (0) root (0) 8657 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116.html\n+-rw-r--r-- 0 root (0) root (0) 71257 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116_source.html\n+-rw-r--r-- 0 root (0) root (0) 7169 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119.html\n+-rw-r--r-- 0 root (0) root (0) 28654 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html\n+-rw-r--r-- 0 root (0) root (0) 8654 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122.html\n+-rw-r--r-- 0 root (0) root (0) 39119 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html\n+-rw-r--r-- 0 root (0) root (0) 15549 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125.html\n+-rw-r--r-- 0 root (0) root (0) 51686 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125_source.html\n+-rw-r--r-- 0 root (0) root (0) 8357 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128.html\n+-rw-r--r-- 0 root (0) root (0) 22357 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128_source.html\n+-rw-r--r-- 0 root (0) root (0) 8153 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131.html\n+-rw-r--r-- 0 root (0) root (0) 47706 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131_source.html\n+-rw-r--r-- 0 root (0) root (0) 7058 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134.html\n+-rw-r--r-- 0 root (0) root (0) 85683 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134_source.html\n+-rw-r--r-- 0 root (0) root (0) 8482 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137.html\n+-rw-r--r-- 0 root (0) root (0) 96437 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137_source.html\n+-rw-r--r-- 0 root (0) root (0) 9300 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140.html\n+-rw-r--r-- 0 root (0) root (0) 82142 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140_source.html\n -rw-r--r-- 0 root (0) root (0) 6442 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143.html\n -rw-r--r-- 0 root (0) root (0) 31003 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143_source.html\n--rw-r--r-- 0 root (0) root (0) 7430 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146.html\n--rw-r--r-- 0 root (0) root (0) 35449 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146_source.html\n--rw-r--r-- 0 root (0) root (0) 5702 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149.html\n--rw-r--r-- 0 root (0) root (0) 17641 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149_source.html\n--rw-r--r-- 0 root (0) root (0) 5545 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152.html\n--rw-r--r-- 0 root (0) root (0) 8490 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152_source.html\n--rw-r--r-- 0 root (0) root (0) 12007 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155.html\n--rw-r--r-- 0 root (0) root (0) 66376 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155_source.html\n--rw-r--r-- 0 root (0) root (0) 5363 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158.html\n--rw-r--r-- 0 root (0) root (0) 36356 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158_source.html\n--rw-r--r-- 0 root (0) root (0) 7323 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161.html\n--rw-r--r-- 0 root (0) root (0) 24861 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161_source.html\n--rw-r--r-- 0 root (0) root (0) 5461 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164.html\n--rw-r--r-- 0 root (0) root (0) 13550 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164_source.html\n--rw-r--r-- 0 root (0) root (0) 7058 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167.html\n--rw-r--r-- 0 root (0) root (0) 85683 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167_source.html\n--rw-r--r-- 0 root (0) root (0) 8522 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170.html\n--rw-r--r-- 0 root (0) root (0) 48874 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170_source.html\n--rw-r--r-- 0 root (0) root (0) 15549 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173.html\n--rw-r--r-- 0 root (0) root (0) 51686 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173_source.html\n--rw-r--r-- 0 root (0) root (0) 8654 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176.html\n--rw-r--r-- 0 root (0) root (0) 39119 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176_source.html\n--rw-r--r-- 0 root (0) root (0) 5908 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179.html\n--rw-r--r-- 0 root (0) root (0) 18136 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179_source.html\n--rw-r--r-- 0 root (0) root (0) 9395 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182.html\n--rw-r--r-- 0 root (0) root (0) 117378 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182_source.html\n--rw-r--r-- 0 root (0) root (0) 5699 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185.html\n--rw-r--r-- 0 root (0) root (0) 41452 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185_source.html\n+-rw-r--r-- 0 root (0) root (0) 5545 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146.html\n+-rw-r--r-- 0 root (0) root (0) 8490 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146_source.html\n+-rw-r--r-- 0 root (0) root (0) 13368 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149.html\n+-rw-r--r-- 0 root (0) root (0) 24023 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149_source.html\n+-rw-r--r-- 0 root (0) root (0) 8522 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152.html\n+-rw-r--r-- 0 root (0) root (0) 48874 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152_source.html\n+-rw-r--r-- 0 root (0) root (0) 5908 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155.html\n+-rw-r--r-- 0 root (0) root (0) 18136 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155_source.html\n+-rw-r--r-- 0 root (0) root (0) 8697 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158.html\n+-rw-r--r-- 0 root (0) root (0) 44628 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158_source.html\n+-rw-r--r-- 0 root (0) root (0) 8655 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161.html\n+-rw-r--r-- 0 root (0) root (0) 73204 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161_source.html\n+-rw-r--r-- 0 root (0) root (0) 9102 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164.html\n+-rw-r--r-- 0 root (0) root (0) 73644 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164_source.html\n+-rw-r--r-- 0 root (0) root (0) 5702 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167.html\n+-rw-r--r-- 0 root (0) root (0) 17641 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167_source.html\n+-rw-r--r-- 0 root (0) root (0) 8829 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170.html\n+-rw-r--r-- 0 root (0) root (0) 40245 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170_source.html\n+-rw-r--r-- 0 root (0) root (0) 8080 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173.html\n+-rw-r--r-- 0 root (0) root (0) 27402 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173_source.html\n+-rw-r--r-- 0 root (0) root (0) 9395 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176.html\n+-rw-r--r-- 0 root (0) root (0) 117378 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176_source.html\n+-rw-r--r-- 0 root (0) root (0) 5699 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179.html\n+-rw-r--r-- 0 root (0) root (0) 41452 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179_source.html\n+-rw-r--r-- 0 root (0) root (0) 12007 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182.html\n+-rw-r--r-- 0 root (0) root (0) 66376 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182_source.html\n+-rw-r--r-- 0 root (0) root (0) 5363 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185.html\n+-rw-r--r-- 0 root (0) root (0) 36356 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185_source.html\n -rw-r--r-- 0 root (0) root (0) 5314 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188.html\n -rw-r--r-- 0 root (0) root (0) 17886 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188_source.html\n--rw-r--r-- 0 root (0) root (0) 7169 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191.html\n--rw-r--r-- 0 root (0) root (0) 28654 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191_source.html\n--rw-r--r-- 0 root (0) root (0) 8655 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00194.html\n--rw-r--r-- 0 root (0) root (0) 73204 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00194_source.html\n--rw-r--r-- 0 root (0) root (0) 9300 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00197.html\n--rw-r--r-- 0 root (0) root (0) 82142 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00197_source.html\n+-rw-r--r-- 0 root (0) root (0) 8228 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191.html\n+-rw-r--r-- 0 root (0) root (0) 47104 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191_source.html\n+-rw-r--r-- 0 root (0) root (0) 5461 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00194.html\n+-rw-r--r-- 0 root (0) root (0) 13550 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00194_source.html\n+-rw-r--r-- 0 root (0) root (0) 4939 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00197.html\n+-rw-r--r-- 0 root (0) root (0) 50087 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00197_source.html\n -rw-r--r-- 0 root (0) root (0) 3040 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00200.html\n -rw-r--r-- 0 root (0) root (0) 3048 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00203.html\n -rw-r--r-- 0 root (0) root (0) 3046 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00206.html\n -rw-r--r-- 0 root (0) root (0) 5790 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00209.html\n -rw-r--r-- 0 root (0) root (0) 5178 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00210.html\n -rw-r--r-- 0 root (0) root (0) 6407 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00212.html\n -rw-r--r-- 0 root (0) root (0) 13117 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00212.png\n@@ -540,15 +540,15 @@\n -rw-r--r-- 0 root (0) root (0) 9895 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_a2250aba7ee066a4c694d7c3cf43d078_dep.png\n -rw-r--r-- 0 root (0) root (0) 8548 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_a5545368301c4029d7054f90c0ed45fc.html\n -rw-r--r-- 0 root (0) root (0) 25766 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_a5545368301c4029d7054f90c0ed45fc_dep.png\n -rw-r--r-- 0 root (0) root (0) 4883 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_e22f2c69b2799e923164d7b2e4fa3f8c.html\n -rw-r--r-- 0 root (0) root (0) 2989 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_e22f2c69b2799e923164d7b2e4fa3f8c_dep.png\n -rw-r--r-- 0 root (0) root (0) 3674 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_e68e8157741866f444e17edd764ebbae.html\n -rw-r--r-- 0 root (0) root (0) 45631 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/doxygen.css\n--rw-r--r-- 0 root (0) root (0) 54540 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dune-functions.tag.gz\n+-rw-r--r-- 0 root (0) root (0) 54541 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dune-functions.tag.gz\n -rw-r--r-- 0 root (0) root (0) 7704 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dynsections.js\n -rw-r--r-- 0 root (0) root (0) 25698 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/files.html\n -rw-r--r-- 0 root (0) root (0) 3674 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions.html\n -rw-r--r-- 0 root (0) root (0) 9418 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions_b.html\n -rw-r--r-- 0 root (0) root (0) 9416 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions_c.html\n -rw-r--r-- 0 root (0) root (0) 15825 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions_d.html\n -rw-r--r-- 0 root (0) root (0) 13266 2024-11-18 22:19:43.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions_e.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 \n \n \n \n \n \n \n-dune-functions: istlvectorbackend.hh File Reference\n+dune-functions: localderivativetraits.hh File Reference\n \n \n \n \n \n \n \n@@ -65,61 +65,44 @@\n \n \n \n \n \n
\n \n+
  • dune
  • functions
  • gridfunctions
  • \n
    \n \n
    \n
    \n-Namespaces |\n-Functions
    \n-
    istlvectorbackend.hh File Reference
    \n+Classes |\n+Namespaces
    \n+
    localderivativetraits.hh File Reference
    \n \n
    \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/common/hybridutilities.hh>
    \n-#include <dune/common/concept.hh>
    \n-#include <dune/functions/common/indexaccess.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n+\n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n+Classes

    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >
     Derivative traits for local functions. More...
     
    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< Signature >
     
    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< R(LocalDomain)>
     
    \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

    template<class V >
    constexpr auto Dune::Functions::fieldTypes ()
     Generate list of field types in container.
     
    template<class V >
    constexpr bool Dune::Functions::hasUniqueFieldType ()
     Check if container has a unique field type.
     
    template<class Vector >
    auto Dune::Functions::istlVectorBackend (Vector &v)
     Return a vector backend wrapping non-const ISTL like containers.
     
    template<class Vector >
    auto Dune::Functions::istlVectorBackend (const Vector &v)
     Return a vector backend wrapping const ISTL like containers.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +1,28 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-istlvectorbackend.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+localderivativetraits.hh File Reference\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bD_\bu_\bn_\be\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 Derivative traits for local functions. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs ()\n-\u00a0 Generate list of field types in container.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+ _\b>_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b _\b>\n \u00a0\n-template\n-constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bF_\bi_\be_\bl_\bd_\bT_\by_\bp_\be ()\n-\u00a0 Check if container has a unique field type.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+ _\b>_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\b(_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b>\n \u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd (Vector &v)\n-\u00a0 Return a vector backend wrapping non-const ISTL like\n- containers.\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd (const Vector &v)\n-\u00a0 Return a vector backend wrapping const ISTL like containers.\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: istlvectorbackend.hh Source File\n+dune-functions: localderivativetraits.hh Source File\n \n \n \n \n \n \n \n@@ -70,352 +70,76 @@\n
    \n \n \n \n \n
    \n \n+
  • dune
  • functions
  • gridfunctions
  • \n
    \n \n
    \n-
    istlvectorbackend.hh
    \n+
    localderivativetraits.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n
    9
    \n-
    10#include <cstddef>
    \n-
    11#include <utility>
    \n-
    12#include <type_traits>
    \n+
    10
    \n+\n+
    12
    \n
    13
    \n-
    14#include <dune/common/std/type_traits.hh>
    \n-
    15#include <dune/common/indices.hh>
    \n-
    16#include <dune/common/hybridutilities.hh>
    \n-
    17#include <dune/common/concept.hh>
    \n-
    18
    \n-\n-\n-
    21
    \n-
    22
    \n-
    23namespace Dune {
    \n-
    24namespace Functions {
    \n-
    25
    \n-
    26namespace Impl {
    \n-
    27
    \n-
    28template<class V,
    \n-
    29 std::enable_if_t<not Dune::models<Imp::Concept::HasStaticIndexAccess, V>() , int> = 0>
    \n-
    30auto fieldTypes(V&& /*v*/)
    \n-
    31{
    \n-
    32 return TypeList<V>{};
    \n-
    33}
    \n-
    34
    \n-
    35template<class V,
    \n-
    36 std::enable_if_t<Dune::models<Imp::Concept::HasStaticIndexAccess, V>(), int> = 0>
    \n-
    37auto fieldTypes(V&& v)
    \n-
    38{
    \n-
    39 if constexpr (Dune::models<Imp::Concept::HasDynamicIndexAccess<std::size_t>, V>())
    \n-
    40 return fieldTypes(v[std::size_t{0}]);
    \n-
    41 else
    \n-
    42 {
    \n-
    43 auto indexRange = typename decltype(range(Hybrid::size(v)))::integer_sequence();
    \n-
    44 return unpackIntegerSequence([&](auto... i) {
    \n-
    45 return uniqueTypeList(std::tuple_cat(fieldTypes(v[i])...));
    \n-
    46 }, indexRange);
    \n-
    47 }
    \n-
    48}
    \n-
    49
    \n-
    50} // namespace Impl
    \n-
    51
    \n-
    52
    \n-
    53
    \n-
    66template<class V>
    \n-
    \n-
    67constexpr auto fieldTypes()
    \n-
    68{
    \n-
    69 return decltype(Impl::fieldTypes(std::declval<V>())){};
    \n-
    70}
    \n-
    \n-
    71
    \n-
    77template<class V>
    \n-
    \n-
    78constexpr bool hasUniqueFieldType()
    \n-
    79{
    \n-
    80 return std::tuple_size_v<std::decay_t<decltype(fieldTypes<V>())>> ==1;
    \n-
    81}
    \n+
    14namespace Dune {
    \n+
    15namespace Functions {
    \n+
    16
    \n+
    17
    \n+
    30template<class EntitySet, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+
    \n+\n+
    32{
    \n+
    33 using LocalDomain = typename EntitySet::LocalCoordinate;
    \n+
    34 using Domain = typename EntitySet::GlobalCoordinate;
    \n+
    35
    \n+
    36 template<class Signature>
    \n+
    \n+
    37 struct Traits
    \n+
    38 {
    \n+\n+
    40 };
    \n+
    \n+
    41
    \n+
    42 template<class R>
    \n+
    \n+\n+
    44 {
    \n+
    45 using Range = typename DerivativeTraits<R(Domain)>::Range;
    \n+
    46 };
    \n
    \n-
    82
    \n-
    83
    \n-
    84
    \n-
    85namespace Impl {
    \n-
    86
    \n-
    87/*
    \n-
    88 * \\brief A wrapper providing multi-index access to vector entries
    \n-
    89 *
    \n-
    90 * The wrapped vector type should be an istl like random
    \n-
    91 * access container providing operator[] and size() methods.
    \n-
    92 * For classical containers this should support indices
    \n-
    93 * of type std::size_t. For multi-type containers indices
    \n-
    94 * of the form Dune::index_constant<i> should be supported
    \n-
    95 * while size() should be a static constexpr method.
    \n-
    96 *
    \n-
    97 * When resolving multi-indices the backend appends indices
    \n-
    98 * using operator[] as long as the result is not a scalar.
    \n-
    99 * If this exhausts the digits of the multi-index, additional
    \n-
    100 * zero`s are appended.
    \n-
    101 *
    \n-
    102 * \\tparam V Type of the raw wrapper vector
    \n-
    103 */
    \n-
    104template<class V>
    \n-
    105class ISTLVectorBackend
    \n-
    106{
    \n-
    107
    \n-
    108 // Template aliases for using detection idiom.
    \n-
    109 template<class C>
    \n-
    110 using dynamicIndexAccess_t = decltype(std::declval<C>()[0]);
    \n-
    111
    \n-
    112 template<class C>
    \n-
    113 using staticIndexAccess_t = decltype(std::declval<C>()[Dune::Indices::_0]);
    \n-
    114
    \n-
    115 template<class C>
    \n-
    116 using resizeMethod_t = decltype(std::declval<C>().resize(0));
    \n-
    117
    \n-
    118
    \n-
    119
    \n-
    120 // Short cuts for feature detection
    \n-
    121 template<class C>
    \n-
    122 using hasDynamicIndexAccess = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;
    \n-
    123
    \n-
    124 template<class C>
    \n-
    125 using hasStaticIndexAccess = Dune::Std::is_detected<staticIndexAccess_t, std::remove_reference_t<C>>;
    \n-
    126
    \n-
    127 template<class C>
    \n-
    128 using hasResizeMethod = Dune::Std::is_detected<resizeMethod_t, std::remove_reference_t<C>>;
    \n-
    129
    \n-
    130 template<class C>
    \n-
    131 using isDynamicVector = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;
    \n-
    132
    \n-
    133 template<class C>
    \n-
    134 using isStaticVector = Dune::Std::bool_constant<
    \n-
    135 Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>
    \n-
    136 and not Dune::Std::is_detected_v<dynamicIndexAccess_t, std::remove_reference_t<C>>>;
    \n-
    137
    \n-
    138 template<class C>
    \n-
    139 using isScalar = Dune::Std::bool_constant<not Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;
    \n-
    140
    \n-
    141 template<class C>
    \n-
    142 using isVector = Dune::Std::bool_constant<Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;
    \n-
    143
    \n-
    144
    \n-
    145
    \n-
    146 template<class... Args>
    \n-
    147 static void forwardToResize(Args&&... args)
    \n-
    148 {
    \n-
    149 resize(std::forward<Args>(args)...);
    \n-
    150 }
    \n-
    151
    \n-
    152
    \n-
    153 template<class C, class SizeProvider,
    \n-
    154 std::enable_if_t<hasResizeMethod<C>::value, int> = 0>
    \n-
    155 static void resize(C&& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    156 {
    \n-
    157 auto size = sizeProvider.size(prefix);
    \n-
    158 if (size==0)
    \n-
    159 {
    \n-
    160 // If size==0 this prefix refers to a single coefficient c.
    \n-
    161 // But being in this overload means that c is not a scalar
    \n-
    162 // because is has a resize() method. Since operator[] deliberately
    \n-
    163 // supports implicit padding of multi-indices by as many
    \n-
    164 // [0]'s as needed to resolve a scalar entry, we should also
    \n-
    165 // except a non-scalar c here. However, this requires that
    \n-
    166 // we silently believe that whatever size c already has is
    \n-
    167 // intended by the user. The only exception is c.size()==0
    \n-
    168 // which is not acceptable but we also cannot know the desired size.
    \n-
    169 if (c.size()==0)
    \n-
    170 DUNE_THROW(RangeError, "The vector entry v[" << prefix << "] should refer to a "
    \n-
    171 << "scalar coefficient, but is a dynamically sized vector of size==0");
    \n-
    172 else
    \n-
    173 // Accept non-zero sized coefficients to avoid that resize(basis)
    \n-
    174 // fails for a vector that works with operator[] and already
    \n-
    175 // has the appropriate size.
    \n-
    176 return;
    \n-
    177 }
    \n-
    178 c.resize(size);
    \n-
    179 prefix.push_back(0);
    \n-
    180 for(std::size_t i=0; i<size; ++i)
    \n-
    181 {
    \n-
    182 prefix.back() = i;
    \n-
    183 resize(c[i], sizeProvider, prefix);
    \n-
    184 }
    \n-
    185 }
    \n-
    186
    \n-
    187 template<class C, class SizeProvider,
    \n-
    188 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,
    \n-
    189 std::enable_if_t<isVector<C>::value, int> = 0>
    \n-
    190 static void resize(C&& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    191 {
    \n-
    192 auto size = sizeProvider.size(prefix);
    \n-
    193 // If size == 0 there's nothing to do:
    \n-
    194 // We can't resize c and it's already
    \n-
    195 // large enough anyway.
    \n-
    196 if (size == 0)
    \n-
    197 return;
    \n-
    198
    \n-
    199 // If size>0 but c does not have the appropriate
    \n-
    200 // size we throw an exception.
    \n-
    201 //
    \n-
    202 // We could perhaps also allow c.size()>size.
    \n-
    203 // But then looping the loop below gets complicated:
    \n-
    204 // We're not allowed to loop until c.size(). But
    \n-
    205 // we also cannot use size for termination,
    \n-
    206 // because this fails if c is a static vector.
    \n-
    207 if (c.size() != size)
    \n-
    208 DUNE_THROW(RangeError, "Can't resize non-resizable entry v[" << prefix << "] of size " << c.size() << " to size(" << prefix << ")=" << size);
    \n-
    209
    \n-
    210 // Recursively resize all entries of c now.
    \n-
    211 using namespace Dune::Hybrid;
    \n-
    212 prefix.push_back(0);
    \n-
    213 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {
    \n-
    214 prefix.back() = i;
    \n-
    215 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);
    \n-
    216 // but even gcc-7 does not except this bus reports
    \n-
    217 // "error: \u2018this\u2019 was not captured for this lambda function"
    \n-
    218 // although there's no 'this' because we're in a static method.
    \n-
    219 // Bypassing this by and additional method that does perfect
    \n-
    220 // forwarding allows to workaround this.
    \n-
    221 ISTLVectorBackend<V>::forwardToResize(c[i], sizeProvider, prefix);
    \n-
    222 });
    \n-
    223 }
    \n-
    224
    \n-
    225 template<class C, class SizeProvider,
    \n-
    226 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,
    \n-
    227 std::enable_if_t<isScalar<C>::value, int> = 0>
    \n-
    228 static void resize(C&&, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    229 {
    \n-
    230 auto size = sizeProvider.size(prefix);
    \n-
    231 if (size != 0)
    \n-
    232 DUNE_THROW(RangeError, "Can't resize scalar vector entry v[" << prefix << "] to size(" << prefix << ")=" << size);
    \n-
    233 }
    \n-
    234
    \n-
    235 template<class C, class T,
    \n-
    236 std::enable_if_t<std::is_assignable_v<C&,T>, int> = 0>
    \n-
    237 void recursiveAssign(C& c, const T& t)
    \n-
    238 {
    \n-
    239 c = t;
    \n-
    240 }
    \n-
    241
    \n-
    242 template<class C, class T,
    \n-
    243 std::enable_if_t<not std::is_assignable_v<C&,T>, int> = 0>
    \n-
    244 void recursiveAssign(C& c, const T& t)
    \n-
    245 {
    \n-
    246 Dune::Hybrid::forEach(c, [&](auto&& ci) {
    \n-
    247 recursiveAssign(ci, t);
    \n-
    248 });
    \n-
    249 }
    \n-
    250
    \n-
    251public:
    \n-
    252
    \n-
    253 using Vector = V;
    \n-
    254
    \n-
    255 ISTLVectorBackend(Vector& vector) :
    \n-
    256 vector_(&vector)
    \n-
    257 {}
    \n-
    258
    \n-
    259 template<class SizeProvider>
    \n-
    260 void resize(const SizeProvider& sizeProvider)
    \n-
    261 {
    \n-
    262 auto prefix = typename SizeProvider::SizePrefix();
    \n-
    263 prefix.resize(0);
    \n-
    264 resize(*vector_, sizeProvider, prefix);
    \n-
    265 }
    \n-
    266
    \n-
    267 template<class MultiIndex>
    \n-
    268 decltype(auto) operator[](const MultiIndex& index) const
    \n-
    269 {
    \n-
    270 return resolveDynamicMultiIndex(*vector_, index);
    \n-
    271 }
    \n-
    272
    \n-
    273 template<class MultiIndex>
    \n-
    274 decltype(auto) operator[](const MultiIndex& index)
    \n-
    275 {
    \n-
    276 return resolveDynamicMultiIndex(*vector_, index);
    \n-
    277 }
    \n-
    278
    \n-
    287 template<typename T>
    \n-
    288 void operator= (const T& other)
    \n-
    289 {
    \n-
    290 recursiveAssign(vector(), other);
    \n-
    291 }
    \n-
    292
    \n-
    293 template<typename T>
    \n-
    294 void operator= (const ISTLVectorBackend<T>& other)
    \n-
    295 {
    \n-
    296 vector() = other.vector();
    \n-
    297 }
    \n-
    298
    \n-
    299 const Vector& vector() const
    \n-
    300 {
    \n-
    301 return *vector_;
    \n-
    302 }
    \n-
    303
    \n-
    304 Vector& vector()
    \n-
    305 {
    \n-
    306 return *vector_;
    \n-
    307 }
    \n-
    308
    \n-
    309private:
    \n-
    310
    \n-
    311 Vector* vector_;
    \n-
    312};
    \n-
    313
    \n-
    314} // end namespace Impl
    \n-
    315
    \n-
    316
    \n-
    317
    \n-
    349template<class Vector>
    \n-
    \n-
    350auto istlVectorBackend(Vector& v)
    \n-
    351{
    \n-
    352 static_assert(hasUniqueFieldType<Vector&>(), "Vector type passed to istlVectorBackend() does not have a unique field type.");
    \n-
    353 return Impl::ISTLVectorBackend<Vector>(v);
    \n-
    354}
    \n+
    47};
    \n
    \n-
    355
    \n-
    356
    \n-
    357
    \n-
    387template<class Vector>
    \n-
    \n-
    388auto istlVectorBackend(const Vector& v)
    \n-
    389{
    \n-
    390 static_assert(hasUniqueFieldType<const Vector&>(), "Vector type passed to istlVectorBackend() does not have a unique field type.");
    \n-
    391 return Impl::ISTLVectorBackend<const Vector>(v);
    \n-
    392}
    \n-
    \n-
    393
    \n-
    394
    \n-
    395
    \n-
    396} // namespace Functions
    \n-
    397} // namespace Dune
    \n-
    398
    \n-
    399
    \n-
    400#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n-\n-
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:350
    \n-
    constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:377
    \n+
    48
    \n+
    49
    \n+
    50}} // namespace Dune::Functions
    \n+
    51
    \n+
    52#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n+\n
    Definition polynomial.hh:17
    \n-
    constexpr auto fieldTypes()
    Generate list of field types in container.
    Definition istlvectorbackend.hh:67
    \n-
    constexpr bool hasUniqueFieldType()
    Check if container has a unique field type.
    Definition istlvectorbackend.hh:78
    \n-
    std::vector< Child > Vector
    Descriptor for vectors with all children of the same type and dynamic size.
    Definition containerdescriptors.hh:124
    \n-\n+
    Dummy range class to be used if no proper type is available.
    Definition defaultderivativetraits.hh:27
    \n+
    Derivative traits for local functions.
    Definition localderivativetraits.hh:32
    \n+
    typename EntitySet::GlobalCoordinate Domain
    Definition localderivativetraits.hh:34
    \n+
    typename EntitySet::LocalCoordinate LocalDomain
    Definition localderivativetraits.hh:33
    \n+
    Definition localderivativetraits.hh:38
    \n+
    InvalidRange Range
    Definition localderivativetraits.hh:39
    \n+
    typename DerivativeTraits< R(Domain)>::Range Range
    Definition localderivativetraits.hh:45
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,372 +1,77 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs\n-istlvectorbackend.hh\n+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+localderivativetraits.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n 9\n-10#include \n-11#include \n-12#include \n+10\n+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+12\n 13\n-14#include \n-15#include \n-16#include \n-17#include \n-18\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-21\n-22\n-23namespace _\bD_\bu_\bn_\be {\n-24namespace Functions {\n-25\n-26namespace Impl {\n-27\n-28template() ,\n-int> = 0>\n-30auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(V&& /*v*/)\n-31{\n-32 return TypeList{};\n-33}\n-34\n-35template(), int>\n-= 0>\n-37auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(V&& v)\n-38{\n-39 if constexpr (Dune::models,\n-V>())\n-40 return _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(v[std::size_t{0}]);\n-41 else\n-42 {\n-43 auto indexRange = typename decltype(range(Hybrid::size(v)))::\n-integer_sequence();\n-44 return unpackIntegerSequence([&](auto... i) {\n-45 return uniqueTypeList(std::tuple_cat(_\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(v[i])...));\n-46 }, indexRange);\n-47 }\n-48}\n+14namespace _\bD_\bu_\bn_\be {\n+15namespace Functions {\n+16\n+17\n+30template class\n+DerivativeTraits=DefaultDerivativeTraits>\n+_\b3_\b1struct _\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+32{\n+_\b3_\b3 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::LocalCoordinate;\n+_\b3_\b4 using _\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::GlobalCoordinate;\n+35\n+36 template\n+_\b3_\b7 struct _\bT_\br_\ba_\bi_\bt_\bs\n+38 {\n+_\b3_\b9 typedef _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be _\bR_\ba_\bn_\bg_\be;\n+40 };\n+41\n+42 template\n+_\b4_\b3 struct _\bT_\br_\ba_\bi_\bt_\bs\n+44 {\n+_\b4_\b5 using _\bR_\ba_\bn_\bg_\be = typename DerivativeTraits_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n+46 };\n+47};\n+48\n 49\n-50} // namespace Impl\n+50}} // namespace Dune::Functions\n 51\n-52\n-53\n-66template\n-_\b6_\b7constexpr auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs()\n-68{\n-69 return decltype(Impl::fieldTypes(std::declval())){};\n-70}\n-71\n-77template\n-_\b7_\b8constexpr bool _\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bF_\bi_\be_\bl_\bd_\bT_\by_\bp_\be()\n-79{\n-80 return std::tuple_size_v())>> ==1;\n-81}\n-82\n-83\n-84\n-85namespace Impl {\n-86\n-87/*\n-88 * \\brief A wrapper providing multi-index access to vector entries\n-89 *\n-90 * The wrapped vector type should be an istl like random\n-91 * access container providing operator[] and size() methods.\n-92 * For classical containers this should support indices\n-93 * of type std::size_t. For multi-type containers indices\n-94 * of the form Dune::index_constant should be supported\n-95 * while size() should be a static constexpr method.\n-96 *\n-97 * When resolving multi-indices the backend appends indices\n-98 * using operator[] as long as the result is not a scalar.\n-99 * If this exhausts the digits of the multi-index, additional\n-100 * zero`s are appended.\n-101 *\n-102 * \\tparam V Type of the raw wrapper vector\n-103 */\n-104template\n-105class ISTLVectorBackend\n-106{\n-107\n-108 // Template aliases for using detection idiom.\n-109 template\n-110 using dynamicIndexAccess_t = decltype(std::declval()[0]);\n-111\n-112 template\n-113 using staticIndexAccess_t = decltype(std::declval()[Dune::Indices::_0]);\n-114\n-115 template\n-116 using resizeMethod_t = decltype(std::declval().resize(0));\n-117\n-118\n-119\n-120 // Short cuts for feature detection\n-121 template\n-122 using hasDynamicIndexAccess = Dune::Std::is_detected>;\n-123\n-124 template\n-125 using hasStaticIndexAccess = Dune::Std::is_detected>;\n-126\n-127 template\n-128 using hasResizeMethod = Dune::Std::is_detected>;\n-129\n-130 template\n-131 using isDynamicVector = Dune::Std::is_detected>;\n-132\n-133 template\n-134 using isStaticVector = Dune::Std::bool_constant<\n-135 Dune::Std::is_detected_v>\n-136 and not Dune::Std::is_detected_v>>;\n-137\n-138 template\n-139 using isScalar = Dune::Std::bool_constant>>;\n-140\n-141 template\n-142 using isVector = Dune::Std::bool_constant>>;\n-143\n-144\n-145\n-146 template\n-147 static void forwardToResize(Args&&... args)\n-148 {\n-149 resize(std::forward(args)...);\n-150 }\n-151\n-152\n-153 template::value, int> = 0>\n-155 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-156 {\n-157 auto size = sizeProvider.size(prefix);\n-158 if (size==0)\n-159 {\n-160 // If size==0 this prefix refers to a single coefficient c.\n-161 // But being in this overload means that c is not a scalar\n-162 // because is has a resize() method. Since operator[] deliberately\n-163 // supports implicit padding of multi-indices by as many\n-164 // [0]'s as needed to resolve a scalar entry, we should also\n-165 // except a non-scalar c here. However, this requires that\n-166 // we silently believe that whatever size c already has is\n-167 // intended by the user. The only exception is c.size()==0\n-168 // which is not acceptable but we also cannot know the desired size.\n-169 if (c.size()==0)\n-170 DUNE_THROW(RangeError, \"The vector entry v[\" << prefix << \"] should refer\n-to a \"\n-171 << \"scalar coefficient, but is a dynamically sized vector of size==0\");\n-172 else\n-173 // Accept non-zero sized coefficients to avoid that resize(basis)\n-174 // fails for a vector that works with operator[] and already\n-175 // has the appropriate size.\n-176 return;\n-177 }\n-178 c.resize(size);\n-179 prefix.push_back(0);\n-180 for(std::size_t i=0; i::value, int> = 0,\n-189 std::enable_if_t::value, int> = 0>\n-190 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-191 {\n-192 auto size = sizeProvider.size(prefix);\n-193 // If size == 0 there's nothing to do:\n-194 // We can't resize c and it's already\n-195 // large enough anyway.\n-196 if (size == 0)\n-197 return;\n-198\n-199 // If size>0 but c does not have the appropriate\n-200 // size we throw an exception.\n-201 //\n-202 // We could perhaps also allow c.size()>size.\n-203 // But then looping the loop below gets complicated:\n-204 // We're not allowed to loop until c.size(). But\n-205 // we also cannot use size for termination,\n-206 // because this fails if c is a static vector.\n-207 if (c.size() != size)\n-208 DUNE_THROW(RangeError, \"Can't resize non-resizable entry v[\" << prefix <<\n-\"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n-209\n-210 // Recursively resize all entries of c now.\n-211 using namespace Dune::Hybrid;\n-212 prefix.push_back(0);\n-213 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n-214 prefix.back() = i;\n-215 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);\n-216 // but even gcc-7 does not except this bus reports\n-217 // \"error: \u00e2\u0080\u0098this\u00e2\u0080\u0099 was not captured for this lambda function\"\n-218 // although there's no 'this' because we're in a static method.\n-219 // Bypassing this by and additional method that does perfect\n-220 // forwarding allows to workaround this.\n-221 ISTLVectorBackend::forwardToResize(c[i], sizeProvider, prefix);\n-222 });\n-223 }\n-224\n-225 template::value, int> = 0,\n-227 std::enable_if_t::value, int> = 0>\n-228 static void resize(C&&, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-229 {\n-230 auto size = sizeProvider.size(prefix);\n-231 if (size != 0)\n-232 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n-\"] to size(\" << prefix << \")=\" << size);\n-233 }\n-234\n-235 template, int> = 0>\n-237 void recursiveAssign(C& c, const T& t)\n-238 {\n-239 c = t;\n-240 }\n-241\n-242 template, int> = 0>\n-244 void recursiveAssign(C& c, const T& t)\n-245 {\n-246 Dune::Hybrid::forEach(c, [&](auto&& ci) {\n-247 recursiveAssign(ci, t);\n-248 });\n-249 }\n-250\n-251public:\n-252\n-253 using _\bV_\be_\bc_\bt_\bo_\br = V;\n-254\n-255 ISTLVectorBackend(Vector& vector) :\n-256 vector_(&vector)\n-257 {}\n-258\n-259 template\n-260 void resize(const SizeProvider& sizeProvider)\n-261 {\n-262 auto prefix = typename SizeProvider::SizePrefix();\n-263 prefix.resize(0);\n-264 resize(*vector_, sizeProvider, prefix);\n-265 }\n-266\n-267 template\n-268 decltype(auto) operator[](const MultiIndex& index) const\n-269 {\n-270 return _\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(*vector_, index);\n-271 }\n-272\n-273 template\n-274 decltype(auto) operator[](const MultiIndex& index)\n-275 {\n-276 return _\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(*vector_, index);\n-277 }\n-278\n-287 template\n-288 void operator= (const T& other)\n-289 {\n-290 recursiveAssign(vector(), other);\n-291 }\n-292\n-293 template\n-294 void operator= (const ISTLVectorBackend& other)\n-295 {\n-296 vector() = other.vector();\n-297 }\n-298\n-299 const _\bV_\be_\bc_\bt_\bo_\br& vector() const\n-300 {\n-301 return *vector_;\n-302 }\n-303\n-304 _\bV_\be_\bc_\bt_\bo_\br& vector()\n-305 {\n-306 return *vector_;\n-307 }\n-308\n-309private:\n-310\n-311 _\bV_\be_\bc_\bt_\bo_\br* vector_;\n-312};\n-313\n-314} // end namespace Impl\n-315\n-316\n-317\n-349template\n-_\b3_\b5_\b0auto _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(Vector& v)\n-351{\n-352 static_assert(hasUniqueFieldType(), \"Vector type passed to\n-istlVectorBackend() does not have a unique field type.\");\n-353 return Impl::ISTLVectorBackend(v);\n-354}\n-355\n-356\n-357\n-387template\n-_\b3_\b8_\b8auto _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(const Vector& v)\n-389{\n-390 static_assert(hasUniqueFieldType(), \"Vector type passed to\n-istlVectorBackend() does not have a unique field type.\");\n-391 return Impl::ISTLVectorBackend(v);\n-392}\n-393\n-394\n-395\n-396} // namespace Functions\n-397} // namespace Dune\n-398\n-399\n-400#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n-_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd\n-auto istlVectorBackend(Vector &v)\n-Return a vector backend wrapping non-const ISTL like containers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn istlvectorbackend.hh:350\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n-&multiIndex, const IsFinal &isFinal)\n-Provide multi-index access by chaining operator[].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:377\n+52#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs\n-constexpr auto fieldTypes()\n-Generate list of field types in container.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn istlvectorbackend.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bF_\bi_\be_\bl_\bd_\bT_\by_\bp_\be\n-constexpr bool hasUniqueFieldType()\n-Check if container has a unique field type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn istlvectorbackend.hh:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< Child > Vector\n-Descriptor for vectors with all children of the same type and dynamic size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:124\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n+Dummy range class to be used if no proper type is available.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:27\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+Derivative traits for local functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:32\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n+typename EntitySet::GlobalCoordinate Domain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:34\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n+typename EntitySet::LocalCoordinate LocalDomain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:33\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:38\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+InvalidRange Range\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:39\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\b(_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+typename DerivativeTraits< R(Domain)>::Range Range\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:45\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00008.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00008.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: gridviewfunction.hh File Reference\n+dune-functions: gridfunction_imp.hh File Reference\n \n \n \n \n \n \n \n@@ -70,53 +70,30 @@\n \n
    \n
    \n \n-
    gridviewfunction.hh File Reference
    \n+Namespaces
    \n+
    gridfunction_imp.hh File Reference
    \n
    \n
    \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+\n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::Functions::GridViewFunction< Signature, GridView, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize >
     Wrapper class for functions defined on a GridView. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

    template<class F , class GridView , std::enable_if_t< models< Imp::HasFreeLocalFunction, F >(), int > = 0>
    std::decay_t< F > Dune::Functions::makeGridViewFunction (F &&f, const GridView &gridView)
     Construct a function modeling GridViewFunction from function and grid view.
     
    template<class F , class GridView , std::enable_if_t< not(models< Imp::HasFreeLocalFunction, F >()), int > = 0>
    auto Dune::Functions::makeGridViewFunction (F &&f, const GridView &gridView) -> decltype(makeAnalyticGridViewFunction(std::forward< F >(f), gridView))
     Construct a function modeling GridViewFunction from function and grid view.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +1,20 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-gridviewfunction.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+gridfunction_imp.hh File Reference\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,\n- _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n- _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0 Wrapper class for functions defined on a GridView. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template(), int > = 0>\n-std::decay_t< F >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F &&f, const GridView\n- &gridView)\n-\u00a0 Construct a function modeling _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from function\n- and grid view.\n-\u00a0\n-template()), int > = 0>\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F &&f, const GridView\n- &gridView) -> decltype(_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(std::\n- forward< F >(f), gridView))\n-\u00a0 Construct a function modeling _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from function\n- and grid view.\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00008_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00008_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: gridviewfunction.hh Source File\n+dune-functions: gridfunction_imp.hh Source File\n \n \n \n \n \n \n \n@@ -74,103 +74,92 @@\n \n \n
    \n
    \n-
    gridviewfunction.hh
    \n+
    gridfunction_imp.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n
    9
    \n-
    10#include <memory>
    \n-
    11
    \n-
    12#include <dune/common/concept.hh>
    \n+\n+\n+\n
    13
    \n-\n-\n-\n-
    17
    \n-
    18
    \n-
    19namespace Dune {
    \n-
    20namespace Functions {
    \n-
    21
    \n-
    22
    \n-
    23
    \n-
    24template<class Signature, class GridView, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n-
    \n-\n-
    26{};
    \n-
    \n-
    27
    \n-
    28
    \n-
    29
    \n-
    44template<class Range, class Domain, class GV, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    \n-
    45class GridViewFunction<Range(Domain), GV, DerivativeTraits, bufferSize> :
    \n-
    46 public GridFunction<Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize>
    \n-
    47{
    \n-
    48 using Base = GridFunction<Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize>;
    \n-
    49public:
    \n-
    50 using GridView = GV;
    \n-
    51
    \n-
    52 using Base::Base;
    \n-
    53};
    \n-
    \n-
    54
    \n-
    55
    \n+
    14
    \n+
    15
    \n+
    16namespace Dune {
    \n+
    17namespace Functions {
    \n+
    18namespace Imp {
    \n+
    19
    \n+
    23struct HasFreeLocalFunction
    \n+
    24{
    \n+
    25 template<class F>
    \n+
    26 auto require(F&& f) -> decltype(
    \n+
    27 localFunction(f)
    \n+
    28 );
    \n+
    29};
    \n+
    30
    \n+
    31
    \n+
    32
    \n+
    33// Interface of type erasure wrapper
    \n+
    34//
    \n+
    35// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n+
    36// will be added by the type erasure foundation classes.
    \n+
    37template<class Signature, class DerivativeInterface, class LocalFunctionInterface, class EntitySet>
    \n+
    38class GridFunctionWrapperInterface :
    \n+
    39 public DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>
    \n+
    40{
    \n+
    41public:
    \n+
    42 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;
    \n+
    43
    \n+
    44 virtual const EntitySet& wrappedEntitySet() const = 0;
    \n+
    45};
    \n+
    46
    \n+
    47
    \n+
    48// Implementation of type erasure wrapper
    \n+
    49template<class Signature, class DerivativeInterface, class LocalFunctionInterface, class EntitySet, class B>
    \n+
    50class GridFunctionWrapperImplementation :
    \n+
    51 public DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>
    \n+
    52{
    \n+
    53 using Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n+
    54public:
    \n+
    55 using Base::Base;
    \n
    56
    \n-
    68template<class F, class GridView,
    \n-
    69 std::enable_if_t<
    \n-
    70 models< Imp::HasFreeLocalFunction, F>() , int> = 0>
    \n-
    71std::decay_t<F>
    \n-
    \n-
    72 makeGridViewFunction(F&& f, const GridView& gridView)
    \n-
    73{
    \n-
    74 return std::forward<F>(f);
    \n-
    75}
    \n-
    \n-
    76
    \n-
    77
    \n-
    78
    \n-
    94template<class F, class GridView,
    \n-
    95 std::enable_if_t<
    \n-
    96 not(models< Imp::HasFreeLocalFunction, F>()) , int> = 0>
    \n-
    \n-
    97auto makeGridViewFunction(F&& f, const GridView& gridView)
    \n-
    98 -> decltype(makeAnalyticGridViewFunction(std::forward<F>(f), gridView))
    \n-
    99{
    \n-
    100 return makeAnalyticGridViewFunction(std::forward<F>(f), gridView);
    \n-
    101}
    \n-
    \n-
    102
    \n-
    103
    \n-
    104
    \n-
    105} // end of namespace Dune::Functions
    \n-
    106} // end of namespace Dune
    \n-
    107
    \n-
    108#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n-\n-\n-\n-
    auto makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
    Create an AnalyticGridViewFunction from a function and a grid view.
    Definition analyticgridviewfunction.hh:238
    \n+
    57 virtual LocalFunctionInterface wrappedLocalFunction() const
    \n+
    58 {
    \n+
    59 return localFunction(this->get());
    \n+
    60 }
    \n+
    61
    \n+
    62 virtual const EntitySet& wrappedEntitySet() const
    \n+
    63 {
    \n+
    64 return this->get().entitySet();
    \n+
    65 }
    \n+
    66};
    \n+
    67
    \n+
    68
    \n+
    69
    \n+
    70}}} // namespace Dune::Functions::Imp
    \n+
    71
    \n+
    72
    \n+
    73
    \n+
    74#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n+\n+\n+\n
    Definition polynomial.hh:17
    \n-
    std::decay_t< F > makeGridViewFunction(F &&f, const GridView &gridView)
    Construct a function modeling GridViewFunction from function and grid view.
    Definition gridviewfunction.hh:72
    \n-
    Definition gridfunction.hh:36
    \n-
    An entity set for all entities of given codim in a grid view.
    Definition gridviewentityset.hh:27
    \n-
    Definition gridviewfunction.hh:26
    \n-\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,109 +1,95 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-gridviewfunction.hh\n+gridfunction_imp.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n 9\n-10#include \n-11\n-12#include \n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n+12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n 13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-17\n-18\n-19namespace _\bD_\bu_\bn_\be {\n-20namespace Functions {\n-21\n-22\n-23\n-24template class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-_\b2_\b5class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-26{};\n-27\n-28\n-29\n-44template class\n-DerivativeTraits, size_t bufferSize>\n-_\b4_\b5class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-46 public _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn,\n-DerivativeTraits, bufferSize>\n-47{\n-48 using _\bB_\ba_\bs_\be = _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn,\n-DerivativeTraits, bufferSize>;\n-49public:\n-_\b5_\b0 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-51\n-52 using Base::Base;\n-53};\n-54\n-55\n+14\n+15\n+16namespace _\bD_\bu_\bn_\be {\n+17namespace Functions {\n+18namespace Imp {\n+19\n+23struct HasFreeLocalFunction\n+24{\n+25 template\n+26 auto require(F&& f) -> decltype(\n+27 localFunction(f)\n+28 );\n+29};\n+30\n+31\n+32\n+33// Interface of type erasure wrapper\n+34//\n+35// Notice that the basic interface of polymorphic classes (destructor, clone,\n+...)\n+36// will be added by the type erasure foundation classes.\n+37template\n+38class GridFunctionWrapperInterface :\n+39 public DifferentiableFunctionWrapperInterface\n+40{\n+41public:\n+42 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;\n+43\n+44 virtual const EntitySet& wrappedEntitySet() const = 0;\n+45};\n+46\n+47\n+48// Implementation of type erasure wrapper\n+49template\n+50class GridFunctionWrapperImplementation :\n+51 public DifferentiableFunctionWrapperImplementation\n+52{\n+53 using Base = DifferentiableFunctionWrapperImplementation;\n+54public:\n+55 using Base::Base;\n 56\n-68template() , int> = 0>\n-71std::decay_t\n-_\b7_\b2 _\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f, const GridView& gridView)\n-73{\n-74 return std::forward(f);\n-75}\n-76\n-77\n-78\n-94template()) , int> = 0>\n-_\b9_\b7auto _\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f, const GridView& gridView)\n-98 -> decltype(_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(std::forward(f), gridView))\n-99{\n-100 return _\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(std::forward(f), gridView);\n-101}\n-102\n-103\n-104\n-105} // end of namespace Dune::Functions\n-106} // end of namespace Dune\n-107\n-108#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n-_\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-auto makeAnalyticGridViewFunction(F &&f, const GridView &gridView)\n-Create an AnalyticGridViewFunction from a function and a grid view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:238\n+57 virtual LocalFunctionInterface wrappedLocalFunction() const\n+58 {\n+59 return localFunction(this->get());\n+60 }\n+61\n+62 virtual const EntitySet& wrappedEntitySet() const\n+63 {\n+64 return this->get().entitySet();\n+65 }\n+66};\n+67\n+68\n+69\n+70}}} // namespace Dune::Functions::Imp\n+71\n+72\n+73\n+74#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n+_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-std::decay_t< F > makeGridViewFunction(F &&f, const GridView &gridView)\n-Construct a function modeling GridViewFunction from function and grid view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewfunction.hh:72\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-An entity set for all entities of given codim in a grid view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewfunction.hh:26\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n-_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewfunction.hh:50\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: analyticgridviewfunction.hh File Reference\n+dune-functions: gridfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -71,54 +71,44 @@\n \n \n \n
    \n \n-
    analyticgridviewfunction.hh File Reference
    \n+Namespaces
    \n+
    gridfunction.hh File Reference
    \n \n
    \n \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >
     Class wrapping any differentiable function as grid function. More...
    class  Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >
     Wrapper class for functions defined on a Grid. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

    template<class F , class GridView , class Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate, class Range = std::invoke_result_t<F,Domain>>
     Dune::Functions::AnalyticGridViewFunction (const F &, const GridView &) -> AnalyticGridViewFunction< Range(Domain), GridView, F >
     
    template<class F , class GridView >
    auto Dune::Functions::makeAnalyticGridViewFunction (F &&f, const GridView &gridView)
     Create an AnalyticGridViewFunction from a function and a grid view.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +1,34 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-analyticgridviewfunction.hh File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+gridfunction.hh File Reference\n #include \n-#include \n-#include \n #include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n- _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-\u00a0 Class wrapping any differentiable function as grid function. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+ _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+ _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0 Wrapper class for functions defined on a Grid. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template::Geometry::GlobalCoordinate, class Range = std::\n-invoke_result_t>\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (const F &, const GridView &) -\n- > _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< Range(Domain), GridView, F >\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F &&f, const GridView\n- &gridView)\n-\u00a0 Create an _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from a function and a grid view.\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: analyticgridviewfunction.hh Source File\n+dune-functions: gridfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,256 +74,178 @@\n \n \n \n
    \n-
    analyticgridviewfunction.hh
    \n+
    gridfunction.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n
    9
    \n
    10#include <type_traits>
    \n-
    11#include <optional>
    \n-
    12
    \n-
    13#include <dune/common/copyableoptional.hh>
    \n-
    14#include <dune/common/typeutilities.hh>
    \n-
    15
    \n-\n-\n-\n-\n-\n-\n+
    11
    \n+
    12#include <dune/common/typeutilities.hh>
    \n+
    13
    \n+\n+\n+\n+\n+\n+\n+\n+
    21
    \n
    22
    \n
    23
    \n
    24namespace Dune {
    \n
    25namespace Functions {
    \n
    26
    \n-
    27namespace Imp {
    \n+
    27
    \n
    28
    \n-
    29template<class Signature, class GV, class FLocal, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-
    30class LocalAnalyticGridViewFunction;
    \n-
    31
    \n-
    32template<class Range, class LocalDomain, class GV, class F, template<class> class DerivativeTraits>
    \n-
    33class LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F, DerivativeTraits>
    \n-
    34{
    \n-
    35public:
    \n-
    36 using Signature = Range(LocalDomain);
    \n-
    37 using RawSignature = typename SignatureTraits<Signature>::RawSignature;
    \n-
    38 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(LocalDomain);
    \n+
    29/*
    \n+
    30 * Default implementation is empty
    \n+
    31 * The actual implementation is only given if Signature is an type
    \n+
    32 * describing a function signature as Range(Domain).
    \n+
    33 */
    \n+
    34template<class Signature, class EntitySet, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n+
    \n+\n+
    36{};
    \n+
    \n+
    37
    \n+
    38
    \n
    39
    \n-
    40 using GridView = GV;
    \n-
    41 using EntitySet = GridViewEntitySet<GridView, 0>;
    \n-
    42 using Element = typename EntitySet::Element;
    \n-
    43// using Geometry = typename Element::Geometry;
    \n-
    44 using Geometry = std::decay_t<typename Element::Geometry>;
    \n-
    45
    \n-
    46 // Use the indirection via derivativeIfImplemented to also support
    \n-
    47 // function types F that do not implement derivative. In this case
    \n-
    48 // the interface type DifferentiableFunction is using a dummy for
    \n-
    49 // the derivative type
    \n-
    50 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;
    \n-
    51 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
    \n-
    52 using LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits>;
    \n-
    53
    \n-
    55 template<class FT, disableCopyMove<LocalAnalyticGridViewFunction, FT> = 0>
    \n-
    56 LocalAnalyticGridViewFunction(FT&& f) :
    \n-
    57 f_(std::forward<FT>(f))
    \n-
    58 {}
    \n-
    59
    \n-
    61 template<class FT>
    \n-
    62 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::optional<Geometry>& geometry) :
    \n-
    63 f_(std::forward<FT>(f)),
    \n-
    64 element_(element),
    \n-
    65 geometry_(geometry)
    \n-
    66 {}
    \n-
    67
    \n-
    68
    \n-
    77 void bind(const Element& element)
    \n-
    78 {
    \n-
    79 element_ = element;
    \n-
    80 geometry_.emplace(element_.geometry());
    \n-
    81 }
    \n-
    82
    \n-
    84 void unbind()
    \n-
    85 {
    \n-
    86 geometry_.reset();
    \n-
    87 }
    \n-
    88
    \n-
    91 bool bound() const
    \n-
    92 {
    \n-
    93 return static_cast<bool>(geometry_);
    \n-
    94 }
    \n-
    95
    \n-
    105 Range operator()(const LocalDomain& x) const
    \n-
    106 {
    \n-
    107 assert(!!geometry_);
    \n-
    108 return (*f_)(geometry_->global(x));
    \n-
    109 }
    \n+
    40namespace Imp
    \n+
    41{
    \n+
    42
    \n+
    44 template<class S, class ES, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    45 struct GridFunctionTraits :
    \n+
    46 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>
    \n+
    47 {
    \n+
    48 protected:
    \n+
    49 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;
    \n+
    50
    \n+
    51 public:
    \n+
    53 using EntitySet = ES;
    \n+
    54
    \n+
    56 using Element = typename EntitySet::Element;
    \n+
    57
    \n+
    59 using DerivativeSignature = typename Base::DerivativeSignature;
    \n+
    60
    \n+\n+
    63
    \n+
    65 using LocalSignature = typename Base::Range(typename EntitySet::LocalCoordinate);
    \n+
    66
    \n+
    68 template<class R>
    \n+\n+
    70
    \n+
    72 using LocalFunctionTraits = typename Dune::Functions::Imp::LocalFunctionTraits<LocalSignature, Element, LocalDerivativeTraits, bufferSize>;
    \n+
    73
    \n+\n+
    76
    \n+
    78 using Concept = GridFunctionWrapperInterface<S, DerivativeInterface, LocalFunctionInterface, ES>;
    \n+
    79
    \n+
    81 template<class B>
    \n+
    82 using Model = GridFunctionWrapperImplementation<S, DerivativeInterface, LocalFunctionInterface, ES, B>;
    \n+
    83 };
    \n+
    84}
    \n+
    85
    \n+
    86
    \n+
    87
    \n+
    99template<class Range, class Domain, class ES, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    \n+
    100class GridFunction<Range(Domain), ES, DerivativeTraits, bufferSize> :
    \n+
    101 public TypeErasureBase<
    \n+
    102 typename Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::Concept,
    \n+
    103 Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::template Model>
    \n+
    104{
    \n+
    105 using Traits = Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>;
    \n+
    106
    \n+\n+
    108
    \n+
    109 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n
    110
    \n-
    112 const Element& localContext() const
    \n-
    113 {
    \n-
    114 assert(!!geometry_);
    \n-
    115 return element_;
    \n-
    116 }
    \n-
    117
    \n-
    126 friend LocalDerivative derivative(const LocalAnalyticGridViewFunction& t)
    \n-
    127 {
    \n-
    128 return LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(*t.f_), t.element_, t.geometry_);
    \n-
    129 }
    \n-
    130
    \n-
    131private:
    \n-
    132 // Wrap the function into CopyableOptional to make it copy-assignable
    \n-
    133 CopyableOptional<F> f_;
    \n-
    134 Element element_;
    \n-
    135 std::optional<Geometry> geometry_ = std::nullopt;
    \n-
    136};
    \n-
    137
    \n-
    138} // end namespace Imp
    \n-
    139
    \n-
    140
    \n-
    141
    \n-
    142
    \n-
    143template<class Signature, class GV, class F, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-\n-
    145
    \n+
    111 using LocalFunctionInterface = typename Traits::LocalFunctionInterface;
    \n+
    112
    \n+
    113 using EntitySet = typename Traits::EntitySet;
    \n+
    114
    \n+
    115public:
    \n+
    116
    \n+
    128 template<class F, disableCopyMove<GridFunction, F> = 0 >
    \n+
    \n+\n+
    130 Base(std::forward<F>(f))
    \n+
    131 {
    \n+
    132 static_assert(Dune::Functions::Concept::isGridFunction<F, Range(Domain), EntitySet>(), "Trying to construct a GridFunction from type that does not model the GridFunction concept");
    \n+
    133 }
    \n+
    \n+
    134
    \n+
    135 GridFunction() = default;
    \n+
    136
    \n+
    \n+
    142 Range operator() (const Domain& x) const
    \n+
    143 {
    \n+
    144 return this->asInterface().operator()(x);
    \n+
    145 }
    \n+
    \n
    146
    \n-
    152template<class Range, class Domain, class GV, class F, template<class> class DerivativeTraits>
    \n-
    \n-
    153class AnalyticGridViewFunction<Range(Domain), GV, F, DerivativeTraits>
    \n-
    154{
    \n-
    155public:
    \n-
    156 using Signature = Range(Domain);
    \n-\n-
    158 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n+
    \n+
    155 friend DerivativeInterface derivative(const GridFunction& t)
    \n+
    156 {
    \n+
    157 return t.asInterface().derivative();
    \n+
    158 }
    \n+
    \n
    159
    \n-
    160 using GridView = GV;
    \n-\n-
    162 using Element = typename EntitySet::Element;
    \n-
    163 using Geometry = typename Element::Geometry;
    \n-
    164
    \n-
    165 // Use the indirection via derivativeIfImplemented to also support
    \n-
    166 // function types F that do not implement derivative. In this case
    \n-
    167 // the interface type DifferentiableFunction is used a dummy for
    \n-
    168 // the derivative type
    \n-\n-
    170 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
    \n-\n-
    172
    \n-\n-
    174 using LocalFunction = typename Imp::LocalAnalyticGridViewFunction<Range(LocalDomain), GridView, F, LocalDerivativeTraits<EntitySet, DerivativeTraits>::template Traits>;
    \n-
    175
    \n-
    177 template<class FT>
    \n-
    \n-
    178 AnalyticGridViewFunction(FT&& f, const GridView& gridView) :
    \n-
    179 f_(std::forward<FT>(f)),
    \n-
    180 entitySet_(gridView)
    \n-
    181 {}
    \n-
    \n-
    182
    \n-
    \n-
    184 Range operator()(const Domain& x) const
    \n-
    185 {
    \n-
    186 return (*f_)(x);
    \n-
    187 }
    \n-
    \n-
    188
    \n-
    \n-\n-
    191 {
    \n-
    192 return Derivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(*t.f_), t.entitySet_.gridView());
    \n-
    193 }
    \n-
    \n-
    194
    \n-
    \n-\n-
    197 {
    \n-
    198 return LocalFunction(*t.f_);
    \n-
    199 }
    \n-
    \n-
    200
    \n-
    \n-
    202 const EntitySet& entitySet() const
    \n-
    203 {
    \n-
    204 return entitySet_;
    \n-
    205 }
    \n-
    \n-
    206
    \n-
    207private:
    \n-
    208 // Wrap the function into CopyableOptional to make it copy-assignable
    \n-
    209 CopyableOptional<F> f_;
    \n-
    210 EntitySet entitySet_;
    \n-
    211};
    \n-
    \n-
    212
    \n-
    213// deduction guides
    \n-
    214template<class F, class GridView,
    \n-
    215 class Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate,
    \n-
    216 class Range = std::invoke_result_t<F,Domain>>
    \n-
    217AnalyticGridViewFunction(const F&, const GridView&)
    \n-
    218 -> AnalyticGridViewFunction<Range(Domain), GridView, F>;
    \n-
    219
    \n-
    220
    \n-
    237template<class F, class GridView>
    \n-
    \n-
    238auto makeAnalyticGridViewFunction(F&& f, const GridView& gridView)
    \n-
    239{
    \n-
    240 using Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate;
    \n-
    241 using Range = std::invoke_result_t<F, Domain>;
    \n-
    242 using FRaw = std::decay_t<F>;
    \n-
    243
    \n-
    244 return AnalyticGridViewFunction<Range(Domain), GridView, FRaw>(std::forward<F>(f), gridView);
    \n-
    245}
    \n-
    \n-
    246
    \n-
    247
    \n-
    248
    \n-
    249}} // namespace Dune::Functions
    \n-
    250
    \n-
    251
    \n-
    252
    \n-
    253#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n-\n-\n-\n-\n-\n-\n-
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n-
    auto makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
    Create an AnalyticGridViewFunction from a function and a grid view.
    Definition analyticgridviewfunction.hh:238
    \n+
    \n+
    169 friend LocalFunctionInterface localFunction(const GridFunction& t)
    \n+
    170 {
    \n+
    171 return t.asInterface().wrappedLocalFunction();
    \n+
    172 }
    \n+
    \n+
    173
    \n+
    \n+
    180 const EntitySet& entitySet() const
    \n+
    181 {
    \n+
    182 return this->asInterface().wrappedEntitySet();
    \n+
    183 }
    \n+
    \n+
    184};
    \n+
    \n+
    185
    \n+
    186
    \n+
    187
    \n+
    188}} // namespace Dune::Functions
    \n+
    189
    \n+
    190
    \n+
    191
    \n+
    192#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n+\n+\n+\n+\n+\n+\n+\n
    Definition polynomial.hh:17
    \n-
    Definition differentiablefunction.hh:33
    \n-
    Helper class to deduce the signature of a callable.
    Definition signature.hh:60
    \n-
    Definition analyticgridviewfunction.hh:144
    \n-
    Range operator()(const Domain &x) const
    Evaluate the wrapped function f directly in global coordinates x.
    Definition analyticgridviewfunction.hh:184
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition analyticgridviewfunction.hh:173
    \n-
    friend Derivative derivative(const AnalyticGridViewFunction &t)
    Create a derivative grid-function by wrapping the derivative of f.
    Definition analyticgridviewfunction.hh:190
    \n-
    typename Element::Geometry Geometry
    Definition analyticgridviewfunction.hh:163
    \n-
    typename EntitySet::Element Element
    Definition analyticgridviewfunction.hh:162
    \n-\n-
    decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >())) GlobalRawDerivative
    Definition analyticgridviewfunction.hh:170
    \n-
    Range(Domain) Signature
    Definition analyticgridviewfunction.hh:156
    \n-
    AnalyticGridViewFunction(FT &&f, const GridView &gridView)
    Create the grid-function by wrapping a function f and create a GridViewEntitySet.
    Definition analyticgridviewfunction.hh:178
    \n-
    friend LocalFunction localFunction(const AnalyticGridViewFunction &t)
    Construct the associated local-function.
    Definition analyticgridviewfunction.hh:196
    \n-
    typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F, LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits > LocalFunction
    Definition analyticgridviewfunction.hh:174
    \n-
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition analyticgridviewfunction.hh:157
    \n-
    const EntitySet & entitySet() const
    Return the set of entities this local-function can be bound to.
    Definition analyticgridviewfunction.hh:202
    \n-
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Definition analyticgridviewfunction.hh:158
    \n-\n-
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:36
    \n-
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:39
    \n+
    Definition localfunction.hh:34
    \n+
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:169
    \n+
    Definition gridfunction.hh:36
    \n+
    friend DerivativeInterface derivative(const GridFunction &t)
    Get derivative of wrapped function.
    Definition gridfunction.hh:155
    \n+\n+
    const EntitySet & entitySet() const
    Get associated EntitySet.
    Definition gridfunction.hh:180
    \n+
    GridFunction(F &&f)
    Construct from function.
    Definition gridfunction.hh:129
    \n+
    friend LocalFunctionInterface localFunction(const GridFunction &t)
    Get local function of wrapped function.
    Definition gridfunction.hh:169
    \n
    Derivative traits for local functions.
    Definition localderivativetraits.hh:32
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,329 +1,203 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-analyticgridviewfunction.hh\n+gridfunction.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n 9\n 10#include \n-11#include \n-12\n-13#include \n-14#include \n-15\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n-21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+11\n+12#include \n+13\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+21\n 22\n 23\n 24namespace _\bD_\bu_\bn_\be {\n 25namespace Functions {\n 26\n-27namespace Imp {\n+27\n 28\n-29template class\n-DerivativeTraits=DefaultDerivativeTraits>\n-30class LocalAnalyticGridViewFunction;\n-31\n-32template\n-class DerivativeTraits>\n-33class LocalAnalyticGridViewFunction\n-34{\n-35public:\n-36 using Signature = Range(LocalDomain);\n-37 using RawSignature = typename SignatureTraits::RawSignature;\n-38 using DerivativeSignature = typename DerivativeTraits::Range\n-(LocalDomain);\n+29/*\n+30 * Default implementation is empty\n+31 * The actual implementation is only given if Signature is an type\n+32 * describing a function signature as Range(Domain).\n+33 */\n+34template class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+_\b3_\b5class _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+36{};\n+37\n+38\n 39\n-40 using GridView = GV;\n-41 using EntitySet = GridViewEntitySet;\n-42 using Element = typename EntitySet::Element;\n-43// using Geometry = typename Element::Geometry;\n-44 using Geometry = std::decay_t;\n-45\n-46 // Use the indirection via derivativeIfImplemented to also support\n-47 // function types F that do not implement derivative. In this case\n-48 // the interface type DifferentiableFunction is using a dummy for\n-49 // the derivative type\n-50 using DerivativeDummy = DifferentiableFunction;\n-51 using GlobalRawDerivative = decltype(Imp::\n-derivativeIfImplemented(std::declval()));\n-52 using LocalDerivative = LocalAnalyticGridViewFunction;\n-53\n-55 template = 0>\n-56 LocalAnalyticGridViewFunction(FT&& f) :\n-57 f_(std::forward(f))\n-58 {}\n-59\n-61 template\n-62 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::\n-optional& geometry) :\n-63 f_(std::forward(f)),\n-64 element_(element),\n-65 geometry_(geometry)\n-66 {}\n-67\n-68\n-77 void bind(const Element& element)\n-78 {\n-79 element_ = element;\n-80 geometry_.emplace(element_.geometry());\n-81 }\n-82\n-84 void unbind()\n-85 {\n-86 geometry_.reset();\n-87 }\n-88\n-91 bool bound() const\n-92 {\n-93 return static_cast(geometry_);\n-94 }\n-95\n-105 Range operator()(const LocalDomain& x) const\n-106 {\n-107 assert(!!geometry_);\n-108 return (*f_)(geometry_->global(x));\n-109 }\n+40namespace Imp\n+41{\n+42\n+44 template class DerivativeTraits, size_t\n+bufferSize>\n+45 struct GridFunctionTraits :\n+46 DifferentiableFunctionTraits\n+47 {\n+48 protected:\n+49 using Base=DifferentiableFunctionTraits;\n+50\n+51 public:\n+53 using EntitySet = ES;\n+54\n+56 using Element = typename EntitySet::Element;\n+57\n+59 using DerivativeSignature = typename Base::DerivativeSignature;\n+60\n+62 using DerivativeInterface = _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bE_\bS_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b>;\n+63\n+65 using LocalSignature = typename Base::Range(typename EntitySet::\n+LocalCoordinate);\n+66\n+68 template\n+69 using _\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs = typename _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be Traits;\n+70\n+72 using LocalFunctionTraits = typename Dune::Functions::Imp::\n+LocalFunctionTraits;\n+73\n+75 using LocalFunctionInterface = _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bE_\bl_\be_\bm_\be_\bn_\bt_\b,\n+_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b>;\n+76\n+78 using Concept = GridFunctionWrapperInterface;\n+79\n+81 template\n+82 using Model = GridFunctionWrapperImplementation;\n+83 };\n+84}\n+85\n+86\n+87\n+99template class\n+DerivativeTraits, size_t bufferSize>\n+_\b1_\b0_\b0class _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+101 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n+102 typename Imp::GridFunctionTraits::Concept,\n+103 Imp::GridFunctionTraits::\n+template Model>\n+104{\n+105 using Traits = Imp::GridFunctionTraits;\n+106\n+107 using _\bB_\ba_\bs_\be = _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n+_\bM_\bo_\bd_\be_\bl_\b>;\n+108\n+109 using DerivativeInterface = typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n 110\n-112 const Element& localContext() const\n-113 {\n-114 assert(!!geometry_);\n-115 return element_;\n-116 }\n-117\n-126 friend LocalDerivative _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const LocalAnalyticGridViewFunction& t)\n-127 {\n-128 return LocalDerivative(Imp::derivativeIfImplemented\n-(*t.f_), t.element_, t.geometry_);\n-129 }\n-130\n-131private:\n-132 // Wrap the function into CopyableOptional to make it copy-assignable\n-133 CopyableOptional f_;\n-134 Element element_;\n-135 std::optional geometry_ = std::nullopt;\n-136};\n-137\n-138} // end namespace Imp\n-139\n-140\n-141\n-142\n-143template class\n-DerivativeTraits=DefaultDerivativeTraits>\n-_\b1_\b4_\b4class _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-145\n+111 using LocalFunctionInterface = typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n+112\n+113 using EntitySet = typename Traits::EntitySet;\n+114\n+115public:\n+116\n+128 template = 0 >\n+_\b1_\b2_\b9 _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n+130 _\bB_\ba_\bs_\be(std::forward(f))\n+131 {\n+132 static_assert(Dune::Functions::Concept::isGridFunction(), \"Trying to construct a GridFunction from type that does not model\n+the GridFunction concept\");\n+133 }\n+134\n+_\b1_\b3_\b5 _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n+136\n+_\b1_\b4_\b2 Range operator() (const Domain& x) const\n+143 {\n+144 return this->asInterface().operator()(x);\n+145 }\n 146\n-152template class\n-DerivativeTraits>\n-_\b1_\b5_\b3class _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-154{\n-155public:\n-_\b1_\b5_\b6 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n-_\b1_\b5_\b7 using _\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be;\n-_\b1_\b5_\b8 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename DerivativeTraits::Range\n-(Domain);\n+_\b1_\b5_\b5 friend DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n+156 {\n+157 return t.asInterface().derivative();\n+158 }\n 159\n-_\b1_\b6_\b0 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b1_\b6_\b1 using _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt = _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b>;\n-_\b1_\b6_\b2 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt;\n-_\b1_\b6_\b3 using _\bG_\be_\bo_\bm_\be_\bt_\br_\by = typename Element::Geometry;\n-164\n-165 // Use the indirection via derivativeIfImplemented to also support\n-166 // function types F that do not implement derivative. In this case\n-167 // the interface type DifferentiableFunction is used a dummy for\n-168 // the derivative type\n-_\b1_\b6_\b9 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bD_\bu_\bm_\bm_\by = _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>;\n-_\b1_\b7_\b0 using _\bG_\bl_\bo_\bb_\ba_\bl_\bR_\ba_\bw_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be = decltype(Imp::\n-derivativeIfImplemented(std::declval()));\n-_\b1_\b7_\b1 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be = _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,\n-_\bG_\bl_\bo_\bb_\ba_\bl_\bR_\ba_\bw_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>;\n-172\n-_\b1_\b7_\b3 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-_\b1_\b7_\b4 using _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn = typename Imp::LocalAnalyticGridViewFunction_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be Traits>;\n-175\n-177 template\n-_\b1_\b7_\b8 _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(FT&& f, const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gridView) :\n-179 f_(std::forward(f)),\n-180 entitySet_(gridView)\n-181 {}\n-182\n-_\b1_\b8_\b4 Range _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Domain& x) const\n-185 {\n-186 return (*f_)(x);\n-187 }\n-188\n-_\b1_\b9_\b0 friend _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-191 {\n-192 return _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(Imp::derivativeIfImplemented(*t.f_),\n-t.entitySet_.gridView());\n-193 }\n-194\n-_\b1_\b9_\b6 friend _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-197 {\n-198 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(*t.f_);\n-199 }\n-200\n-_\b2_\b0_\b2 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-203 {\n-204 return entitySet_;\n-205 }\n-206\n-207private:\n-208 // Wrap the function into CopyableOptional to make it copy-assignable\n-209 CopyableOptional f_;\n-210 EntitySet entitySet_;\n-211};\n-212\n-213// deduction guides\n-214template::Geometry::\n-GlobalCoordinate,\n-216 class Range = std::invoke_result_t>\n-_\b2_\b1_\b7_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const F&, const GridView&)\n-218 -> _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-219\n-220\n-237template\n-_\b2_\b3_\b8auto _\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f, const GridView& gridView)\n-239{\n-240 using Domain = typename GridView::template Codim<0>::Geometry::\n-GlobalCoordinate;\n-241 using Range = std::invoke_result_t;\n-242 using FRaw = std::decay_t;\n-243\n-244 return _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\bF_\bR_\ba_\bw_\b>(std::\n-forward(f), gridView);\n-245}\n-246\n-247\n-248\n-249}} // namespace Dune::Functions\n-250\n-251\n-252\n-253#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+_\b1_\b6_\b9 friend LocalFunctionInterface _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n+170 {\n+171 return t.asInterface().wrappedLocalFunction();\n+172 }\n+173\n+_\b1_\b8_\b0 const EntitySet& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n+181 {\n+182 return this->asInterface().wrappedEntitySet();\n+183 }\n+184};\n+185\n+186\n+187\n+188}} // namespace Dune::Functions\n+189\n+190\n+191\n+192#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n _\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\n+_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n-_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n-TrigonometricFunction< K, sinFactor, cosFactor > &f)\n-Obtain derivative of TrigonometricFunction function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-auto makeAnalyticGridViewFunction(F &&f, const GridView &gridView)\n-Create an AnalyticGridViewFunction from a function and a grid view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:238\n+_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:33\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Helper class to deduce the signature of a callable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:144\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-Range operator()(const Domain &x) const\n-Evaluate the wrapped function f directly in global coordinates x.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:184\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n-typename EntitySet::LocalCoordinate LocalDomain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:173\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend Derivative derivative(const AnalyticGridViewFunction &t)\n-Create a derivative grid-function by wrapping the derivative of f.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:190\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-typename Element::Geometry Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:163\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename EntitySet::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:162\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:160\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bR_\ba_\bw_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >\n-())) GlobalRawDerivative\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:170\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-Range(Domain) Signature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:156\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-AnalyticGridViewFunction(FT &&f, const GridView &gridView)\n-Create the grid-function by wrapping a function f and create a\n-GridViewEntitySet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:178\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-friend LocalFunction localFunction(const AnalyticGridViewFunction &t)\n-Construct the associated local-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:196\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F,\n-LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits >\n-LocalFunction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:174\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-typename SignatureTraits< Signature >::RawSignature RawSignature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:157\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:34\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n+Base class for type-erased interface wrapper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+_\b>_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend DerivativeInterface derivative(const GridFunction &t)\n+Get derivative of wrapped function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:155\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+_\b>_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+GridFunction()=default\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+_\b>_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n const EntitySet & entitySet() const\n-Return the set of entities this local-function can be bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:202\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:158\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-GridView::template Codim< codim >::Entity Element\n-Type of Elements contained in this EntitySet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-Element::Geometry::LocalCoordinate LocalCoordinate\n-Type of local coordinates with respect to the Element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:39\n+Get associated EntitySet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:180\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+_\b>_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+GridFunction(F &&f)\n+Construct from function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:129\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+_\b>_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+friend LocalFunctionInterface localFunction(const GridFunction &t)\n+Get local function of wrapped function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:169\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n Derivative traits for local functions.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:32\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: localderivativetraits.hh File Reference\n+dune-functions: gridviewfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -71,38 +71,52 @@\n \n \n \n
    \n \n-
    localderivativetraits.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    gridviewfunction.hh File Reference
    \n \n
    \n-
    #include <dune/functions/common/defaultderivativetraits.hh>
    \n+\n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n \n-\n-\n-\n+\n+\n \n

    \n Classes

    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >
     Derivative traits for local functions. More...
    class  Dune::Functions::GridViewFunction< Signature, GridView, DerivativeTraits, bufferSize >
     
    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< Signature >
     
    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< R(LocalDomain)>
    class  Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize >
     Wrapper class for functions defined on a GridView. More...
     
    \n \n \n \n \n \n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    template<class F , class GridView , std::enable_if_t< models< Imp::HasFreeLocalFunction, F >(), int > = 0>
    std::decay_t< F > Dune::Functions::makeGridViewFunction (F &&f, const GridView &gridView)
     Construct a function modeling GridViewFunction from function and grid view.
     
    template<class F , class GridView , std::enable_if_t< not(models< Imp::HasFreeLocalFunction, F >()), int > = 0>
    auto Dune::Functions::makeGridViewFunction (F &&f, const GridView &gridView) -> decltype(makeAnalyticGridViewFunction(std::forward< F >(f), gridView))
     Construct a function modeling GridViewFunction from function and grid view.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,46 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-localderivativetraits.hh File Reference\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+gridviewfunction.hh File Reference\n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-\u00a0 Derivative traits for local functions. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n- _\b>_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n- _\b>_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\b(_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+ _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0 Wrapper class for functions defined on a GridView. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template(), int > = 0>\n+std::decay_t< F >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F &&f, const GridView\n+ &gridView)\n+\u00a0 Construct a function modeling _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from function\n+ and grid view.\n+\u00a0\n+template()), int > = 0>\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F &&f, const GridView\n+ &gridView) -> decltype(_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(std::\n+ forward< F >(f), gridView))\n+\u00a0 Construct a function modeling _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from function\n+ and grid view.\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: localderivativetraits.hh Source File\n+dune-functions: gridviewfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,72 +74,103 @@\n \n \n
    \n
    \n-
    localderivativetraits.hh
    \n+
    gridviewfunction.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n
    9
    \n-
    10
    \n-\n-
    12
    \n+
    10#include <memory>
    \n+
    11
    \n+
    12#include <dune/common/concept.hh>
    \n
    13
    \n-
    14namespace Dune {
    \n-
    15namespace Functions {
    \n-
    16
    \n+\n+\n+\n
    17
    \n-
    30template<class EntitySet, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-
    \n-\n-
    32{
    \n-
    33 using LocalDomain = typename EntitySet::LocalCoordinate;
    \n-
    34 using Domain = typename EntitySet::GlobalCoordinate;
    \n-
    35
    \n-
    36 template<class Signature>
    \n-
    \n-
    37 struct Traits
    \n-
    38 {
    \n-\n-
    40 };
    \n-
    \n-
    41
    \n-
    42 template<class R>
    \n-
    \n-\n-
    44 {
    \n-
    45 using Range = typename DerivativeTraits<R(Domain)>::Range;
    \n-
    46 };
    \n-
    \n-
    47};
    \n-
    \n-
    48
    \n-
    49
    \n-
    50}} // namespace Dune::Functions
    \n+
    18
    \n+
    19namespace Dune {
    \n+
    20namespace Functions {
    \n+
    21
    \n+
    22
    \n+
    23
    \n+
    24template<class Signature, class GridView, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n+
    \n+\n+
    26{};
    \n+
    \n+
    27
    \n+
    28
    \n+
    29
    \n+
    44template<class Range, class Domain, class GV, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    \n+
    45class GridViewFunction<Range(Domain), GV, DerivativeTraits, bufferSize> :
    \n+
    46 public GridFunction<Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize>
    \n+
    47{
    \n+
    48 using Base = GridFunction<Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize>;
    \n+
    49public:
    \n+
    50 using GridView = GV;
    \n
    51
    \n-
    52#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n-\n+
    52 using Base::Base;
    \n+
    53};
    \n+
    \n+
    54
    \n+
    55
    \n+
    56
    \n+
    68template<class F, class GridView,
    \n+
    69 std::enable_if_t<
    \n+
    70 models< Imp::HasFreeLocalFunction, F>() , int> = 0>
    \n+
    71std::decay_t<F>
    \n+
    \n+
    72 makeGridViewFunction(F&& f, const GridView& gridView)
    \n+
    73{
    \n+
    74 return std::forward<F>(f);
    \n+
    75}
    \n+
    \n+
    76
    \n+
    77
    \n+
    78
    \n+
    94template<class F, class GridView,
    \n+
    95 std::enable_if_t<
    \n+
    96 not(models< Imp::HasFreeLocalFunction, F>()) , int> = 0>
    \n+
    \n+
    97auto makeGridViewFunction(F&& f, const GridView& gridView)
    \n+
    98 -> decltype(makeAnalyticGridViewFunction(std::forward<F>(f), gridView))
    \n+
    99{
    \n+
    100 return makeAnalyticGridViewFunction(std::forward<F>(f), gridView);
    \n+
    101}
    \n+
    \n+
    102
    \n+
    103
    \n+
    104
    \n+
    105} // end of namespace Dune::Functions
    \n+
    106} // end of namespace Dune
    \n+
    107
    \n+
    108#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n+\n+\n+\n+
    auto makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
    Create an AnalyticGridViewFunction from a function and a grid view.
    Definition analyticgridviewfunction.hh:238
    \n
    Definition polynomial.hh:17
    \n-
    Dummy range class to be used if no proper type is available.
    Definition defaultderivativetraits.hh:27
    \n-
    Derivative traits for local functions.
    Definition localderivativetraits.hh:32
    \n-
    typename EntitySet::GlobalCoordinate Domain
    Definition localderivativetraits.hh:34
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition localderivativetraits.hh:33
    \n-
    Definition localderivativetraits.hh:38
    \n-
    InvalidRange Range
    Definition localderivativetraits.hh:39
    \n-
    typename DerivativeTraits< R(Domain)>::Range Range
    Definition localderivativetraits.hh:45
    \n+
    std::decay_t< F > makeGridViewFunction(F &&f, const GridView &gridView)
    Construct a function modeling GridViewFunction from function and grid view.
    Definition gridviewfunction.hh:72
    \n+
    Definition gridfunction.hh:36
    \n+
    An entity set for all entities of given codim in a grid view.
    Definition gridviewentityset.hh:27
    \n+
    Definition gridviewfunction.hh:26
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,77 +1,109 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-localderivativetraits.hh\n+gridviewfunction.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n 9\n-10\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-12\n+10#include \n+11\n+12#include \n 13\n-14namespace _\bD_\bu_\bn_\be {\n-15namespace Functions {\n-16\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n 17\n-30template class\n-DerivativeTraits=DefaultDerivativeTraits>\n-_\b3_\b1struct _\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-32{\n-_\b3_\b3 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::LocalCoordinate;\n-_\b3_\b4 using _\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::GlobalCoordinate;\n-35\n-36 template\n-_\b3_\b7 struct _\bT_\br_\ba_\bi_\bt_\bs\n-38 {\n-_\b3_\b9 typedef _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be _\bR_\ba_\bn_\bg_\be;\n-40 };\n-41\n-42 template\n-_\b4_\b3 struct _\bT_\br_\ba_\bi_\bt_\bs\n-44 {\n-_\b4_\b5 using _\bR_\ba_\bn_\bg_\be = typename DerivativeTraits_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n-46 };\n-47};\n-48\n-49\n-50}} // namespace Dune::Functions\n+18\n+19namespace _\bD_\bu_\bn_\be {\n+20namespace Functions {\n+21\n+22\n+23\n+24template class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+_\b2_\b5class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+26{};\n+27\n+28\n+29\n+44template class\n+DerivativeTraits, size_t bufferSize>\n+_\b4_\b5class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+46 public _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn,\n+DerivativeTraits, bufferSize>\n+47{\n+48 using _\bB_\ba_\bs_\be = _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn,\n+DerivativeTraits, bufferSize>;\n+49public:\n+_\b5_\b0 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n 51\n-52#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+52 using Base::Base;\n+53};\n+54\n+55\n+56\n+68template() , int> = 0>\n+71std::decay_t\n+_\b7_\b2 _\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f, const GridView& gridView)\n+73{\n+74 return std::forward(f);\n+75}\n+76\n+77\n+78\n+94template()) , int> = 0>\n+_\b9_\b7auto _\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f, const GridView& gridView)\n+98 -> decltype(_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(std::forward(f), gridView))\n+99{\n+100 return _\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(std::forward(f), gridView);\n+101}\n+102\n+103\n+104\n+105} // end of namespace Dune::Functions\n+106} // end of namespace Dune\n+107\n+108#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\n+_\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+auto makeAnalyticGridViewFunction(F &&f, const GridView &gridView)\n+Create an AnalyticGridViewFunction from a function and a grid view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:238\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n-Dummy range class to be used if no proper type is available.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Derivative traits for local functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:32\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n-typename EntitySet::GlobalCoordinate Domain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:34\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n-typename EntitySet::LocalCoordinate LocalDomain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:33\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:38\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-InvalidRange Range\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:39\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\b(_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-typename DerivativeTraits< R(Domain)>::Range Range\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:45\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+std::decay_t< F > makeGridViewFunction(F &&f, const GridView &gridView)\n+Construct a function modeling GridViewFunction from function and grid view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewfunction.hh:72\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+An entity set for all entities of given codim in a grid view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:27\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewfunction.hh:26\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewfunction.hh:50\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: gridfunction.hh File Reference\n+dune-functions: gridviewentityset.hh File Reference\n \n \n \n \n \n \n \n@@ -72,35 +72,25 @@\n
  • dune
  • functions
  • gridfunctions
  • \n \n \n
    \n \n-
    gridfunction.hh File Reference
    \n+
    gridviewentityset.hh File Reference
    \n
    \n
    \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+
    #include <memory>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >
     Wrapper class for functions defined on a Grid. More...
    class  Dune::Functions::GridViewEntitySet< GV, cd >
     An entity set for all entities of given codim in a grid view. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,32 +2,20 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-gridfunction.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+gridviewentityset.hh File Reference\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n- _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n- _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0 Wrapper class for functions defined on a Grid. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\bV_\b,_\b _\bc_\bd_\b _\b>\n+\u00a0 An entity set for all entities of given codim in a grid view. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\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 \n \n \n \n \n \n \n-dune-functions: gridfunction.hh Source File\n+dune-functions: gridviewentityset.hh Source File\n \n \n \n \n \n \n \n@@ -74,179 +74,123 @@\n \n \n \n
    \n-
    gridfunction.hh
    \n+
    gridviewentityset.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n+
    10#include <memory>
    \n
    11
    \n-
    12#include <dune/common/typeutilities.hh>
    \n-
    13
    \n-\n-\n-\n-\n-\n-\n-\n-
    21
    \n-
    22
    \n-
    23
    \n-
    24namespace Dune {
    \n-
    25namespace Functions {
    \n-
    26
    \n-
    27
    \n-
    28
    \n-
    29/*
    \n-
    30 * Default implementation is empty
    \n-
    31 * The actual implementation is only given if Signature is an type
    \n-
    32 * describing a function signature as Range(Domain).
    \n-
    33 */
    \n-
    34template<class Signature, class EntitySet, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n-
    \n-\n-
    36{};
    \n-
    \n+
    12
    \n+
    13namespace Dune {
    \n+
    14
    \n+
    15namespace Functions {
    \n+
    16
    \n+
    17
    \n+
    25template<class GV, int cd>
    \n+
    \n+\n+
    27{
    \n+
    28public:
    \n+
    29
    \n+
    30 typedef GV GridView;
    \n+
    31 enum {
    \n+
    32 codim = cd
    \n+
    33 };
    \n+
    34
    \n+
    36 typedef typename GridView::template Codim<codim>::Entity Element;
    \n
    37
    \n-
    38
    \n-
    39
    \n-
    40namespace Imp
    \n-
    41{
    \n-
    42
    \n-
    44 template<class S, class ES, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    45 struct GridFunctionTraits :
    \n-
    46 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>
    \n-
    47 {
    \n-
    48 protected:
    \n-
    49 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;
    \n-
    50
    \n-
    51 public:
    \n-
    53 using EntitySet = ES;
    \n+
    39 typedef typename Element::Geometry::LocalCoordinate LocalCoordinate;
    \n+
    40 typedef typename Element::Geometry::GlobalCoordinate GlobalCoordinate;
    \n+
    41
    \n+\n+
    43
    \n+
    45 typedef typename GridView::template Codim<codim>::Iterator const_iterator;
    \n+
    46
    \n+\n+
    49
    \n+
    \n+\n+
    52 gv_(gv)
    \n+
    53 {}
    \n+
    \n
    54
    \n-
    56 using Element = typename EntitySet::Element;
    \n-
    57
    \n-
    59 using DerivativeSignature = typename Base::DerivativeSignature;
    \n+
    \n+
    56 bool contains(const Element& e) const
    \n+
    57 {
    \n+
    58 return gv_.contains(e);
    \n+
    59 }
    \n+
    \n
    60
    \n-\n-
    63
    \n-
    65 using LocalSignature = typename Base::Range(typename EntitySet::LocalCoordinate);
    \n+
    \n+
    62 size_t size() const
    \n+
    63 {
    \n+
    64 return gv_.size(codim);
    \n+
    65 }
    \n+
    \n
    66
    \n-
    68 template<class R>
    \n-\n-
    70
    \n-
    72 using LocalFunctionTraits = typename Dune::Functions::Imp::LocalFunctionTraits<LocalSignature, Element, LocalDerivativeTraits, bufferSize>;
    \n-
    73
    \n-\n-
    76
    \n-
    78 using Concept = GridFunctionWrapperInterface<S, DerivativeInterface, LocalFunctionInterface, ES>;
    \n-
    79
    \n-
    81 template<class B>
    \n-
    82 using Model = GridFunctionWrapperImplementation<S, DerivativeInterface, LocalFunctionInterface, ES, B>;
    \n-
    83 };
    \n-
    84}
    \n-
    85
    \n-
    86
    \n-
    87
    \n-
    99template<class Range, class Domain, class ES, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    \n-
    100class GridFunction<Range(Domain), ES, DerivativeTraits, bufferSize> :
    \n-
    101 public TypeErasureBase<
    \n-
    102 typename Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::Concept,
    \n-
    103 Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::template Model>
    \n-
    104{
    \n-
    105 using Traits = Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>;
    \n-
    106
    \n-\n-
    108
    \n-
    109 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n-
    110
    \n-
    111 using LocalFunctionInterface = typename Traits::LocalFunctionInterface;
    \n-
    112
    \n-
    113 using EntitySet = typename Traits::EntitySet;
    \n-
    114
    \n-
    115public:
    \n-
    116
    \n-
    128 template<class F, disableCopyMove<GridFunction, F> = 0 >
    \n-
    \n-\n-
    130 Base(std::forward<F>(f))
    \n-
    131 {
    \n-
    132 static_assert(Dune::Functions::Concept::isGridFunction<F, Range(Domain), EntitySet>(), "Trying to construct a GridFunction from type that does not model the GridFunction concept");
    \n-
    133 }
    \n-
    \n-
    134
    \n-
    135 GridFunction() = default;
    \n-
    136
    \n-
    \n-
    142 Range operator() (const Domain& x) const
    \n-
    143 {
    \n-
    144 return this->asInterface().operator()(x);
    \n-
    145 }
    \n-
    \n-
    146
    \n-
    \n-
    155 friend DerivativeInterface derivative(const GridFunction& t)
    \n-
    156 {
    \n-
    157 return t.asInterface().derivative();
    \n-
    158 }
    \n-
    \n-
    159
    \n-
    \n-
    169 friend LocalFunctionInterface localFunction(const GridFunction& t)
    \n-
    170 {
    \n-
    171 return t.asInterface().wrappedLocalFunction();
    \n-
    172 }
    \n-
    \n-
    173
    \n-
    \n-
    180 const EntitySet& entitySet() const
    \n-
    181 {
    \n-
    182 return this->asInterface().wrappedEntitySet();
    \n-
    183 }
    \n-
    \n-
    184};
    \n-
    \n-
    185
    \n-
    186
    \n-
    187
    \n-
    188}} // namespace Dune::Functions
    \n-
    189
    \n-
    190
    \n-
    191
    \n-
    192#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n-\n-\n-\n-\n-\n-\n-\n+
    \n+\n+
    69 {
    \n+
    70 return gv_.template begin<codim>();
    \n+
    71 }
    \n+
    \n+
    72
    \n+
    \n+\n+
    75 {
    \n+
    76 return gv_.template end<codim>();
    \n+
    77 }
    \n+
    \n+
    78
    \n+
    \n+
    80 const GridView& gridView() const
    \n+
    81 {
    \n+
    82 return gv_;
    \n+
    83 }
    \n+
    \n+
    84
    \n+
    85private:
    \n+
    86 GridView gv_;
    \n+
    87};
    \n+
    \n+
    88
    \n+
    89
    \n+
    90} // end of namespace Dune::Functions
    \n+
    91} // end of namespace Dune
    \n+
    92
    \n+
    93#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n
    Definition polynomial.hh:17
    \n-
    Definition localfunction.hh:34
    \n-
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:169
    \n-
    Definition gridfunction.hh:36
    \n-
    friend DerivativeInterface derivative(const GridFunction &t)
    Get derivative of wrapped function.
    Definition gridfunction.hh:155
    \n-\n-
    const EntitySet & entitySet() const
    Get associated EntitySet.
    Definition gridfunction.hh:180
    \n-
    GridFunction(F &&f)
    Construct from function.
    Definition gridfunction.hh:129
    \n-
    friend LocalFunctionInterface localFunction(const GridFunction &t)
    Get local function of wrapped function.
    Definition gridfunction.hh:169
    \n-
    Derivative traits for local functions.
    Definition localderivativetraits.hh:32
    \n+
    An entity set for all entities of given codim in a grid view.
    Definition gridviewentityset.hh:27
    \n+
    GridViewEntitySet(const GridView &gv)
    Construct GridViewEntitySet for a GridView.
    Definition gridviewentityset.hh:51
    \n+
    GV GridView
    Definition gridviewentityset.hh:30
    \n+
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:36
    \n+
    const_iterator end() const
    Create an end iterator.
    Definition gridviewentityset.hh:74
    \n+
    const GridView & gridView() const
    Return the associated GridView.
    Definition gridviewentityset.hh:80
    \n+
    Element value_type
    Definition gridviewentityset.hh:42
    \n+
    const_iterator begin() const
    Create a begin iterator.
    Definition gridviewentityset.hh:68
    \n+
    GridView::template Codim< codim >::Iterator const_iterator
    A forward iterator.
    Definition gridviewentityset.hh:45
    \n+
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:39
    \n+
    size_t size() const
    Return number of Elements visited by an iterator.
    Definition gridviewentityset.hh:62
    \n+
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:40
    \n+
    @ codim
    Definition gridviewentityset.hh:32
    \n+
    bool contains(const Element &e) const
    Return true if e is contained in the EntitySet.
    Definition gridviewentityset.hh:56
    \n+
    const_iterator iterator
    Same as const_iterator.
    Definition gridviewentityset.hh:48
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,203 +1,146 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-gridfunction.hh\n+gridviewentityset.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n 9\n-10#include \n+10#include \n 11\n-12#include \n-13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n-21\n-22\n-23\n-24namespace _\bD_\bu_\bn_\be {\n-25namespace Functions {\n-26\n-27\n-28\n-29/*\n-30 * Default implementation is empty\n-31 * The actual implementation is only given if Signature is an type\n-32 * describing a function signature as Range(Domain).\n-33 */\n-34template class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-_\b3_\b5class _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-36{};\n+12\n+13namespace _\bD_\bu_\bn_\be {\n+14\n+15namespace Functions {\n+16\n+17\n+25template\n+_\b2_\b6class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+27{\n+28public:\n+29\n+_\b3_\b0 typedef GV _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw;\n+31 enum {\n+32 _\bc_\bo_\bd_\bi_\bm = cd\n+_\b3_\b3 };\n+34\n+_\b3_\b6 typedef typename GridView::template Codim::Entity _\bE_\bl_\be_\bm_\be_\bn_\bt;\n 37\n-38\n-39\n-40namespace Imp\n-41{\n-42\n-44 template class DerivativeTraits, size_t\n-bufferSize>\n-45 struct GridFunctionTraits :\n-46 DifferentiableFunctionTraits\n-47 {\n-48 protected:\n-49 using Base=DifferentiableFunctionTraits;\n-50\n-51 public:\n-53 using EntitySet = ES;\n+_\b3_\b9 typedef typename Element::Geometry::LocalCoordinate _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+_\b4_\b0 typedef typename Element::Geometry::GlobalCoordinate _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+41\n+_\b4_\b2 typedef _\bE_\bl_\be_\bm_\be_\bn_\bt _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+43\n+_\b4_\b5 typedef typename GridView::template Codim::Iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+46\n+_\b4_\b8 typedef _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+49\n+_\b5_\b1 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n+52 gv_(gv)\n+53 {}\n 54\n-56 using Element = typename EntitySet::Element;\n-57\n-59 using DerivativeSignature = typename Base::DerivativeSignature;\n+_\b5_\b6 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e) const\n+57 {\n+58 return gv_.contains(e);\n+59 }\n 60\n-62 using DerivativeInterface = _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bE_\bS_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b>;\n-63\n-65 using LocalSignature = typename Base::Range(typename EntitySet::\n-LocalCoordinate);\n+_\b6_\b2 size_t _\bs_\bi_\bz_\be() const\n+63 {\n+64 return gv_.size(_\bc_\bo_\bd_\bi_\bm);\n+65 }\n 66\n-68 template\n-69 using _\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs = typename _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be Traits;\n-70\n-72 using LocalFunctionTraits = typename Dune::Functions::Imp::\n-LocalFunctionTraits;\n-73\n-75 using LocalFunctionInterface = _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bE_\bl_\be_\bm_\be_\bn_\bt_\b,\n-_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b>;\n-76\n-78 using Concept = GridFunctionWrapperInterface;\n-79\n-81 template\n-82 using Model = GridFunctionWrapperImplementation;\n-83 };\n-84}\n-85\n-86\n-87\n-99template class\n-DerivativeTraits, size_t bufferSize>\n-_\b1_\b0_\b0class _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-101 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n-102 typename Imp::GridFunctionTraits::Concept,\n-103 Imp::GridFunctionTraits::\n-template Model>\n-104{\n-105 using Traits = Imp::GridFunctionTraits;\n-106\n-107 using _\bB_\ba_\bs_\be = _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n-_\bM_\bo_\bd_\be_\bl_\b>;\n-108\n-109 using DerivativeInterface = typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n-110\n-111 using LocalFunctionInterface = typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n-112\n-113 using EntitySet = typename Traits::EntitySet;\n-114\n-115public:\n-116\n-128 template = 0 >\n-_\b1_\b2_\b9 _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n-130 _\bB_\ba_\bs_\be(std::forward(f))\n-131 {\n-132 static_assert(Dune::Functions::Concept::isGridFunction(), \"Trying to construct a GridFunction from type that does not model\n-the GridFunction concept\");\n-133 }\n-134\n-_\b1_\b3_\b5 _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n-136\n-_\b1_\b4_\b2 Range operator() (const Domain& x) const\n-143 {\n-144 return this->asInterface().operator()(x);\n-145 }\n-146\n-_\b1_\b5_\b5 friend DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-156 {\n-157 return t.asInterface().derivative();\n-158 }\n-159\n-_\b1_\b6_\b9 friend LocalFunctionInterface _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-170 {\n-171 return t.asInterface().wrappedLocalFunction();\n-172 }\n-173\n-_\b1_\b8_\b0 const EntitySet& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-181 {\n-182 return this->asInterface().wrappedEntitySet();\n-183 }\n-184};\n-185\n-186\n-187\n-188}} // namespace Dune::Functions\n-189\n-190\n-191\n-192#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n-_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh\n-_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n-_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\b6_\b8 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const\n+69 {\n+70 return gv_.template begin();\n+71 }\n+72\n+_\b7_\b4 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const\n+75 {\n+76 return gv_.template end();\n+77 }\n+78\n+_\b8_\b0 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+81 {\n+82 return gv_;\n+83 }\n+84\n+85private:\n+86 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw gv_;\n+87};\n+88\n+89\n+90} // end of namespace Dune::Functions\n+91} // end of namespace Dune\n+92\n+93#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:34\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n-Base class for type-erased interface wrapper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n-_\b>_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend DerivativeInterface derivative(const GridFunction &t)\n-Get derivative of wrapped function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:155\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n-_\b>_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-GridFunction()=default\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n-_\b>_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-const EntitySet & entitySet() const\n-Get associated EntitySet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:180\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n-_\b>_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-GridFunction(F &&f)\n-Construct from function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n-_\b>_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-friend LocalFunctionInterface localFunction(const GridFunction &t)\n-Get local function of wrapped function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Derivative traits for local functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:32\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+An entity set for all entities of given codim in a grid view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:27\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+GridViewEntitySet(const GridView &gv)\n+Construct GridViewEntitySet for a GridView.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:51\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:30\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+GridView::template Codim< codim >::Entity Element\n+Type of Elements contained in this EntitySet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\be_\bn_\bd\n+const_iterator end() const\n+Create an end iterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Return the associated GridView.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:80\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+Element value_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:42\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+const_iterator begin() const\n+Create a begin iterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+GridView::template Codim< codim >::Iterator const_iterator\n+A forward iterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:45\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+Element::Geometry::LocalCoordinate LocalCoordinate\n+Type of local coordinates with respect to the Element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:39\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+Return number of Elements visited by an iterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+Element::Geometry::GlobalCoordinate GlobalCoordinate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:40\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bc_\bo_\bd_\bi_\bm\n+@ codim\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:32\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs\n+bool contains(const Element &e) const\n+Return true if e is contained in the EntitySet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:56\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+const_iterator iterator\n+Same as const_iterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:48\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: gridfunction_imp.hh File Reference\n+dune-functions: facenormalgridfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -70,24 +70,36 @@\n \n \n
    \n \n-
    gridfunction_imp.hh File Reference
    \n+
    facenormalgridfunction.hh File Reference
    \n
    \n
    \n-
    #include <dune/functions/common/type_traits.hh>
    \n-#include <dune/functions/common/interfaces.hh>
    \n-#include <dune/functions/common/differentiablefunction_imp.hh>
    \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
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
    \n+\n+\n+\n+\n+

    \n+Classes

    class  Dune::Functions::FaceNormalGridFunction< GV >
     Grid function implementing the piecewise element face normal. More...
     
    \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,29 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-gridfunction_imp.hh File Reference\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+facenormalgridfunction.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bG_\bV_\b _\b>\n+\u00a0 Grid function implementing the piecewise element face normal. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: gridfunction_imp.hh Source File\n+dune-functions: facenormalgridfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,92 +74,209 @@\n \n \n
    \n
    \n-
    gridfunction_imp.hh
    \n+
    facenormalgridfunction.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n
    9
    \n-\n-\n-\n-
    13
    \n-
    14
    \n-
    15
    \n-
    16namespace Dune {
    \n-
    17namespace Functions {
    \n-
    18namespace Imp {
    \n-
    19
    \n-
    23struct HasFreeLocalFunction
    \n-
    24{
    \n-
    25 template<class F>
    \n-
    26 auto require(F&& f) -> decltype(
    \n-
    27 localFunction(f)
    \n-
    28 );
    \n-
    29};
    \n-
    30
    \n-
    31
    \n-
    32
    \n-
    33// Interface of type erasure wrapper
    \n-
    34//
    \n-
    35// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n-
    36// will be added by the type erasure foundation classes.
    \n-
    37template<class Signature, class DerivativeInterface, class LocalFunctionInterface, class EntitySet>
    \n-
    38class GridFunctionWrapperInterface :
    \n-
    39 public DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>
    \n-
    40{
    \n-
    41public:
    \n-
    42 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;
    \n-
    43
    \n-
    44 virtual const EntitySet& wrappedEntitySet() const = 0;
    \n-
    45};
    \n-
    46
    \n-
    47
    \n-
    48// Implementation of type erasure wrapper
    \n-
    49template<class Signature, class DerivativeInterface, class LocalFunctionInterface, class EntitySet, class B>
    \n-
    50class GridFunctionWrapperImplementation :
    \n-
    51 public DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>
    \n-
    52{
    \n-
    53 using Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n-
    54public:
    \n-
    55 using Base::Base;
    \n-
    56
    \n-
    57 virtual LocalFunctionInterface wrappedLocalFunction() const
    \n-
    58 {
    \n-
    59 return localFunction(this->get());
    \n-
    60 }
    \n-
    61
    \n-
    62 virtual const EntitySet& wrappedEntitySet() const
    \n-
    63 {
    \n-
    64 return this->get().entitySet();
    \n-
    65 }
    \n-
    66};
    \n-
    67
    \n-
    68
    \n-
    69
    \n-
    70}}} // namespace Dune::Functions::Imp
    \n-
    71
    \n-
    72
    \n-
    73
    \n-
    74#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n-\n-\n-\n+
    10#include <type_traits>
    \n+
    11#include <optional>
    \n+
    12
    \n+
    13#include <dune/common/exceptions.hh>
    \n+
    14#include <dune/common/typeutilities.hh>
    \n+
    15#include <dune/common/rangeutilities.hh>
    \n+
    16#include <dune/geometry/referenceelements.hh>
    \n+
    17
    \n+\n+\n+
    20
    \n+
    21
    \n+
    22namespace Dune::Functions {
    \n+
    23
    \n+
    24namespace Impl {
    \n+
    25
    \n+
    26// Compute closest face to point
    \n+
    27template<class ReferenceElement, class Coordinate>
    \n+
    28auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)
    \n+
    29{
    \n+
    30 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};
    \n+
    31 double closestFaceDistance = std::numeric_limits<double>::max();
    \n+
    32 for(auto&& faceIndex : Dune::range(re.size(1)))
    \n+
    33 {
    \n+
    34 // For a face unit outer normal consider the orthogonal projection
    \n+
    35 // Px = x + <c-x,n>*n into the face. Then the distance to the face
    \n+
    36 // is given by |x-Px| = |<c-x,n>||n| = <c-x,n>.
    \n+
    37 auto normal = re.integrationOuterNormal(faceIndex);
    \n+
    38 normal /= normal.two_norm();
    \n+
    39 auto c = re.position(faceIndex,1);
    \n+
    40 c -= x;
    \n+
    41 auto faceDistance = (c*normal);
    \n+
    42 if (faceDistance<closestFaceDistance)
    \n+
    43 {
    \n+
    44 closestFaceDistance = faceDistance;
    \n+
    45 closestFaceIndex = faceIndex;
    \n+
    46 }
    \n+
    47 }
    \n+
    48 return closestFaceIndex;
    \n+
    49}
    \n+
    50
    \n+
    51} // end namespace Impl
    \n+
    52
    \n+
    53
    \n+
    54
    \n+
    55
    \n+
    68template<class GV>
    \n+
    \n+\n+
    70{
    \n+
    71public:
    \n+
    72 using GridView = GV;
    \n+\n+
    74 using Element = typename EntitySet::Element;
    \n+
    75
    \n+\n+\n+\n+
    79
    \n+
    80private:
    \n+
    81
    \n+
    82 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet, DefaultDerivativeTraits, 16>;
    \n+
    83
    \n+
    84 class LocalFunction
    \n+
    85 {
    \n+
    86 using Geometry = typename Element::Geometry;
    \n+
    87 static const int dimension = GV::dimension;
    \n+
    88 public:
    \n+
    89
    \n+
    101 void bind(const Element& element)
    \n+
    102 {
    \n+
    103 element_ = element;
    \n+
    104 geometry_.emplace(element_.geometry());
    \n+
    105 }
    \n+
    106
    \n+
    107 void unbind()
    \n+
    108 {
    \n+
    109 geometry_.reset();
    \n+
    110 }
    \n+
    111
    \n+
    114 bool bound() const
    \n+
    115 {
    \n+
    116 return static_cast<bool>(geometry_);
    \n+
    117 }
    \n+
    118
    \n+
    128 Range operator()(const LocalDomain& x) const
    \n+
    129 {
    \n+
    130 auto&& re = Dune::referenceElement(*geometry_);
    \n+
    131 // Compute reference normal of closest face to given point
    \n+
    132 auto face = Impl::closestFaceIndex(re, x);
    \n+
    133 auto localNormal = re.integrationOuterNormal(face);
    \n+
    134
    \n+
    135 // Transform reference normal into global unit outer normal using
    \n+
    136 // covariant Piola transformation
    \n+
    137 auto normal = Range{};
    \n+
    138 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);
    \n+
    139 normal /= normal.two_norm();
    \n+
    140 return normal;
    \n+
    141 }
    \n+
    142
    \n+
    144 const Element& localContext() const
    \n+
    145 {
    \n+
    146 return element_;
    \n+
    147 }
    \n+
    148
    \n+
    150 friend typename Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction& t)
    \n+
    151 {
    \n+
    152 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    153 }
    \n+
    154
    \n+
    155 private:
    \n+
    156 std::optional<Geometry> geometry_;
    \n+
    157 Element element_;
    \n+
    158 };
    \n+
    159
    \n+
    160public:
    \n+
    \n+\n+
    163 entitySet_(gridView)
    \n+
    164 {}
    \n+
    \n+
    165
    \n+
    \n+
    167 Range operator()(const Domain& x) const
    \n+
    168 {
    \n+
    169 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    170 }
    \n+
    \n+
    171
    \n+
    \n+\n+
    174 {
    \n+
    175 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    176 }
    \n+
    \n+
    177
    \n+
    \n+
    179 friend LocalFunction localFunction(const FaceNormalGridFunction& t)
    \n+
    180 {
    \n+
    181 return LocalFunction{};
    \n+
    182 }
    \n+
    \n+
    183
    \n+
    \n+
    185 const EntitySet& entitySet() const
    \n+
    186 {
    \n+
    187 return entitySet_;
    \n+
    188 }
    \n+
    \n+
    189
    \n+
    190private:
    \n+
    191 EntitySet entitySet_;
    \n+
    192};
    \n+
    \n+
    193
    \n+
    194
    \n+
    195
    \n+
    196} // namespace Dune::Functions
    \n+
    197
    \n+
    198#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n+\n+\n+
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n
    Definition polynomial.hh:17
    \n+
    Definition polynomial.hh:18
    \n+
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:41
    \n+
    Grid function implementing the piecewise element face normal.
    Definition facenormalgridfunction.hh:70
    \n+
    GridViewEntitySet< GridView, 0 > EntitySet
    Definition facenormalgridfunction.hh:73
    \n+
    typename EntitySet::LocalCoordinate LocalDomain
    Definition facenormalgridfunction.hh:76
    \n+
    typename EntitySet::GlobalCoordinate Domain
    Definition facenormalgridfunction.hh:77
    \n+
    typename EntitySet::GlobalCoordinate Range
    Definition facenormalgridfunction.hh:78
    \n+
    const EntitySet & entitySet() const
    Return the stored GridViewEntitySet.
    Definition facenormalgridfunction.hh:185
    \n+
    friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)
    Not implemented.
    Definition facenormalgridfunction.hh:173
    \n+
    GV GridView
    Definition facenormalgridfunction.hh:72
    \n+
    friend LocalFunction localFunction(const FaceNormalGridFunction &t)
    Return a local-function associated to FaceNormalGridFunction.
    Definition facenormalgridfunction.hh:179
    \n+
    FaceNormalGridFunction(const GridView &gridView)
    Construct the FaceNormalGridFunction.
    Definition facenormalgridfunction.hh:162
    \n+
    typename EntitySet::Element Element
    Definition facenormalgridfunction.hh:74
    \n+
    Range operator()(const Domain &x) const
    Not implemented.
    Definition facenormalgridfunction.hh:167
    \n+
    Definition gridfunction.hh:36
    \n+\n+
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:36
    \n+
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:39
    \n+
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:40
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,95 +1,242 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-gridfunction_imp.hh\n+facenormalgridfunction.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n 9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n-12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n-13\n-14\n-15\n-16namespace _\bD_\bu_\bn_\be {\n-17namespace Functions {\n-18namespace Imp {\n-19\n-23struct HasFreeLocalFunction\n-24{\n-25 template\n-26 auto require(F&& f) -> decltype(\n-27 localFunction(f)\n-28 );\n-29};\n-30\n-31\n-32\n-33// Interface of type erasure wrapper\n-34//\n-35// Notice that the basic interface of polymorphic classes (destructor, clone,\n-...)\n-36// will be added by the type erasure foundation classes.\n-37template\n-38class GridFunctionWrapperInterface :\n-39 public DifferentiableFunctionWrapperInterface\n-40{\n-41public:\n-42 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;\n-43\n-44 virtual const EntitySet& wrappedEntitySet() const = 0;\n-45};\n-46\n-47\n-48// Implementation of type erasure wrapper\n-49template\n-50class GridFunctionWrapperImplementation :\n-51 public DifferentiableFunctionWrapperImplementation\n-52{\n-53 using Base = DifferentiableFunctionWrapperImplementation;\n-54public:\n-55 using Base::Base;\n-56\n-57 virtual LocalFunctionInterface wrappedLocalFunction() const\n-58 {\n-59 return localFunction(this->get());\n-60 }\n-61\n-62 virtual const EntitySet& wrappedEntitySet() const\n-63 {\n-64 return this->get().entitySet();\n-65 }\n-66};\n-67\n-68\n-69\n-70}}} // namespace Dune::Functions::Imp\n-71\n-72\n-73\n-74#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n-_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh\n+10#include \n+11#include \n+12\n+13#include \n+14#include \n+15#include \n+16#include \n+17\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+20\n+21\n+22namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+23\n+24namespace Impl {\n+25\n+26// Compute closest face to point\n+27template\n+28auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)\n+29{\n+30 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};\n+31 double closestFaceDistance = std::numeric_limits::max();\n+32 for(auto&& faceIndex : _\bD_\bu_\bn_\be::range(re.size(1)))\n+33 {\n+34 // For a face unit outer normal consider the orthogonal projection\n+35 // Px = x + *n into the face. Then the distance to the face\n+36 // is given by |x-Px| = |||n| = .\n+37 auto normal = re.integrationOuterNormal(faceIndex);\n+38 normal /= normal.two_norm();\n+39 auto c = re.position(faceIndex,1);\n+40 c -= x;\n+41 auto faceDistance = (c*normal);\n+42 if (faceDistance\n+_\b6_\b9class _\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+70{\n+71public:\n+_\b7_\b2 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b7_\b3 using _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt = _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b>;\n+_\b7_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt;\n+75\n+_\b7_\b6 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+_\b7_\b7 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+_\b7_\b8 using _\bR_\ba_\bn_\bg_\be = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+79\n+80private:\n+81\n+82 using Traits = Imp::GridFunctionTraits<_\bR_\ba_\bn_\bg_\be(_\bD_\bo_\bm_\ba_\bi_\bn), _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt,\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs, 16>;\n+83\n+84 class LocalFunction\n+85 {\n+86 using Geometry = typename Element::Geometry;\n+87 static const int dimension = GV::dimension;\n+88 public:\n+89\n+101 void bind(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n+102 {\n+103 element_ = element;\n+104 geometry_.emplace(element_.geometry());\n+105 }\n+106\n+107 void unbind()\n+108 {\n+109 geometry_.reset();\n+110 }\n+111\n+114 bool bound() const\n+115 {\n+116 return static_cast(geometry_);\n+117 }\n+118\n+128 _\bR_\ba_\bn_\bg_\be operator()(const _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn& x) const\n+129 {\n+130 auto&& re = Dune::referenceElement(*geometry_);\n+131 // Compute reference normal of closest face to given point\n+132 auto face = Impl::closestFaceIndex(re, x);\n+133 auto localNormal = re.integrationOuterNormal(face);\n+134\n+135 // Transform reference normal into global unit outer normal using\n+136 // covariant Piola transformation\n+137 auto normal = _\bR_\ba_\bn_\bg_\be{};\n+138 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);\n+139 normal /= normal.two_norm();\n+140 return normal;\n+141 }\n+142\n+144 const _\bE_\bl_\be_\bm_\be_\bn_\bt& localContext() const\n+145 {\n+146 return element_;\n+147 }\n+148\n+150 friend typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+(const LocalFunction& t)\n+151 {\n+152 DUNE_THROW(NotImplemented,\"not implemented\");\n+153 }\n+154\n+155 private:\n+156 std::optional geometry_;\n+157 _\bE_\bl_\be_\bm_\be_\bn_\bt element_;\n+158 };\n+159\n+160public:\n+_\b1_\b6_\b2 _\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gridView) :\n+163 entitySet_(gridView)\n+164 {}\n+165\n+_\b1_\b6_\b7 _\bR_\ba_\bn_\bg_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bD_\bo_\bm_\ba_\bi_\bn& x) const\n+168 {\n+169 DUNE_THROW(NotImplemented,\"not implemented\");\n+170 }\n+171\n+_\b1_\b7_\b3 friend typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const\n+_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n+174 {\n+175 DUNE_THROW(NotImplemented,\"not implemented\");\n+176 }\n+177\n+_\b1_\b7_\b9 friend LocalFunction _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n+180 {\n+181 return LocalFunction{};\n+182 }\n+183\n+_\b1_\b8_\b5 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n+186 {\n+187 return entitySet_;\n+188 }\n+189\n+190private:\n+191 _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt entitySet_;\n+192};\n+193\n+194\n+195\n+196} // namespace Dune::Functions\n+197\n+198#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n+TrigonometricFunction< K, sinFactor, cosFactor > &f)\n+Obtain derivative of TrigonometricFunction function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+Default implementation for derivative traits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:41\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+Grid function implementing the piecewise element face normal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:70\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+GridViewEntitySet< GridView, 0 > EntitySet\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n+typename EntitySet::LocalCoordinate LocalDomain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:76\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n+typename EntitySet::GlobalCoordinate Domain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:77\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+typename EntitySet::GlobalCoordinate Range\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+const EntitySet & entitySet() const\n+Return the stored GridViewEntitySet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:185\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)\n+Not implemented.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:173\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:72\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+friend LocalFunction localFunction(const FaceNormalGridFunction &t)\n+Return a local-function associated to FaceNormalGridFunction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:179\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+FaceNormalGridFunction(const GridView &gridView)\n+Construct the FaceNormalGridFunction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:162\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename EntitySet::Element Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+Range operator()(const Domain &x) const\n+Not implemented.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:167\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+GridView::template Codim< codim >::Entity Element\n+Type of Elements contained in this EntitySet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+Element::Geometry::LocalCoordinate LocalCoordinate\n+Type of local coordinates with respect to the Element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:39\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+Element::Geometry::GlobalCoordinate GlobalCoordinate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:40\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: facenormalgridfunction.hh File Reference\n+dune-functions: analyticgridviewfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -71,41 +71,54 @@\n \n
    \n \n
    \n \n-
    facenormalgridfunction.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    analyticgridviewfunction.hh File Reference
    \n \n
    \n
    #include <type_traits>
    \n #include <optional>
    \n-#include <dune/common/exceptions.hh>
    \n+#include <dune/common/copyableoptional.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 <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
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::FaceNormalGridFunction< GV >
     Grid function implementing the piecewise element face normal. More...
    class  Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >
     Class wrapping any differentiable function as grid function. More...
     
    \n \n \n \n \n \n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    template<class F , class GridView , class Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate, class Range = std::invoke_result_t<F,Domain>>
     Dune::Functions::AnalyticGridViewFunction (const F &, const GridView &) -> AnalyticGridViewFunction< Range(Domain), GridView, F >
     
    template<class F , class GridView >
    auto Dune::Functions::makeAnalyticGridViewFunction (F &&f, const GridView &gridView)
     Create an AnalyticGridViewFunction from a function and a grid view.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,44 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-facenormalgridfunction.hh File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+analyticgridviewfunction.hh File Reference\n #include \n #include \n-#include \n+#include \n #include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bG_\bV_\b _\b>\n-\u00a0 Grid function implementing the piecewise element face normal. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 Class wrapping any differentiable function as grid function. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template::Geometry::GlobalCoordinate, class Range = std::\n+invoke_result_t>\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (const F &, const GridView &) -\n+ > _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< Range(Domain), GridView, F >\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F &&f, const GridView\n+ &gridView)\n+\u00a0 Create an _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from a function and a grid view.\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: facenormalgridfunction.hh Source File\n+dune-functions: analyticgridviewfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,209 +74,257 @@\n \n \n \n
    \n-
    facenormalgridfunction.hh
    \n+
    analyticgridviewfunction.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n
    9
    \n
    10#include <type_traits>
    \n
    11#include <optional>
    \n
    12
    \n-
    13#include <dune/common/exceptions.hh>
    \n+
    13#include <dune/common/copyableoptional.hh>
    \n
    14#include <dune/common/typeutilities.hh>
    \n-
    15#include <dune/common/rangeutilities.hh>
    \n-
    16#include <dune/geometry/referenceelements.hh>
    \n-
    17
    \n-\n-\n-
    20
    \n-
    21
    \n-
    22namespace Dune::Functions {
    \n+
    15
    \n+\n+\n+\n+\n+\n+\n+
    22
    \n
    23
    \n-
    24namespace Impl {
    \n-
    25
    \n-
    26// Compute closest face to point
    \n-
    27template<class ReferenceElement, class Coordinate>
    \n-
    28auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)
    \n-
    29{
    \n-
    30 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};
    \n-
    31 double closestFaceDistance = std::numeric_limits<double>::max();
    \n-
    32 for(auto&& faceIndex : Dune::range(re.size(1)))
    \n-
    33 {
    \n-
    34 // For a face unit outer normal consider the orthogonal projection
    \n-
    35 // Px = x + <c-x,n>*n into the face. Then the distance to the face
    \n-
    36 // is given by |x-Px| = |<c-x,n>||n| = <c-x,n>.
    \n-
    37 auto normal = re.integrationOuterNormal(faceIndex);
    \n-
    38 normal /= normal.two_norm();
    \n-
    39 auto c = re.position(faceIndex,1);
    \n-
    40 c -= x;
    \n-
    41 auto faceDistance = (c*normal);
    \n-
    42 if (faceDistance<closestFaceDistance)
    \n-
    43 {
    \n-
    44 closestFaceDistance = faceDistance;
    \n-
    45 closestFaceIndex = faceIndex;
    \n-
    46 }
    \n-
    47 }
    \n-
    48 return closestFaceIndex;
    \n-
    49}
    \n-
    50
    \n-
    51} // end namespace Impl
    \n-
    52
    \n+
    24namespace Dune {
    \n+
    25namespace Functions {
    \n+
    26
    \n+
    27namespace Imp {
    \n+
    28
    \n+
    29template<class Signature, class GV, class FLocal, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+
    30class LocalAnalyticGridViewFunction;
    \n+
    31
    \n+
    32template<class Range, class LocalDomain, class GV, class F, template<class> class DerivativeTraits>
    \n+
    33class LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F, DerivativeTraits>
    \n+
    34{
    \n+
    35public:
    \n+
    36 using Signature = Range(LocalDomain);
    \n+
    37 using RawSignature = typename SignatureTraits<Signature>::RawSignature;
    \n+
    38 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(LocalDomain);
    \n+
    39
    \n+
    40 using GridView = GV;
    \n+
    41 using EntitySet = GridViewEntitySet<GridView, 0>;
    \n+
    42 using Element = typename EntitySet::Element;
    \n+
    43// using Geometry = typename Element::Geometry;
    \n+
    44 using Geometry = std::decay_t<typename Element::Geometry>;
    \n+
    45
    \n+
    46 // Use the indirection via derivativeIfImplemented to also support
    \n+
    47 // function types F that do not implement derivative. In this case
    \n+
    48 // the interface type DifferentiableFunction is using a dummy for
    \n+
    49 // the derivative type
    \n+
    50 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;
    \n+
    51 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
    \n+
    52 using LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits>;
    \n
    53
    \n-
    54
    \n-
    55
    \n-
    68template<class GV>
    \n-
    \n-\n-
    70{
    \n-
    71public:
    \n-
    72 using GridView = GV;
    \n-\n-
    74 using Element = typename EntitySet::Element;
    \n-
    75
    \n-\n-\n-\n-
    79
    \n-
    80private:
    \n-
    81
    \n-
    82 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet, DefaultDerivativeTraits, 16>;
    \n-
    83
    \n-
    84 class LocalFunction
    \n+
    55 template<class FT, disableCopyMove<LocalAnalyticGridViewFunction, FT> = 0>
    \n+
    56 LocalAnalyticGridViewFunction(FT&& f) :
    \n+
    57 f_(std::forward<FT>(f))
    \n+
    58 {}
    \n+
    59
    \n+
    61 template<class FT>
    \n+
    62 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::optional<Geometry>& geometry) :
    \n+
    63 f_(std::forward<FT>(f)),
    \n+
    64 element_(element),
    \n+
    65 geometry_(geometry)
    \n+
    66 {}
    \n+
    67
    \n+
    68
    \n+
    77 void bind(const Element& element)
    \n+
    78 {
    \n+
    79 element_ = element;
    \n+
    80 geometry_.emplace(element_.geometry());
    \n+
    81 }
    \n+
    82
    \n+
    84 void unbind()
    \n
    85 {
    \n-
    86 using Geometry = typename Element::Geometry;
    \n-
    87 static const int dimension = GV::dimension;
    \n-
    88 public:
    \n-
    89
    \n-
    101 void bind(const Element& element)
    \n-
    102 {
    \n-
    103 element_ = element;
    \n-
    104 geometry_.emplace(element_.geometry());
    \n-
    105 }
    \n-
    106
    \n-
    107 void unbind()
    \n-
    108 {
    \n-
    109 geometry_.reset();
    \n-
    110 }
    \n-
    111
    \n-
    114 bool bound() const
    \n-
    115 {
    \n-
    116 return static_cast<bool>(geometry_);
    \n-
    117 }
    \n-
    118
    \n-
    128 Range operator()(const LocalDomain& x) const
    \n-
    129 {
    \n-
    130 auto&& re = Dune::referenceElement(*geometry_);
    \n-
    131 // Compute reference normal of closest face to given point
    \n-
    132 auto face = Impl::closestFaceIndex(re, x);
    \n-
    133 auto localNormal = re.integrationOuterNormal(face);
    \n-
    134
    \n-
    135 // Transform reference normal into global unit outer normal using
    \n-
    136 // covariant Piola transformation
    \n-
    137 auto normal = Range{};
    \n-
    138 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);
    \n-
    139 normal /= normal.two_norm();
    \n-
    140 return normal;
    \n-
    141 }
    \n+
    86 geometry_.reset();
    \n+
    87 }
    \n+
    88
    \n+
    91 bool bound() const
    \n+
    92 {
    \n+
    93 return static_cast<bool>(geometry_);
    \n+
    94 }
    \n+
    95
    \n+
    105 Range operator()(const LocalDomain& x) const
    \n+
    106 {
    \n+
    107 assert(!!geometry_);
    \n+
    108 return (*f_)(geometry_->global(x));
    \n+
    109 }
    \n+
    110
    \n+
    112 const Element& localContext() const
    \n+
    113 {
    \n+
    114 assert(!!geometry_);
    \n+
    115 return element_;
    \n+
    116 }
    \n+
    117
    \n+
    126 friend LocalDerivative derivative(const LocalAnalyticGridViewFunction& t)
    \n+
    127 {
    \n+
    128 return LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(*t.f_), t.element_, t.geometry_);
    \n+
    129 }
    \n+
    130
    \n+
    131private:
    \n+
    132 // Wrap the function into CopyableOptional to make it copy-assignable
    \n+
    133 CopyableOptional<F> f_;
    \n+
    134 Element element_;
    \n+
    135 std::optional<Geometry> geometry_ = std::nullopt;
    \n+
    136};
    \n+
    137
    \n+
    138} // end namespace Imp
    \n+
    139
    \n+
    140
    \n+
    141
    \n
    142
    \n-
    144 const Element& localContext() const
    \n-
    145 {
    \n-
    146 return element_;
    \n-
    147 }
    \n-
    148
    \n-
    150 friend typename Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction& t)
    \n-
    151 {
    \n-
    152 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    153 }
    \n-
    154
    \n-
    155 private:
    \n-
    156 std::optional<Geometry> geometry_;
    \n-
    157 Element element_;
    \n-
    158 };
    \n+
    143template<class Signature, class GV, class F, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+\n+
    145
    \n+
    146
    \n+
    152template<class Range, class Domain, class GV, class F, template<class> class DerivativeTraits>
    \n+
    \n+
    153class AnalyticGridViewFunction<Range(Domain), GV, F, DerivativeTraits>
    \n+
    154{
    \n+
    155public:
    \n+
    156 using Signature = Range(Domain);
    \n+\n+
    158 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n
    159
    \n-
    160public:
    \n-
    \n-\n-
    163 entitySet_(gridView)
    \n-
    164 {}
    \n-
    \n-
    165
    \n-
    \n-
    167 Range operator()(const Domain& x) const
    \n-
    168 {
    \n-
    169 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    170 }
    \n-
    \n-
    171
    \n-
    \n-\n-
    174 {
    \n-
    175 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    176 }
    \n-
    \n-
    177
    \n-
    \n-
    179 friend LocalFunction localFunction(const FaceNormalGridFunction& t)
    \n-
    180 {
    \n-
    181 return LocalFunction{};
    \n-
    182 }
    \n-
    \n-
    183
    \n-
    \n-
    185 const EntitySet& entitySet() const
    \n-
    186 {
    \n-
    187 return entitySet_;
    \n-
    188 }
    \n-
    \n-
    189
    \n-
    190private:
    \n-
    191 EntitySet entitySet_;
    \n-
    192};
    \n+
    160 using GridView = GV;
    \n+\n+
    162 using Element = typename EntitySet::Element;
    \n+
    163 using Geometry = typename Element::Geometry;
    \n+
    164
    \n+
    165 // Use the indirection via derivativeIfImplemented to also support
    \n+
    166 // function types F that do not implement derivative. In this case
    \n+
    167 // the interface type DifferentiableFunction is used a dummy for
    \n+
    168 // the derivative type
    \n+\n+
    170 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
    \n+\n+
    172
    \n+\n+
    174 using LocalFunction = typename Imp::LocalAnalyticGridViewFunction<Range(LocalDomain), GridView, F, LocalDerivativeTraits<EntitySet, DerivativeTraits>::template Traits>;
    \n+
    175
    \n+
    177 template<class FT>
    \n+
    \n+
    178 AnalyticGridViewFunction(FT&& f, const GridView& gridView) :
    \n+
    179 f_(std::forward<FT>(f)),
    \n+
    180 entitySet_(gridView)
    \n+
    181 {}
    \n+
    \n+
    182
    \n+
    \n+
    184 Range operator()(const Domain& x) const
    \n+
    185 {
    \n+
    186 return (*f_)(x);
    \n+
    187 }
    \n+
    \n+
    188
    \n+
    \n+\n+
    191 {
    \n+
    192 return Derivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(*t.f_), t.entitySet_.gridView());
    \n+
    193 }
    \n
    \n-
    193
    \n
    194
    \n-
    195
    \n-
    196} // namespace Dune::Functions
    \n-
    197
    \n-
    198#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n-\n-\n+
    \n+\n+
    197 {
    \n+
    198 return LocalFunction(*t.f_);
    \n+
    199 }
    \n+
    \n+
    200
    \n+
    \n+
    202 const EntitySet& entitySet() const
    \n+
    203 {
    \n+
    204 return entitySet_;
    \n+
    205 }
    \n+
    \n+
    206
    \n+
    207private:
    \n+
    208 // Wrap the function into CopyableOptional to make it copy-assignable
    \n+
    209 CopyableOptional<F> f_;
    \n+
    210 EntitySet entitySet_;
    \n+
    211};
    \n+
    \n+
    212
    \n+
    213// deduction guides
    \n+
    214template<class F, class GridView,
    \n+
    215 class Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate,
    \n+
    216 class Range = std::invoke_result_t<F,Domain>>
    \n+
    217AnalyticGridViewFunction(const F&, const GridView&)
    \n+
    218 -> AnalyticGridViewFunction<Range(Domain), GridView, F>;
    \n+
    219
    \n+
    220
    \n+
    237template<class F, class GridView>
    \n+
    \n+
    238auto makeAnalyticGridViewFunction(F&& f, const GridView& gridView)
    \n+
    239{
    \n+
    240 using Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate;
    \n+
    241 using Range = std::invoke_result_t<F, Domain>;
    \n+
    242 using FRaw = std::decay_t<F>;
    \n+
    243
    \n+
    244 return AnalyticGridViewFunction<Range(Domain), GridView, FRaw>(std::forward<F>(f), gridView);
    \n+
    245}
    \n+
    \n+
    246
    \n+
    247
    \n+
    248
    \n+
    249}} // namespace Dune::Functions
    \n+
    250
    \n+
    251
    \n+
    252
    \n+
    253#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n+\n+\n+\n+\n+\n+\n
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n+
    auto makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
    Create an AnalyticGridViewFunction from a function and a grid view.
    Definition analyticgridviewfunction.hh:238
    \n
    Definition polynomial.hh:17
    \n-
    Definition polynomial.hh:18
    \n-
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:41
    \n-
    Grid function implementing the piecewise element face normal.
    Definition facenormalgridfunction.hh:70
    \n-
    GridViewEntitySet< GridView, 0 > EntitySet
    Definition facenormalgridfunction.hh:73
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition facenormalgridfunction.hh:76
    \n-
    typename EntitySet::GlobalCoordinate Domain
    Definition facenormalgridfunction.hh:77
    \n-
    typename EntitySet::GlobalCoordinate Range
    Definition facenormalgridfunction.hh:78
    \n-
    const EntitySet & entitySet() const
    Return the stored GridViewEntitySet.
    Definition facenormalgridfunction.hh:185
    \n-
    friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)
    Not implemented.
    Definition facenormalgridfunction.hh:173
    \n-
    GV GridView
    Definition facenormalgridfunction.hh:72
    \n-
    friend LocalFunction localFunction(const FaceNormalGridFunction &t)
    Return a local-function associated to FaceNormalGridFunction.
    Definition facenormalgridfunction.hh:179
    \n-
    FaceNormalGridFunction(const GridView &gridView)
    Construct the FaceNormalGridFunction.
    Definition facenormalgridfunction.hh:162
    \n-
    typename EntitySet::Element Element
    Definition facenormalgridfunction.hh:74
    \n-
    Range operator()(const Domain &x) const
    Not implemented.
    Definition facenormalgridfunction.hh:167
    \n-
    Definition gridfunction.hh:36
    \n+
    Definition differentiablefunction.hh:33
    \n+
    Helper class to deduce the signature of a callable.
    Definition signature.hh:60
    \n+
    Definition analyticgridviewfunction.hh:144
    \n+
    Range operator()(const Domain &x) const
    Evaluate the wrapped function f directly in global coordinates x.
    Definition analyticgridviewfunction.hh:184
    \n+
    typename EntitySet::LocalCoordinate LocalDomain
    Definition analyticgridviewfunction.hh:173
    \n+
    friend Derivative derivative(const AnalyticGridViewFunction &t)
    Create a derivative grid-function by wrapping the derivative of f.
    Definition analyticgridviewfunction.hh:190
    \n+
    typename Element::Geometry Geometry
    Definition analyticgridviewfunction.hh:163
    \n+
    typename EntitySet::Element Element
    Definition analyticgridviewfunction.hh:162
    \n+\n+
    decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >())) GlobalRawDerivative
    Definition analyticgridviewfunction.hh:170
    \n+
    Range(Domain) Signature
    Definition analyticgridviewfunction.hh:156
    \n+
    AnalyticGridViewFunction(FT &&f, const GridView &gridView)
    Create the grid-function by wrapping a function f and create a GridViewEntitySet.
    Definition analyticgridviewfunction.hh:178
    \n+
    friend LocalFunction localFunction(const AnalyticGridViewFunction &t)
    Construct the associated local-function.
    Definition analyticgridviewfunction.hh:196
    \n+
    typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F, LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits > LocalFunction
    Definition analyticgridviewfunction.hh:174
    \n+
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition analyticgridviewfunction.hh:157
    \n+
    const EntitySet & entitySet() const
    Return the set of entities this local-function can be bound to.
    Definition analyticgridviewfunction.hh:202
    \n+
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Definition analyticgridviewfunction.hh:158
    \n \n
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:36
    \n
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:39
    \n-
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:40
    \n+
    Derivative traits for local functions.
    Definition localderivativetraits.hh:32
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,242 +1,329 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-facenormalgridfunction.hh\n+analyticgridviewfunction.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n 9\n 10#include \n 11#include \n 12\n-13#include \n+13#include \n 14#include \n-15#include \n-16#include \n-17\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n-20\n-21\n-22namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+15\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+22\n 23\n-24namespace Impl {\n-25\n-26// Compute closest face to point\n-27template\n-28auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)\n-29{\n-30 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};\n-31 double closestFaceDistance = std::numeric_limits::max();\n-32 for(auto&& faceIndex : _\bD_\bu_\bn_\be::range(re.size(1)))\n-33 {\n-34 // For a face unit outer normal consider the orthogonal projection\n-35 // Px = x + *n into the face. Then the distance to the face\n-36 // is given by |x-Px| = |||n| = .\n-37 auto normal = re.integrationOuterNormal(faceIndex);\n-38 normal /= normal.two_norm();\n-39 auto c = re.position(faceIndex,1);\n-40 c -= x;\n-41 auto faceDistance = (c*normal);\n-42 if (faceDistance class\n+DerivativeTraits=DefaultDerivativeTraits>\n+30class LocalAnalyticGridViewFunction;\n+31\n+32template\n+class DerivativeTraits>\n+33class LocalAnalyticGridViewFunction\n+34{\n+35public:\n+36 using Signature = Range(LocalDomain);\n+37 using RawSignature = typename SignatureTraits::RawSignature;\n+38 using DerivativeSignature = typename DerivativeTraits::Range\n+(LocalDomain);\n+39\n+40 using GridView = GV;\n+41 using EntitySet = GridViewEntitySet;\n+42 using Element = typename EntitySet::Element;\n+43// using Geometry = typename Element::Geometry;\n+44 using Geometry = std::decay_t;\n+45\n+46 // Use the indirection via derivativeIfImplemented to also support\n+47 // function types F that do not implement derivative. In this case\n+48 // the interface type DifferentiableFunction is using a dummy for\n+49 // the derivative type\n+50 using DerivativeDummy = DifferentiableFunction;\n+51 using GlobalRawDerivative = decltype(Imp::\n+derivativeIfImplemented(std::declval()));\n+52 using LocalDerivative = LocalAnalyticGridViewFunction;\n 53\n-54\n-55\n-68template\n-_\b6_\b9class _\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-70{\n-71public:\n-_\b7_\b2 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b7_\b3 using _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt = _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b>;\n-_\b7_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt;\n-75\n-_\b7_\b6 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-_\b7_\b7 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-_\b7_\b8 using _\bR_\ba_\bn_\bg_\be = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-79\n-80private:\n-81\n-82 using Traits = Imp::GridFunctionTraits<_\bR_\ba_\bn_\bg_\be(_\bD_\bo_\bm_\ba_\bi_\bn), _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt,\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs, 16>;\n-83\n-84 class LocalFunction\n+55 template = 0>\n+56 LocalAnalyticGridViewFunction(FT&& f) :\n+57 f_(std::forward(f))\n+58 {}\n+59\n+61 template\n+62 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::\n+optional& geometry) :\n+63 f_(std::forward(f)),\n+64 element_(element),\n+65 geometry_(geometry)\n+66 {}\n+67\n+68\n+77 void bind(const Element& element)\n+78 {\n+79 element_ = element;\n+80 geometry_.emplace(element_.geometry());\n+81 }\n+82\n+84 void unbind()\n 85 {\n-86 using Geometry = typename Element::Geometry;\n-87 static const int dimension = GV::dimension;\n-88 public:\n-89\n-101 void bind(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n-102 {\n-103 element_ = element;\n-104 geometry_.emplace(element_.geometry());\n-105 }\n-106\n-107 void unbind()\n-108 {\n-109 geometry_.reset();\n-110 }\n-111\n-114 bool bound() const\n-115 {\n-116 return static_cast(geometry_);\n-117 }\n-118\n-128 _\bR_\ba_\bn_\bg_\be operator()(const _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn& x) const\n-129 {\n-130 auto&& re = Dune::referenceElement(*geometry_);\n-131 // Compute reference normal of closest face to given point\n-132 auto face = Impl::closestFaceIndex(re, x);\n-133 auto localNormal = re.integrationOuterNormal(face);\n-134\n-135 // Transform reference normal into global unit outer normal using\n-136 // covariant Piola transformation\n-137 auto normal = _\bR_\ba_\bn_\bg_\be{};\n-138 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);\n-139 normal /= normal.two_norm();\n-140 return normal;\n-141 }\n+86 geometry_.reset();\n+87 }\n+88\n+91 bool bound() const\n+92 {\n+93 return static_cast(geometry_);\n+94 }\n+95\n+105 Range operator()(const LocalDomain& x) const\n+106 {\n+107 assert(!!geometry_);\n+108 return (*f_)(geometry_->global(x));\n+109 }\n+110\n+112 const Element& localContext() const\n+113 {\n+114 assert(!!geometry_);\n+115 return element_;\n+116 }\n+117\n+126 friend LocalDerivative _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const LocalAnalyticGridViewFunction& t)\n+127 {\n+128 return LocalDerivative(Imp::derivativeIfImplemented\n+(*t.f_), t.element_, t.geometry_);\n+129 }\n+130\n+131private:\n+132 // Wrap the function into CopyableOptional to make it copy-assignable\n+133 CopyableOptional f_;\n+134 Element element_;\n+135 std::optional geometry_ = std::nullopt;\n+136};\n+137\n+138} // end namespace Imp\n+139\n+140\n+141\n 142\n-144 const _\bE_\bl_\be_\bm_\be_\bn_\bt& localContext() const\n-145 {\n-146 return element_;\n-147 }\n-148\n-150 friend typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-(const LocalFunction& t)\n-151 {\n-152 DUNE_THROW(NotImplemented,\"not implemented\");\n-153 }\n-154\n-155 private:\n-156 std::optional geometry_;\n-157 _\bE_\bl_\be_\bm_\be_\bn_\bt element_;\n-158 };\n+143template class\n+DerivativeTraits=DefaultDerivativeTraits>\n+_\b1_\b4_\b4class _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+145\n+146\n+152template class\n+DerivativeTraits>\n+_\b1_\b5_\b3class _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+154{\n+155public:\n+_\b1_\b5_\b6 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n+_\b1_\b5_\b7 using _\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be;\n+_\b1_\b5_\b8 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename DerivativeTraits::Range\n+(Domain);\n 159\n-160public:\n-_\b1_\b6_\b2 _\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gridView) :\n-163 entitySet_(gridView)\n-164 {}\n-165\n-_\b1_\b6_\b7 _\bR_\ba_\bn_\bg_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bD_\bo_\bm_\ba_\bi_\bn& x) const\n-168 {\n-169 DUNE_THROW(NotImplemented,\"not implemented\");\n-170 }\n-171\n-_\b1_\b7_\b3 friend typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const\n-_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-174 {\n-175 DUNE_THROW(NotImplemented,\"not implemented\");\n-176 }\n-177\n-_\b1_\b7_\b9 friend LocalFunction _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-180 {\n-181 return LocalFunction{};\n-182 }\n-183\n-_\b1_\b8_\b5 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-186 {\n-187 return entitySet_;\n-188 }\n-189\n-190private:\n-191 _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt entitySet_;\n-192};\n-193\n+_\b1_\b6_\b0 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b1_\b6_\b1 using _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt = _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b>;\n+_\b1_\b6_\b2 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt;\n+_\b1_\b6_\b3 using _\bG_\be_\bo_\bm_\be_\bt_\br_\by = typename Element::Geometry;\n+164\n+165 // Use the indirection via derivativeIfImplemented to also support\n+166 // function types F that do not implement derivative. In this case\n+167 // the interface type DifferentiableFunction is used a dummy for\n+168 // the derivative type\n+_\b1_\b6_\b9 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bD_\bu_\bm_\bm_\by = _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>;\n+_\b1_\b7_\b0 using _\bG_\bl_\bo_\bb_\ba_\bl_\bR_\ba_\bw_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be = decltype(Imp::\n+derivativeIfImplemented(std::declval()));\n+_\b1_\b7_\b1 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be = _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,\n+_\bG_\bl_\bo_\bb_\ba_\bl_\bR_\ba_\bw_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>;\n+172\n+_\b1_\b7_\b3 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+_\b1_\b7_\b4 using _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn = typename Imp::LocalAnalyticGridViewFunction_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be Traits>;\n+175\n+177 template\n+_\b1_\b7_\b8 _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(FT&& f, const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gridView) :\n+179 f_(std::forward(f)),\n+180 entitySet_(gridView)\n+181 {}\n+182\n+_\b1_\b8_\b4 Range _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Domain& x) const\n+185 {\n+186 return (*f_)(x);\n+187 }\n+188\n+_\b1_\b9_\b0 friend _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n+191 {\n+192 return _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(Imp::derivativeIfImplemented(*t.f_),\n+t.entitySet_.gridView());\n+193 }\n 194\n-195\n-196} // namespace Dune::Functions\n-197\n-198#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n-_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\b1_\b9_\b6 friend _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n+197 {\n+198 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(*t.f_);\n+199 }\n+200\n+_\b2_\b0_\b2 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n+203 {\n+204 return entitySet_;\n+205 }\n+206\n+207private:\n+208 // Wrap the function into CopyableOptional to make it copy-assignable\n+209 CopyableOptional f_;\n+210 EntitySet entitySet_;\n+211};\n+212\n+213// deduction guides\n+214template::Geometry::\n+GlobalCoordinate,\n+216 class Range = std::invoke_result_t>\n+_\b2_\b1_\b7_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const F&, const GridView&)\n+218 -> _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+219\n+220\n+237template\n+_\b2_\b3_\b8auto _\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f, const GridView& gridView)\n+239{\n+240 using Domain = typename GridView::template Codim<0>::Geometry::\n+GlobalCoordinate;\n+241 using Range = std::invoke_result_t;\n+242 using FRaw = std::decay_t;\n+243\n+244 return _\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\bF_\bR_\ba_\bw_\b>(std::\n+forward(f), gridView);\n+245}\n+246\n+247\n+248\n+249}} // namespace Dune::Functions\n+250\n+251\n+252\n+253#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n _\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n TrigonometricFunction< K, sinFactor, cosFactor > &f)\n Obtain derivative of TrigonometricFunction function.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+auto makeAnalyticGridViewFunction(F &&f, const GridView &gridView)\n+Create an AnalyticGridViewFunction from a function and a grid view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:238\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Default implementation for derivative traits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:41\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-Grid function implementing the piecewise element face normal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:70\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-GridViewEntitySet< GridView, 0 > EntitySet\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:33\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n+Helper class to deduce the signature of a callable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:144\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+Range operator()(const Domain &x) const\n+Evaluate the wrapped function f directly in global coordinates x.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:184\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n typename EntitySet::LocalCoordinate LocalDomain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:76\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n-typename EntitySet::GlobalCoordinate Domain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:77\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-typename EntitySet::GlobalCoordinate Range\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-const EntitySet & entitySet() const\n-Return the stored GridViewEntitySet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:185\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)\n-Not implemented.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:173\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:72\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-friend LocalFunction localFunction(const FaceNormalGridFunction &t)\n-Return a local-function associated to FaceNormalGridFunction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:179\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-FaceNormalGridFunction(const GridView &gridView)\n-Construct the FaceNormalGridFunction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:162\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:173\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend Derivative derivative(const AnalyticGridViewFunction &t)\n+Create a derivative grid-function by wrapping the derivative of f.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:190\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+typename Element::Geometry Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:163\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n typename EntitySet::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-Range operator()(const Domain &x) const\n-Not implemented.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh:167\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:36\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:162\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:160\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bR_\ba_\bw_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >\n+())) GlobalRawDerivative\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:170\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+Range(Domain) Signature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:156\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+AnalyticGridViewFunction(FT &&f, const GridView &gridView)\n+Create the grid-function by wrapping a function f and create a\n+GridViewEntitySet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:178\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+friend LocalFunction localFunction(const AnalyticGridViewFunction &t)\n+Construct the associated local-function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:196\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F,\n+LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits >\n+LocalFunction\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:174\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+typename SignatureTraits< Signature >::RawSignature RawSignature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:157\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+const EntitySet & entitySet() const\n+Return the set of entities this local-function can be bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:202\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bF_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:158\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n GridView::template Codim< codim >::Entity Element\n Type of Elements contained in this EntitySet.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:36\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n Element::Geometry::LocalCoordinate LocalCoordinate\n Type of local coordinates with respect to the Element.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:39\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\b0_\b _\b>_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-Element::Geometry::GlobalCoordinate GlobalCoordinate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:40\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+Derivative traits for local functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:32\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00026.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00026.html", "unified_diff": "@@ -81,20 +81,20 @@\n
    \n
    \n \n

    Go to the source code of this file.

    \n \n \n \n \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": "@@ -95,20 +95,20 @@\n
    12
    \n
    13#include <dune/common/typetraits.hh>
    \n
    14
    \n
    15#include <dune/grid/utility/hierarchicsearch.hh>
    \n
    16
    \n
    17#include <dune/typetree/treecontainer.hh>
    \n
    18
    \n-\n+\n \n-\n-\n+\n+\n \n-\n+\n
    25
    \n
    26namespace Dune {
    \n
    27namespace Functions {
    \n
    28
    \n
    29
    \n
    \n
    30namespace ImplDoc {
    \n@@ -659,19 +659,19 @@\n
    \n
    672
    \n
    673
    \n
    674} // namespace Functions
    \n
    675} // namespace Dune
    \n
    676
    \n
    677#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n-\n-\n-\n+\n+\n+\n \n-\n+\n
    auto makeDiscreteGlobalBasisFunction(B &&basis, V &&vector)
    Generate a DiscreteGlobalBasisFunction.
    Definition discreteglobalbasisfunction.hh:454
    \n
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:350
    \n
    Definition polynomial.hh:17
    \n
    auto flatVectorView(T &t)
    Create flat vector view of passed mutable container.
    Definition flatvectorview.hh:183
    \n
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:41
    \n
    Helper class to deduce the signature of a callable.
    Definition signature.hh:60
    \n
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:34
    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -542,17 +542,17 @@\n 671};\n 672\n 673\n 674} // namespace Functions\n 675} // namespace Dune\n 676\n 677#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n-_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh\n _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n _\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\n+_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh\n _\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\b._\bh_\bh\n _\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bn_\bo_\bd_\be_\bt_\bo_\br_\ba_\bn_\bg_\be_\bm_\ba_\bp_\b._\bh_\bh\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bm_\ba_\bk_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n auto makeDiscreteGlobalBasisFunction(B &&basis, V &&vector)\n Generate a DiscreteGlobalBasisFunction.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:454\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd\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 \n \n \n \n \n \n \n-dune-functions: composedgridfunction.hh File Reference\n+dune-functions: trigonometricfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,57 +65,48 @@\n \n \n \n \n \n \n \n
    \n \n-
    composedgridfunction.hh File Reference
    \n+
    trigonometricfunction.hh File Reference
    \n
    \n
    \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+
    #include <cmath>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Classes

    class  Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >
     
    \n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::ComposedGridFunction< OF, IF >
     Composition of grid functions with another function. More...
    class  Dune::Functions::TrigonometricFunction< K, sinFactor, cosFactor >
     A linear combination of trigonomic functions. More...
     
    \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n \n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Functions

    template<class OF , class... IF>
     Dune::Functions::ComposedGridFunction (const OF &, const IF &...) -> ComposedGridFunction< OF, IF... >
     
    template<class OF , class... IF>
    auto Dune::Functions::makeComposedGridFunction (OF &&outerFunction, IF &&... innerFunction)
     Create a ComposedGridFunction that composes grid-functions with another function.
     
    template<class K , int sinFactor, int cosFactor>
    TrigonometricFunction< K, -cosFactor, sinFactor > Dune::Functions::derivative (const TrigonometricFunction< K, sinFactor, cosFactor > &f)
     Obtain derivative of TrigonometricFunction function.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,30 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ * _\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-composedgridfunction.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+trigonometricfunction.hh File Reference\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bO_\bF_\b,_\b _\bI_\bF_\b _\b>\n-\u00a0 Composition of grid functions with another function. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bK_\b,_\b _\bs_\bi_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bc_\bo_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0 A linear combination of trigonomic functions. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (const OF &, const IF &...) -\n- > _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< OF, IF... >\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (OF &&outerFunction, IF &&...\n- innerFunction)\n-\u00a0 Create a _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn that composes grid-functions with another\n- function.\n+template\n+_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< K, -cosFactor, _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be (const\n+ sinFactor >\u00a0 _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< K, sinFactor,\n+ cosFactor > &f)\n+\u00a0 Obtain derivative of\n+ _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn function.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: composedgridfunction.hh Source File\n+dune-functions: trigonometricfunction.hh Source File\n \n \n \n \n \n \n \n@@ -70,225 +70,71 @@\n \n \n \n \n \n \n \n
    \n-
    composedgridfunction.hh
    \n+
    trigonometricfunction.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n-
    11#include <tuple>
    \n-
    12
    \n-
    13#include <dune/common/referencehelper.hh>
    \n-
    14#include <dune/common/typeutilities.hh>
    \n+
    10#include <cmath>
    \n+
    11
    \n+
    12namespace Dune {
    \n+
    13namespace Functions {
    \n+
    14
    \n
    15
    \n-\n-\n-\n-
    19
    \n-
    20
    \n-
    21namespace Dune {
    \n-
    22namespace Functions {
    \n-
    23
    \n-
    24
    \n-
    25
    \n-
    44template<class OF, class... IF>
    \n-
    \n-\n-
    46{
    \n-
    47 using InnerFunctions = std::tuple<IF...>;
    \n-
    48 using InnerLocalFunctions = std::tuple<decltype(localFunction(resolveRef(std::declval<const IF&>())))...>;
    \n+
    16
    \n+
    29template<class K, int sinFactor, int cosFactor>
    \n+
    \n+\n+
    31{
    \n+
    32public:
    \n+
    \n+
    34 K operator () (const K& x) const
    \n+
    35 {
    \n+
    36 return sinFactor * std::sin(x) + cosFactor * std::cos(x);
    \n+
    37 }
    \n+
    \n+
    38};
    \n+
    \n+
    39
    \n+
    40
    \n+
    42template<class K, int sinFactor, int cosFactor>
    \n+
    \n+\n+
    44{
    \n+
    45 return TrigonometricFunction<K, -cosFactor, sinFactor>();
    \n+
    46}
    \n+
    \n+
    47
    \n+
    48
    \n
    49
    \n-
    50 template<std::size_t i>
    \n-
    51 using InnerFunction = std::decay_t<ResolveRef_t<std::tuple_element_t<i, InnerFunctions>>>;
    \n+
    50}} // namespace Dune::Functions
    \n+
    51
    \n
    52
    \n-
    53 using OuterFunction = OF;
    \n-
    54
    \n-
    55public:
    \n-
    56
    \n-
    57 using EntitySet = typename InnerFunction<0>::EntitySet;
    \n-
    58 using Element = typename EntitySet::Element;
    \n-
    59
    \n-
    60 using Domain = typename EntitySet::GlobalCoordinate;
    \n-
    61 using LocalDomain = typename EntitySet::LocalCoordinate;
    \n-
    62
    \n-
    63 using Range = decltype(std::declval<OF>()(std::declval<IF>()(std::declval<Domain>())...));
    \n-
    64
    \n-
    65private:
    \n-
    66
    \n-
    67 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet, DefaultDerivativeTraits, 16>;
    \n-
    68
    \n-
    69 class LocalFunction
    \n-
    70 {
    \n-
    71 public:
    \n-
    78 LocalFunction(const ComposedGridFunction& globalFunction) :
    \n-
    79 globalFunction_(globalFunction),
    \n-
    80 innerLocalFunctions_(globalFunction.innerLocalFunctions())
    \n-
    81 {}
    \n-
    82
    \n-
    92 void bind(const Element& element)
    \n-
    93 {
    \n-
    94 std::apply([&](auto&... innerFunction) {
    \n-
    95 (innerFunction.bind(element),...);
    \n-
    96 }, innerLocalFunctions_);
    \n-
    97 }
    \n-
    98
    \n-
    100 void unbind()
    \n-
    101 {
    \n-
    102 std::apply([&](auto&... innerFunction) {
    \n-
    103 (innerFunction.unbind(),...);
    \n-
    104 }, innerLocalFunctions_);
    \n-
    105 }
    \n-
    106
    \n-
    109 bool bound() const
    \n-
    110 {
    \n-
    111 return std::apply([](const auto&... innerFunction) {
    \n-
    112 return (innerFunction.bound() && ...);
    \n-
    113 }, innerLocalFunctions_);
    \n-
    114 }
    \n-
    115
    \n-
    125 Range operator()(const LocalDomain& x) const
    \n-
    126 {
    \n-
    127 return std::apply([&](const auto&... innerFunction) {
    \n-
    128 return globalFunction_.outerFunction_(innerFunction(x)...);
    \n-
    129 }, innerLocalFunctions_);
    \n-
    130 }
    \n-
    131
    \n-
    141 const Element& localContext() const
    \n-
    142 {
    \n-
    143 return std::get<0>(innerLocalFunctions_).localContext();
    \n-
    144 }
    \n-
    145
    \n-
    147 friend typename Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction& t)
    \n-
    148 {
    \n-
    149 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    150 }
    \n-
    151
    \n-
    152 private:
    \n-
    153 const ComposedGridFunction& globalFunction_;
    \n-
    154 InnerLocalFunctions innerLocalFunctions_;
    \n-
    155 };
    \n-
    156
    \n-
    157public:
    \n-
    158
    \n-
    168 template<class OFT, class... IFT,
    \n-
    169 disableCopyMove<ComposedGridFunction, OFT> = 0,
    \n-
    170 std::enable_if_t<(sizeof...(IFT) > 0), int> = 0>
    \n-
    \n-
    171 ComposedGridFunction(OFT&& outerFunction, IFT&&... innerFunctions) :
    \n-
    172 outerFunction_(std::forward<OFT>(outerFunction)),
    \n-
    173 innerFunctions_(std::forward<IFT>(innerFunctions)...)
    \n-
    174 {}
    \n-
    \n-
    175
    \n-
    \n-
    177 Range operator()(const Domain& x) const
    \n-
    178 {
    \n-
    179 return std::apply([&](const auto&... innerFunction) {
    \n-
    180 return outerFunction_(innerFunction(x)...);
    \n-
    181 }, innerFunctions_);
    \n-
    182 }
    \n-
    \n-
    183
    \n-
    \n-\n-
    186 {
    \n-
    187 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    188 }
    \n-
    \n-
    189
    \n-
    \n-
    196 friend LocalFunction localFunction(const ComposedGridFunction& cgf)
    \n-
    197 {
    \n-
    198 return LocalFunction(cgf);
    \n-
    199 }
    \n-
    \n-
    200
    \n-
    \n-
    211 const EntitySet& entitySet() const
    \n-
    212 {
    \n-
    213 return resolveRef(std::get<0>(innerFunctions_)).entitySet();
    \n-
    214 }
    \n-
    \n-
    215
    \n-
    216protected:
    \n-
    217
    \n-
    \n-
    218 InnerLocalFunctions innerLocalFunctions() const
    \n-
    219 {
    \n-
    220 return std::apply([&](const auto&... innerFunction) {
    \n-
    221 return std::make_tuple(localFunction(resolveRef(innerFunction))...);
    \n-
    222 }, innerFunctions_);
    \n-
    223 }
    \n-
    \n-
    224
    \n-
    225 OuterFunction outerFunction_;
    \n-
    226 InnerFunctions innerFunctions_;
    \n-
    227};
    \n-
    \n-
    228
    \n-
    229// deduction guides
    \n-
    230template<class OF, class... IF>
    \n-
    231ComposedGridFunction(const OF&, const IF&...)
    \n-
    232 -> ComposedGridFunction<OF,IF...>;
    \n-
    233
    \n-
    234
    \n-
    257template<class OF, class... IF>
    \n-
    \n-
    258auto makeComposedGridFunction(OF&& outerFunction, IF&&... innerFunction)
    \n-
    259{
    \n-
    260 using ComposedGridFunctionType = ComposedGridFunction<std::decay_t<OF>, std::decay_t<IF>...>;
    \n-
    261 return ComposedGridFunctionType(std::forward<OF>(outerFunction), std::forward<IF>(innerFunction)...);
    \n-
    262}
    \n-
    \n-
    263
    \n-
    264
    \n-
    265
    \n-
    266}} // namespace Dune::Functions
    \n-
    267
    \n-
    268
    \n-
    269
    \n-
    270#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH
    \n-\n-\n-\n+
    53
    \n+
    54#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n-
    auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)
    Create a ComposedGridFunction that composes grid-functions with another function.
    Definition composedgridfunction.hh:258
    \n
    Definition polynomial.hh:17
    \n-
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:41
    \n-
    Composition of grid functions with another function.
    Definition composedgridfunction.hh:46
    \n-
    OuterFunction outerFunction_
    Definition composedgridfunction.hh:225
    \n-
    InnerFunctions innerFunctions_
    Definition composedgridfunction.hh:226
    \n-
    ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)
    Create ComposedGridFunction.
    Definition composedgridfunction.hh:171
    \n-
    const EntitySet & entitySet() const
    Return the EntitySet associated to this composed grid-function.
    Definition composedgridfunction.hh:211
    \n-
    typename InnerFunction< 0 >::EntitySet EntitySet
    Definition composedgridfunction.hh:57
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition composedgridfunction.hh:61
    \n-
    typename EntitySet::Element Element
    Definition composedgridfunction.hh:58
    \n-
    InnerLocalFunctions innerLocalFunctions() const
    Definition composedgridfunction.hh:218
    \n-
    friend LocalFunction localFunction(const ComposedGridFunction &cgf)
    Create a local-function of this composed grid-function.
    Definition composedgridfunction.hh:196
    \n-
    decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >())...)) Range
    Definition composedgridfunction.hh:63
    \n-
    typename EntitySet::GlobalCoordinate Domain
    Definition composedgridfunction.hh:60
    \n-
    Range operator()(const Domain &x) const
    Evaluation of the composed grid function in coordinates x
    Definition composedgridfunction.hh:177
    \n-
    friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)
    Not implemented.
    Definition composedgridfunction.hh:185
    \n-
    Definition gridfunction.hh:36
    \n+
    A linear combination of trigonomic functions.
    Definition trigonometricfunction.hh:31
    \n+
    K operator()(const K &x) const
    Evaluate function.
    Definition trigonometricfunction.hh:34
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,255 +1,68 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-composedgridfunction.hh\n+ * _\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+trigonometricfunction.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n+8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n 9\n-10#include \n-11#include \n-12\n-13#include \n-14#include \n+10#include \n+11\n+12namespace _\bD_\bu_\bn_\be {\n+13namespace Functions {\n+14\n 15\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-19\n-20\n-21namespace _\bD_\bu_\bn_\be {\n-22namespace Functions {\n-23\n-24\n-25\n-44template\n-_\b4_\b5class _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-46{\n-47 using InnerFunctions = std::tuple;\n-48 using InnerLocalFunctions = std::tuple())))...>;\n+16\n+29template\n+_\b3_\b0class _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+31{\n+32public:\n+_\b3_\b4 K _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b(_\b)_\b (const K& x) const\n+35 {\n+36 return sinFactor * std::sin(x) + cosFactor * std::cos(x);\n+37 }\n+38};\n+39\n+40\n+42template\n+_\b4_\b3_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const\n+_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bK_\b,_\b _\bs_\bi_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bc_\bo_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b>& f)\n+44{\n+45 return _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn();\n+46}\n+47\n+48\n 49\n-50 template\n-51 using InnerFunction = std::decay_t>>;\n+50}} // namespace Dune::Functions\n+51\n 52\n-53 using OuterFunction = OF;\n-54\n-55public:\n-56\n-_\b5_\b7 using _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt = typename InnerFunction<0>::EntitySet;\n-_\b5_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename EntitySet::Element;\n-59\n-_\b6_\b0 using _\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::GlobalCoordinate;\n-_\b6_\b1 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::LocalCoordinate;\n-62\n-_\b6_\b3 using _\bR_\ba_\bn_\bg_\be = decltype(std::declval()(std::declval()(std::\n-declval())...));\n-64\n-65private:\n-66\n-67 using Traits = Imp::GridFunctionTraits<_\bR_\ba_\bn_\bg_\be(_\bD_\bo_\bm_\ba_\bi_\bn), _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt,\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs, 16>;\n-68\n-69 class LocalFunction\n-70 {\n-71 public:\n-78 LocalFunction(const _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& globalFunction) :\n-79 globalFunction_(globalFunction),\n-80 innerLocalFunctions_(globalFunction._\bi_\bn_\bn_\be_\br_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs())\n-81 {}\n-82\n-92 void bind(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n-93 {\n-94 std::apply([&](auto&... innerFunction) {\n-95 (innerFunction.bind(element),...);\n-96 }, innerLocalFunctions_);\n-97 }\n-98\n-100 void unbind()\n-101 {\n-102 std::apply([&](auto&... innerFunction) {\n-103 (innerFunction.unbind(),...);\n-104 }, innerLocalFunctions_);\n-105 }\n-106\n-109 bool bound() const\n-110 {\n-111 return std::apply([](const auto&... innerFunction) {\n-112 return (innerFunction.bound() && ...);\n-113 }, innerLocalFunctions_);\n-114 }\n-115\n-125 _\bR_\ba_\bn_\bg_\be operator()(const _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn& x) const\n-126 {\n-127 return std::apply([&](const auto&... innerFunction) {\n-128 return globalFunction_.outerFunction_(innerFunction(x)...);\n-129 }, innerLocalFunctions_);\n-130 }\n-131\n-141 const _\bE_\bl_\be_\bm_\be_\bn_\bt& localContext() const\n-142 {\n-143 return std::get<0>(innerLocalFunctions_).localContext();\n-144 }\n-145\n-147 friend typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-(const LocalFunction& t)\n-148 {\n-149 DUNE_THROW(NotImplemented,\"not implemented\");\n-150 }\n-151\n-152 private:\n-153 const _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& globalFunction_;\n-154 InnerLocalFunctions innerLocalFunctions_;\n-155 };\n-156\n-157public:\n-158\n-168 template = 0,\n-170 std::enable_if_t<(sizeof...(IFT) > 0), int> = 0>\n-_\b1_\b7_\b1 _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(OFT&& outerFunction, IFT&&... innerFunctions) :\n-172 _\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_(std::forward(outerFunction)),\n-173 _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_(std::forward(innerFunctions)...)\n-174 {}\n-175\n-_\b1_\b7_\b7 _\bR_\ba_\bn_\bg_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bD_\bo_\bm_\ba_\bi_\bn& x) const\n-178 {\n-179 return std::apply([&](const auto&... innerFunction) {\n-180 return _\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_(innerFunction(x)...);\n-181 }, _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_);\n-182 }\n-183\n-_\b1_\b8_\b5 friend typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const\n-_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-186 {\n-187 DUNE_THROW(NotImplemented,\"not implemented\");\n-188 }\n-189\n-_\b1_\b9_\b6 friend LocalFunction _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& cgf)\n-197 {\n-198 return LocalFunction(cgf);\n-199 }\n-200\n-_\b2_\b1_\b1 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-212 {\n-213 return resolveRef(std::get<0>(_\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_)).entitySet();\n-214 }\n-215\n-216protected:\n-217\n-_\b2_\b1_\b8 InnerLocalFunctions _\bi_\bn_\bn_\be_\br_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs() const\n-219 {\n-220 return std::apply([&](const auto&... innerFunction) {\n-221 return std::make_tuple(_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(resolveRef(innerFunction))...);\n-222 }, _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_);\n-223 }\n-224\n-_\b2_\b2_\b5 OuterFunction _\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_;\n-_\b2_\b2_\b6 InnerFunctions _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_;\n-227};\n-228\n-229// deduction guides\n-230template\n-_\b2_\b3_\b1_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const OF&, const IF&...)\n-232 -> _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-233\n-234\n-257template\n-_\b2_\b5_\b8auto _\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(OF&& outerFunction, IF&&... innerFunction)\n-259{\n-260 using ComposedGridFunctionType = _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bs_\bt_\bd_\b:_\b:_\bd_\be_\bc_\ba_\by_\b__\bt_\b<_\bO_\bF_\b>,\n-std::decay_t...>;\n-261 return ComposedGridFunctionType(std::forward(outerFunction), std::\n-forward(innerFunction)...);\n-262}\n-263\n-264\n-265\n-266}} // namespace Dune::Functions\n-267\n-268\n-269\n-270#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n-_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+53\n+54#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n TrigonometricFunction< K, sinFactor, cosFactor > &f)\n Obtain derivative of TrigonometricFunction function.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)\n-Create a ComposedGridFunction that composes grid-functions with another\n-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:258\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Default implementation for derivative traits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:41\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-Composition of grid functions with another function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:46\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_\n-OuterFunction outerFunction_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:225\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_\n-InnerFunctions innerFunctions_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:226\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)\n-Create ComposedGridFunction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-const EntitySet & entitySet() const\n-Return the EntitySet associated to this composed grid-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:211\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-typename InnerFunction< 0 >::EntitySet EntitySet\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n-typename EntitySet::LocalCoordinate LocalDomain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename EntitySet::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bi_\bn_\bn_\be_\br_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-InnerLocalFunctions innerLocalFunctions() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:218\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-friend LocalFunction localFunction(const ComposedGridFunction &cgf)\n-Create a local-function of this composed grid-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:196\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >\n-())...)) Range\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:63\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n-typename EntitySet::GlobalCoordinate Domain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-Range operator()(const Domain &x) const\n-Evaluation of the composed grid function in coordinates x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:177\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)\n-Not implemented.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:185\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridfunction.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+A linear combination of trigonomic functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:31\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+K operator()(const K &x) const\n+Evaluate function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:34\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: gridviewentityset.hh File Reference\n+dune-functions: polynomial.hh File Reference\n \n \n \n \n \n \n \n@@ -65,40 +65,67 @@\n \n \n \n \n \n \n \n
    \n \n-
    gridviewentityset.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    polynomial.hh File Reference
    \n \n
    \n-
    #include <memory>
    \n+
    #include <cmath>
    \n+#include <initializer_list>
    \n+#include <vector>
    \n+#include <dune/common/hybridutilities.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::GridViewEntitySet< GV, cd >
     An entity set for all entities of given codim in a grid view. More...
    class  Dune::Functions::Polynomial< K, C >
     A univariate polynomial implementation. More...
     
    \n \n \n \n \n \n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    template<class K >
     Dune::Functions::Polynomial (std::vector< K >) -> Polynomial< K, std::vector< K > >
     
    template<class K , std::size_t n>
     Dune::Functions::Polynomial (std::array< K, n >) -> Polynomial< K, std::array< K, n > >
     
    template<class K , K... ci>
     Dune::Functions::Polynomial (std::integer_sequence< K, ci... >) -> Polynomial< K, std::integer_sequence< K, ci... > >
     
    template<class K >
     Dune::Functions::Polynomial (std::initializer_list< K >) -> Polynomial< K, std::vector< K > >
     
    template<class K , class Coefficients >
    auto Dune::Functions::makePolynomial (Coefficients coefficients)
     Create Polynomial.
     
    template<class K , class C >
    auto Dune::Functions::makePolynomial (std::initializer_list< C > coefficients)
     Create Polynomial.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,50 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-gridviewentityset.hh File Reference\n-#include \n+ * _\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+polynomial.hh File Reference\n+#include \n+#include \n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\bV_\b,_\b _\bc_\bd_\b _\b>\n-\u00a0 An entity set for all entities of given codim in a grid view. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\b _\bK_\b,_\b _\bC_\b _\b>\n+\u00a0 A univariate polynomial implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::vector< K >) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl< K, std::\n+ vector< K > >\n+\u00a0\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::array< K, n >) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl< K, std::\n+ array< K, n > >\n+\u00a0\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::integer_sequence< K, ci... >) -\n+ > _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl< K, std::integer_sequence< K, ci... > >\n+\u00a0\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::initializer_list< K >) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl<\n+ K, std::vector< K > >\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (Coefficients coefficients)\n+\u00a0 Create _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::initializer_list< C > coefficients)\n+\u00a0 Create _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl.\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: gridviewentityset.hh Source File\n+dune-functions: polynomial.hh Source File\n \n \n \n \n \n \n \n@@ -70,127 +70,236 @@\n
    \n \n \n \n \n \n \n
    \n-
    gridviewentityset.hh
    \n+
    polynomial.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n+
    8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n
    9
    \n-
    10#include <memory>
    \n-
    11
    \n-
    12
    \n-
    13namespace Dune {
    \n+
    10#include <cmath>
    \n+
    11#include <initializer_list>
    \n+
    12#include <vector>
    \n+
    13
    \n
    14
    \n-
    15namespace Functions {
    \n+
    15#include <dune/common/hybridutilities.hh>
    \n
    16
    \n-
    17
    \n-
    25template<class GV, int cd>
    \n-
    \n-\n-
    27{
    \n-
    28public:
    \n-
    29
    \n-
    30 typedef GV GridView;
    \n-
    31 enum {
    \n-
    32 codim = cd
    \n-
    33 };
    \n-
    34
    \n-
    36 typedef typename GridView::template Codim<codim>::Entity Element;
    \n-
    37
    \n-
    39 typedef typename Element::Geometry::LocalCoordinate LocalCoordinate;
    \n-
    40 typedef typename Element::Geometry::GlobalCoordinate GlobalCoordinate;
    \n-
    41
    \n-\n-
    43
    \n-
    45 typedef typename GridView::template Codim<codim>::Iterator const_iterator;
    \n-
    46
    \n-\n-
    49
    \n-
    \n-\n-
    52 gv_(gv)
    \n-
    53 {}
    \n-
    \n-
    54
    \n-
    \n-
    56 bool contains(const Element& e) const
    \n-
    57 {
    \n-
    58 return gv_.contains(e);
    \n-
    59 }
    \n-
    \n-
    60
    \n-
    \n-
    62 size_t size() const
    \n-
    63 {
    \n-
    64 return gv_.size(codim);
    \n-
    65 }
    \n-
    \n-
    66
    \n-
    \n-\n-
    69 {
    \n-
    70 return gv_.template begin<codim>();
    \n-
    71 }
    \n-
    \n-
    72
    \n-
    \n-\n-
    75 {
    \n-
    76 return gv_.template end<codim>();
    \n-
    77 }
    \n-
    \n-
    78
    \n-
    \n-
    80 const GridView& gridView() const
    \n-
    81 {
    \n-
    82 return gv_;
    \n-
    83 }
    \n-
    \n-
    84
    \n-
    85private:
    \n-
    86 GridView gv_;
    \n-
    87};
    \n-
    \n-
    88
    \n-
    89
    \n-
    90} // end of namespace Dune::Functions
    \n-
    91} // end of namespace Dune
    \n-
    92
    \n-
    93#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n+
    \n+
    17namespace Dune {
    \n+
    \n+
    18namespace Functions {
    \n+
    19
    \n+
    20namespace Impl {
    \n+
    21
    \n+
    22 // Compute coefficients of derivative of polynomial.
    \n+
    23 // Overload for std::vector
    \n+
    24 template<class K, class Allocator>
    \n+
    25 auto polynomialDerivativeCoefficients(const std::vector<K, Allocator>& coefficients) {
    \n+
    26 if (coefficients.size()==0)
    \n+
    27 return std::vector<K, Allocator>();
    \n+
    28 std::vector<K, Allocator> dpCoefficients(coefficients.size()-1);
    \n+
    29 for (size_t i=1; i<coefficients.size(); ++i)
    \n+
    30 dpCoefficients[i-1] = coefficients[i]*K(i);
    \n+
    31 return dpCoefficients;
    \n+
    32 }
    \n+
    33
    \n+
    34 // Compute coefficients of derivative of polynomial.
    \n+
    35 // Overload for std::array
    \n+
    36 template<class K, std::size_t n>
    \n+
    37 auto polynomialDerivativeCoefficients(const std::array<K, n>& coefficients) {
    \n+
    38 if constexpr (n==0)
    \n+
    39 return coefficients;
    \n+
    40 else
    \n+
    41 {
    \n+
    42 std::array<K, n-1> dpCoefficients;
    \n+
    43 for (size_t i=1; i<coefficients.size(); ++i)
    \n+
    44 dpCoefficients[i-1] = coefficients[i]*K(i);
    \n+
    45 return dpCoefficients;
    \n+
    46 }
    \n+
    47 }
    \n+
    48
    \n+
    49 // Compute coefficients of derivative of polynomial.
    \n+
    50 // Helper function for the std::integer_sequence overload.
    \n+
    51 // With C++20 this can be avoided, because lambda function
    \n+
    52 // can partially specify template arguments which allows
    \n+
    53 // to do the same inline.
    \n+
    54 template<class I, I i0, I... i, class J, J j0, J... j>
    \n+
    55 auto polynomialDerivativeCoefficientsHelper(std::integer_sequence<I, i0, i...>, std::integer_sequence<J, j0, j...>) {
    \n+
    56 return std::integer_sequence<I, i*I(j)...>();
    \n+
    57 }
    \n+
    58
    \n+
    59 // Compute coefficients of derivative of polynomial.
    \n+
    60 // Overload for std::integer_sequence
    \n+
    61 template<class I, I... i>
    \n+
    62 auto polynomialDerivativeCoefficients(std::integer_sequence<I, i...> coefficients) {
    \n+
    63 if constexpr (sizeof...(i)==0)
    \n+
    64 return coefficients;
    \n+
    65 else
    \n+
    66 return polynomialDerivativeCoefficientsHelper(coefficients, std::make_index_sequence<sizeof...(i)>());
    \n+
    67 }
    \n+
    68
    \n+
    69 // Compute coefficients of derivative of polynomial.
    \n+
    70 // Overload for std::tuple
    \n+
    71 template<class...T>
    \n+
    72 auto polynomialDerivativeCoefficients(const std::tuple<T...>& coefficients) {
    \n+
    73 if constexpr (sizeof...(T)==0)
    \n+
    74 return coefficients;
    \n+
    75 else
    \n+
    76 {
    \n+
    77 // Notice that std::multiplies<void> has issues with signed types.
    \n+
    78 // E.g., `decltype(-2,2ul)` is `long unsigned int`.
    \n+
    79 // Hence the same is deduced as return type in std::multiplies.
    \n+
    80 // To avoid this, we explicitly pass the exponent `i+1` as signed type.
    \n+
    81 // If the coefficient is signed, both types are now signed and
    \n+
    82 // so is the deduced result type of std::multiplies.
    \n+
    83 auto mult = Dune::Hybrid::hybridFunctor(std::multiplies());
    \n+
    84 return Dune::unpackIntegerSequence([&](auto... i) {
    \n+
    85 using signed_type = std::conditional_t<std::is_same_v<std::size_t, long unsigned int>,
    \n+
    86 long signed int, signed int>;
    \n+
    87 return std::tuple(mult(std::get<i+1>(coefficients), std::integral_constant<signed_type, i+1>()) ...);
    \n+
    88 }, std::make_index_sequence<sizeof...(T)-1>());
    \n+
    89 }
    \n+
    90 }
    \n+
    91
    \n+
    92} // namespace Impl in Dune::Functions::
    \n+
    93
    \n+
    94
    \n+
    95
    \n+
    122template<class K, class C=std::vector<K>>
    \n+
    \n+\n+
    124{
    \n+
    125 template<class CC>
    \n+
    126 struct IsIntegerSequence : public std::false_type {};
    \n+
    127
    \n+
    128 template<class I, I... i>
    \n+
    129 struct IsIntegerSequence<std::integer_sequence<I, i...>> : public std::true_type {};
    \n+
    130
    \n+
    131public:
    \n+
    132
    \n+
    134 using Coefficients = C;
    \n+
    135
    \n+
    137 Polynomial() = default;
    \n+
    138
    \n+
    \n+\n+
    148 coefficients_(std::move(coefficients))
    \n+
    149 {}
    \n+
    \n+
    150
    \n+
    \n+
    152 K operator() (const K& x) const
    \n+
    153 {
    \n+
    154 auto y = K(0);
    \n+
    155 auto n = Dune::Hybrid::size(coefficients_);
    \n+
    156 Dune::Hybrid::forEach(Dune::range(n), [&](auto i) {
    \n+
    157 y += Dune::Hybrid::elementAt(coefficients_, i) * std::pow(x, int(i));
    \n+
    158 });
    \n+
    159 return y;
    \n+
    160 }
    \n+
    \n+
    161
    \n+
    \n+
    163 bool operator==(const Polynomial& other) const
    \n+
    164 {
    \n+
    165 if constexpr (IsIntegerSequence<Coefficients>::value)
    \n+
    166 return true;
    \n+
    167 else
    \n+
    168 return coefficients()==other.coefficients();
    \n+
    169 }
    \n+
    \n+
    170
    \n+
    \n+
    180 friend auto derivative(const Polynomial& p)
    \n+
    181 {
    \n+
    182 auto derivativeCoefficients = Impl::polynomialDerivativeCoefficients(p.coefficients());
    \n+
    183 using DerivativeCoefficients = decltype(derivativeCoefficients);
    \n+
    184 return Polynomial<K, DerivativeCoefficients>(std::move(derivativeCoefficients));
    \n+
    185 }
    \n+
    \n+
    186
    \n+
    \n+\n+
    189 {
    \n+
    190 return coefficients_;
    \n+
    191 }
    \n+
    \n+
    192
    \n+
    193private:
    \n+
    194 Coefficients coefficients_;
    \n+
    195};
    \n+
    \n+
    196
    \n+
    197
    \n+
    198
    \n+
    199template<class K>
    \n+\n+
    201
    \n+
    202template<class K, std::size_t n>
    \n+\n+
    204
    \n+
    205template<class K, K... ci>
    \n+
    206Polynomial(std::integer_sequence<K, ci...>) -> Polynomial<K, std::integer_sequence<K,ci...>>;
    \n+
    207
    \n+
    208template<class K>
    \n+
    209Polynomial(std::initializer_list<K>) -> Polynomial<K, std::vector<K>>;
    \n+
    210
    \n+
    211
    \n+
    212
    \n+
    225template<class K, class Coefficients>
    \n+
    \n+
    226auto makePolynomial(Coefficients coefficients)
    \n+
    227{
    \n+
    228 return Polynomial<K, Coefficients>(std::move(coefficients));
    \n+
    229}
    \n+
    \n+
    230
    \n+
    240template<class K, class C>
    \n+
    \n+
    241auto makePolynomial(std::initializer_list<C> coefficients)
    \n+
    242{
    \n+
    243 return Polynomial<K>(std::move(coefficients));
    \n+
    244}
    \n+
    \n+
    245
    \n+
    246
    \n+
    247
    \n+
    248
    \n+
    249
    \n+
    250}} // namespace Dune::Functions
    \n+
    \n+
    \n+
    251
    \n+
    252
    \n+
    253
    \n+
    254#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n+
    friend auto derivative(const Polynomial &p)
    Obtain derivative of Polynomial function.
    Definition polynomial.hh:180
    \n
    Definition polynomial.hh:17
    \n-
    An entity set for all entities of given codim in a grid view.
    Definition gridviewentityset.hh:27
    \n-
    GridViewEntitySet(const GridView &gv)
    Construct GridViewEntitySet for a GridView.
    Definition gridviewentityset.hh:51
    \n-
    GV GridView
    Definition gridviewentityset.hh:30
    \n-
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:36
    \n-
    const_iterator end() const
    Create an end iterator.
    Definition gridviewentityset.hh:74
    \n-
    const GridView & gridView() const
    Return the associated GridView.
    Definition gridviewentityset.hh:80
    \n-
    Element value_type
    Definition gridviewentityset.hh:42
    \n-
    const_iterator begin() const
    Create a begin iterator.
    Definition gridviewentityset.hh:68
    \n-
    GridView::template Codim< codim >::Iterator const_iterator
    A forward iterator.
    Definition gridviewentityset.hh:45
    \n-
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:39
    \n-
    size_t size() const
    Return number of Elements visited by an iterator.
    Definition gridviewentityset.hh:62
    \n-
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:40
    \n-
    @ codim
    Definition gridviewentityset.hh:32
    \n-
    bool contains(const Element &e) const
    Return true if e is contained in the EntitySet.
    Definition gridviewentityset.hh:56
    \n-
    const_iterator iterator
    Same as const_iterator.
    Definition gridviewentityset.hh:48
    \n+
    auto makePolynomial(Coefficients coefficients)
    Create Polynomial.
    Definition polynomial.hh:226
    \n+
    A univariate polynomial implementation.
    Definition polynomial.hh:124
    \n+
    Polynomial()=default
    Default constructor.
    \n+
    K operator()(const K &x) const
    Evaluate polynomial.
    Definition polynomial.hh:152
    \n+
    C Coefficients
    The type of the stored coefficient container.
    Definition polynomial.hh:134
    \n+
    const Coefficients & coefficients() const
    Obtain reference to coefficient vector.
    Definition polynomial.hh:188
    \n+
    Polynomial(Coefficients coefficients)
    Create from container of coefficients.
    Definition polynomial.hh:147
    \n+
    bool operator==(const Polynomial &other) const
    Comparison of coefficients.
    Definition polynomial.hh:163
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,146 +1,246 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-gridviewentityset.hh\n+ * _\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+polynomial.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n 9\n-10#include \n-11\n-12\n-13namespace _\bD_\bu_\bn_\be {\n+10#include \n+11#include \n+12#include \n+13\n 14\n-15namespace Functions {\n+15#include \n 16\n-17\n-25template\n-_\b2_\b6class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-27{\n-28public:\n-29\n-_\b3_\b0 typedef GV _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw;\n-31 enum {\n-32 _\bc_\bo_\bd_\bi_\bm = cd\n-_\b3_\b3 };\n-34\n-_\b3_\b6 typedef typename GridView::template Codim::Entity _\bE_\bl_\be_\bm_\be_\bn_\bt;\n-37\n-_\b3_\b9 typedef typename Element::Geometry::LocalCoordinate _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-_\b4_\b0 typedef typename Element::Geometry::GlobalCoordinate _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-41\n-_\b4_\b2 typedef _\bE_\bl_\be_\bm_\be_\bn_\bt _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-43\n-_\b4_\b5 typedef typename GridView::template Codim::Iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-46\n-_\b4_\b8 typedef _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-49\n-_\b5_\b1 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n-52 gv_(gv)\n-53 {}\n-54\n-_\b5_\b6 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e) const\n-57 {\n-58 return gv_.contains(e);\n-59 }\n-60\n-_\b6_\b2 size_t _\bs_\bi_\bz_\be() const\n-63 {\n-64 return gv_.size(_\bc_\bo_\bd_\bi_\bm);\n-65 }\n-66\n-_\b6_\b8 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const\n-69 {\n-70 return gv_.template begin();\n-71 }\n-72\n-_\b7_\b4 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const\n-75 {\n-76 return gv_.template end();\n-77 }\n-78\n-_\b8_\b0 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-81 {\n-82 return gv_;\n-83 }\n-84\n-85private:\n-86 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw gv_;\n-87};\n-88\n-89\n-90} // end of namespace Dune::Functions\n-91} // end of namespace Dune\n-92\n-93#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+_\b1_\b7namespace _\bD_\bu_\bn_\be {\n+_\b1_\b8namespace Functions {\n+19\n+20namespace Impl {\n+21\n+22 // Compute coefficients of derivative of polynomial.\n+23 // Overload for std::vector\n+24 template\n+25 auto polynomialDerivativeCoefficients(const std::vector&\n+coefficients) {\n+26 if (coefficients.size()==0)\n+27 return std::vector();\n+28 std::vector dpCoefficients(coefficients.size()-1);\n+29 for (size_t i=1; i\n+37 auto polynomialDerivativeCoefficients(const std::array& coefficients)\n+{\n+38 if constexpr (n==0)\n+39 return coefficients;\n+40 else\n+41 {\n+42 std::array dpCoefficients;\n+43 for (size_t i=1; i\n+55 auto polynomialDerivativeCoefficientsHelper(std::integer_sequence, std::integer_sequence) {\n+56 return std::integer_sequence();\n+57 }\n+58\n+59 // Compute coefficients of derivative of polynomial.\n+60 // Overload for std::integer_sequence\n+61 template\n+62 auto polynomialDerivativeCoefficients(std::integer_sequence\n+coefficients) {\n+63 if constexpr (sizeof...(i)==0)\n+64 return coefficients;\n+65 else\n+66 return polynomialDerivativeCoefficientsHelper(coefficients, std::\n+make_index_sequence());\n+67 }\n+68\n+69 // Compute coefficients of derivative of polynomial.\n+70 // Overload for std::tuple\n+71 template\n+72 auto polynomialDerivativeCoefficients(const std::tuple& coefficients)\n+{\n+73 if constexpr (sizeof...(T)==0)\n+74 return coefficients;\n+75 else\n+76 {\n+77 // Notice that std::multiplies has issues with signed types.\n+78 // E.g., `decltype(-2,2ul)` is `long unsigned int`.\n+79 // Hence the same is deduced as return type in std::multiplies.\n+80 // To avoid this, we explicitly pass the exponent `i+1` as signed type.\n+81 // If the coefficient is signed, both types are now signed and\n+82 // so is the deduced result type of std::multiplies.\n+83 auto mult = Dune::Hybrid::hybridFunctor(std::multiplies());\n+84 return Dune::unpackIntegerSequence([&](auto... i) {\n+85 using signed_type = std::conditional_t,\n+86 long signed int, signed int>;\n+87 return std::tuple(mult(std::get(coefficients), std::\n+integral_constant()) ...);\n+88 }, std::make_index_sequence());\n+89 }\n+90 }\n+91\n+92} // namespace Impl in Dune::Functions::\n+93\n+94\n+95\n+122template>\n+_\b1_\b2_\b3class _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n+124{\n+125 template\n+126 struct IsIntegerSequence : public std::false_type {};\n+127\n+128 template\n+129 struct IsIntegerSequence> : public std::\n+true_type {};\n+130\n+131public:\n+132\n+_\b1_\b3_\b4 using _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs = C;\n+135\n+_\b1_\b3_\b7 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl() = default;\n+138\n+_\b1_\b4_\b7 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs) :\n+148 coefficients_(std::move(_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs))\n+149 {}\n+150\n+_\b1_\b5_\b2 K _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)_\b (const K& x) const\n+153 {\n+154 auto y = K(0);\n+155 auto n = Dune::Hybrid::size(coefficients_);\n+156 Dune::Hybrid::forEach(Dune::range(n), [&](auto i) {\n+157 y += Dune::Hybrid::elementAt(coefficients_, i) * std::pow(x, int(i));\n+158 });\n+159 return y;\n+160 }\n+161\n+_\b1_\b6_\b3 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& other) const\n+164 {\n+165 if constexpr (IsIntegerSequence::value)\n+166 return true;\n+167 else\n+168 return _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs()==other._\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs();\n+169 }\n+170\n+_\b1_\b8_\b0 friend auto _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& p)\n+181 {\n+182 auto derivativeCoefficients = Impl::polynomialDerivativeCoefficients\n+(p._\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs());\n+183 using DerivativeCoefficients = decltype(derivativeCoefficients);\n+184 return _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b>(std::move\n+(derivativeCoefficients));\n+185 }\n+186\n+_\b1_\b8_\b8 const _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs& _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs() const\n+189 {\n+190 return coefficients_;\n+191 }\n+192\n+193private:\n+194 _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs coefficients_;\n+195};\n+196\n+197\n+198\n+199template\n+_\b2_\b0_\b0_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::vector) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bs_\bt_\bd_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b<_\bK_\b>>;\n+201\n+202template\n+_\b2_\b0_\b3_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::array) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bs_\bt_\bd_\b:_\b:_\ba_\br_\br_\ba_\by_\b<_\bK_\b,_\bn_\b>>;\n+204\n+205template\n+_\b2_\b0_\b6_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::integer_sequence) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl>;\n+207\n+208template\n+_\b2_\b0_\b9_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::initializer_list) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bs_\bt_\bd_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b<_\bK_\b>>;\n+210\n+211\n+212\n+225template\n+_\b2_\b2_\b6auto _\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(Coefficients coefficients)\n+227{\n+228 return _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b>(std::move(coefficients));\n+229}\n+230\n+240template\n+_\b2_\b4_\b1auto _\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::initializer_list coefficients)\n+242{\n+243 return _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b>(std::move(coefficients));\n+244}\n+245\n+246\n+247\n+248\n+249\n+250}} // namespace Dune::Functions\n+251\n+252\n+253\n+254#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend auto derivative(const Polynomial &p)\n+Obtain derivative of Polynomial function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:180\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-An entity set for all entities of given codim in a grid view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-GridViewEntitySet(const GridView &gv)\n-Construct GridViewEntitySet for a GridView.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:51\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:30\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-GridView::template Codim< codim >::Entity Element\n-Type of Elements contained in this EntitySet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-Create an end iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Return the associated GridView.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:80\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-Element value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:42\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Create a begin iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-GridView::template Codim< codim >::Iterator const_iterator\n-A forward iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:45\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-Element::Geometry::LocalCoordinate LocalCoordinate\n-Type of local coordinates with respect to the Element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:39\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-Return number of Elements visited by an iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-Element::Geometry::GlobalCoordinate GlobalCoordinate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:40\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bc_\bo_\bd_\bi_\bm\n-@ codim\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:32\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs\n-bool contains(const Element &e) const\n-Return true if e is contained in the EntitySet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:56\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-const_iterator iterator\n-Same as const_iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n+auto makePolynomial(Coefficients coefficients)\n+Create Polynomial.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:226\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n+A univariate polynomial implementation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:124\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n+Polynomial()=default\n+Default constructor.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+K operator()(const K &x) const\n+Evaluate polynomial.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n+C Coefficients\n+The type of the stored coefficient container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:134\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n+const Coefficients & coefficients() const\n+Obtain reference to coefficient vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:188\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n+Polynomial(Coefficients coefficients)\n+Create from container of coefficients.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const Polynomial &other) const\n+Comparison of coefficients.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:163\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: defaultderivativetraits.hh File Reference\n+dune-functions: istlvectorbackend.hh File Reference\n \n \n \n \n \n \n \n@@ -65,58 +65,61 @@\n \n \n \n \n \n \n \n
    \n \n-
    defaultderivativetraits.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    istlvectorbackend.hh File Reference
    \n \n
    \n-
    #include <type_traits>
    \n+
    #include <cstddef>
    \n #include <utility>
    \n-#include <dune/common/fvector.hh>
    \n-#include <dune/common/fmatrix.hh>
    \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
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::Functions::InvalidRange
     Dummy range class to be used if no proper type is available. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< Signature >
     Default implementation for derivative traits. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< double(double) >
     Default implementation for derivative traits. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)>
     Default implementation for derivative traits. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)>
     Default implementation for derivative traits. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)>
     Default implementation for derivative traits. More...
     
    \n \n \n \n \n \n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    template<class V >
    constexpr auto Dune::Functions::fieldTypes ()
     Generate list of field types in container.
     
    template<class V >
    constexpr bool Dune::Functions::hasUniqueFieldType ()
     Check if container has a unique field type.
     
    template<class Vector >
    auto Dune::Functions::istlVectorBackend (Vector &v)
     Return a vector backend wrapping non-const ISTL like containers.
     
    template<class Vector >
    auto Dune::Functions::istlVectorBackend (const Vector &v)
     Return a vector backend wrapping const ISTL like containers.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,42 +1,44 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-defaultderivativetraits.hh File Reference\n-#include \n+ * _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+istlvectorbackend.hh File Reference\n+#include \n #include \n-#include \n-#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n-\u00a0 Dummy range class to be used if no proper type is available. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b _\b>\n-\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bd_\bo_\bu_\bb_\bl_\be_\b(_\bd_\bo_\bu_\bb_\bl_\be_\b)_\b _\b>\n-\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bK_\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b)_\b>\n-\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bm_\b _\b>\n- _\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b)_\b>\n-\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\b1_\b,_\b _\bm_\b _\b>\n- _\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b)_\b>\n-\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs ()\n+\u00a0 Generate list of field types in container.\n+\u00a0\n+template\n+constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bF_\bi_\be_\bl_\bd_\bT_\by_\bp_\be ()\n+\u00a0 Check if container has a unique field type.\n+\u00a0\n+template\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd (Vector &v)\n+\u00a0 Return a vector backend wrapping non-const ISTL like\n+ containers.\n+\u00a0\n+template\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd (const Vector &v)\n+\u00a0 Return a vector backend wrapping const ISTL like containers.\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: defaultderivativetraits.hh Source File\n+dune-functions: istlvectorbackend.hh Source File\n \n \n \n \n \n \n \n@@ -70,101 +70,352 @@\n
    \n \n \n \n \n \n \n
    \n-
    defaultderivativetraits.hh
    \n+
    istlvectorbackend.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n+
    10#include <cstddef>
    \n
    11#include <utility>
    \n-
    12
    \n-
    13#include <dune/common/fvector.hh>
    \n-
    14#include <dune/common/fmatrix.hh>
    \n-
    15
    \n-
    16namespace Dune {
    \n-
    17namespace Functions {
    \n+
    12#include <type_traits>
    \n+
    13
    \n+
    14#include <dune/common/std/type_traits.hh>
    \n+
    15#include <dune/common/indices.hh>
    \n+
    16#include <dune/common/hybridutilities.hh>
    \n+
    17#include <dune/common/concept.hh>
    \n
    18
    \n-
    19
    \n-
    20
    \n-
    \n-\n-
    27{};
    \n-
    \n-
    28
    \n-
    29
    \n-
    39template<class Signature>
    \n-
    \n-\n-
    41{
    \n-\n-
    44};
    \n-
    \n-
    45
    \n-
    46
    \n-
    54template<>
    \n-
    \n-
    55struct DefaultDerivativeTraits< double(double) >
    \n-
    56{
    \n-
    58 typedef double Range;
    \n-
    59};
    \n-
    \n-
    60
    \n-
    70template<typename K, int n>
    \n-
    \n-
    71struct DefaultDerivativeTraits<K(FieldVector<K,n>)>
    \n-
    72{
    \n-
    74 typedef FieldVector<K,n> Range;
    \n-
    75};
    \n-
    \n-
    76
    \n-
    86template<typename K, int n, int m>
    \n-
    \n-
    87struct DefaultDerivativeTraits<FieldVector<K,m>(FieldVector<K,n>)>
    \n-
    88{
    \n-
    90 typedef FieldMatrix<K,m,n> Range;
    \n-
    91};
    \n-
    \n-
    92
    \n-
    102template<typename K, int n, int m>
    \n-
    \n-
    103struct DefaultDerivativeTraits<FieldMatrix<K,1,m>(FieldVector<K,n>)>
    \n-
    104{
    \n-
    106 typedef FieldMatrix<K,m,n> Range;
    \n-
    107};
    \n-
    \n-
    108
    \n-
    109
    \n-
    110}} // namespace Dune::Functions
    \n+\n+\n+
    21
    \n+
    22
    \n+
    23namespace Dune {
    \n+
    24namespace Functions {
    \n+
    25
    \n+
    26namespace Impl {
    \n+
    27
    \n+
    28template<class V,
    \n+
    29 std::enable_if_t<not Dune::models<Imp::Concept::HasStaticIndexAccess, V>() , int> = 0>
    \n+
    30auto fieldTypes(V&& /*v*/)
    \n+
    31{
    \n+
    32 return TypeList<V>{};
    \n+
    33}
    \n+
    34
    \n+
    35template<class V,
    \n+
    36 std::enable_if_t<Dune::models<Imp::Concept::HasStaticIndexAccess, V>(), int> = 0>
    \n+
    37auto fieldTypes(V&& v)
    \n+
    38{
    \n+
    39 if constexpr (Dune::models<Imp::Concept::HasDynamicIndexAccess<std::size_t>, V>())
    \n+
    40 return fieldTypes(v[std::size_t{0}]);
    \n+
    41 else
    \n+
    42 {
    \n+
    43 auto indexRange = typename decltype(range(Hybrid::size(v)))::integer_sequence();
    \n+
    44 return unpackIntegerSequence([&](auto... i) {
    \n+
    45 return uniqueTypeList(std::tuple_cat(fieldTypes(v[i])...));
    \n+
    46 }, indexRange);
    \n+
    47 }
    \n+
    48}
    \n+
    49
    \n+
    50} // namespace Impl
    \n+
    51
    \n+
    52
    \n+
    53
    \n+
    66template<class V>
    \n+
    \n+
    67constexpr auto fieldTypes()
    \n+
    68{
    \n+
    69 return decltype(Impl::fieldTypes(std::declval<V>())){};
    \n+
    70}
    \n+
    \n+
    71
    \n+
    77template<class V>
    \n+
    \n+
    78constexpr bool hasUniqueFieldType()
    \n+
    79{
    \n+
    80 return std::tuple_size_v<std::decay_t<decltype(fieldTypes<V>())>> ==1;
    \n+
    81}
    \n+
    \n+
    82
    \n+
    83
    \n+
    84
    \n+
    85namespace Impl {
    \n+
    86
    \n+
    87/*
    \n+
    88 * \\brief A wrapper providing multi-index access to vector entries
    \n+
    89 *
    \n+
    90 * The wrapped vector type should be an istl like random
    \n+
    91 * access container providing operator[] and size() methods.
    \n+
    92 * For classical containers this should support indices
    \n+
    93 * of type std::size_t. For multi-type containers indices
    \n+
    94 * of the form Dune::index_constant<i> should be supported
    \n+
    95 * while size() should be a static constexpr method.
    \n+
    96 *
    \n+
    97 * When resolving multi-indices the backend appends indices
    \n+
    98 * using operator[] as long as the result is not a scalar.
    \n+
    99 * If this exhausts the digits of the multi-index, additional
    \n+
    100 * zero`s are appended.
    \n+
    101 *
    \n+
    102 * \\tparam V Type of the raw wrapper vector
    \n+
    103 */
    \n+
    104template<class V>
    \n+
    105class ISTLVectorBackend
    \n+
    106{
    \n+
    107
    \n+
    108 // Template aliases for using detection idiom.
    \n+
    109 template<class C>
    \n+
    110 using dynamicIndexAccess_t = decltype(std::declval<C>()[0]);
    \n
    111
    \n-
    112
    \n-
    113#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n+
    112 template<class C>
    \n+
    113 using staticIndexAccess_t = decltype(std::declval<C>()[Dune::Indices::_0]);
    \n+
    114
    \n+
    115 template<class C>
    \n+
    116 using resizeMethod_t = decltype(std::declval<C>().resize(0));
    \n+
    117
    \n+
    118
    \n+
    119
    \n+
    120 // Short cuts for feature detection
    \n+
    121 template<class C>
    \n+
    122 using hasDynamicIndexAccess = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;
    \n+
    123
    \n+
    124 template<class C>
    \n+
    125 using hasStaticIndexAccess = Dune::Std::is_detected<staticIndexAccess_t, std::remove_reference_t<C>>;
    \n+
    126
    \n+
    127 template<class C>
    \n+
    128 using hasResizeMethod = Dune::Std::is_detected<resizeMethod_t, std::remove_reference_t<C>>;
    \n+
    129
    \n+
    130 template<class C>
    \n+
    131 using isDynamicVector = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;
    \n+
    132
    \n+
    133 template<class C>
    \n+
    134 using isStaticVector = Dune::Std::bool_constant<
    \n+
    135 Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>
    \n+
    136 and not Dune::Std::is_detected_v<dynamicIndexAccess_t, std::remove_reference_t<C>>>;
    \n+
    137
    \n+
    138 template<class C>
    \n+
    139 using isScalar = Dune::Std::bool_constant<not Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;
    \n+
    140
    \n+
    141 template<class C>
    \n+
    142 using isVector = Dune::Std::bool_constant<Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;
    \n+
    143
    \n+
    144
    \n+
    145
    \n+
    146 template<class... Args>
    \n+
    147 static void forwardToResize(Args&&... args)
    \n+
    148 {
    \n+
    149 resize(std::forward<Args>(args)...);
    \n+
    150 }
    \n+
    151
    \n+
    152
    \n+
    153 template<class C, class SizeProvider,
    \n+
    154 std::enable_if_t<hasResizeMethod<C>::value, int> = 0>
    \n+
    155 static void resize(C&& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    156 {
    \n+
    157 auto size = sizeProvider.size(prefix);
    \n+
    158 if (size==0)
    \n+
    159 {
    \n+
    160 // If size==0 this prefix refers to a single coefficient c.
    \n+
    161 // But being in this overload means that c is not a scalar
    \n+
    162 // because is has a resize() method. Since operator[] deliberately
    \n+
    163 // supports implicit padding of multi-indices by as many
    \n+
    164 // [0]'s as needed to resolve a scalar entry, we should also
    \n+
    165 // except a non-scalar c here. However, this requires that
    \n+
    166 // we silently believe that whatever size c already has is
    \n+
    167 // intended by the user. The only exception is c.size()==0
    \n+
    168 // which is not acceptable but we also cannot know the desired size.
    \n+
    169 if (c.size()==0)
    \n+
    170 DUNE_THROW(RangeError, "The vector entry v[" << prefix << "] should refer to a "
    \n+
    171 << "scalar coefficient, but is a dynamically sized vector of size==0");
    \n+
    172 else
    \n+
    173 // Accept non-zero sized coefficients to avoid that resize(basis)
    \n+
    174 // fails for a vector that works with operator[] and already
    \n+
    175 // has the appropriate size.
    \n+
    176 return;
    \n+
    177 }
    \n+
    178 c.resize(size);
    \n+
    179 prefix.push_back(0);
    \n+
    180 for(std::size_t i=0; i<size; ++i)
    \n+
    181 {
    \n+
    182 prefix.back() = i;
    \n+
    183 resize(c[i], sizeProvider, prefix);
    \n+
    184 }
    \n+
    185 }
    \n+
    186
    \n+
    187 template<class C, class SizeProvider,
    \n+
    188 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,
    \n+
    189 std::enable_if_t<isVector<C>::value, int> = 0>
    \n+
    190 static void resize(C&& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    191 {
    \n+
    192 auto size = sizeProvider.size(prefix);
    \n+
    193 // If size == 0 there's nothing to do:
    \n+
    194 // We can't resize c and it's already
    \n+
    195 // large enough anyway.
    \n+
    196 if (size == 0)
    \n+
    197 return;
    \n+
    198
    \n+
    199 // If size>0 but c does not have the appropriate
    \n+
    200 // size we throw an exception.
    \n+
    201 //
    \n+
    202 // We could perhaps also allow c.size()>size.
    \n+
    203 // But then looping the loop below gets complicated:
    \n+
    204 // We're not allowed to loop until c.size(). But
    \n+
    205 // we also cannot use size for termination,
    \n+
    206 // because this fails if c is a static vector.
    \n+
    207 if (c.size() != size)
    \n+
    208 DUNE_THROW(RangeError, "Can't resize non-resizable entry v[" << prefix << "] of size " << c.size() << " to size(" << prefix << ")=" << size);
    \n+
    209
    \n+
    210 // Recursively resize all entries of c now.
    \n+
    211 using namespace Dune::Hybrid;
    \n+
    212 prefix.push_back(0);
    \n+
    213 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {
    \n+
    214 prefix.back() = i;
    \n+
    215 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);
    \n+
    216 // but even gcc-7 does not except this bus reports
    \n+
    217 // "error: \u2018this\u2019 was not captured for this lambda function"
    \n+
    218 // although there's no 'this' because we're in a static method.
    \n+
    219 // Bypassing this by and additional method that does perfect
    \n+
    220 // forwarding allows to workaround this.
    \n+
    221 ISTLVectorBackend<V>::forwardToResize(c[i], sizeProvider, prefix);
    \n+
    222 });
    \n+
    223 }
    \n+
    224
    \n+
    225 template<class C, class SizeProvider,
    \n+
    226 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,
    \n+
    227 std::enable_if_t<isScalar<C>::value, int> = 0>
    \n+
    228 static void resize(C&&, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    229 {
    \n+
    230 auto size = sizeProvider.size(prefix);
    \n+
    231 if (size != 0)
    \n+
    232 DUNE_THROW(RangeError, "Can't resize scalar vector entry v[" << prefix << "] to size(" << prefix << ")=" << size);
    \n+
    233 }
    \n+
    234
    \n+
    235 template<class C, class T,
    \n+
    236 std::enable_if_t<std::is_assignable_v<C&,T>, int> = 0>
    \n+
    237 void recursiveAssign(C& c, const T& t)
    \n+
    238 {
    \n+
    239 c = t;
    \n+
    240 }
    \n+
    241
    \n+
    242 template<class C, class T,
    \n+
    243 std::enable_if_t<not std::is_assignable_v<C&,T>, int> = 0>
    \n+
    244 void recursiveAssign(C& c, const T& t)
    \n+
    245 {
    \n+
    246 Dune::Hybrid::forEach(c, [&](auto&& ci) {
    \n+
    247 recursiveAssign(ci, t);
    \n+
    248 });
    \n+
    249 }
    \n+
    250
    \n+
    251public:
    \n+
    252
    \n+
    253 using Vector = V;
    \n+
    254
    \n+
    255 ISTLVectorBackend(Vector& vector) :
    \n+
    256 vector_(&vector)
    \n+
    257 {}
    \n+
    258
    \n+
    259 template<class SizeProvider>
    \n+
    260 void resize(const SizeProvider& sizeProvider)
    \n+
    261 {
    \n+
    262 auto prefix = typename SizeProvider::SizePrefix();
    \n+
    263 prefix.resize(0);
    \n+
    264 resize(*vector_, sizeProvider, prefix);
    \n+
    265 }
    \n+
    266
    \n+
    267 template<class MultiIndex>
    \n+
    268 decltype(auto) operator[](const MultiIndex& index) const
    \n+
    269 {
    \n+
    270 return resolveDynamicMultiIndex(*vector_, index);
    \n+
    271 }
    \n+
    272
    \n+
    273 template<class MultiIndex>
    \n+
    274 decltype(auto) operator[](const MultiIndex& index)
    \n+
    275 {
    \n+
    276 return resolveDynamicMultiIndex(*vector_, index);
    \n+
    277 }
    \n+
    278
    \n+
    287 template<typename T>
    \n+
    288 void operator= (const T& other)
    \n+
    289 {
    \n+
    290 recursiveAssign(vector(), other);
    \n+
    291 }
    \n+
    292
    \n+
    293 template<typename T>
    \n+
    294 void operator= (const ISTLVectorBackend<T>& other)
    \n+
    295 {
    \n+
    296 vector() = other.vector();
    \n+
    297 }
    \n+
    298
    \n+
    299 const Vector& vector() const
    \n+
    300 {
    \n+
    301 return *vector_;
    \n+
    302 }
    \n+
    303
    \n+
    304 Vector& vector()
    \n+
    305 {
    \n+
    306 return *vector_;
    \n+
    307 }
    \n+
    308
    \n+
    309private:
    \n+
    310
    \n+
    311 Vector* vector_;
    \n+
    312};
    \n+
    313
    \n+
    314} // end namespace Impl
    \n+
    315
    \n+
    316
    \n+
    317
    \n+
    349template<class Vector>
    \n+
    \n+
    350auto istlVectorBackend(Vector& v)
    \n+
    351{
    \n+
    352 static_assert(hasUniqueFieldType<Vector&>(), "Vector type passed to istlVectorBackend() does not have a unique field type.");
    \n+
    353 return Impl::ISTLVectorBackend<Vector>(v);
    \n+
    354}
    \n+
    \n+
    355
    \n+
    356
    \n+
    357
    \n+
    387template<class Vector>
    \n+
    \n+
    388auto istlVectorBackend(const Vector& v)
    \n+
    389{
    \n+
    390 static_assert(hasUniqueFieldType<const Vector&>(), "Vector type passed to istlVectorBackend() does not have a unique field type.");
    \n+
    391 return Impl::ISTLVectorBackend<const Vector>(v);
    \n+
    392}
    \n+
    \n+
    393
    \n+
    394
    \n+
    395
    \n+
    396} // namespace Functions
    \n+
    397} // namespace Dune
    \n+
    398
    \n+
    399
    \n+
    400#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n+\n+
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:350
    \n+
    constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:377
    \n
    Definition polynomial.hh:17
    \n-
    Dummy range class to be used if no proper type is available.
    Definition defaultderivativetraits.hh:27
    \n-
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:41
    \n-
    InvalidRange Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:43
    \n-
    double Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:58
    \n-
    FieldVector< K, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:74
    \n-
    FieldMatrix< K, m, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:90
    \n-
    FieldMatrix< K, m, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:106
    \n+
    constexpr auto fieldTypes()
    Generate list of field types in container.
    Definition istlvectorbackend.hh:67
    \n+
    constexpr bool hasUniqueFieldType()
    Check if container has a unique field type.
    Definition istlvectorbackend.hh:78
    \n+
    std::vector< Child > Vector
    Descriptor for vectors with all children of the same type and dynamic size.
    Definition containerdescriptors.hh:124
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,103 +1,372 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bc_\bo_\bm_\bm_\bo_\bn\n-defaultderivativetraits.hh\n+ * _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs\n+istlvectorbackend.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n-8#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n 9\n-10#include \n+10#include \n 11#include \n-12\n-13#include \n-14#include \n-15\n-16namespace _\bD_\bu_\bn_\be {\n-17namespace Functions {\n+12#include \n+13\n+14#include \n+15#include \n+16#include \n+17#include \n 18\n-19\n-20\n-_\b2_\b6class _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n-27{};\n-28\n-29\n-39template\n-_\b4_\b0struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-41{\n-_\b4_\b3 typedef _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be _\bR_\ba_\bn_\bg_\be;\n-44};\n-45\n-46\n-54template<>\n-_\b5_\b5struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs< double(double) >\n-56{\n-_\b5_\b8 typedef double _\bR_\ba_\bn_\bg_\be;\n-59};\n-60\n-70template\n-_\b7_\b1struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs)>\n-72{\n-_\b7_\b4 typedef FieldVector _\bR_\ba_\bn_\bg_\be;\n-75};\n-76\n-86template\n-_\b8_\b7struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs(FieldVector)>\n-88{\n-_\b9_\b0 typedef FieldMatrix _\bR_\ba_\bn_\bg_\be;\n-91};\n-92\n-102template\n-_\b1_\b0_\b3struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs(FieldVector)>\n-104{\n-_\b1_\b0_\b6 typedef FieldMatrix _\bR_\ba_\bn_\bg_\be;\n-107};\n-108\n-109\n-110}} // namespace Dune::Functions\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+21\n+22\n+23namespace _\bD_\bu_\bn_\be {\n+24namespace Functions {\n+25\n+26namespace Impl {\n+27\n+28template() ,\n+int> = 0>\n+30auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(V&& /*v*/)\n+31{\n+32 return TypeList{};\n+33}\n+34\n+35template(), int>\n+= 0>\n+37auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(V&& v)\n+38{\n+39 if constexpr (Dune::models,\n+V>())\n+40 return _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(v[std::size_t{0}]);\n+41 else\n+42 {\n+43 auto indexRange = typename decltype(range(Hybrid::size(v)))::\n+integer_sequence();\n+44 return unpackIntegerSequence([&](auto... i) {\n+45 return uniqueTypeList(std::tuple_cat(_\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(v[i])...));\n+46 }, indexRange);\n+47 }\n+48}\n+49\n+50} // namespace Impl\n+51\n+52\n+53\n+66template\n+_\b6_\b7constexpr auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs()\n+68{\n+69 return decltype(Impl::fieldTypes(std::declval())){};\n+70}\n+71\n+77template\n+_\b7_\b8constexpr bool _\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bF_\bi_\be_\bl_\bd_\bT_\by_\bp_\be()\n+79{\n+80 return std::tuple_size_v())>> ==1;\n+81}\n+82\n+83\n+84\n+85namespace Impl {\n+86\n+87/*\n+88 * \\brief A wrapper providing multi-index access to vector entries\n+89 *\n+90 * The wrapped vector type should be an istl like random\n+91 * access container providing operator[] and size() methods.\n+92 * For classical containers this should support indices\n+93 * of type std::size_t. For multi-type containers indices\n+94 * of the form Dune::index_constant should be supported\n+95 * while size() should be a static constexpr method.\n+96 *\n+97 * When resolving multi-indices the backend appends indices\n+98 * using operator[] as long as the result is not a scalar.\n+99 * If this exhausts the digits of the multi-index, additional\n+100 * zero`s are appended.\n+101 *\n+102 * \\tparam V Type of the raw wrapper vector\n+103 */\n+104template\n+105class ISTLVectorBackend\n+106{\n+107\n+108 // Template aliases for using detection idiom.\n+109 template\n+110 using dynamicIndexAccess_t = decltype(std::declval()[0]);\n 111\n-112\n-113#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+112 template\n+113 using staticIndexAccess_t = decltype(std::declval()[Dune::Indices::_0]);\n+114\n+115 template\n+116 using resizeMethod_t = decltype(std::declval().resize(0));\n+117\n+118\n+119\n+120 // Short cuts for feature detection\n+121 template\n+122 using hasDynamicIndexAccess = Dune::Std::is_detected>;\n+123\n+124 template\n+125 using hasStaticIndexAccess = Dune::Std::is_detected>;\n+126\n+127 template\n+128 using hasResizeMethod = Dune::Std::is_detected>;\n+129\n+130 template\n+131 using isDynamicVector = Dune::Std::is_detected>;\n+132\n+133 template\n+134 using isStaticVector = Dune::Std::bool_constant<\n+135 Dune::Std::is_detected_v>\n+136 and not Dune::Std::is_detected_v>>;\n+137\n+138 template\n+139 using isScalar = Dune::Std::bool_constant>>;\n+140\n+141 template\n+142 using isVector = Dune::Std::bool_constant>>;\n+143\n+144\n+145\n+146 template\n+147 static void forwardToResize(Args&&... args)\n+148 {\n+149 resize(std::forward(args)...);\n+150 }\n+151\n+152\n+153 template::value, int> = 0>\n+155 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+156 {\n+157 auto size = sizeProvider.size(prefix);\n+158 if (size==0)\n+159 {\n+160 // If size==0 this prefix refers to a single coefficient c.\n+161 // But being in this overload means that c is not a scalar\n+162 // because is has a resize() method. Since operator[] deliberately\n+163 // supports implicit padding of multi-indices by as many\n+164 // [0]'s as needed to resolve a scalar entry, we should also\n+165 // except a non-scalar c here. However, this requires that\n+166 // we silently believe that whatever size c already has is\n+167 // intended by the user. The only exception is c.size()==0\n+168 // which is not acceptable but we also cannot know the desired size.\n+169 if (c.size()==0)\n+170 DUNE_THROW(RangeError, \"The vector entry v[\" << prefix << \"] should refer\n+to a \"\n+171 << \"scalar coefficient, but is a dynamically sized vector of size==0\");\n+172 else\n+173 // Accept non-zero sized coefficients to avoid that resize(basis)\n+174 // fails for a vector that works with operator[] and already\n+175 // has the appropriate size.\n+176 return;\n+177 }\n+178 c.resize(size);\n+179 prefix.push_back(0);\n+180 for(std::size_t i=0; i::value, int> = 0,\n+189 std::enable_if_t::value, int> = 0>\n+190 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+191 {\n+192 auto size = sizeProvider.size(prefix);\n+193 // If size == 0 there's nothing to do:\n+194 // We can't resize c and it's already\n+195 // large enough anyway.\n+196 if (size == 0)\n+197 return;\n+198\n+199 // If size>0 but c does not have the appropriate\n+200 // size we throw an exception.\n+201 //\n+202 // We could perhaps also allow c.size()>size.\n+203 // But then looping the loop below gets complicated:\n+204 // We're not allowed to loop until c.size(). But\n+205 // we also cannot use size for termination,\n+206 // because this fails if c is a static vector.\n+207 if (c.size() != size)\n+208 DUNE_THROW(RangeError, \"Can't resize non-resizable entry v[\" << prefix <<\n+\"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n+209\n+210 // Recursively resize all entries of c now.\n+211 using namespace Dune::Hybrid;\n+212 prefix.push_back(0);\n+213 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n+214 prefix.back() = i;\n+215 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);\n+216 // but even gcc-7 does not except this bus reports\n+217 // \"error: \u00e2\u0080\u0098this\u00e2\u0080\u0099 was not captured for this lambda function\"\n+218 // although there's no 'this' because we're in a static method.\n+219 // Bypassing this by and additional method that does perfect\n+220 // forwarding allows to workaround this.\n+221 ISTLVectorBackend::forwardToResize(c[i], sizeProvider, prefix);\n+222 });\n+223 }\n+224\n+225 template::value, int> = 0,\n+227 std::enable_if_t::value, int> = 0>\n+228 static void resize(C&&, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+229 {\n+230 auto size = sizeProvider.size(prefix);\n+231 if (size != 0)\n+232 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n+\"] to size(\" << prefix << \")=\" << size);\n+233 }\n+234\n+235 template, int> = 0>\n+237 void recursiveAssign(C& c, const T& t)\n+238 {\n+239 c = t;\n+240 }\n+241\n+242 template, int> = 0>\n+244 void recursiveAssign(C& c, const T& t)\n+245 {\n+246 Dune::Hybrid::forEach(c, [&](auto&& ci) {\n+247 recursiveAssign(ci, t);\n+248 });\n+249 }\n+250\n+251public:\n+252\n+253 using _\bV_\be_\bc_\bt_\bo_\br = V;\n+254\n+255 ISTLVectorBackend(Vector& vector) :\n+256 vector_(&vector)\n+257 {}\n+258\n+259 template\n+260 void resize(const SizeProvider& sizeProvider)\n+261 {\n+262 auto prefix = typename SizeProvider::SizePrefix();\n+263 prefix.resize(0);\n+264 resize(*vector_, sizeProvider, prefix);\n+265 }\n+266\n+267 template\n+268 decltype(auto) operator[](const MultiIndex& index) const\n+269 {\n+270 return _\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(*vector_, index);\n+271 }\n+272\n+273 template\n+274 decltype(auto) operator[](const MultiIndex& index)\n+275 {\n+276 return _\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(*vector_, index);\n+277 }\n+278\n+287 template\n+288 void operator= (const T& other)\n+289 {\n+290 recursiveAssign(vector(), other);\n+291 }\n+292\n+293 template\n+294 void operator= (const ISTLVectorBackend& other)\n+295 {\n+296 vector() = other.vector();\n+297 }\n+298\n+299 const _\bV_\be_\bc_\bt_\bo_\br& vector() const\n+300 {\n+301 return *vector_;\n+302 }\n+303\n+304 _\bV_\be_\bc_\bt_\bo_\br& vector()\n+305 {\n+306 return *vector_;\n+307 }\n+308\n+309private:\n+310\n+311 _\bV_\be_\bc_\bt_\bo_\br* vector_;\n+312};\n+313\n+314} // end namespace Impl\n+315\n+316\n+317\n+349template\n+_\b3_\b5_\b0auto _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(Vector& v)\n+351{\n+352 static_assert(hasUniqueFieldType(), \"Vector type passed to\n+istlVectorBackend() does not have a unique field type.\");\n+353 return Impl::ISTLVectorBackend(v);\n+354}\n+355\n+356\n+357\n+387template\n+_\b3_\b8_\b8auto _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(const Vector& v)\n+389{\n+390 static_assert(hasUniqueFieldType(), \"Vector type passed to\n+istlVectorBackend() does not have a unique field type.\");\n+391 return Impl::ISTLVectorBackend(v);\n+392}\n+393\n+394\n+395\n+396} // namespace Functions\n+397} // namespace Dune\n+398\n+399\n+400#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n+_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd\n+auto istlVectorBackend(Vector &v)\n+Return a vector backend wrapping non-const ISTL like containers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn istlvectorbackend.hh:350\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n+&multiIndex, const IsFinal &isFinal)\n+Provide multi-index access by chaining operator[].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:377\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n-Dummy range class to be used if no proper type is available.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Default implementation for derivative traits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:41\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-InvalidRange Range\n-Range of derivative for function with given signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:43\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bd_\bo_\bu_\bb_\bl_\be_\b(_\bd_\bo_\bu_\bb_\bl_\be_\b)_\b _\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-double Range\n-Range of derivative for function with given signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bK_\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b)_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-FieldVector< K, n > Range\n-Range of derivative for function with given signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bm_\b _\b>_\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn\n-_\b>_\b)_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-FieldMatrix< K, m, n > Range\n-Range of derivative for function with given signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:90\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\b1_\b,_\b _\bm_\b _\b>_\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<\n-_\bK_\b,_\b _\bn_\b _\b>_\b)_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-FieldMatrix< K, m, n > Range\n-Range of derivative for function with given signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:106\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs\n+constexpr auto fieldTypes()\n+Generate list of field types in container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn istlvectorbackend.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bF_\bi_\be_\bl_\bd_\bT_\by_\bp_\be\n+constexpr bool hasUniqueFieldType()\n+Check if container has a unique field type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn istlvectorbackend.hh:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< Child > Vector\n+Descriptor for vectors with all children of the same type and dynamic size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:124\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: reserveddeque.hh File Reference\n+dune-functions: defaultderivativetraits.hh File Reference\n \n \n \n \n \n \n \n@@ -71,69 +71,53 @@\n \n \n \n
    \n \n-
    reserveddeque.hh File Reference
    \n+Namespaces
    \n+
    defaultderivativetraits.hh File Reference
    \n \n
    \n-\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+
    #include <type_traits>
    \n+#include <utility>
    \n+#include <dune/common/fvector.hh>
    \n+#include <dune/common/fmatrix.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::ReservedDeque< T, n >
     A double-ended queue (deque) class with statically reserved memory. More...
    class  Dune::Functions::InvalidRange
     Dummy range class to be used if no proper type is available. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< Signature >
     Default implementation for derivative traits. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< double(double) >
     Default implementation for derivative traits. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)>
     Default implementation for derivative traits. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)>
     Default implementation for derivative traits. More...
     
    struct  Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)>
     Default implementation for derivative traits. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\n-\n-\n

    \n-Macros

    #define CHECKSIZE(X)   {}
     
    \n-

    Detailed Description

    \n-

    An stl-compliant double-ended queue which stores everything on the stack.

    \n-

    Macro Definition Documentation

    \n-\n-

    ◆ CHECKSIZE

    \n-\n-
    \n-
    \n- \n- \n- \n- \n- \n- \n- \n- \n-
    #define CHECKSIZE( X)   {}
    \n-
    \n-\n-
    \n-
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,42 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n-reserveddeque.hh File Reference\n-An stl-compliant double-ended queue which stores everything on the stack.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+defaultderivativetraits.hh File Reference\n+#include \n+#include \n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b<_\b _\bT_\b,_\b _\bn_\b _\b>\n-\u00a0 A double-ended queue (deque) class with statically reserved memory.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n+\u00a0 Dummy range class to be used if no proper type is available. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b _\b>\n+\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bd_\bo_\bu_\bb_\bl_\be_\b(_\bd_\bo_\bu_\bb_\bl_\be_\b)_\b _\b>\n+\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bK_\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b)_\b>\n+\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bm_\b _\b>\n+ _\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b)_\b>\n+\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\b1_\b,_\b _\bm_\b _\b>\n+ _\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b)_\b>\n+\u00a0 Default implementation for derivative traits. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(X)\u00a0\u00a0\u00a0{}\n-\u00a0\n-*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-An stl-compliant double-ended queue which stores everything on the stack.\n-*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0C\bCH\bHE\bEC\bCK\bKS\bSI\bIZ\bZE\bE *\b**\b**\b**\b**\b*\n-#define CHECKSIZE ( \u00a0 X ) \u00a0\u00a0\u00a0{}\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: reserveddeque.hh Source File\n+dune-functions: defaultderivativetraits.hh Source File\n \n \n \n \n \n \n \n@@ -74,281 +74,97 @@\n \n \n
    \n
    \n-
    reserveddeque.hh
    \n+
    defaultderivativetraits.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n
    9
    \n-
    14#include <algorithm>
    \n-
    15#include <iostream>
    \n-
    16#include <cstddef>
    \n-
    17#include <initializer_list>
    \n+
    10#include <type_traits>
    \n+
    11#include <utility>
    \n+
    12
    \n+
    13#include <dune/common/fvector.hh>
    \n+
    14#include <dune/common/fmatrix.hh>
    \n+
    15
    \n+
    16namespace Dune {
    \n+
    17namespace Functions {
    \n
    18
    \n-
    19#include <dune/common/genericiterator.hh>
    \n+
    19
    \n
    20
    \n-
    21#ifdef CHECK_RESERVEDDEQUE
    \n-
    22#define CHECKSIZE(X) assert(X)
    \n-
    23#else
    \n-
    24#define CHECKSIZE(X) {}
    \n-
    25#endif
    \n-
    26
    \n-
    27namespace Dune {
    \n-
    28namespace Functions {
    \n-
    29
    \n-
    47 template<class T, int n>
    \n-
    \n-\n-
    49 {
    \n-
    50 public:
    \n-
    51
    \n-
    55 typedef T value_type;
    \n-
    57 typedef T* pointer;
    \n-
    59 typedef T& reference;
    \n-
    61 typedef const T& const_reference;
    \n-
    63 typedef size_t size_type;
    \n-
    65 typedef std::ptrdiff_t difference_type;
    \n-
    67 typedef Dune::GenericIterator<ReservedDeque, value_type> iterator;
    \n-
    69 typedef Dune::GenericIterator<const ReservedDeque, const value_type> const_iterator;
    \n-
    70
    \n-
    \n-\n-
    77 size_(0),
    \n-
    78 first_(0)
    \n-
    79 {}
    \n-
    \n-
    80
    \n-
    \n-
    81 ReservedDeque(std::initializer_list<T> const &l)
    \n-
    82 {
    \n-
    83 assert(l.size() <= n);// Actually, this is not needed any more!
    \n-
    84 size_ = l.size();
    \n-
    85 std::copy_n(l.begin(), size_, data_);
    \n-
    86 }
    \n-
    \n-
    87
    \n-
    \n-
    93 void clear()
    \n-
    94 {
    \n-
    95 first_ = 0;
    \n-
    96 size_ = 0;
    \n-
    97 }
    \n-
    \n-
    98
    \n-
    \n-
    100 void resize(size_t s)
    \n-
    101 {
    \n-
    102 CHECKSIZE(s<=n);
    \n-
    103 size_ = s;
    \n-
    104 }
    \n-
    \n-
    105
    \n-
    \n-
    107 void push_back(const T& t)
    \n-
    108 {
    \n-
    109 CHECKSIZE(size_<n);
    \n-
    110 data_[size_++ % n] = t;
    \n-
    111 }
    \n+
    \n+\n+
    27{};
    \n
    \n+
    28
    \n+
    29
    \n+
    39template<class Signature>
    \n+
    \n+\n+
    41{
    \n+\n+
    44};
    \n+
    \n+
    45
    \n+
    46
    \n+
    54template<>
    \n+
    \n+
    55struct DefaultDerivativeTraits< double(double) >
    \n+
    56{
    \n+
    58 typedef double Range;
    \n+
    59};
    \n+
    \n+
    60
    \n+
    70template<typename K, int n>
    \n+
    \n+
    71struct DefaultDerivativeTraits<K(FieldVector<K,n>)>
    \n+
    72{
    \n+
    74 typedef FieldVector<K,n> Range;
    \n+
    75};
    \n+
    \n+
    76
    \n+
    86template<typename K, int n, int m>
    \n+
    \n+
    87struct DefaultDerivativeTraits<FieldVector<K,m>(FieldVector<K,n>)>
    \n+
    88{
    \n+
    90 typedef FieldMatrix<K,m,n> Range;
    \n+
    91};
    \n+
    \n+
    92
    \n+
    102template<typename K, int n, int m>
    \n+
    \n+
    103struct DefaultDerivativeTraits<FieldMatrix<K,1,m>(FieldVector<K,n>)>
    \n+
    104{
    \n+
    106 typedef FieldMatrix<K,m,n> Range;
    \n+
    107};
    \n+
    \n+
    108
    \n+
    109
    \n+
    110}} // namespace Dune::Functions
    \n+
    111
    \n
    112
    \n-
    \n-
    114 void push_front(const T& t)
    \n-
    115 {
    \n-
    116 CHECKSIZE(size_<n);
    \n-
    117 ++size_;
    \n-
    118 first_ = (first_+(n-1)) % n;
    \n-
    119 data_[first_] = t;
    \n-
    120 }
    \n-
    \n-
    121
    \n-
    \n-
    123 void pop_back()
    \n-
    124 {
    \n-
    125 if (! empty())
    \n-
    126 size_--;
    \n-
    127 }
    \n-
    \n-
    128
    \n-
    \n-\n-
    131 {
    \n-
    132 if (! empty())
    \n-
    133 {
    \n-
    134 size_--;
    \n-
    135 first_ = (++first_) % n;
    \n-
    136 }
    \n-
    137 }
    \n-
    \n-
    138
    \n-
    \n-\n-
    141 return iterator(*this, 0);
    \n-
    142 }
    \n-
    \n-
    143
    \n-
    \n-\n-
    146 return const_iterator(*this, 0);
    \n-
    147 }
    \n-
    \n-
    148
    \n-
    \n-\n-
    151 return iterator(*this, size_);
    \n-
    152 }
    \n-
    \n-
    153
    \n-
    \n-\n-
    156 return const_iterator(*this, size_);
    \n-
    157 }
    \n-
    \n-
    158
    \n-
    \n-\n-
    161 {
    \n-
    162 CHECKSIZE(size_>i);
    \n-
    163 return data_[(first_ + i) % n];
    \n-
    164 }
    \n-
    \n-
    165
    \n-
    \n-\n-
    168 {
    \n-
    169 CHECKSIZE(size_>i);
    \n-
    170 return data_[(first_ + i) % n];
    \n-
    171 }
    \n-
    \n-
    172
    \n-
    \n-\n-
    175 {
    \n-
    176 CHECKSIZE(size_>0);
    \n-
    177 return data_[first_];
    \n-
    178 }
    \n-
    \n-
    179
    \n-
    \n-\n-
    182 {
    \n-
    183 CHECKSIZE(size_>0);
    \n-
    184 return data_[first_];
    \n-
    185 }
    \n-
    \n-
    186
    \n-
    \n-\n-
    189 {
    \n-
    190 CHECKSIZE(size_>0);
    \n-
    191 return data_[(first_ + size_-1) % n];
    \n-
    192 }
    \n-
    \n-
    193
    \n-
    \n-\n-
    196 {
    \n-
    197 CHECKSIZE(size_>0);
    \n-
    198 return data_[(first_ + size_-1) % n];
    \n-
    199 }
    \n-
    \n-
    200
    \n-
    \n-\n-
    207 {
    \n-
    208 return size_;
    \n-
    209 }
    \n-
    \n-
    210
    \n-
    \n-
    212 bool empty() const
    \n-
    213 {
    \n-
    214 return size_==0;
    \n-
    215 }
    \n-
    \n-
    216
    \n-
    \n-
    218 static constexpr size_type capacity()
    \n-
    219 {
    \n-
    220 return n;
    \n-
    221 }
    \n-
    \n-
    222
    \n-
    \n-
    224 static constexpr size_type max_size()
    \n-
    225 {
    \n-
    226 return n;
    \n-
    227 }
    \n-
    \n-
    228
    \n-
    \n-
    232 friend std::ostream& operator<< (std::ostream& s, const ReservedDeque& v)
    \n-
    233 {
    \n-
    234 for (size_t i=0; i<v.size(); i++)
    \n-
    235 s << v[i] << " ";
    \n-
    236 return s;
    \n-
    237 }
    \n-
    \n-
    238
    \n-
    239 private:
    \n-
    240 T data_[n];
    \n-
    241 size_type first_;
    \n-
    242 size_type size_;
    \n-
    243 };
    \n-
    \n-
    244
    \n-
    245} // end namespace Functions
    \n-
    246} // end namespace Dune
    \n-
    247
    \n-
    248#undef CHECKSIZE
    \n-
    249
    \n-
    250#endif // DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n-
    #define CHECKSIZE(X)
    Definition reserveddeque.hh:24
    \n+
    113#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n
    Definition polynomial.hh:17
    \n-
    A double-ended queue (deque) class with statically reserved memory.
    Definition reserveddeque.hh:49
    \n-
    void pop_front()
    Erases the first element of the vector, O(1) time.
    Definition reserveddeque.hh:130
    \n-
    static constexpr size_type capacity()
    Returns current capacity (allocated memory) of the vector.
    Definition reserveddeque.hh:218
    \n-
    void clear()
    Erases all elements.
    Definition reserveddeque.hh:93
    \n-
    Dune::GenericIterator< ReservedDeque, value_type > iterator
    Iterator used to iterate through a vector.
    Definition reserveddeque.hh:67
    \n-
    T value_type
    The type of object, T, stored in the vector.
    Definition reserveddeque.hh:55
    \n-
    ReservedDeque()
    Constructor.
    Definition reserveddeque.hh:76
    \n-
    bool empty() const
    Returns true if vector has no elements.
    Definition reserveddeque.hh:212
    \n-
    const_reference back() const
    Returns const reference to last element of vector.
    Definition reserveddeque.hh:195
    \n-
    friend std::ostream & operator<<(std::ostream &s, const ReservedDeque &v)
    Send ReservedDeque to an output stream.
    Definition reserveddeque.hh:232
    \n-
    void push_front(const T &t)
    Prepends an element to the begin of a deque if size<capacity, O(1) time.
    Definition reserveddeque.hh:114
    \n-
    reference operator[](size_type i)
    Returns reference to the i'th element.
    Definition reserveddeque.hh:160
    \n-
    reference front()
    Returns reference to first element of vector.
    Definition reserveddeque.hh:174
    \n-
    T * pointer
    Pointer to T.
    Definition reserveddeque.hh:57
    \n-
    const_reference front() const
    Returns const reference to first element of vector.
    Definition reserveddeque.hh:181
    \n-
    iterator end()
    Returns an iterator pointing to the end of the vector.
    Definition reserveddeque.hh:150
    \n-
    reference back()
    Returns reference to last element of vector.
    Definition reserveddeque.hh:188
    \n-
    void pop_back()
    Erases the last element of the vector, O(1) time.
    Definition reserveddeque.hh:123
    \n-
    const T & const_reference
    Const reference to T.
    Definition reserveddeque.hh:61
    \n-
    static constexpr size_type max_size()
    Returns the maximum length of the vector.
    Definition reserveddeque.hh:224
    \n-
    std::ptrdiff_t difference_type
    A signed integral type.
    Definition reserveddeque.hh:65
    \n-
    T & reference
    Reference to T.
    Definition reserveddeque.hh:59
    \n-
    Dune::GenericIterator< const ReservedDeque, const value_type > const_iterator
    Const iterator used to iterate through a vector.
    Definition reserveddeque.hh:69
    \n-
    size_type size() const
    Returns number of elements in the vector.
    Definition reserveddeque.hh:206
    \n-
    const_iterator end() const
    Returns a const_iterator pointing to the end of the vector.
    Definition reserveddeque.hh:155
    \n-
    void resize(size_t s)
    Specifies a new size for the vector.
    Definition reserveddeque.hh:100
    \n-
    iterator begin()
    Returns a iterator pointing to the beginning of the vector.
    Definition reserveddeque.hh:140
    \n-
    const_iterator begin() const
    Returns a const_iterator pointing to the beginning of the vector.
    Definition reserveddeque.hh:145
    \n-
    ReservedDeque(std::initializer_list< T > const &l)
    Definition reserveddeque.hh:81
    \n-
    size_t size_type
    An unsigned integral type.
    Definition reserveddeque.hh:63
    \n-
    void push_back(const T &t)
    Appends an element to the end of a vector, up to the maximum size n, O(1) time.
    Definition reserveddeque.hh:107
    \n+
    Dummy range class to be used if no proper type is available.
    Definition defaultderivativetraits.hh:27
    \n+
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:41
    \n+
    InvalidRange Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:43
    \n+
    double Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:58
    \n+
    FieldVector< K, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:74
    \n+
    FieldMatrix< K, m, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:90
    \n+
    FieldMatrix< K, m, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:106
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,324 +1,103 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-reserveddeque.hh\n+defaultderivativetraits.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n-8#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+8#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n 9\n-14#include \n-15#include \n-16#include \n-17#include \n+10#include \n+11#include \n+12\n+13#include \n+14#include \n+15\n+16namespace _\bD_\bu_\bn_\be {\n+17namespace Functions {\n 18\n-19#include \n+19\n 20\n-21#ifdef CHECK_RESERVEDDEQUE\n-22#define CHECKSIZE(X) assert(X)\n-23#else\n-_\b2_\b4#define CHECKSIZE(X) {}\n-25#endif\n-26\n-27namespace _\bD_\bu_\bn_\be {\n-28namespace Functions {\n+_\b2_\b6class _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n+27{};\n+28\n 29\n-47 template\n-_\b4_\b8 class _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be\n-49 {\n-50 public:\n-51\n-_\b5_\b5 typedef T _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-_\b5_\b7 typedef T* _\bp_\bo_\bi_\bn_\bt_\be_\br;\n-_\b5_\b9 typedef T& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b6_\b1 typedef const T& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b6_\b3 typedef size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-_\b6_\b5 typedef std::ptrdiff_t _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be;\n-_\b6_\b7 typedef Dune::GenericIterator _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b6_\b9 typedef Dune::GenericIterator\n-_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-70\n-_\b7_\b6 _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be() :\n-77 size_(0),\n-78 first_(0)\n-79 {}\n-80\n-_\b8_\b1 _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be(std::initializer_list const &l)\n-82 {\n-83 assert(l.size() <= n);// Actually, this is not needed any more!\n-84 size_ = l.size();\n-85 std::copy_n(l.begin(), size_, data_);\n-86 }\n-87\n-_\b9_\b3 void _\bc_\bl_\be_\ba_\br()\n-94 {\n-95 first_ = 0;\n-96 size_ = 0;\n-97 }\n-98\n-_\b1_\b0_\b0 void _\br_\be_\bs_\bi_\bz_\be(size_t s)\n-101 {\n-102 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(s<=n);\n-103 size_ = s;\n-104 }\n-105\n-_\b1_\b0_\b7 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const T& t)\n-108 {\n-109 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_\n+_\b4_\b0struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+41{\n+_\b4_\b3 typedef _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be _\bR_\ba_\bn_\bg_\be;\n+44};\n+45\n+46\n+54template<>\n+_\b5_\b5struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs< double(double) >\n+56{\n+_\b5_\b8 typedef double _\bR_\ba_\bn_\bg_\be;\n+59};\n+60\n+70template\n+_\b7_\b1struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs)>\n+72{\n+_\b7_\b4 typedef FieldVector _\bR_\ba_\bn_\bg_\be;\n+75};\n+76\n+86template\n+_\b8_\b7struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs(FieldVector)>\n+88{\n+_\b9_\b0 typedef FieldMatrix _\bR_\ba_\bn_\bg_\be;\n+91};\n+92\n+102template\n+_\b1_\b0_\b3struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs(FieldVector)>\n+104{\n+_\b1_\b0_\b6 typedef FieldMatrix _\bR_\ba_\bn_\bg_\be;\n+107};\n+108\n+109\n+110}} // namespace Dune::Functions\n+111\n 112\n-_\b1_\b1_\b4 void _\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt(const T& t)\n-115 {\n-116 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_i);\n-163 return data_[(first_ + i) % n];\n-164 }\n-165\n-_\b1_\b6_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n-168 {\n-169 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>i);\n-170 return data_[(first_ + i) % n];\n-171 }\n-172\n-_\b1_\b7_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt()\n-175 {\n-176 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n-177 return data_[first_];\n-178 }\n-179\n-_\b1_\b8_\b1 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt() const\n-182 {\n-183 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n-184 return data_[first_];\n-185 }\n-186\n-_\b1_\b8_\b8 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk()\n-189 {\n-190 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n-191 return data_[(first_ + size_-1) % n];\n-192 }\n-193\n-_\b1_\b9_\b5 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() const\n-196 {\n-197 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n-198 return data_[(first_ + size_-1) % n];\n-199 }\n-200\n-_\b2_\b0_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be () const\n-207 {\n-208 return size_;\n-209 }\n-210\n-_\b2_\b1_\b2 bool _\be_\bm_\bp_\bt_\by() const\n-213 {\n-214 return size_==0;\n-215 }\n-216\n-_\b2_\b1_\b8 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by()\n-219 {\n-220 return n;\n-221 }\n-222\n-_\b2_\b2_\b4 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be()\n-225 {\n-226 return n;\n-227 }\n-228\n-_\b2_\b3_\b2 friend std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b (std::ostream& s, const _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be& v)\n-233 {\n-234 for (size_t i=0; i iterator\n-Iterator used to iterate through a vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-T value_type\n-The type of object, T, stored in the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:55\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be\n-ReservedDeque()\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:76\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-Returns true if vector has no elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:212\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bb_\ba_\bc_\bk\n-const_reference back() const\n-Returns const reference to last element of vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:195\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-friend std::ostream & operator<<(std::ostream &s, const ReservedDeque &v)\n-Send ReservedDeque to an output stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:232\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt\n-void push_front(const T &t)\n-Prepends an element to the begin of a deque if size const_iterator\n-Const iterator used to iterate through a vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:69\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Returns number of elements in the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:206\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-Returns a const_iterator pointing to the end of the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:155\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n-void resize(size_t s)\n-Specifies a new size for the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin()\n-Returns a iterator pointing to the beginning of the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:140\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Returns a const_iterator pointing to the beginning of the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:145\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be\n-ReservedDeque(std::initializer_list< T > const &l)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:81\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-size_t size_type\n-An unsigned integral type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:63\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:107\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n+Dummy range class to be used if no proper type is available.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:27\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+Default implementation for derivative traits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:41\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+InvalidRange Range\n+Range of derivative for function with given signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:43\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bd_\bo_\bu_\bb_\bl_\be_\b(_\bd_\bo_\bu_\bb_\bl_\be_\b)_\b _\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+double Range\n+Range of derivative for function with given signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bK_\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b)_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+FieldVector< K, n > Range\n+Range of derivative for function with given signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bm_\b _\b>_\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn\n+_\b>_\b)_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+FieldMatrix< K, m, n > Range\n+Range of derivative for function with given signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:90\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\b1_\b,_\b _\bm_\b _\b>_\b(_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<\n+_\bK_\b,_\b _\bn_\b _\b>_\b)_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+FieldMatrix< K, m, n > Range\n+Range of derivative for function with given signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:106\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: localfunction.hh File Reference\n+dune-functions: differentiablefunction.hh File Reference\n \n \n \n \n \n \n \n@@ -72,33 +72,34 @@\n
  • dune
  • functions
  • common
  • \n
    \n \n
    \n \n-
    localfunction.hh File Reference
    \n+
    differentiablefunction.hh File Reference
    \n
    \n
    \n \n

    Go to the source code of this file.

    \n \n \n-\n+\n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::LocalFunction< Signature, LocalContext, DerivativeTraits, bufferSize >
    class  Dune::Functions::DifferentiableFunction< Signature, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >
     Class storing local functions using type erasure. More...
    class  Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >
     Class storing differentiable functions using type erasure. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,30 +2,31 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-localfunction.hh File Reference\n+differentiablefunction.hh File Reference\n #include \n #include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,\n- _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+ _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0 Class storing local functions using type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0 Class storing differentiable functions using type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n ===============================================================================\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 \n \n \n \n \n \n \n-dune-functions: localfunction.hh Source File\n+dune-functions: differentiablefunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,173 +74,141 @@\n \n \n \n
    \n-
    localfunction.hh
    \n+
    differentiablefunction.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH
    \n
    9
    \n
    10#include <type_traits>
    \n
    11
    \n
    12#include <dune/common/typeutilities.hh>
    \n
    13
    \n-\n-\n-\n-\n-\n-
    19
    \n+\n+\n+\n+\n+\n+\n
    20
    \n-
    21
    \n-
    22namespace Dune {
    \n-
    23namespace Functions {
    \n+
    21namespace Dune {
    \n+
    22namespace Functions {
    \n+
    23
    \n
    24
    \n
    25
    \n-
    26
    \n-
    27/*
    \n-
    28 * Default implementation is empty
    \n-
    29 * The actual implementation is only given if Signature is an type
    \n-
    30 * describing a function signature as Range(Domain).
    \n-
    31 */
    \n-
    32template<class Signature, class LocalContext, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n-
    \n-\n-
    34{};
    \n+
    26/*
    \n+
    27 * Default implementation is empty
    \n+
    28 * The actual implementation is only given if Signature is an type
    \n+
    29 * describing a function signature as Range(Domain).
    \n+
    30 */
    \n+
    31template<class Signature, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n+
    \n+\n+
    33{};
    \n
    \n+
    34
    \n
    35
    \n
    36
    \n-
    37
    \n-
    38namespace Imp
    \n-
    39{
    \n-
    40
    \n-
    42 template<class S, class L, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    43 struct LocalFunctionTraits :
    \n-
    44 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>
    \n-
    45 {
    \n-
    46 protected:
    \n-
    47 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;
    \n-
    48
    \n-
    49 public:
    \n-
    51 using LocalContext = L;
    \n+
    37namespace Imp
    \n+
    38{
    \n+
    39
    \n+
    41 template<class S, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    42 struct DifferentiableFunctionTraits
    \n+
    43 {
    \n+
    45 using Signature = S;
    \n+
    46
    \n+
    48 using Range = typename SignatureTraits<Signature>::Range;
    \n+
    49
    \n+
    51 using Domain = typename SignatureTraits<Signature>::Domain;
    \n
    52
    \n-
    54 using DerivativeSignature = typename Base::DerivativeSignature;
    \n+
    54 using DerivativeSignature = typename SignatureTraits<Signature>::template DerivativeSignature<DerivativeTraits>;
    \n
    55
    \n-\n+\n
    58
    \n-
    60 using Concept = LocalFunctionWrapperInterface<S, DerivativeInterface, L>;
    \n+
    60 using Concept = DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>;
    \n
    61
    \n
    63 template<class B>
    \n-
    64 using Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L, B>;
    \n+
    64 using Model = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n
    65 };
    \n
    66}
    \n
    67
    \n
    68
    \n
    69
    \n-
    90template<class Range, class Domain, class LocalContext, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    \n-
    91class LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize> :
    \n-
    92 public TypeErasureBase<
    \n-
    93 typename Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::Concept,
    \n-
    94 Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::template Model>
    \n-
    95{
    \n-
    96 using Traits = Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>;
    \n+
    84template<class Range, class Domain, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    \n+
    85class DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize> :
    \n+
    86 public TypeErasureBase<
    \n+
    87 typename Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::Concept,
    \n+
    88 Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::template Model>
    \n+
    89{
    \n+
    90 using Traits = Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>;
    \n+
    91
    \n+\n+
    93
    \n+
    94 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n+
    95
    \n+
    96public:
    \n
    97
    \n-\n-
    99
    \n-
    100 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n-
    101
    \n-
    102public:
    \n-
    103
    \n-
    115 template<class F, disableCopyMove<LocalFunction, F> = 0 >
    \n-
    \n-\n-
    117 Base(std::forward<F>(f))
    \n-
    118 {
    \n-
    119 static_assert(Dune::Functions::Concept::isLocalFunction<F, Range(Domain), LocalContext>(), "Trying to construct a LocalFunction from type that does not model the LocalFunction concept");
    \n-
    120 }
    \n-
    \n-
    121
    \n-
    122 LocalFunction() = default;
    \n-
    123
    \n-
    \n-
    127 Range operator() (const Domain& x) const
    \n-
    128 {
    \n-
    129 return this->asInterface().operator()(x);
    \n-
    130 }
    \n-
    \n-
    131
    \n-
    \n-
    139 friend DerivativeInterface derivative(const LocalFunction& t)
    \n-
    140 {
    \n-
    141 return t.asInterface().derivative();
    \n-
    142 }
    \n-
    \n+
    109 template<class F, disableCopyMove<DifferentiableFunction, F> = 0 >
    \n+
    \n+\n+
    111 Base(std::forward<F>(f))
    \n+
    112 {
    \n+
    113 static_assert(Dune::Functions::Concept::isFunction<F, Range(Domain)>(), "Trying to construct a DifferentiableFunction from type that does not model the Function concept");
    \n+
    114 }
    \n+
    \n+
    115
    \n+\n+
    118
    \n+
    \n+
    122 Range operator() (const Domain& x) const
    \n+
    123 {
    \n+
    124 return this->asInterface().operator()(x);
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    \n+
    134 friend DerivativeInterface derivative(const DifferentiableFunction& t)
    \n+
    135 {
    \n+
    136 return t.asInterface().derivative();
    \n+
    137 }
    \n+
    \n+
    138};
    \n+
    \n+
    139
    \n+
    140
    \n+
    141
    \n+
    142}} // namespace Dune::Functions
    \n
    143
    \n-
    \n-
    150 void bind(const LocalContext& context)
    \n-
    151 {
    \n-
    152 this->asInterface().bind(context);
    \n-
    153 }
    \n-
    \n-
    154
    \n-
    \n-
    158 void unbind()
    \n-
    159 {
    \n-
    160 this->asInterface().unbind();
    \n-
    161 }
    \n-
    \n-
    162
    \n-
    \n-
    165 bool bound() const
    \n-
    166 {
    \n-
    167 return this->asInterface().bound();
    \n-
    168 }
    \n-
    \n-
    169
    \n-
    \n-
    173 const LocalContext& localContext() const
    \n-
    174 {
    \n-
    175 return this->asInterface().localContext();
    \n-
    176 }
    \n-
    \n-
    177};
    \n-
    \n-
    178
    \n-
    179
    \n-
    180
    \n-
    181}} // namespace Dune::Functions
    \n-
    182
    \n-
    183
    \n-
    184
    \n-
    185#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n-\n-\n-\n-\n-\n-
    friend DerivativeInterface derivative(const LocalFunction &t)
    Get derivative of wrapped function.
    Definition localfunction.hh:139
    \n+
    144
    \n+
    145
    \n+
    146#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH
    \n+\n+\n+\n+\n+\n+\n+
    friend DerivativeInterface derivative(const DifferentiableFunction &t)
    Get derivative of wrapped function.
    Definition differentiablefunction.hh:134
    \n
    Definition polynomial.hh:17
    \n-
    Definition localfunction.hh:34
    \n-
    const LocalContext & localContext() const
    Obtain local context this LocalFunction is bound to.
    Definition localfunction.hh:173
    \n-
    LocalFunction(F &&f)
    Construct from function.
    Definition localfunction.hh:116
    \n-
    void unbind()
    Unbind from local context.
    Definition localfunction.hh:158
    \n-
    bool bound() const
    Return if the local function is bound to a grid element.
    Definition localfunction.hh:165
    \n-
    void bind(const LocalContext &context)
    Bind function to a local context.
    Definition localfunction.hh:150
    \n-\n+
    Definition differentiablefunction.hh:33
    \n+
    DifferentiableFunction(F &&f)
    Construct from function.
    Definition differentiablefunction.hh:110
    \n+\n+
    Helper class to deduce the signature of a callable.
    Definition signature.hh:60
    \n
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:169
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,194 +1,157 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-localfunction.hh\n+differentiablefunction.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n-8#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n+8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n 9\n 10#include \n 11\n 12#include \n 13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-19\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n 20\n-21\n-22namespace _\bD_\bu_\bn_\be {\n-23namespace Functions {\n+21namespace _\bD_\bu_\bn_\be {\n+22namespace Functions {\n+23\n 24\n 25\n-26\n-27/*\n-28 * Default implementation is empty\n-29 * The actual implementation is only given if Signature is an type\n-30 * describing a function signature as Range(Domain).\n-31 */\n-32template class\n+26/*\n+27 * Default implementation is empty\n+28 * The actual implementation is only given if Signature is an type\n+29 * describing a function signature as Range(Domain).\n+30 */\n+31template class\n DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-_\b3_\b3class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-34{};\n+_\b3_\b2class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+33{};\n+34\n 35\n 36\n-37\n-38namespace Imp\n-39{\n-40\n-42 template class DerivativeTraits, size_t\n-bufferSize>\n-43 struct LocalFunctionTraits :\n-44 DifferentiableFunctionTraits\n-45 {\n-46 protected:\n-47 using Base=DifferentiableFunctionTraits;\n-48\n-49 public:\n-51 using LocalContext = L;\n+37namespace Imp\n+38{\n+39\n+41 template class DerivativeTraits, size_t bufferSize>\n+42 struct DifferentiableFunctionTraits\n+43 {\n+45 using Signature = S;\n+46\n+48 using Range = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n+49\n+51 using Domain = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n 52\n-54 using DerivativeSignature = typename Base::DerivativeSignature;\n+54 using DerivativeSignature = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n+DerivativeSignature;\n 55\n-57 using DerivativeInterface = _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bL_\b,\n+57 using DerivativeInterface = _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b>;\n 58\n-60 using Concept = LocalFunctionWrapperInterface;\n+60 using Concept = DifferentiableFunctionWrapperInterface;\n 61\n 63 template\n-64 using Model = LocalFunctionWrapperImplementation;\n+64 using Model = DifferentiableFunctionWrapperImplementation;\n 65 };\n 66}\n 67\n 68\n 69\n-90template class\n-DerivativeTraits, size_t bufferSize>\n-_\b9_\b1class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< Range(Domain), LocalContext, DerivativeTraits,\n-bufferSize> :\n-92 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n-93 typename Imp::LocalFunctionTraits::Concept,\n-94 Imp::LocalFunctionTraits class DerivativeTraits,\n+size_t bufferSize>\n+_\b8_\b5class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< Range(Domain), DerivativeTraits, bufferSize> :\n+86 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n+87 typename Imp::DifferentiableFunctionTraits::Concept,\n+88 Imp::DifferentiableFunctionTraits::template Model>\n-95{\n-96 using Traits = Imp::LocalFunctionTraits;\n-97\n-98 using _\bB_\ba_\bs_\be = _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n+91\n+92 using _\bB_\ba_\bs_\be = _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n _\bM_\bo_\bd_\be_\bl_\b>;\n-99\n-100 using DerivativeInterface = typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n-101\n-102public:\n-103\n-115 template = 0 >\n-_\b1_\b1_\b6 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n-117 _\bB_\ba_\bs_\be(std::forward(f))\n-118 {\n-119 static_assert(Dune::Functions::Concept::isLocalFunction(), \"Trying to construct a LocalFunction from type that does not\n-model the LocalFunction concept\");\n-120 }\n-121\n-_\b1_\b2_\b2 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n-123\n-_\b1_\b2_\b7 Range operator() (const Domain& x) const\n-128 {\n-129 return this->asInterface().operator()(x);\n-130 }\n-131\n-_\b1_\b3_\b9 friend DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-140 {\n-141 return t.asInterface().derivative();\n-142 }\n+93\n+94 using DerivativeInterface = typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n+95\n+96public:\n+97\n+109 template = 0 >\n+_\b1_\b1_\b0 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n+111 _\bB_\ba_\bs_\be(std::forward(f))\n+112 {\n+113 static_assert(Dune::Functions::Concept::isFunction(),\n+\"Trying to construct a DifferentiableFunction from type that does not model the\n+Function concept\");\n+114 }\n+115\n+_\b1_\b1_\b7 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n+118\n+_\b1_\b2_\b2 Range operator() (const Domain& x) const\n+123 {\n+124 return this->asInterface().operator()(x);\n+125 }\n+126\n+_\b1_\b3_\b4 friend DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n+135 {\n+136 return t.asInterface().derivative();\n+137 }\n+138};\n+139\n+140\n+141\n+142}} // namespace Dune::Functions\n 143\n-_\b1_\b5_\b0 void _\bb_\bi_\bn_\bd(const LocalContext& context)\n-151 {\n-152 this->asInterface().bind(context);\n-153 }\n-154\n-_\b1_\b5_\b8 void _\bu_\bn_\bb_\bi_\bn_\bd()\n-159 {\n-160 this->asInterface().unbind();\n-161 }\n-162\n-_\b1_\b6_\b5 bool _\bb_\bo_\bu_\bn_\bd() const\n-166 {\n-167 return this->asInterface().bound();\n-168 }\n-169\n-_\b1_\b7_\b3 const LocalContext& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt() const\n-174 {\n-175 return this->asInterface().localContext();\n-176 }\n-177};\n-178\n-179\n-180\n-181}} // namespace Dune::Functions\n-182\n-183\n-184\n-185#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+144\n+145\n+146#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh\n+_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n-_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n-_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend DerivativeInterface derivative(const LocalFunction &t)\n+friend DerivativeInterface derivative(const DifferentiableFunction &t)\n Get derivative of wrapped function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:139\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:134\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:34\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n-_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt\n-const LocalContext & localContext() const\n-Obtain local context this LocalFunction is bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:173\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n-_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-LocalFunction(F &&f)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:33\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+DifferentiableFunction(F &&f)\n Construct from function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:116\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n-_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bu_\bn_\bb_\bi_\bn_\bd\n-void unbind()\n-Unbind from local context.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:158\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n-_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bb_\bo_\bu_\bn_\bd\n-bool bound() const\n-Return if the local function is bound to a grid element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:165\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n-_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const LocalContext &context)\n-Bind function to a local context.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:150\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n-_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-LocalFunction()=default\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:110\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+DifferentiableFunction()=default\n+Default constructor.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n+Helper class to deduce the signature of a callable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:60\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n Base class for type-erased interface wrapper.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:169\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: overflowarray.hh File Reference\n+dune-functions: interfaces.hh File Reference\n \n \n \n \n \n \n \n@@ -72,30 +72,25 @@\n
  • dune
  • functions
  • common
  • \n
    \n \n
    \n \n-
    overflowarray.hh File Reference
    \n+
    interfaces.hh File Reference
    \n
    \n
    \n-
    #include <algorithm>
    \n-#include <iostream>
    \n-#include <cstddef>
    \n-#include <array>
    \n-#include <initializer_list>
    \n-#include <dune/common/genericiterator.hh>
    \n+
    #include <type_traits>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
    \n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::OverflowArray< BA, maxSize >
     A dynamically sized array-like class with overflow. More...
    class  Dune::Functions::PolymorphicType< Interface >
     Base class with polymorphic type boiler plate code. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,25 +2,20 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-overflowarray.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n+interfaces.hh File Reference\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b<_\b _\bB_\bA_\b,_\b _\bm_\ba_\bx_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0 A dynamically sized array-like class with overflow. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b<_\b _\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>\n+\u00a0 Base class with polymorphic type boiler plate code. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n ===============================================================================\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 \n \n \n \n \n \n \n-dune-functions: overflowarray.hh Source File\n+dune-functions: interfaces.hh Source File\n \n \n \n \n \n \n \n@@ -74,282 +74,64 @@\n \n \n \n
    \n-
    overflowarray.hh
    \n+
    interfaces.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n
    9
    \n-
    10#include <algorithm>
    \n-
    11#include <iostream>
    \n-
    12#include <cstddef>
    \n-
    13#include <array>
    \n-
    14#include <initializer_list>
    \n+
    10#include <type_traits>
    \n+
    11
    \n+
    12
    \n+
    13namespace Dune {
    \n+
    14namespace Functions {
    \n
    15
    \n-
    16#include <dune/common/genericiterator.hh>
    \n+
    16
    \n
    17
    \n-
    18
    \n-
    19
    \n-
    20namespace Dune::Functions {
    \n-
    21
    \n-
    22
    \n-
    46template<class BA, std::size_t maxSize = std::tuple_size_v<BA>>
    \n-
    \n-\n-
    48 public BA
    \n-
    49{
    \n-
    50 static constexpr std::size_t baseSize = std::tuple_size_v<BA>;
    \n-
    51
    \n-
    52public:
    \n-
    53 using BaseArray = BA;
    \n-
    54
    \n-
    55 using value_type = typename BaseArray::value_type;
    \n-\n-\n-\n-
    59 using difference_type = std::ptrdiff_t;
    \n-
    60 using size_type = std::size_t;
    \n-
    61 using iterator = Dune::GenericIterator<OverflowArray, value_type>;
    \n-
    62 using const_iterator = Dune::GenericIterator<const OverflowArray, const value_type>;
    \n-
    63
    \n-
    64private:
    \n-
    65 using OverflowBuffer = std::array<value_type, maxSize-baseSize>;
    \n-
    66
    \n-
    67public:
    \n+
    27template<class Interface>
    \n+
    \n+\n+
    29{
    \n+
    30public:
    \n+
    31
    \n+
    \n+\n+
    34 {}
    \n+
    \n+
    35
    \n+
    44 virtual Interface* clone() const = 0;
    \n+
    45
    \n+
    55 virtual Interface* clone(void* buffer) const = 0;
    \n+
    56
    \n+
    66 virtual Interface* move(void* buffer) = 0;
    \n+
    67};
    \n+
    \n
    68
    \n-
    69 OverflowArray() = default;
    \n+
    69
    \n
    70
    \n-
    \n-
    71 OverflowArray(const std::initializer_list<value_type>& l) {
    \n-
    72 assert(l.size() <= capacity());
    \n-
    73 size_ = l.size();
    \n-
    74 std::copy_n(l.begin(), size_, begin());
    \n-
    75 }
    \n-
    \n-
    76
    \n-
    \n-
    77 bool operator == (const OverflowArray& other) const {
    \n-
    78 if (size() != other.size())
    \n-
    79 return false;
    \n-
    80 for (size_type i=0; i<size(); ++i)
    \n-
    81 if ((*this)[i] != other[i])
    \n-
    82 return false;
    \n-
    83 return true;
    \n-
    84 }
    \n-
    \n-
    85
    \n-
    \n-
    87 void clear() {
    \n-
    88 size_ = 0;
    \n-
    89 }
    \n-
    \n-
    90
    \n-
    \n-
    97 void resize(size_type n) {
    \n-
    98 assert(n <= capacity());
    \n-
    99 size_ = n;
    \n-
    100 }
    \n-
    \n-
    101
    \n-
    \n-
    108 void push_back(const value_type& t) {
    \n-
    109 assert(size() < capacity());
    \n-
    110 (*this)[size_++] = t;
    \n-
    111 }
    \n-
    \n-
    112
    \n-
    \n-
    114 void pop_back() {
    \n-
    115 assert(size() > 0);
    \n-
    116 if (! empty())
    \n-
    117 size_--;
    \n-
    118 }
    \n-
    \n-
    119
    \n-
    \n-
    126 void push_front(const value_type& t) {
    \n-
    127 assert(size() < capacity());
    \n-
    128 for (size_type i=0; i<size(); i++)
    \n-
    129 (*this)[i+1] = (*this)[i];
    \n-
    130 (*this)[0] = t;
    \n-
    131 }
    \n-
    \n-
    132
    \n-
    \n-\n-
    135 return iterator(*this, 0);
    \n-
    136 }
    \n-
    \n-
    137
    \n-
    \n-\n-
    140 return const_iterator(*this, 0);
    \n-
    141 }
    \n-
    \n-
    142
    \n-
    \n-\n-
    145 return iterator(*this, size());
    \n-
    146 }
    \n-
    \n-
    147
    \n-
    \n-\n-
    150 return const_iterator(*this, size());
    \n-
    151 }
    \n-
    \n-
    152
    \n-
    \n-\n-
    155 assert(i < size());
    \n-
    156 // If there's no padding between the base class and the overflow_ member,
    \n-
    157 // the compiler should be able to optimize this to
    \n-
    158 // return *(&BaseArray::operator[](0) + i);
    \n-
    159 if (i<baseSize)
    \n-
    160 return BaseArray::operator[](i);
    \n-
    161 return overflow_[i-baseSize];
    \n-
    162 }
    \n-
    \n-
    163
    \n-
    \n-\n-
    166 assert(i < size());
    \n-
    167 // If there's no padding between the base class and the overflow_ member,
    \n-
    168 // the compiler should be able to optimize this to
    \n-
    169 // return *(&BaseArray::operator[](0) + i);
    \n-
    170 if (i<baseSize)
    \n-
    171 return BaseArray::operator[](i);
    \n-
    172 return overflow_[i-baseSize];
    \n-
    173 }
    \n-
    \n-
    174
    \n-
    \n-\n-
    177 assert(size() > 0);
    \n-
    178 return (*this)[0];
    \n-
    179 }
    \n-
    \n-
    180
    \n-
    \n-\n-
    183 assert(size() > 0);
    \n-
    184 return (*this)[0];
    \n-
    185 }
    \n-
    \n-
    186
    \n-
    \n-\n-
    189 assert(size() > 0);
    \n-
    190 return (*this)[size()-1];
    \n-
    191 }
    \n-
    \n-
    192
    \n-
    \n-\n-
    195 assert(size() > 0);
    \n-
    196 return (*this)[size()-1];
    \n-
    197 }
    \n-
    \n-
    198
    \n-
    \n-
    200 size_type size () const {
    \n-
    201 return size_;
    \n-
    202 }
    \n-
    \n-
    203
    \n-
    \n-
    205 bool empty() const {
    \n-
    206 return size() == 0;
    \n-
    207 }
    \n-
    \n-
    208
    \n-
    \n-
    210 static constexpr size_type capacity() {
    \n-
    211 return maxSize;
    \n-
    212 }
    \n-
    \n-
    213
    \n-
    \n-
    215 static constexpr size_type max_size() {
    \n-
    216 return maxSize;
    \n-
    217 }
    \n-
    \n-
    218
    \n-
    \n-
    220 inline friend std::size_t hash_value(const OverflowArray& v) noexcept {
    \n-
    221 return hash_range(v.begin(), v.end());
    \n-
    222 }
    \n-
    \n-
    223
    \n-
    \n-
    225 friend std::ostream& operator<< (std::ostream& s, const OverflowArray& c) {
    \n-
    226 for (const auto& ci : c)
    \n-
    227 s << ci << " ";
    \n-
    228 return s;
    \n-
    229 }
    \n-
    \n-
    230
    \n-
    231private:
    \n-
    232 OverflowBuffer overflow_;
    \n-
    233 size_type size_ = 0;
    \n-
    234};
    \n-
    \n-
    235
    \n-
    236
    \n-
    237
    \n-
    238} // namespace Dune::Functions
    \n-
    239
    \n-
    240
    \n-
    241
    \n-
    242#endif // DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n-
    Definition polynomial.hh:18
    \n-
    A dynamically sized array-like class with overflow.
    Definition overflowarray.hh:49
    \n-
    const value_type & const_reference
    Definition overflowarray.hh:57
    \n-
    value_type & reference
    Definition overflowarray.hh:56
    \n-
    const_iterator end() const
    Returns a const_iterator pointing to the end of the OverflowArray.
    Definition overflowarray.hh:149
    \n-
    bool operator==(const OverflowArray &other) const
    Definition overflowarray.hh:77
    \n-
    friend std::size_t hash_value(const OverflowArray &v) noexcept
    Compute hash value.
    Definition overflowarray.hh:220
    \n-
    void push_back(const value_type &t)
    Appends an element to the end of the OverflowArray,.
    Definition overflowarray.hh:108
    \n-
    friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)
    Write container to an output stream.
    Definition overflowarray.hh:225
    \n-
    iterator begin()
    Returns a iterator pointing to the beginning of the OverflowArray.
    Definition overflowarray.hh:134
    \n-
    bool empty() const
    Returns true if OverflowArray has no elements.
    Definition overflowarray.hh:205
    \n-
    size_type size() const
    Returns number of elements in the OverflowArray.
    Definition overflowarray.hh:200
    \n-
    typename BaseArray::value_type value_type
    Definition overflowarray.hh:55
    \n-
    void pop_back()
    Erases the last element of the OverflowArray, O(1) time.
    Definition overflowarray.hh:114
    \n-
    Dune::GenericIterator< OverflowArray, value_type > iterator
    Definition overflowarray.hh:61
    \n-
    const_iterator begin() const
    Returns a const_iterator pointing to the beginning of the OverflowArray.
    Definition overflowarray.hh:139
    \n-
    std::ptrdiff_t difference_type
    Definition overflowarray.hh:59
    \n-\n-
    BA BaseArray
    Definition overflowarray.hh:53
    \n-
    static constexpr size_type capacity()
    Returns the capacity of the OverflowArray.
    Definition overflowarray.hh:210
    \n-
    static constexpr size_type max_size()
    Returns the maximum length of the OverflowArray.
    Definition overflowarray.hh:215
    \n-
    const_reference front() const
    Returns const reference to first element of OverflowArray.
    Definition overflowarray.hh:182
    \n-
    void clear()
    Erases all elements.
    Definition overflowarray.hh:87
    \n-
    iterator end()
    Returns an iterator pointing to the end of the OverflowArray.
    Definition overflowarray.hh:144
    \n-
    std::size_t size_type
    Definition overflowarray.hh:60
    \n-
    void resize(size_type n)
    Specifies a new size for the OverflowArray.
    Definition overflowarray.hh:97
    \n-
    value_type * pointer
    Definition overflowarray.hh:58
    \n-
    Dune::GenericIterator< const OverflowArray, const value_type > const_iterator
    Definition overflowarray.hh:62
    \n-
    const_reference back() const
    Returns const reference to last element of OverflowArray.
    Definition overflowarray.hh:194
    \n-
    OverflowArray(const std::initializer_list< value_type > &l)
    Definition overflowarray.hh:71
    \n-
    reference back()
    Returns reference to last element of OverflowArray.
    Definition overflowarray.hh:188
    \n-
    void push_front(const value_type &t)
    Inserts an element to the begin of the OverflowArray,.
    Definition overflowarray.hh:126
    \n-
    reference front()
    Returns reference to first element of OverflowArray.
    Definition overflowarray.hh:176
    \n-
    reference operator[](size_type i)
    Returns reference to the i'th element.
    Definition overflowarray.hh:154
    \n+
    71}} // namespace Dune::Functions
    \n+
    72
    \n+
    73#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH
    \n+
    Definition polynomial.hh:17
    \n+
    Base class with polymorphic type boiler plate code.
    Definition interfaces.hh:29
    \n+
    virtual Interface * clone(void *buffer) const =0
    Clones the object into buffer.
    \n+
    virtual Interface * clone() const =0
    Clones the object.
    \n+
    virtual Interface * move(void *buffer)=0
    Move object into buffer.
    \n+
    virtual ~PolymorphicType()
    Destructor.
    Definition interfaces.hh:33
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,317 +1,68 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-overflowarray.hh\n+interfaces.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n-8#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n+8#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n 9\n-10#include \n-11#include \n-12#include \n-13#include \n-14#include \n+10#include \n+11\n+12\n+13namespace _\bD_\bu_\bn_\be {\n+14namespace Functions {\n 15\n-16#include \n+16\n 17\n-18\n-19\n-20namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n-21\n-22\n-46template>\n-_\b4_\b7class _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by :\n-48 public BA\n-49{\n-50 static constexpr std::size_t baseSize = std::tuple_size_v;\n-51\n-52public:\n-_\b5_\b3 using _\bB_\ba_\bs_\be_\bA_\br_\br_\ba_\by = BA;\n-54\n-_\b5_\b5 using _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be = typename BaseArray::value_type;\n-_\b5_\b6 using _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be&;\n-_\b5_\b7 using _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be&;\n-_\b5_\b8 using _\bp_\bo_\bi_\bn_\bt_\be_\br = _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be*;\n-_\b5_\b9 using _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be = std::ptrdiff_t;\n-_\b6_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b6_\b1 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br = Dune::GenericIterator;\n-_\b6_\b2 using _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br = Dune::GenericIterator;\n-63\n-64private:\n-65 using OverflowBuffer = std::array<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be, maxSize-baseSize>;\n-66\n-67public:\n+27template\n+_\b2_\b8class _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be\n+29{\n+30public:\n+31\n+_\b3_\b3 virtual _\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be()\n+34 {}\n+35\n+_\b4_\b4 virtual Interface* _\bc_\bl_\bo_\bn_\be() const = 0;\n+45\n+_\b5_\b5 virtual Interface* _\bc_\bl_\bo_\bn_\be(void* buffer) const = 0;\n+56\n+_\b6_\b6 virtual Interface* _\bm_\bo_\bv_\be(void* buffer) = 0;\n+67};\n 68\n-_\b6_\b9 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by() = default;\n+69\n 70\n-_\b7_\b1 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by(const std::initializer_list& l) {\n-72 assert(l.size() <= _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n-73 size_ = l.size();\n-74 std::copy_n(l.begin(), size_, _\bb_\be_\bg_\bi_\bn());\n-75 }\n-76\n-_\b7_\b7 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b=_\b=_\b (const _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by& other) const {\n-78 if (_\bs_\bi_\bz_\be() != other._\bs_\bi_\bz_\be())\n-79 return false;\n-80 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); ++i)\n-81 if ((*this)[i] != other[i])\n-82 return false;\n-83 return true;\n-84 }\n-85\n-_\b8_\b7 void _\bc_\bl_\be_\ba_\br() {\n-88 size_ = 0;\n-89 }\n-90\n-_\b9_\b7 void _\br_\be_\bs_\bi_\bz_\be(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n) {\n-98 assert(n <= _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n-99 size_ = n;\n-100 }\n-101\n-_\b1_\b0_\b8 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& t) {\n-109 assert(_\bs_\bi_\bz_\be() < _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n-110 (*this)[size_++] = t;\n-111 }\n-112\n-_\b1_\b1_\b4 void _\bp_\bo_\bp_\b__\bb_\ba_\bc_\bk() {\n-115 assert(_\bs_\bi_\bz_\be() > 0);\n-116 if (! _\be_\bm_\bp_\bt_\by())\n-117 size_--;\n-118 }\n-119\n-_\b1_\b2_\b6 void _\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt(const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& t) {\n-127 assert(_\bs_\bi_\bz_\be() < _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n-128 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n-129 (*this)[i+1] = (*this)[i];\n-130 (*this)[0] = t;\n-131 }\n-132\n-_\b1_\b3_\b4 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() {\n-135 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n-136 }\n-137\n-_\b1_\b3_\b9 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const {\n-140 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n-141 }\n-142\n-_\b1_\b4_\b4 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() {\n-145 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n-146 }\n-147\n-_\b1_\b4_\b9 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const {\n-150 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n-151 }\n-152\n-_\b1_\b5_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) {\n-155 assert(i < _\bs_\bi_\bz_\be());\n-156 // If there's no padding between the base class and the overflow_ member,\n-157 // the compiler should be able to optimize this to\n-158 // return *(&BaseArray::operator[](0) + i);\n-159 if (i 0);\n-178 return (*this)[0];\n-179 }\n-180\n-_\b1_\b8_\b2 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt() const {\n-183 assert(_\bs_\bi_\bz_\be() > 0);\n-184 return (*this)[0];\n-185 }\n-186\n-_\b1_\b8_\b8 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() {\n-189 assert(_\bs_\bi_\bz_\be() > 0);\n-190 return (*this)[_\bs_\bi_\bz_\be()-1];\n-191 }\n-192\n-_\b1_\b9_\b4 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() const {\n-195 assert(_\bs_\bi_\bz_\be() > 0);\n-196 return (*this)[_\bs_\bi_\bz_\be()-1];\n-197 }\n-198\n-_\b2_\b0_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be () const {\n-201 return size_;\n-202 }\n-203\n-_\b2_\b0_\b5 bool _\be_\bm_\bp_\bt_\by() const {\n-206 return _\bs_\bi_\bz_\be() == 0;\n-207 }\n-208\n-_\b2_\b1_\b0 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by() {\n-211 return maxSize;\n-212 }\n-213\n-_\b2_\b1_\b5 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() {\n-216 return maxSize;\n-217 }\n-218\n-_\b2_\b2_\b0 inline friend std::size_t _\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be(const _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by& v) noexcept {\n-221 return hash_range(v.begin(), v.end());\n-222 }\n-223\n-_\b2_\b2_\b5 friend std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b (std::ostream& s, const _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by& c) {\n-226 for (const auto& ci : c)\n-227 s << ci << \" \";\n-228 return s;\n-229 }\n-230\n-231private:\n-232 OverflowBuffer overflow_;\n-233 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be size_ = 0;\n-234};\n-235\n-236\n-237\n-238} // namespace Dune::Functions\n-239\n-240\n-241\n-242#endif // DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by\n-A dynamically sized array-like class with overflow.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:49\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-const value_type & const_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-value_type & reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:56\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-Returns a const_iterator pointing to the end of the OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:149\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const OverflowArray &other) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:77\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be\n-friend std::size_t hash_value(const OverflowArray &v) noexcept\n-Compute hash value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:220\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-void push_back(const value_type &t)\n-Appends an element to the end of the OverflowArray,.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:108\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)\n-Write container to an output stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:225\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin()\n-Returns a iterator pointing to the beginning of the OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:134\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-Returns true if OverflowArray has no elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:205\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Returns number of elements in the OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:200\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-typename BaseArray::value_type value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:55\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bp_\bo_\bp_\b__\bb_\ba_\bc_\bk\n-void pop_back()\n-Erases the last element of the OverflowArray, O(1) time.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:114\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Dune::GenericIterator< OverflowArray, value_type > iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Returns a const_iterator pointing to the beginning of the OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:139\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be\n-std::ptrdiff_t difference_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:59\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by\n-OverflowArray()=default\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bB_\ba_\bs_\be_\bA_\br_\br_\ba_\by\n-BA BaseArray\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:53\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by\n-static constexpr size_type capacity()\n-Returns the capacity of the OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:210\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bm_\ba_\bx_\b__\bs_\bi_\bz_\be\n-static constexpr size_type max_size()\n-Returns the maximum length of the OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:215\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bf_\br_\bo_\bn_\bt\n-const_reference front() const\n-Returns const reference to first element of OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:182\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bl_\be_\ba_\br\n-void clear()\n-Erases all elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bn_\bd\n-iterator end()\n-Returns an iterator pointing to the end of the OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:144\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n-void resize(size_type n)\n-Specifies a new size for the OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:97\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-value_type * pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Dune::GenericIterator< const OverflowArray, const value_type > const_iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\ba_\bc_\bk\n-const_reference back() const\n-Returns const reference to last element of OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:194\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by\n-OverflowArray(const std::initializer_list< value_type > &l)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:71\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\ba_\bc_\bk\n-reference back()\n-Returns reference to last element of OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt\n-void push_front(const value_type &t)\n-Inserts an element to the begin of the OverflowArray,.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bf_\br_\bo_\bn_\bt\n-reference front()\n-Returns reference to first element of OverflowArray.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:176\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-reference operator[](size_type i)\n-Returns reference to the i'th element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:154\n+71}} // namespace Dune::Functions\n+72\n+73#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be\n+Base class with polymorphic type boiler plate code.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn interfaces.hh:29\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual Interface * clone(void *buffer) const =0\n+Clones the object into buffer.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual Interface * clone() const =0\n+Clones the object.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b:_\b:_\bm_\bo_\bv_\be\n+virtual Interface * move(void *buffer)=0\n+Move object into buffer.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b:_\b:_\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be\n+virtual ~PolymorphicType()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn interfaces.hh:33\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: polymorphicsmallobject.hh File Reference\n+dune-functions: staticforloop.hh File Reference\n \n \n \n \n \n \n \n@@ -70,38 +70,38 @@\n \n \n
    \n \n-
    polymorphicsmallobject.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    staticforloop.hh File Reference
    \n \n
    \n-
    #include <cstddef>
    \n-#include <utility>
    \n-#include <type_traits>
    \n-#include <algorithm>
    \n+
    #include <dune/common/concept.hh>
    \n+#include <dune/functions/common/type_traits.hh>
    \n+#include <dune/functions/functionspacebases/concepts.hh>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
    \n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::Functions::PolymorphicSmallObject< Base, bufferSize >
     A wrapper providing small object optimization with polymorphic types. More...
     
    \n \n \n \n \n \n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n+\n+\n+\n+\n+\n

    \n+Functions

    template<std::size_t begin_t, std::size_t end_t, class F , class... Args>
    void Dune::Functions::staticFindInRange (F &&f, Args &&... args)
     Static find loop.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,25 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-polymorphicsmallobject.hh File Reference\n-#include \n-#include \n-#include \n-#include \n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+staticforloop.hh File Reference\n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b<_\b _\bB_\ba_\bs_\be_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0 A wrapper providing small object optimization with polymorphic types.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bt_\ba_\bt_\bi_\bc_\bF_\bi_\bn_\bd_\bI_\bn_\bR_\ba_\bn_\bg_\be (F &&f, Args &&... args)\n+\u00a0 Static find loop.\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: polymorphicsmallobject.hh Source File\n+dune-functions: staticforloop.hh Source File\n \n \n \n \n \n \n \n@@ -74,203 +74,81 @@\n \n \n \n
    \n-
    polymorphicsmallobject.hh
    \n+
    staticforloop.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n
    9
    \n-
    10#include <cstddef>
    \n-
    11#include <utility>
    \n-
    12#include <type_traits>
    \n-
    13#include <algorithm>
    \n-
    14
    \n-
    15namespace Dune {
    \n-
    16namespace Functions {
    \n-
    17
    \n-
    18
    \n-
    49template<class Base, size_t bufferSize>
    \n-
    \n-\n-
    51{
    \n-
    52 // Actual buffer size must be > 0
    \n-
    53 static constexpr std::size_t actualBufferSize = std::max(sizeof(std::byte), bufferSize);
    \n-
    54
    \n-
    55 // Alignment requirement for the buffer. The `Derived` type must have
    \n-
    56 // an alignment requirement that is a divisor of `bufferAlignment`
    \n-
    57 static constexpr std::size_t bufferAlignment = alignof(std::max_align_t);
    \n-
    58
    \n-
    59public:
    \n-
    60
    \n-
    \n-\n-
    63 p_(nullptr)
    \n-
    64 {}
    \n+
    10
    \n+
    11#include <dune/common/concept.hh>
    \n+
    12
    \n+\n+\n+
    15
    \n+
    16
    \n+
    17namespace Dune {
    \n+
    18namespace Functions {
    \n+
    19
    \n+
    20namespace Imp {
    \n+
    21
    \n+
    22template<class ST, ST begin, ST end>
    \n+
    23struct StaticFindInRange
    \n+
    24{
    \n+
    25 template<class F, class...Args>
    \n+
    26 static void apply(F&& f, Args&&... args)
    \n+
    27 {
    \n+
    28 if (f(std::integral_constant<ST, begin>(), std::forward<Args>(args)...))
    \n+
    29 return;
    \n+
    30 StaticFindInRange<ST, begin+1, end>::apply(std::forward<F>(f), std::forward<Args>(args)...);
    \n+
    31 }
    \n+
    32};
    \n+
    33
    \n+
    34template<class ST, ST end>
    \n+
    35struct StaticFindInRange<ST, end, end>
    \n+
    36{
    \n+
    37 template<class F, class...Args>
    \n+
    38 static void apply(F&& f, Args&&...)
    \n+
    39 {}
    \n+
    40};
    \n+
    41
    \n+
    42} //end namespace Imp
    \n+
    43
    \n+
    44
    \n+
    45
    \n+
    59template<std::size_t begin_t, std::size_t end_t, class F, class... Args>
    \n+
    \n+
    60void staticFindInRange(F&& f, Args&&... args)
    \n+
    61{
    \n+
    62 Imp::StaticFindInRange<std::size_t, begin_t, end_t>::apply(std::forward<F>(f), std::forward<Args>(args)...);
    \n+
    63}
    \n
    \n+
    64
    \n
    65
    \n-
    72 template<class Derived,
    \n-
    73 std::enable_if_t<std::is_base_of_v<Base, std::remove_cv_t<
    \n-
    74 std::remove_reference_t<Derived>>>, int> = 0>
    \n-
    \n-
    75 PolymorphicSmallObject(Derived&& derived)
    \n-
    76 {
    \n-
    77 constexpr bool useBuffer = (sizeof(Derived) <= bufferSize)
    \n-
    78 && (bufferAlignment % alignof(Derived) == 0);
    \n-
    79
    \n-
    80 if constexpr (useBuffer) {
    \n-
    81 p_ = new (&buffer_) Derived(std::forward<Derived>(derived));
    \n-
    82 } else {
    \n-
    83 p_ = new Derived(std::forward<Derived>(derived));
    \n-
    84 }
    \n-
    85 }
    \n-
    \n-
    86
    \n-
    \n-\n-
    89 {
    \n-
    90 moveToWrappedObject(std::move(other));
    \n-
    91 }
    \n-
    \n-
    92
    \n-
    \n-\n-
    95 {
    \n-
    96 copyToWrappedObject(other);
    \n-
    97 }
    \n-
    \n-
    98
    \n-
    \n-\n-
    101 {
    \n-
    102 destroyWrappedObject();
    \n-
    103 }
    \n-
    \n-
    104
    \n-
    \n-\n-
    107 {
    \n-
    108 if (&other!=this)
    \n-
    109 {
    \n-
    110 destroyWrappedObject();
    \n-
    111 copyToWrappedObject(other);
    \n-
    112 }
    \n-
    113 return *this;
    \n-
    114 }
    \n-
    \n-
    115
    \n-
    \n-\n-
    118 {
    \n-
    119 destroyWrappedObject();
    \n-
    120 moveToWrappedObject(std::move(other));
    \n-
    121 return *this;
    \n-
    122 }
    \n-
    \n-
    123
    \n-
    \n-
    125 explicit operator bool() const
    \n-
    126 {
    \n-
    127 return p_;
    \n-
    128 }
    \n-
    \n-
    129
    \n-
    \n-
    131 bool bufferUsed() const
    \n-
    132 {
    \n-
    133 return ((void*) (p_) == (void*)(&buffer_));
    \n-
    134 }
    \n-
    \n-
    135
    \n-
    \n-
    137 const Base& get() const
    \n-
    138 {
    \n-
    139 return *p_;
    \n-
    140 }
    \n-
    \n-
    141
    \n-
    \n-
    143 Base& get()
    \n-
    144 {
    \n-
    145 return *p_;
    \n-
    146 }
    \n-
    \n-
    147
    \n-
    148private:
    \n-
    149
    \n-
    150 void destroyWrappedObject() noexcept
    \n-
    151 {
    \n-
    152 if (operator bool())
    \n-
    153 {
    \n-
    154 if (bufferUsed())
    \n-
    155 p_->~Base();
    \n-
    156 else
    \n-
    157 delete p_;
    \n-
    158 }
    \n-
    159 }
    \n-
    160
    \n-
    161 void moveToWrappedObject(PolymorphicSmallObject&& other) noexcept
    \n-
    162 {
    \n-
    163 if (other.bufferUsed())
    \n-
    164 p_ = other.p_->move(&buffer_);
    \n-
    165 else
    \n-
    166 {
    \n-
    167 // We don't need to check for &other_!=this, because you can't
    \n-
    168 // have an rvalue to *this and call it's assignment/constructor
    \n-
    169 // at the same time. (Despite trying to shoot yourself in the foot
    \n-
    170 // with std::move explicitly.)
    \n-
    171
    \n-
    172 // Take ownership of allocated object
    \n-
    173 p_ = other.p_;
    \n-
    174
    \n-
    175 // Leave pointer in a clean state to avoid double freeing it.
    \n-
    176 other.p_ = 0;
    \n-
    177 }
    \n-
    178 }
    \n-
    179
    \n-
    180 void copyToWrappedObject(const PolymorphicSmallObject& other)
    \n-
    181 {
    \n-
    182 if (other.bufferUsed())
    \n-
    183 p_ = other.p_->clone(&buffer_);
    \n-
    184 else
    \n-
    185 p_ = other.p_->clone();
    \n-
    186 }
    \n-
    187
    \n-
    188 alignas(bufferAlignment) std::byte buffer_[actualBufferSize];
    \n-
    189 Base* p_;
    \n-
    190};
    \n-
    \n-
    191
    \n-
    192
    \n-
    193} // namespace Functions
    \n-
    194} // namespace Dune
    \n-
    195
    \n-
    196#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n+
    66} // namespace Dune::Functions
    \n+
    67} // namespace Dune
    \n+
    68
    \n+
    69
    \n+
    70
    \n+
    71#endif //DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n+\n+
    void staticFindInRange(F &&f, Args &&... args)
    Static find loop.
    Definition staticforloop.hh:60
    \n
    Definition polynomial.hh:17
    \n-
    A wrapper providing small object optimization with polymorphic types.
    Definition polymorphicsmallobject.hh:51
    \n-
    const Base & get() const
    Obtain reference to stored object.
    Definition polymorphicsmallobject.hh:137
    \n-
    bool bufferUsed() const
    Check if object is stored in internal stack buffer.
    Definition polymorphicsmallobject.hh:131
    \n-
    PolymorphicSmallObject(Derived &&derived)
    Construct from object.
    Definition polymorphicsmallobject.hh:75
    \n-
    PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept
    Move constructor from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:88
    \n-
    PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)
    Copy assignment from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:106
    \n-
    PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept
    Move assignment from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:117
    \n-
    PolymorphicSmallObject(const PolymorphicSmallObject &other)
    Copy constructor from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:94
    \n-
    ~PolymorphicSmallObject()
    Destructor.
    Definition polymorphicsmallobject.hh:100
    \n-
    PolymorphicSmallObject()
    Default constructor.
    Definition polymorphicsmallobject.hh:62
    \n-
    Base & get()
    Obtain mutable reference to stored object.
    Definition polymorphicsmallobject.hh:143
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,209 +1,81 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-polymorphicsmallobject.hh\n+staticforloop.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n-8#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n+8#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n 9\n-10#include \n-11#include \n-12#include \n-13#include \n-14\n-15namespace _\bD_\bu_\bn_\be {\n-16namespace Functions {\n-17\n-18\n-49template\n-_\b5_\b0class _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n-51{\n-52 // Actual buffer size must be > 0\n-53 static constexpr std::size_t actualBufferSize = std::max(sizeof(std::byte),\n-bufferSize);\n-54\n-55 // Alignment requirement for the buffer. The `Derived` type must have\n-56 // an alignment requirement that is a divisor of `bufferAlignment`\n-57 static constexpr std::size_t bufferAlignment = alignof(std::max_align_t);\n-58\n-59public:\n-60\n-_\b6_\b2 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt() :\n-63 p_(nullptr)\n-64 {}\n+10\n+11#include \n+12\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+15\n+16\n+17namespace _\bD_\bu_\bn_\be {\n+18namespace Functions {\n+19\n+20namespace Imp {\n+21\n+22template\n+23struct StaticFindInRange\n+24{\n+25 template\n+26 static void apply(F&& f, Args&&... args)\n+27 {\n+28 if (f(std::integral_constant(), std::forward(args)...))\n+29 return;\n+30 StaticFindInRange::apply(std::forward(f), std::\n+forward(args)...);\n+31 }\n+32};\n+33\n+34template\n+35struct StaticFindInRange\n+36{\n+37 template\n+38 static void apply(F&& f, Args&&...)\n+39 {}\n+40};\n+41\n+42} //end namespace Imp\n+43\n+44\n+45\n+59template\n+_\b6_\b0void _\bs_\bt_\ba_\bt_\bi_\bc_\bF_\bi_\bn_\bd_\bI_\bn_\bR_\ba_\bn_\bg_\be(F&& f, Args&&... args)\n+61{\n+62 Imp::StaticFindInRange::apply(std::forward\n+(f), std::forward(args)...);\n+63}\n+64\n 65\n-72 template>>, int> = 0>\n-_\b7_\b5 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt(Derived&& derived)\n-76 {\n-77 constexpr bool useBuffer = (sizeof(Derived) <= bufferSize)\n-78 && (bufferAlignment % alignof(Derived) == 0);\n-79\n-80 if constexpr (useBuffer) {\n-81 p_ = new (&buffer_) Derived(std::forward(derived));\n-82 } else {\n-83 p_ = new Derived(std::forward(derived));\n-84 }\n-85 }\n-86\n-_\b8_\b8 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt(_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt&& other) noexcept\n-89 {\n-90 moveToWrappedObject(std::move(other));\n-91 }\n-92\n-_\b9_\b4 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt(const _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& other)\n-95 {\n-96 copyToWrappedObject(other);\n-97 }\n-98\n-_\b1_\b0_\b0 _\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt()\n-101 {\n-102 destroyWrappedObject();\n-103 }\n-104\n-_\b1_\b0_\b6 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& other)\n-107 {\n-108 if (&other!=this)\n-109 {\n-110 destroyWrappedObject();\n-111 copyToWrappedObject(other);\n-112 }\n-113 return *this;\n-114 }\n-115\n-_\b1_\b1_\b7 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt&& other) noexcept\n-118 {\n-119 destroyWrappedObject();\n-120 moveToWrappedObject(std::move(other));\n-121 return *this;\n-122 }\n-123\n-_\b1_\b2_\b5 explicit operator bool() const\n-126 {\n-127 return p_;\n-128 }\n-129\n-_\b1_\b3_\b1 bool _\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd() const\n-132 {\n-133 return ((void*) (p_) == (void*)(&buffer_));\n-134 }\n-135\n-_\b1_\b3_\b7 const Base& _\bg_\be_\bt() const\n-138 {\n-139 return *p_;\n-140 }\n-141\n-_\b1_\b4_\b3 Base& _\bg_\be_\bt()\n-144 {\n-145 return *p_;\n-146 }\n-147\n-148private:\n-149\n-150 void destroyWrappedObject() noexcept\n-151 {\n-152 if (operator bool())\n-153 {\n-154 if (_\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd())\n-155 p_->~Base();\n-156 else\n-157 delete p_;\n-158 }\n-159 }\n-160\n-161 void moveToWrappedObject(_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt&& other) noexcept\n-162 {\n-163 if (other.bufferUsed())\n-164 p_ = other.p_->move(&buffer_);\n-165 else\n-166 {\n-167 // We don't need to check for &other_!=this, because you can't\n-168 // have an rvalue to *this and call it's assignment/constructor\n-169 // at the same time. (Despite trying to shoot yourself in the foot\n-170 // with std::move explicitly.)\n-171\n-172 // Take ownership of allocated object\n-173 p_ = other.p_;\n-174\n-175 // Leave pointer in a clean state to avoid double freeing it.\n-176 other.p_ = 0;\n-177 }\n-178 }\n-179\n-180 void copyToWrappedObject(const _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& other)\n-181 {\n-182 if (other.bufferUsed())\n-183 p_ = other.p_->clone(&buffer_);\n-184 else\n-185 p_ = other.p_->clone();\n-186 }\n-187\n-188 alignas(bufferAlignment) std::byte buffer_[actualBufferSize];\n-189 Base* p_;\n-190};\n-191\n-192\n-193} // namespace Functions\n-194} // namespace Dune\n-195\n-196#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+66} // namespace Dune::Functions\n+67} // namespace Dune\n+68\n+69\n+70\n+71#endif //DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bt_\ba_\bt_\bi_\bc_\bF_\bi_\bn_\bd_\bI_\bn_\bR_\ba_\bn_\bg_\be\n+void staticFindInRange(F &&f, Args &&... args)\n+Static find loop.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn staticforloop.hh:60\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n-A wrapper providing small object optimization with polymorphic types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:51\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bg_\be_\bt\n-const Base & get() const\n-Obtain reference to stored object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:137\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd\n-bool bufferUsed() const\n-Check if object is stored in internal stack buffer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:131\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n-PolymorphicSmallObject(Derived &&derived)\n-Construct from object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n-PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept\n-Move constructor from other PolymorphicSmallObject.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:88\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)\n-Copy assignment from other PolymorphicSmallObject.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept\n-Move assignment from other PolymorphicSmallObject.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:117\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n-PolymorphicSmallObject(const PolymorphicSmallObject &other)\n-Copy constructor from other PolymorphicSmallObject.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:94\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n-~PolymorphicSmallObject()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n-PolymorphicSmallObject()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bg_\be_\bt\n-Base & get()\n-Obtain mutable reference to stored object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:143\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: differentiablefunction_imp.hh File Reference\n+dune-functions: indexaccess.hh File Reference\n \n \n \n \n \n \n \n@@ -70,30 +70,61 @@\n \n
    \n
    \n \n-
    differentiablefunction_imp.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    indexaccess.hh File Reference
    \n \n
    \n-
    #include <dune/common/exceptions.hh>
    \n+
    #include <utility>
    \n+#include <type_traits>
    \n+#include <dune/common/typetraits.hh>
    \n #include <dune/common/concept.hh>
    \n-#include <dune/functions/common/type_traits.hh>
    \n+#include <dune/common/hybridutilities.hh>
    \n+#include <dune/functions/common/utility.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n \n \n \n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    template<class C , class I , class F , std::enable_if_t< Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int > = 0>
    auto Dune::Functions::hybridIndexAccess (C &&c, const I &i, F &&f) -> decltype(f(c[i]))
     Provide operator[] index-access for containers.
     
    template<class C , class I , class F , std::enable_if_t< not Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int > = 0>
    decltype(auto) Dune::Functions::hybridIndexAccess (C &&c, const I &i, F &&f)
     Provide operator[] index-access for containers.
     
    template<class Result , class C , class MultiIndex >
    Result Dune::Functions::hybridMultiIndexAccess (C &&c, const MultiIndex &index)
     Provide multi-index access by chaining operator[].
     
    template<class C , class MultiIndex , class IsFinal >
    constexpr decltype(auto) Dune::Functions::resolveDynamicMultiIndex (C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
     Provide multi-index access by chaining operator[].
     
    template<class C , class MultiIndex >
    constexpr decltype(auto) Dune::Functions::resolveDynamicMultiIndex (C &&c, const MultiIndex &multiIndex)
     Provide multi-index access by chaining operator[].
     
    template<class C , class MultiIndex >
    constexpr decltype(auto) Dune::Functions::resolveStaticMultiIndex (C &&c, const MultiIndex &multiIndex)
     Provide multi-index access by chaining operator[].
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,56 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-differentiablefunction_imp.hh File Reference\n-#include \n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+indexaccess.hh File Reference\n+#include \n+#include \n+#include \n #include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template, C >(), int > = 0>\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs (C &&c, const I\n+ &i, F &&f) -> decltype(f(c[i]))\n+\u00a0 Provide operator[] index-access for containers.\n+\u00a0\n+template, C >(), int > = 0>\n+ decltype(auto)\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs (C &&c, const I\n+ &i, F &&f)\n+\u00a0 Provide operator[] index-access for containers.\n+\u00a0\n+template\n+ Result\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs (C &&c, const\n+ MultiIndex &index)\n+\u00a0 Provide multi-index access by chaining operator[].\n+\u00a0\n+template\n+constexpr decltype(auto)\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (C &&c,\n+ const MultiIndex &multiIndex, const IsFinal &isFinal)\n+\u00a0 Provide multi-index access by chaining operator[].\n+\u00a0\n+template\n+constexpr decltype(auto)\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (C &&c,\n+ const MultiIndex &multiIndex)\n+\u00a0 Provide multi-index access by chaining operator[].\n+\u00a0\n+template\n+constexpr decltype(auto)\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (C &&c,\n+ const MultiIndex &multiIndex)\n+\u00a0 Provide multi-index access by chaining operator[].\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: differentiablefunction_imp.hh Source File\n+dune-functions: indexaccess.hh Source File\n \n \n \n \n \n \n \n@@ -74,120 +74,339 @@\n \n \n
    \n
    \n-
    differentiablefunction_imp.hh
    \n+
    indexaccess.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n
    9
    \n-
    10#include <dune/common/exceptions.hh>
    \n-
    11#include <dune/common/concept.hh>
    \n-
    12
    \n-\n-
    14
    \n-
    15
    \n-
    16namespace Dune {
    \n-
    17namespace Functions {
    \n-
    18namespace Imp {
    \n+
    10
    \n+
    11#include <utility>
    \n+
    12#include <type_traits>
    \n+
    13
    \n+
    14#include <dune/common/typetraits.hh>
    \n+
    15#include <dune/common/concept.hh>
    \n+
    16#include <dune/common/hybridutilities.hh>
    \n+
    17
    \n+\n
    19
    \n-
    23struct HasFreeDerivative
    \n-
    24{
    \n-
    25 template<class F>
    \n-
    26 auto require(F&& f) -> decltype(
    \n-
    27 derivative(f)
    \n-
    28 );
    \n-
    29};
    \n-
    30
    \n-
    31
    \n-
    32
    \n-
    33template<class Dummy, class F,
    \n-
    34 std::enable_if_t<
    \n-
    35 models< HasFreeDerivative, F>() , int> = 0>
    \n-
    36auto derivativeIfImplemented(const F& f) -> decltype(derivative(f))
    \n-
    37{
    \n-
    38 return derivative(f);
    \n-
    39}
    \n-
    40
    \n-
    41
    \n-
    42
    \n-
    43template<class Dummy, class F,
    \n-
    44 std::enable_if_t<
    \n-
    45 not(models< HasFreeDerivative, F>()) , int> = 0>
    \n-
    46Dummy derivativeIfImplemented(const F& f)
    \n-
    47{
    \n-
    48 DUNE_THROW(Dune::NotImplemented, "Derivative not implemented");
    \n-
    49}
    \n+
    20
    \n+
    21
    \n+
    22namespace Dune {
    \n+
    23namespace Functions {
    \n+
    24
    \n+
    25
    \n+
    26namespace Imp {
    \n+
    27
    \n+
    28namespace Concept {
    \n+
    29
    \n+
    30template<class size_type>
    \n+
    31struct HasDynamicIndexAccess
    \n+
    32{
    \n+
    33 template<class C>
    \n+
    34 auto require(C&& c) -> decltype(
    \n+
    35 c[std::declval<size_type>()]
    \n+
    36 );
    \n+
    37};
    \n+
    38
    \n+
    39struct HasStaticIndexAccess
    \n+
    40{
    \n+
    41 template<class C>
    \n+
    42 auto require(C&& c) -> decltype(
    \n+
    43 c[Dune::Indices::_0]
    \n+
    44 );
    \n+
    45};
    \n+
    46
    \n+
    47} // namespace Concept
    \n+
    48
    \n+
    49} // namespace Imp
    \n
    50
    \n
    51
    \n
    52
    \n-
    53template<class Signature, class DerivativeInterface>
    \n-
    54class DifferentiableFunctionWrapperInterface
    \n-
    55{};
    \n-
    56
    \n-
    57// Interface of type erasure wrapper
    \n-
    58//
    \n-
    59// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n-
    60// will be added by the type erasure foundation classes.
    \n-
    61template<class Range, class Domain, class DerivativeInterface>
    \n-
    62class DifferentiableFunctionWrapperInterface<Range(Domain), DerivativeInterface>
    \n-
    63{
    \n-
    64public:
    \n-
    65 virtual Range operator() (const Domain& x) const = 0;
    \n-
    66
    \n-
    67 virtual DerivativeInterface derivative() const = 0;
    \n-
    68};
    \n-
    69
    \n-
    70
    \n-
    71
    \n-
    72template<class Signature, class DerivativeInterface, class B>
    \n-
    73class DifferentiableFunctionWrapperImplementation
    \n-
    74{};
    \n-
    75
    \n-
    76// Implementation of type erasure wrapper
    \n-
    77template<class Range, class Domain, class DerivativeInterface, class B>
    \n-
    78class DifferentiableFunctionWrapperImplementation< Range(Domain), DerivativeInterface, B> :
    \n-
    79 public B
    \n-
    80{
    \n-
    81public:
    \n-
    82
    \n-
    83 using B::B;
    \n-
    84 using Wrapped = typename B::Wrapped;
    \n-
    85
    \n-
    86 virtual Range operator() (const Domain& x) const
    \n-
    87 {
    \n-
    88 return this->get()(x);
    \n-
    89 }
    \n-
    90
    \n-
    91 virtual DerivativeInterface derivative() const
    \n-
    92 {
    \n-
    93 return derivativeIfImplemented<DerivativeInterface, Wrapped>(this->get());
    \n-
    94 }
    \n-
    95};
    \n-
    96
    \n-
    97
    \n-
    98
    \n-
    99}}} // namespace Dune::Functions::Imp
    \n-
    100
    \n-
    101
    \n+
    65template<class C, class I, class F,
    \n+
    66 std::enable_if_t< Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), int> = 0>
    \n+
    \n+
    67auto hybridIndexAccess(C&& c, const I& i, F&& f)
    \n+
    68 -> decltype(f(c[i]))
    \n+
    69{
    \n+
    70 return f(c[i]);
    \n+
    71}
    \n+
    \n+
    72
    \n+
    90template<class C, class I, class F,
    \n+
    91 std::enable_if_t< not Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), int> = 0>
    \n+
    \n+
    92decltype(auto) hybridIndexAccess(C&& c, const I& i, F&& f)
    \n+
    93{
    \n+
    94 using Size = decltype(Hybrid::size(c));
    \n+
    95 return Hybrid::switchCases(std::make_index_sequence<Size::value>(), i,
    \n+
    96 [&](const auto& ii) -> decltype(auto){
    \n+
    97 return f(c[ii]);
    \n+
    98 }, [&]() -> decltype(auto){
    \n+
    99 return f(c[Dune::Indices::_0]);
    \n+
    100 });
    \n+
    101}
    \n+
    \n
    102
    \n-
    103#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n-\n-
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n+
    103
    \n+
    104namespace Imp {
    \n+
    105
    \n+
    119 template<class Index, std::size_t offset=1>
    \n+
    120 class ShiftedDynamicMultiIndex
    \n+
    121 {
    \n+
    122 public:
    \n+
    123 ShiftedDynamicMultiIndex(const Index& index) :
    \n+
    124 index_(index)
    \n+
    125 {}
    \n+
    126
    \n+
    127 std::size_t operator[](std::size_t position) const
    \n+
    128 {
    \n+
    129 if (position<size())
    \n+
    130 return index_[position+offset];
    \n+
    131 else
    \n+
    132 return 0;
    \n+
    133 }
    \n+
    134
    \n+
    138 ShiftedDynamicMultiIndex<Index, offset+1> pop() const
    \n+
    139 {
    \n+
    140 return {index_};
    \n+
    141 }
    \n+
    142
    \n+
    143 std::size_t size() const
    \n+
    144 {
    \n+
    145 if (offset < index_.size())
    \n+
    146 return index_.size() - offset;
    \n+
    147 else
    \n+
    148 return 0;
    \n+
    149 }
    \n+
    150
    \n+
    151 const Index& originalIndex() const
    \n+
    152 {
    \n+
    153 return index_;
    \n+
    154 }
    \n+
    155
    \n+
    156 private:
    \n+
    157 const Index& index_;
    \n+
    158 };
    \n+
    159
    \n+
    160 template<class Index, std::size_t offset=1>
    \n+
    161 class ShiftedStaticMultiIndex
    \n+
    162 {
    \n+
    163 public:
    \n+
    164 ShiftedStaticMultiIndex(const Index& index) :
    \n+
    165 index_(index)
    \n+
    166 {}
    \n+
    167
    \n+
    168 template<std::size_t i>
    \n+
    169 auto operator[](Dune::index_constant<i>) const
    \n+
    170 {
    \n+
    171 if constexpr (i<size()) {
    \n+
    172 return index_[Dune::index_constant<i+offset>{}];
    \n+
    173 } else {
    \n+
    174 return Dune::index_constant<0>{};
    \n+
    175 }
    \n+
    176 }
    \n+
    177
    \n+
    181 ShiftedStaticMultiIndex<Index, offset+1> pop() const
    \n+
    182 {
    \n+
    183 return {index_};
    \n+
    184 }
    \n+
    185
    \n+
    186 static constexpr std::size_t size()
    \n+
    187 {
    \n+
    188 auto fullSize = decltype(Hybrid::size(std::declval<Index>()))::value;
    \n+
    189 if (offset < fullSize)
    \n+
    190 return fullSize - offset;
    \n+
    191 else
    \n+
    192 return 0;
    \n+
    193 }
    \n+
    194
    \n+
    195 private:
    \n+
    196 const Index& index_;
    \n+
    197 };
    \n+
    198
    \n+
    204 template<std::size_t offset, class Index>
    \n+
    205 ShiftedDynamicMultiIndex<Index, offset> shiftedDynamicMultiIndex(const Index& index)
    \n+
    206 {
    \n+
    207 return {index};
    \n+
    208 }
    \n+
    209
    \n+
    218 template<std::size_t offset, class Index, std::size_t oldOffset>
    \n+
    219 ShiftedDynamicMultiIndex<Index, offset+oldOffset> shiftedDynamicMultiIndex(const ShiftedDynamicMultiIndex<Index, oldOffset>& index)
    \n+
    220 {
    \n+
    221 return {index.originalIndex()};
    \n+
    222 }
    \n+
    223
    \n+
    224 template<std::size_t offset, class Index>
    \n+
    225 ShiftedStaticMultiIndex<Index, offset> shiftedStaticMultiIndex(const Index& index)
    \n+
    226 {
    \n+
    227 return {index};
    \n+
    228 }
    \n+
    229
    \n+
    230} // namespace Imp
    \n+
    231
    \n+
    232
    \n+
    233
    \n+
    234
    \n+
    235namespace Imp {
    \n+
    236
    \n+
    237template<class Result, class Index>
    \n+
    238struct MultiIndexResolver
    \n+
    239{
    \n+
    240 MultiIndexResolver(const Index& index) :
    \n+
    241 index_(index)
    \n+
    242 {}
    \n+
    243
    \n+
    244 template<class C,
    \n+
    245 std::enable_if_t<not std::is_convertible_v<C&, Result>, int> = 0>
    \n+
    246 Result operator()(C&& c)
    \n+
    247 {
    \n+
    248 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);
    \n+
    249 auto&& subIndexResolver = MultiIndexResolver<Result, decltype(subIndex)>(subIndex);
    \n+
    250 return (Result)(hybridIndexAccess(c, index_[Dune::Indices::_0], subIndexResolver));
    \n+
    251 }
    \n+
    252
    \n+
    253 template<class C,
    \n+
    254 std::enable_if_t<std::is_convertible_v<C&, Result>, int> = 0>
    \n+
    255 Result operator()(C&& c)
    \n+
    256 {
    \n+
    257 return (Result)(std::forward<C>(c));
    \n+
    258 }
    \n+
    259
    \n+
    260 const Index& index_;
    \n+
    261};
    \n+
    262
    \n+
    263} // namespace Imp
    \n+
    264
    \n+
    265
    \n+
    266
    \n+
    285template<class Result, class C, class MultiIndex>
    \n+
    \n+
    286Result hybridMultiIndexAccess(C&& c, const MultiIndex& index)
    \n+
    287{
    \n+
    288
    \n+
    289 Imp::MultiIndexResolver<Result, MultiIndex> multiIndexResolver(index);
    \n+
    290 return multiIndexResolver(c);
    \n+
    291}
    \n+
    \n+
    292
    \n+
    293
    \n+
    294
    \n+
    295
    \n+
    296
    \n+
    297
    \n+
    298namespace Imp {
    \n+
    299
    \n+
    300 template<class C, class MultiIndex, class IsFinal>
    \n+
    301 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex, const IsFinal& isFinal)
    \n+
    302 {
    \n+
    303 // If c is already considered final simply return it,
    \n+
    304 // else resolve the next multiIndex entry.
    \n+
    305 return Hybrid::ifElse(isFinal(c), [&, c = forwardCapture(std::forward<C>(c))](auto) -> decltype(auto) {
    \n+
    306 assert(multiIndex.size() == 0);
    \n+
    307 return c.forward();
    \n+
    308 }, [&](auto) -> decltype(auto) {
    \n+
    309 auto hasDynamicAccess = callableCheck([](auto&& cc) -> std::void_t<decltype(cc[0])> {});
    \n+
    310
    \n+
    311 // Split multiIndex into first entry and remaining ones.
    \n+
    312 auto i = multiIndex[0];
    \n+
    313 auto tail = multiIndex.pop();
    \n+
    314
    \n+
    315 // Resolve first multiIndex entry by c[multiIndex[0]] and
    \n+
    316 // continue resolving with the remaining remaining ones.
    \n+
    317 // If c has a dynamic operator[] this is straight forward.
    \n+
    318 // Else the dynamic multiIndex[0] has to be translated into
    \n+
    319 // a static one using hybridIndexAccess.
    \n+
    320 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto) {
    \n+
    321 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);
    \n+
    322 }, [&](auto id) -> decltype(auto) {
    \n+
    323 // auto indexRange = range(Hybrid::size(id(c)));
    \n+
    324 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::integer_sequence();
    \n+
    325 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype(auto){
    \n+
    326 // Do rescursion with static version of i
    \n+
    327 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);
    \n+
    328 }, [&]() -> decltype(auto){
    \n+
    329 // As fallback we use c[0] this is needed, because there must be one branch that matches.
    \n+
    330 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail, isFinal);
    \n+
    331 });
    \n+
    332 });
    \n+
    333 });
    \n+
    334 }
    \n+
    335
    \n+
    336 template<class C, class MultiIndex>
    \n+
    337 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n+
    338 {
    \n+
    339 auto isExhausted = Hybrid::equal_to(Hybrid::size(multiIndex), Dune::Indices::_0);
    \n+
    340 return Hybrid::ifElse(isExhausted, [&, c = forwardCapture(std::forward<C>(c))](auto) -> decltype(auto) {
    \n+
    341 return c.forward();
    \n+
    342 }, [&](auto id) -> decltype(auto) {
    \n+
    343 auto head = multiIndex[Dune::Indices::_0];
    \n+
    344 auto tail = multiIndex.pop();
    \n+
    345
    \n+
    346 return Imp::resolveStaticMultiIndex(id(c)[head], tail);
    \n+
    347 });
    \n+
    348 }
    \n+
    349
    \n+
    350} // namespace Imp
    \n+
    351
    \n+
    352
    \n+
    353
    \n+
    376template<class C, class MultiIndex, class IsFinal>
    \n+
    \n+
    377constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex, const IsFinal& isFinal)
    \n+
    378{
    \n+
    379 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), isFinal);
    \n+
    380}
    \n+
    \n+
    381
    \n+
    398template<class C, class MultiIndex>
    \n+
    \n+
    399constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n+
    400{
    \n+
    401 auto hasNoIndexAccess = negatePredicate(callableCheck([](auto&& cc) -> std::void_t<decltype(cc[Dune::Indices::_0])> {}));
    \n+
    402 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);
    \n+
    403}
    \n+
    \n+
    404
    \n+
    420template<class C, class MultiIndex>
    \n+
    \n+
    421constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n+
    422{
    \n+
    423 return Imp::resolveStaticMultiIndex(std::forward<C>(c), Imp::shiftedStaticMultiIndex<0>(multiIndex));
    \n+
    424}
    \n+
    \n+
    425
    \n+
    426
    \n+
    427
    \n+
    428} // namespace Dune::Functions
    \n+
    429} // namespace Dune
    \n+
    430
    \n+
    431
    \n+
    432
    \n+
    433#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n+\n+
    auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))
    Provide operator[] index-access for containers.
    Definition indexaccess.hh:67
    \n+
    constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:421
    \n+
    auto callableCheck(Expression f)
    Create a predicate for checking validity of expressions.
    Definition utility.hh:283
    \n+
    constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:377
    \n+
    Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:286
    \n+
    auto negatePredicate(Check check)
    Negate given predicate.
    Definition utility.hh:308
    \n
    Definition polynomial.hh:17
    \n+
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:376
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,124 +1,371 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-differentiablefunction_imp.hh\n+indexaccess.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n-8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+8#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n 9\n-10#include \n-11#include \n-12\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-14\n-15\n-16namespace _\bD_\bu_\bn_\be {\n-17namespace Functions {\n-18namespace Imp {\n+10\n+11#include \n+12#include \n+13\n+14#include \n+15#include \n+16#include \n+17\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n 19\n-23struct HasFreeDerivative\n-24{\n-25 template\n-26 auto require(F&& f) -> decltype(\n-27 _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f)\n-28 );\n-29};\n-30\n-31\n-32\n-33template() , int> = 0>\n-36auto derivativeIfImplemented(const F& f) -> decltype(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f))\n-37{\n-38 return _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f);\n-39}\n-40\n-41\n-42\n-43template()) , int> = 0>\n-46Dummy derivativeIfImplemented(const F& f)\n-47{\n-48 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n-49}\n+20\n+21\n+22namespace _\bD_\bu_\bn_\be {\n+23namespace Functions {\n+24\n+25\n+26namespace Imp {\n+27\n+28namespace Concept {\n+29\n+30template\n+31struct HasDynamicIndexAccess\n+32{\n+33 template\n+34 auto require(C&& c) -> decltype(\n+35 c[std::declval()]\n+36 );\n+37};\n+38\n+39struct HasStaticIndexAccess\n+40{\n+41 template\n+42 auto require(C&& c) -> decltype(\n+43 c[Dune::Indices::_0]\n+44 );\n+45};\n+46\n+47} // namespace Concept\n+48\n+49} // namespace Imp\n 50\n 51\n 52\n-53template\n-54class DifferentiableFunctionWrapperInterface\n-55{};\n-56\n-57// Interface of type erasure wrapper\n-58//\n-59// Notice that the basic interface of polymorphic classes (destructor, clone,\n-...)\n-60// will be added by the type erasure foundation classes.\n-61template\n-62class DifferentiableFunctionWrapperInterface\n-63{\n-64public:\n-65 virtual Range operator() (const Domain& x) const = 0;\n-66\n-67 virtual DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be() const = 0;\n-68};\n-69\n-70\n-71\n-72template\n-73class DifferentiableFunctionWrapperImplementation\n-74{};\n-75\n-76// Implementation of type erasure wrapper\n-77template\n-78class DifferentiableFunctionWrapperImplementation< Range(Domain),\n-DerivativeInterface, B> :\n-79 public B\n-80{\n-81public:\n-82\n-83 using B::B;\n-84 using Wrapped = typename B::Wrapped;\n-85\n-86 virtual Range operator() (const Domain& x) const\n-87 {\n-88 return this->get()(x);\n-89 }\n-90\n-91 virtual DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be() const\n-92 {\n-93 return derivativeIfImplemented(this->get());\n-94 }\n-95};\n-96\n-97\n-98\n-99}}} // namespace Dune::Functions::Imp\n-100\n-101\n+65template, C>(),\n+int> = 0>\n+_\b6_\b7auto _\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs(C&& c, const I& i, F&& f)\n+68 -> decltype(f(c[i]))\n+69{\n+70 return f(c[i]);\n+71}\n+72\n+90template,\n+C>(), int> = 0>\n+_\b9_\b2decltype(auto) _\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs(C&& c, const I& i, F&& f)\n+93{\n+94 using Size = decltype(Hybrid::size(c));\n+95 return Hybrid::switchCases(std::make_index_sequence(), i,\n+96 [&](const auto& ii) -> decltype(auto){\n+97 return f(c[ii]);\n+98 }, [&]() -> decltype(auto){\n+99 return f(c[Dune::Indices::_0]);\n+100 });\n+101}\n 102\n-103#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n-TrigonometricFunction< K, sinFactor, cosFactor > &f)\n-Obtain derivative of TrigonometricFunction function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n+103\n+104namespace Imp {\n+105\n+119 template\n+120 class ShiftedDynamicMultiIndex\n+121 {\n+122 public:\n+123 ShiftedDynamicMultiIndex(const Index& index) :\n+124 index_(index)\n+125 {}\n+126\n+127 std::size_t operator[](std::size_t position) const\n+128 {\n+129 if (position pop() const\n+139 {\n+140 return {index_};\n+141 }\n+142\n+143 std::size_t size() const\n+144 {\n+145 if (offset < index_.size())\n+146 return index_.size() - offset;\n+147 else\n+148 return 0;\n+149 }\n+150\n+151 const Index& originalIndex() const\n+152 {\n+153 return index_;\n+154 }\n+155\n+156 private:\n+157 const Index& index_;\n+158 };\n+159\n+160 template\n+161 class ShiftedStaticMultiIndex\n+162 {\n+163 public:\n+164 ShiftedStaticMultiIndex(const Index& index) :\n+165 index_(index)\n+166 {}\n+167\n+168 template\n+169 auto operator[](Dune::index_constant) const\n+170 {\n+171 if constexpr (i{}];\n+173 } else {\n+174 return Dune::index_constant<0>{};\n+175 }\n+176 }\n+177\n+181 ShiftedStaticMultiIndex pop() const\n+182 {\n+183 return {index_};\n+184 }\n+185\n+186 static constexpr std::size_t size()\n+187 {\n+188 auto fullSize = decltype(Hybrid::size(std::declval()))::value;\n+189 if (offset < fullSize)\n+190 return fullSize - offset;\n+191 else\n+192 return 0;\n+193 }\n+194\n+195 private:\n+196 const Index& index_;\n+197 };\n+198\n+204 template\n+205 ShiftedDynamicMultiIndex shiftedDynamicMultiIndex(const\n+Index& index)\n+206 {\n+207 return {index};\n+208 }\n+209\n+218 template\n+219 ShiftedDynamicMultiIndex shiftedDynamicMultiIndex\n+(const ShiftedDynamicMultiIndex& index)\n+220 {\n+221 return {index.originalIndex()};\n+222 }\n+223\n+224 template\n+225 ShiftedStaticMultiIndex shiftedStaticMultiIndex(const Index&\n+index)\n+226 {\n+227 return {index};\n+228 }\n+229\n+230} // namespace Imp\n+231\n+232\n+233\n+234\n+235namespace Imp {\n+236\n+237template\n+238struct MultiIndexResolver\n+239{\n+240 MultiIndexResolver(const Index& index) :\n+241 index_(index)\n+242 {}\n+243\n+244 template, int> = 0>\n+246 Result operator()(C&& c)\n+247 {\n+248 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);\n+249 auto&& subIndexResolver = MultiIndexResolver\n+(subIndex);\n+250 return (Result)(_\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs(c, index_[Dune::Indices::_0],\n+subIndexResolver));\n+251 }\n+252\n+253 template, int> = 0>\n+255 Result operator()(C&& c)\n+256 {\n+257 return (Result)(std::forward(c));\n+258 }\n+259\n+260 const Index& index_;\n+261};\n+262\n+263} // namespace Imp\n+264\n+265\n+266\n+285template\n+_\b2_\b8_\b6Result _\bh_\by_\bb_\br_\bi_\bd_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs(C&& c, const MultiIndex& index)\n+287{\n+288\n+289 Imp::MultiIndexResolver multiIndexResolver(index);\n+290 return multiIndexResolver(c);\n+291}\n+292\n+293\n+294\n+295\n+296\n+297\n+298namespace Imp {\n+299\n+300 template\n+301 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n+multiIndex, const IsFinal& isFinal)\n+302 {\n+303 // If c is already considered final simply return it,\n+304 // else resolve the next multiIndex entry.\n+305 return Hybrid::ifElse(isFinal(c), [&, c = _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(std::forward\n+(c))](auto) -> decltype(auto) {\n+306 assert(multiIndex.size() == 0);\n+307 return c.forward();\n+308 }, [&](auto) -> decltype(auto) {\n+309 auto hasDynamicAccess = _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk([](auto&& cc) -> std::void_t {});\n+310\n+311 // Split multiIndex into first entry and remaining ones.\n+312 auto i = multiIndex[0];\n+313 auto tail = multiIndex.pop();\n+314\n+315 // Resolve first multiIndex entry by c[multiIndex[0]] and\n+316 // continue resolving with the remaining remaining ones.\n+317 // If c has a dynamic operator[] this is straight forward.\n+318 // Else the dynamic multiIndex[0] has to be translated into\n+319 // a static one using hybridIndexAccess.\n+320 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto) {\n+321 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);\n+322 }, [&](auto id) -> decltype(auto) {\n+323 // auto indexRange = range(Hybrid::size(id(c)));\n+324 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::\n+integer_sequence();\n+325 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype\n+(auto){\n+326 // Do rescursion with static version of i\n+327 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);\n+328 }, [&]() -> decltype(auto){\n+329 // As fallback we use c[0] this is needed, because there must be one branch\n+that matches.\n+330 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail,\n+isFinal);\n+331 });\n+332 });\n+333 });\n+334 }\n+335\n+336 template\n+337 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex&\n+multiIndex)\n+338 {\n+339 auto isExhausted = Hybrid::equal_to(Hybrid::size(multiIndex), Dune::\n+Indices::_0);\n+340 return Hybrid::ifElse(isExhausted, [&, c = _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(std::forward\n+(c))](auto) -> decltype(auto) {\n+341 return c.forward();\n+342 }, [&](auto id) -> decltype(auto) {\n+343 auto head = multiIndex[Dune::Indices::_0];\n+344 auto tail = multiIndex.pop();\n+345\n+346 return Imp::resolveStaticMultiIndex(id(c)[head], tail);\n+347 });\n+348 }\n+349\n+350} // namespace Imp\n+351\n+352\n+353\n+376template\n+_\b3_\b7_\b7constexpr decltype(auto) _\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(C&& c, const MultiIndex&\n+multiIndex, const IsFinal& isFinal)\n+378{\n+379 return Imp::resolveDynamicMultiIndex(std::forward(c), Imp::\n+shiftedDynamicMultiIndex<0>(multiIndex), isFinal);\n+380}\n+381\n+398template\n+_\b3_\b9_\b9constexpr decltype(auto) _\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(C&& c, const MultiIndex&\n+multiIndex)\n+400{\n+401 auto hasNoIndexAccess = _\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be(_\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk([](auto&& cc) -\n+> std::void_t {}));\n+402 return Imp::resolveDynamicMultiIndex(std::forward(c), Imp::\n+shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);\n+403}\n+404\n+420template\n+_\b4_\b2_\b1constexpr decltype(auto) _\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(C&& c, const MultiIndex&\n+multiIndex)\n+422{\n+423 return Imp::resolveStaticMultiIndex(std::forward(c), Imp::\n+shiftedStaticMultiIndex<0>(multiIndex));\n+424}\n+425\n+426\n+427\n+428} // namespace Dune::Functions\n+429} // namespace Dune\n+430\n+431\n+432\n+433#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs\n+auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))\n+Provide operator[] index-access for containers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex\n+&multiIndex)\n+Provide multi-index access by chaining operator[].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:421\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk\n+auto callableCheck(Expression f)\n+Create a predicate for checking validity of expressions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:283\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n+&multiIndex, const IsFinal &isFinal)\n+Provide multi-index access by chaining operator[].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:377\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs\n+Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)\n+Provide multi-index access by chaining operator[].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:286\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be\n+auto negatePredicate(Check check)\n+Negate given predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:308\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be\n+auto forwardCapture(T &&t)\n+Create a capture object for perfect forwarding.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:376\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00056.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00056.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: functionconcepts.hh File Reference\n+dune-functions: signature.hh File Reference\n \n \n \n \n \n \n \n@@ -73,121 +73,49 @@\n \n \n
    \n \n-
    functionconcepts.hh File Reference
    \n+
    signature.hh File Reference
    \n
    \n
    \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+
    #include <type_traits>
    \n+#include <tuple>
    \n+#include <dune/functions/common/defaultderivativetraits.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    struct  Dune::Functions::Concept::Callable< Args >
     Concept objects that can be called with given argument list. More...
    struct  Dune::Functions::SignatureTraits< Signature, isCallable >
     Helper class to deduce the signature of a callable. More...
     
    struct  Dune::Functions::Concept::Function< Range(Domain)>
     Concept for a function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits >
     Concept for a differentiable function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext >
     Concept for a local function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits >
     Concept for a differentiable local function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::EntitySet
     Concept for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits> More...
     
    struct  Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >
     Concept for a grid function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >
     Concept for a differentiable grid function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView >
     Concept for a grid view function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits >
     Concept for a differentiable grid view function mapping Domain to Range. More...
    struct  Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT >
     Tag-class to encapsulate signature information. More...
     
    \n \n \n \n \n \n-\n-\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::Concept
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class F , class... Args>
    static constexpr auto Dune::Functions::Concept::isCallable ()
     Check if f is callable with given argument list.
     
    template<class F , class... Args>
    static constexpr auto Dune::Functions::Concept::isCallable (F &&, Args &&...)
     Check if f is callable with given argument list.
     
    template<class F , class Signature >
    static constexpr bool Dune::Functions::Concept::isFunction ()
     Check if F models the Function concept with given signature.
     
    template<class F , class Signature , template< class > class DerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isFunction (F &&f, SignatureTag< Signature, DerivativeTraits >)
     Check if f models the Function concept with given signature.
     
    template<class F , class Signature , template< class > class DerivativeTraits = DefaultDerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableFunction ()
     Check if F models the DifferentiableFunction concept with given signature.
     
    template<class F , class Signature , template< class > class DerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableFunction (F &&f, SignatureTag< Signature, DerivativeTraits >)
     Check if f models the DifferentiableFunction concept with given signature.
     
    template<class F , class Signature , class LocalContext >
    static constexpr bool Dune::Functions::Concept::isLocalFunction ()
     Check if F models the LocalFunction concept with given signature and local context.
     
    template<class F , class Signature , class LocalContext , template< class > class DerivativeTraits = DefaultDerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableLocalFunction ()
     Check if F models the DifferentiableLocalFunction concept with given signature and local context.
     
    template<class E >
    static constexpr bool Dune::Functions::Concept::isEntitySet ()
     Check if F models the GridFunction concept with given signature and entity set.
     
    template<class F , class Signature , class EntitySet >
    static constexpr bool Dune::Functions::Concept::isGridFunction ()
     Check if F models the GridFunction concept with given signature and entity set.
     
    template<class F , class Signature , class EntitySet , template< class > class DerivativeTraits = DefaultDerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableGridFunction ()
     Check if F models the DifferentiableGridFunction concept with given signature and entity set.
     
    template<class F , class Signature , class GridView >
    static constexpr bool Dune::Functions::Concept::isGridViewFunction ()
     Check if F models the GridViewFunction concept with given signature.
     
    template<class F , class Signature , class GridView , template< class > class DerivativeTraits = DefaultDerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableGridViewFunction ()
     Check if F models the DifferentiableGridViewFunction concept with given signature.
     
    template<class Range , class Domain , template< class > class DerivativeTraits>
    auto Dune::Functions::derivativeSignatureTag (SignatureTag< Range(Domain), DerivativeTraits > tag)
     Construct SignatureTag for derivative.
     
    template<std::size_t maxOrder, class Signature , template< class > class DerivativeTraits>
    auto Dune::Functions::derivativeSignatureTags (Dune::Functions::SignatureTag< Signature, DerivativeTraits > tag)
     Construct SignatureTags for derivatives.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,135 +2,39 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-functionconcepts.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+signature.hh File Reference\n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bA_\br_\bg_\bs_\b _\b>\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt objects that can be called with given argument list. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b _\b>\n+\u00a0 Helper class to deduce the signature of a callable. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b>\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n- _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a differentiable function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b _\b>\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a local function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n- _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a differentiable local function mapping Domain to Range.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for an entity set for a Concept::GridFunction _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b _\b>\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a grid function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n- _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a differentiable grid function mapping Domain to Range.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b _\b>\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a grid view function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be\n- _\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a differentiable grid view function mapping Domain to\n- Range. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\bT_\b _\b>\n+\u00a0 Tag-class to encapsulate signature information. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-static constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be ()\n-\u00a0 Check if f is callable with given argument list.\n-\u00a0\n-template\n-static constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be (F &&, Args &&...)\n-\u00a0 Check if f is callable with given argument list.\n-\u00a0\n-template\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n-\u00a0 Check if F models the _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n- signature.\n-\u00a0\n-template class DerivativeTraits>\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F &&f,\n- _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg< Signature, DerivativeTraits >)\n-\u00a0 Check if f models the _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n- signature.\n-\u00a0\n-template class DerivativeTraits =\n-DefaultDerivativeTraits>\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n-\u00a0 Check if F models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept\n- with given signature.\n-\u00a0\n-template class DerivativeTraits>\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F\n- &&f, _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg< Signature, DerivativeTraits >)\n-\u00a0 Check if f models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept\n- with given signature.\n-\u00a0\n-template\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n-\u00a0 Check if F models the _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n- signature and local context.\n-\u00a0\n-template\n-class DerivativeTraits = DefaultDerivativeTraits>\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n- ()\n-\u00a0 Check if F models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n- concept with given signature and local context.\n-\u00a0\n-template\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt ()\n-\u00a0 Check if F models the _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n- signature and entity set.\n-\u00a0\n-template\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n-\u00a0 Check if F models the _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n- signature and entity set.\n-\u00a0\n-template class\n-DerivativeTraits = DefaultDerivativeTraits>\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n- ()\n-\u00a0 Check if F models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept\n- with given signature and entity set.\n-\u00a0\n-template\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n-\u00a0 Check if F models the _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with\n- given signature.\n-\u00a0\n-template class\n-DerivativeTraits = DefaultDerivativeTraits>\n-static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:\n- _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n-\u00a0 Check if F models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n- concept with given signature.\n+template class\n+DerivativeTraits>\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg (_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg< Range(Domain),\n+ DerivativeTraits > tag)\n+\u00a0 Construct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg for derivative.\n+\u00a0\n+template class\n+DerivativeTraits>\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\bs (_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg<\n+ Signature, DerivativeTraits > tag)\n+\u00a0 Construct SignatureTags for derivatives.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: functionconcepts.hh Source File\n+dune-functions: signature.hh Source File\n \n \n \n \n \n \n \n@@ -74,370 +74,168 @@\n \n \n
    \n
    \n-
    functionconcepts.hh
    \n+
    signature.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n
    9
    \n-
    10#include <dune/common/typelist.hh>
    \n-
    11#include <dune/common/concept.hh>
    \n+
    10#include <type_traits>
    \n+
    11#include <tuple>
    \n
    12
    \n-\n-\n-\n-
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n-
    19namespace Concept {
    \n-
    20
    \n-
    21using namespace Dune::Concept;
    \n-
    22
    \n-
    23
    \n-
    24
    \n-
    25// Callable concept ############################################################
    \n-
    26
    \n-
    27
    \n-
    35template<class... Args>
    \n-
    \n-\n-
    37{
    \n-
    38 template<class F>
    \n-
    39 auto require(F&& f) -> decltype(
    \n-
    40 f(std::declval<Args>()...)
    \n-
    41 );
    \n-
    42};
    \n-
    \n-
    43
    \n-
    50template<class F, class... Args>
    \n-
    \n-
    51static constexpr auto isCallable()
    \n-
    52{ return models<Concept::Callable<Args...>, F>(); }
    \n-
    \n+\n+
    14
    \n+
    15namespace Dune {
    \n+
    16namespace Functions {
    \n+
    17
    \n+
    23template<typename F>
    \n+\n+
    25
    \n+
    26#ifndef DOXYGEN
    \n+
    27template<typename F>
    \n+
    28struct IsCallable
    \n+
    29{
    \n+
    30 struct yes { std::size_t dummy[2]; };
    \n+
    31 struct no { std::size_t dummy[1]; };
    \n+
    32
    \n+
    33 template<typename C>
    \n+
    34 static yes test(const decltype(&C::operator()) *);
    \n+
    35 template<typename C>
    \n+
    36 static no test(...);
    \n+
    37
    \n+
    38 enum { value = (sizeof(test<F>(0)) == sizeof(yes)) };
    \n+
    39};
    \n+
    40
    \n+
    41template<typename R, typename D>
    \n+
    42struct IsCallable<R(D)>
    \n+
    43{
    \n+
    44 enum { value = true };
    \n+
    45};
    \n+
    46
    \n+
    47template<typename R, typename D>
    \n+
    48struct IsCallable<R(*)(D)>
    \n+
    49{
    \n+
    50 enum { value = true };
    \n+
    51};
    \n+
    52#endif
    \n
    53
    \n-
    60template<class F, class... Args>
    \n-
    \n-
    61static constexpr auto isCallable(F&&, Args&&...)
    \n-
    62{
    \n-
    63 return models<Concept::Callable<Args&&...>, F>();
    \n-
    64}
    \n-
    \n-
    65
    \n-
    66
    \n-
    67
    \n-
    68// Function concept ############################################################
    \n-
    69template<class Signature>
    \n-
    70struct Function;
    \n-
    71
    \n-
    80template<class Range, class Domain>
    \n-
    \n-
    81struct Function<Range(Domain)> : Refines<Callable<Domain> >
    \n-
    82{
    \n-
    83 template<class F>
    \n-
    84 auto require(F&& f) -> decltype(
    \n-
    85 // F models Function<Range(Domain)> if the result of F(Domain) is implicitly convertible to Range
    \n-
    86 requireConvertible<Range>(f(std::declval<Domain>()))
    \n-
    87 );
    \n-
    88};
    \n-
    \n-
    89
    \n-
    91template<class F, class Signature>
    \n-
    \n-
    92static constexpr bool isFunction()
    \n-
    93{ return models<Concept::Function<Signature>, F>(); }
    \n-
    \n-
    94
    \n-
    96template<class F, class Signature, template<class> class DerivativeTraits>
    \n-
    \n-\n-
    98{ return models<Concept::Function<Signature>, F>(); }
    \n-
    \n-
    99
    \n-
    100
    \n-
    101
    \n-
    102// DifferentiableFunction concept ##############################################
    \n-
    103template<class Signature, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-\n-
    105
    \n-
    117template<class Range, class Domain, template<class> class DerivativeTraits>
    \n+
    59template<class Signature, bool isCallable = IsCallable<Signature>::value >
    \n+\n+
    61
    \n+
    62#ifndef DOXYGEN
    \n+
    64template<class T>
    \n+
    65struct SignatureTraits<T, true>
    \n+
    66 : public SignatureTraits<decltype(&T::operator()), true>
    \n+
    67{};
    \n+
    68
    \n+
    70template <typename C, typename R, typename D>
    \n+
    71struct SignatureTraits<R(C::*)(D) const, true>
    \n+
    72 : public SignatureTraits<R(D), true>
    \n+
    73{};
    \n+
    74
    \n+
    76template <typename C, typename R, typename D>
    \n+
    77struct SignatureTraits<R(C::*)(D), true>
    \n+
    78 : public SignatureTraits<R(D), true>
    \n+
    79{};
    \n+
    80
    \n+
    82template <typename R, typename D>
    \n+
    83struct SignatureTraits<R(*)(D), true>
    \n+
    84 : public SignatureTraits<R(D), true>
    \n+
    85{};
    \n+
    86
    \n+
    88template<class R, class D>
    \n+
    89struct SignatureTraits<R(D), true>
    \n+
    90{
    \n+
    91 using Range = R;
    \n+
    92 using Domain = D;
    \n+
    93
    \n+
    94 using RawRange = std::decay_t<Range>;
    \n+
    95 using RawDomain = std::decay_t<Domain>;
    \n+
    96
    \n+
    97 using RawSignature = RawRange(RawDomain);
    \n+
    98
    \n+
    99 template<template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+
    100 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n+
    101};
    \n+
    102#endif
    \n+
    103
    \n+
    104
    \n+
    105template<class Signature, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+\n+
    107
    \n+
    117template<class Range, class Domain, template<class> class DerivativeTraitsT>
    \n
    \n-
    118struct DifferentiableFunction<Range(Domain), DerivativeTraits> : Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n+
    118struct SignatureTag<Range(Domain), DerivativeTraitsT>
    \n
    119{
    \n-\n+
    120 using Signature = Range(Domain);
    \n
    121
    \n-
    122 template<class F>
    \n-
    123 auto require(F&& f) -> decltype(
    \n-
    124 derivative(f),
    \n-
    125 requireConcept<Function<DerivativeSignature>>(derivative(f))
    \n-
    126 );
    \n-
    127};
    \n+
    122 template<class T>
    \n+
    123 using DerivativeTraits = DerivativeTraitsT<T>;
    \n+
    124};
    \n+
    \n+
    125
    \n+
    126
    \n+
    127
    \n+
    136template<class Range, class Domain, template<class> class DerivativeTraits>
    \n+
    \n+
    137auto derivativeSignatureTag(SignatureTag<Range(Domain), DerivativeTraits> tag)
    \n+
    138{
    \n+
    139 using DerivativeRange = typename DerivativeTraits<Range(Domain)>::Range;
    \n+\n+
    141}
    \n
    \n-
    128
    \n-
    130template<class F, class Signature, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-
    \n-
    131static constexpr bool isDifferentiableFunction()
    \n-
    132{ return models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }
    \n-
    \n-
    133
    \n-
    135template<class F, class Signature, template<class> class DerivativeTraits>
    \n-
    \n-\n-
    137{ return models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }
    \n-
    \n-
    138
    \n-
    139
    \n-
    140
    \n-
    141// LocalFunction concept ##############################################
    \n-
    142template<class Signature, class LocalContext>
    \n-\n+
    142
    \n+
    143
    \n
    144
    \n-
    154template<class Range, class Domain, class LocalContext>
    \n-
    \n-
    155struct LocalFunction<Range(Domain), LocalContext> :
    \n-
    156 Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n-
    157{
    \n-
    158 template<class F>
    \n-
    159 auto require(F&& f) -> decltype(
    \n-
    160 f.bind(std::declval<LocalContext>()),
    \n-
    161 f.unbind(),
    \n-
    162 requireConvertible<bool>(f.bound()),
    \n-
    163 f.localContext(),
    \n-
    164 requireConvertible<LocalContext>(f.localContext())
    \n-
    165 );
    \n-
    166};
    \n-
    \n-
    167
    \n-
    169template<class F, class Signature, class LocalContext>
    \n-
    \n-
    170static constexpr bool isLocalFunction()
    \n-
    171{ return models<Concept::LocalFunction<Signature, LocalContext>, F>(); }
    \n+
    158template<std::size_t maxOrder, class Signature, template<class> class DerivativeTraits>
    \n+
    \n+\n+
    160{
    \n+
    161 if constexpr (maxOrder==0) {
    \n+
    162 // If maxOrder== 0 we just need the given SignatureTag
    \n+
    163 return std::make_tuple(tag);
    \n+
    164 } else {
    \n+
    165 // else we first construct the tail tuple with SignatureTags for derivatives
    \n+
    166 // of order 1 to maxOrder
    \n+
    167 auto tailTagsTuple = derivativeSignatureTags<std::size_t(maxOrder-1)>(derivativeSignatureTag(tag));
    \n+
    168 // and prepend this with the given SignatureTag.
    \n+
    169 // This is done by unpacking the tail tuple with apply().
    \n+
    170 return std::apply([&](auto&&... tailTags){
    \n+
    171 return std::make_tuple(tag, tailTags...);
    \n+
    172 }, tailTagsTuple);
    \n+
    173 }
    \n+
    174}
    \n
    \n-
    172
    \n-
    173
    \n-
    174// DifferentiableLocalFunction concept ##############################################
    \n-
    175template<class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-\n+
    175
    \n+
    176
    \n
    177
    \n-
    190template<class Range, class Domain, class LocalContext, template<class> class DerivativeTraits>
    \n-
    \n-
    191struct DifferentiableLocalFunction<Range(Domain), LocalContext, DerivativeTraits> :
    \n-
    192 Refines<
    \n-
    193 Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,
    \n-
    194 Dune::Functions::Concept::LocalFunction<Range(Domain),LocalContext>
    \n-
    195 >
    \n-
    196{
    \n-
    197 template<class F>
    \n-
    198 auto require(F&& f) -> decltype(
    \n-
    199 f.bind(std::declval<LocalContext>()),
    \n-
    200 f.unbind(),
    \n-
    201 f.localContext(),
    \n-
    202 requireConvertible<LocalContext>(f.localContext())
    \n-
    203 );
    \n-
    204};
    \n-
    \n-
    205
    \n-
    207template<class F, class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-
    \n-
    208static constexpr bool isDifferentiableLocalFunction()
    \n-
    209{ return models<Concept::DifferentiableLocalFunction<Signature, LocalContext, DerivativeTraits>, F>(); }
    \n-
    \n-
    210
    \n-
    211
    \n-
    212// EntitySet concept ##############################################
    \n-
    213
    \n-
    \n-\n-
    224{
    \n-
    225 template<class E>
    \n-
    226 auto require(E&& f) -> decltype(
    \n-
    227 requireType<typename E::Element>(),
    \n-
    228 requireType<typename E::LocalCoordinate>(),
    \n-
    229 requireType<typename E::GlobalCoordinate>()
    \n-
    230 );
    \n-
    231};
    \n-
    \n-
    232
    \n-
    234template<class E>
    \n-
    \n-
    235static constexpr bool isEntitySet()
    \n-
    236{ return models<Concept::EntitySet, E>(); }
    \n-
    \n-
    237
    \n-
    238
    \n-
    239
    \n-
    240// GridFunction concept ##############################################
    \n-
    241template<class Signature, class EntitySet>
    \n-\n-
    243
    \n-
    253template<class Range, class Domain, class EntitySet>
    \n-
    \n-
    254struct GridFunction<Range(Domain), EntitySet> :
    \n-
    255 Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n-
    256{
    \n-
    257 using LocalSignature = Range(typename EntitySet::LocalCoordinate);
    \n-
    258 using LocalContext = typename EntitySet::Element;
    \n-
    259
    \n-
    260 template<class F>
    \n-
    261 auto require(F&& f) -> decltype(
    \n-
    262 localFunction(f),
    \n-
    263 f.entitySet(),
    \n-
    264 requireConcept<LocalFunction<LocalSignature, LocalContext>>(localFunction(f)),
    \n-
    265 requireConcept<Concept::EntitySet, EntitySet>(),
    \n-
    266 requireConvertible<EntitySet>(f.entitySet()),
    \n-
    267 requireConvertible<typename EntitySet::GlobalCoordinate, Domain>()
    \n-
    268 );
    \n-
    269};
    \n-
    \n-
    270
    \n-
    272template<class F, class Signature, class EntitySet>
    \n-
    \n-
    273static constexpr bool isGridFunction()
    \n-
    274{ return models<Concept::GridFunction<Signature, EntitySet>, F>(); }
    \n-
    \n-
    275
    \n-
    276
    \n-
    277// DifferentiableGridFunction concept ##############################################
    \n-
    278template<class Signature, class EntitySet, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-\n-
    280
    \n-
    293template<class Range, class Domain, class EntitySet, template<class> class DerivativeTraits>
    \n-
    \n-
    294struct DifferentiableGridFunction<Range(Domain), EntitySet, DerivativeTraits> :
    \n-
    295 Refines<
    \n-
    296 Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,
    \n-
    297 Dune::Functions::Concept::GridFunction<Range(Domain),EntitySet>
    \n-
    298 >
    \n-
    299{
    \n-
    300 using LocalSignature = Range(typename EntitySet::LocalCoordinate);
    \n-
    301 using LocalContext = typename EntitySet::Element;
    \n-
    302
    \n-
    303 template<class R>
    \n-\n-
    305
    \n-
    306 template<class F>
    \n-
    307 auto require(F&& f) -> decltype(
    \n-
    308 requireConcept<DifferentiableLocalFunction<LocalSignature, LocalContext, LocalDerivativeTraits>>(localFunction(f))
    \n-
    309 );
    \n-
    310};
    \n-
    \n-
    311
    \n-
    313template<class F, class Signature, class EntitySet, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-
    \n-
    314static constexpr bool isDifferentiableGridFunction()
    \n-
    315{ return models<Concept::DifferentiableGridFunction<Signature, EntitySet, DerivativeTraits>, F>(); }
    \n-
    \n-
    316
    \n-
    317
    \n-
    318
    \n-
    319// GridViewFunction concept ##############################################
    \n-
    320template<class Signature, class GridView>
    \n-\n-
    322
    \n-
    335template<class Range, class Domain, class GridView>
    \n-
    \n-
    336struct GridViewFunction<Range(Domain), GridView> :
    \n-
    337 Refines<Dune::Functions::Concept::GridFunction<Range(Domain), GridViewEntitySet<GridView,0>>>
    \n-
    338{
    \n-
    339 template<class F>
    \n-
    340 auto require(F&& f) -> decltype(
    \n-
    341 0 // We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet
    \n-
    342 );
    \n-
    343};
    \n-
    \n-
    344
    \n-
    346template<class F, class Signature, class GridView>
    \n-
    \n-
    347static constexpr bool isGridViewFunction()
    \n-
    348{ return models<Concept::GridViewFunction<Signature, GridView>, F>(); }
    \n-
    \n-
    349
    \n-
    350
    \n-
    351// DifferentiableGridViewFunction concept ##############################################
    \n-
    352template<class Signature, class GridView, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-\n-
    354
    \n-
    368template<class Range, class Domain, class GridView, template<class> class DerivativeTraits>
    \n-
    \n-
    369struct DifferentiableGridViewFunction<Range(Domain), GridView, DerivativeTraits> :
    \n-
    370 Refines<Dune::Functions::Concept::DifferentiableGridFunction<Range(Domain), GridViewEntitySet<GridView,0>, DerivativeTraits>>
    \n-
    371{
    \n-
    372 template<class F>
    \n-
    373 auto require(F&& f) -> decltype(
    \n-
    374 0 // We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet
    \n-
    375 );
    \n-
    376};
    \n-
    \n-
    377
    \n-
    379template<class F, class Signature, class GridView, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-
    \n-
    380static constexpr bool isDifferentiableGridViewFunction()
    \n-
    381{ return models<Concept::DifferentiableGridViewFunction<Signature, GridView, DerivativeTraits>, F>(); }
    \n-
    \n-
    382
    \n-
    383
    \n-
    384
    \n-
    385}}} // namespace Dune::Functions::Concept
    \n-
    386
    \n-
    387#endif // DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n-\n-\n-\n-
    static constexpr bool isGridFunction()
    Check if F models the GridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:273
    \n-
    static constexpr bool isDifferentiableLocalFunction()
    Check if F models the DifferentiableLocalFunction concept with given signature and local context.
    Definition functionconcepts.hh:208
    \n-
    static constexpr bool isFunction()
    Check if F models the Function concept with given signature.
    Definition functionconcepts.hh:92
    \n-
    static constexpr bool isDifferentiableGridViewFunction()
    Check if F models the DifferentiableGridViewFunction concept with given signature.
    Definition functionconcepts.hh:380
    \n-
    static constexpr bool isDifferentiableFunction()
    Check if F models the DifferentiableFunction concept with given signature.
    Definition functionconcepts.hh:131
    \n-
    static constexpr bool isGridViewFunction()
    Check if F models the GridViewFunction concept with given signature.
    Definition functionconcepts.hh:347
    \n-
    static constexpr bool isEntitySet()
    Check if F models the GridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:235
    \n-
    static constexpr bool isDifferentiableGridFunction()
    Check if F models the DifferentiableGridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:314
    \n-
    static constexpr bool isLocalFunction()
    Check if F models the LocalFunction concept with given signature and local context.
    Definition functionconcepts.hh:170
    \n-
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n-
    static constexpr auto isCallable()
    Check if f is callable with given argument list.
    Definition functionconcepts.hh:51
    \n+
    178} // namespace Functions
    \n+
    179} // namespace Dune
    \n+
    180
    \n+
    181#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n+\n+
    auto derivativeSignatureTag(SignatureTag< Range(Domain), DerivativeTraits > tag)
    Construct SignatureTag for derivative.
    Definition signature.hh:137
    \n+
    auto derivativeSignatureTags(Dune::Functions::SignatureTag< Signature, DerivativeTraits > tag)
    Construct SignatureTags for derivatives.
    Definition signature.hh:159
    \n
    Definition polynomial.hh:17
    \n-
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:41
    \n-
    Concept objects that can be called with given argument list.
    Definition functionconcepts.hh:37
    \n-
    auto require(F &&f) -> decltype(f(std::declval< Args >()...))
    \n-
    Definition functionconcepts.hh:70
    \n-
    auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval< Domain >())))
    \n-
    Definition functionconcepts.hh:104
    \n-
    typename SignatureTraits< Range(Domain)>::template DerivativeSignature< DerivativeTraits > DerivativeSignature
    Definition functionconcepts.hh:120
    \n-
    auto require(F &&f) -> decltype(derivative(f), requireConcept< Function< DerivativeSignature > >(derivative(f)))
    \n-
    Definition functionconcepts.hh:143
    \n-
    auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()), f.unbind(), requireConvertible< bool >(f.bound()), f.localContext(), requireConvertible< LocalContext >(f.localContext()))
    \n-\n-
    auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()), f.unbind(), f.localContext(), requireConvertible< LocalContext >(f.localContext()))
    \n-
    Concept for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits>
    Definition functionconcepts.hh:224
    \n-
    auto require(E &&f) -> decltype(requireType< typename E::Element >(), requireType< typename E::LocalCoordinate >(), requireType< typename E::GlobalCoordinate >())
    \n-
    Definition functionconcepts.hh:242
    \n-
    typename EntitySet::Element LocalContext
    Definition functionconcepts.hh:258
    \n-
    Range(typename EntitySet::LocalCoordinate) LocalSignature
    Definition functionconcepts.hh:257
    \n-
    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 >())
    \n-\n-
    typename Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits< R > LocalDerivativeTraits
    Definition functionconcepts.hh:304
    \n-
    auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction< LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))
    \n-
    Range(typename EntitySet::LocalCoordinate) LocalSignature
    Definition functionconcepts.hh:300
    \n-\n-
    Definition functionconcepts.hh:321
    \n-\n-\n-\n+
    Helper class to check that F is callable.
    Definition signature.hh:24
    \n
    Helper class to deduce the signature of a callable.
    Definition signature.hh:60
    \n
    Definition signature.hh:106
    \n-
    Derivative traits for local functions.
    Definition localderivativetraits.hh:32
    \n+
    DerivativeTraitsT< T > DerivativeTraits
    Definition signature.hh:123
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,465 +1,184 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-functionconcepts.hh\n+signature.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n-8#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n+8#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n 9\n-10#include \n-11#include \n+10#include \n+11#include \n 12\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n-16\n-17namespace _\bD_\bu_\bn_\be {\n-18namespace Functions {\n-19namespace Concept {\n-20\n-21using namespace Dune::Concept;\n-22\n-23\n-24\n-25// Callable concept\n-############################################################\n-26\n-27\n-35template\n-_\b3_\b6struct _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-37{\n-38 template\n-_\b3_\b9 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-40 f(std::declval()...)\n-41 );\n-42};\n-43\n-50template\n-_\b5_\b1static constexpr auto _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be()\n-52{ return models<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be, F>(); }\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+14\n+15namespace _\bD_\bu_\bn_\be {\n+16namespace Functions {\n+17\n+23template\n+_\b2_\b4struct _\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be;\n+25\n+26#ifndef DOXYGEN\n+27template\n+28struct _\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+29{\n+30 struct yes { std::size_t dummy[2]; };\n+31 struct no { std::size_t dummy[1]; };\n+32\n+33 template\n+34 static yes test(const decltype(&C::operator()) *);\n+35 template\n+36 static no test(...);\n+37\n+38 enum { value = (sizeof(test(0)) == sizeof(yes)) };\n+39};\n+40\n+41template\n+42struct IsCallable\n+43{\n+44 enum { value = true };\n+45};\n+46\n+47template\n+48struct IsCallable\n+49{\n+50 enum { value = true };\n+51};\n+52#endif\n 53\n-60template\n-_\b6_\b1static constexpr auto _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(F&&, Args&&...)\n-62{\n-63 return models<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be, F>();\n-64}\n-65\n-66\n-67\n-68// Function concept\n-############################################################\n-69template\n-_\b7_\b0struct _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-71\n-80template\n-_\b8_\b1struct _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn : Refines >\n-82{\n-83 template\n-_\b8_\b4 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-85 // F models Function if the result of F(Domain) is implicitly\n-convertible to Range\n-86 requireConvertible(f(std::declval()))\n-87 );\n-88};\n-89\n-91template\n-_\b9_\b2static constexpr bool _\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-93{ return models, F>(); }\n-94\n-96template class DerivativeTraits>\n-_\b9_\b7static constexpr bool _\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f, _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>)\n-98{ return models, F>(); }\n-99\n-100\n-101\n-102// DifferentiableFunction concept\n-##############################################\n-103template class DerivativeTraits =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n-_\b1_\b0_\b4struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-105\n-117template class DerivativeTraits>\n-_\b1_\b1_\b8struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-Refines >\n+59template::value >\n+_\b6_\b0struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs {};\n+61\n+62#ifndef DOXYGEN\n+64template\n+65struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n+66 : public _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n+67{};\n+68\n+70template \n+71struct SignatureTraits\n+72 : public SignatureTraits\n+73{};\n+74\n+76template \n+77struct SignatureTraits\n+78 : public SignatureTraits\n+79{};\n+80\n+82template \n+83struct SignatureTraits\n+84 : public SignatureTraits\n+85{};\n+86\n+88template\n+89struct SignatureTraits\n+90{\n+91 using Range = R;\n+92 using Domain = D;\n+93\n+94 using RawRange = std::decay_t;\n+95 using RawDomain = std::decay_t;\n+96\n+97 using RawSignature = RawRange(RawDomain);\n+98\n+99 template class DerivativeTraits=DefaultDerivativeTraits>\n+100 using DerivativeSignature = typename DerivativeTraits::Range\n+(Domain);\n+101};\n+102#endif\n+103\n+104\n+105template class\n+DerivativeTraits=DefaultDerivativeTraits>\n+_\b1_\b0_\b6struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg;\n+107\n+117template class DerivativeTraitsT>\n+_\b1_\b1_\b8struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n 119{\n-_\b1_\b2_\b0 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs::\n-template _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>;\n+_\b1_\b2_\b0 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n 121\n-122 template\n-_\b1_\b2_\b3 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-124 _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f),\n-125 requireConcept>(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f))\n-126 );\n-127};\n-128\n-130template class DerivativeTraits =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n-_\b1_\b3_\b1static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-132{ return models, F>(); }\n-133\n-135template class DerivativeTraits>\n-_\b1_\b3_\b6static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f,\n-_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>)\n-137{ return models, F>(); }\n-138\n-139\n-140\n-141// LocalFunction concept ##############################################\n-142template\n-_\b1_\b4_\b3struct _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+122 template\n+_\b1_\b2_\b3 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs = DerivativeTraitsT;\n+124};\n+125\n+126\n+127\n+136template class DerivativeTraits>\n+_\b1_\b3_\b7auto _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n+tag)\n+138{\n+139 using DerivativeRange = typename DerivativeTraits::Range;\n+140 return _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>();\n+141}\n+142\n+143\n 144\n-154template\n-_\b1_\b5_\b5struct _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-156 Refines >\n-157{\n-158 template\n-_\b1_\b5_\b9 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-160 f.bind(std::declval()),\n-161 f.unbind(),\n-162 requireConvertible(f.bound()),\n-163 f.localContext(),\n-164 requireConvertible(f.localContext())\n-165 );\n-166};\n-167\n-169template\n-_\b1_\b7_\b0static constexpr bool _\bi_\bs_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-171{ return models, F>(); }\n-172\n-173\n-174// DifferentiableLocalFunction concept\n-##############################################\n-175template class\n-DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n-_\b1_\b7_\b6struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-177\n-190template\n-class DerivativeTraits>\n-_\b1_\b9_\b1struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-192 Refines<\n-193 Dune::Functions::Concept::DifferentiableFunction,\n-194 Dune::Functions::Concept::LocalFunction\n-195 >\n-196{\n-197 template\n-_\b1_\b9_\b8 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-199 f.bind(std::declval()),\n-200 f.unbind(),\n-201 f.localContext(),\n-202 requireConvertible(f.localContext())\n-203 );\n-204};\n-205\n-207template class\n-DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n-_\b2_\b0_\b8static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-209{ return models, F>(); }\n-210\n-211\n-212// EntitySet concept ##############################################\n-213\n-_\b2_\b2_\b3struct _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-224{\n-225 template\n-_\b2_\b2_\b6 auto _\br_\be_\bq_\bu_\bi_\br_\be(E&& f) -> decltype(\n-227 requireType(),\n-228 requireType(),\n-229 requireType()\n-230 );\n-231};\n-232\n-234template\n-_\b2_\b3_\b5static constexpr bool _\bi_\bs_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt()\n-236{ return models(); }\n-237\n-238\n-239\n-240// GridFunction concept ##############################################\n-241template\n-_\b2_\b4_\b2struct _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-243\n-253template\n-_\b2_\b5_\b4struct _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-255 Refines >\n-256{\n-_\b2_\b5_\b7 using _\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(typename EntitySet::LocalCoordinate);\n-_\b2_\b5_\b8 using _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt = typename EntitySet::Element;\n-259\n-260 template\n-_\b2_\b6_\b1 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-262 localFunction(f),\n-263 f.entitySet(),\n-264 requireConcept>(localFunction\n-(f)),\n-265 requireConcept(),\n-266 requireConvertible(f.entitySet()),\n-267 requireConvertible()\n-268 );\n-269};\n-270\n-272template\n-_\b2_\b7_\b3static constexpr bool _\bi_\bs_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-274{ return models, F>(); }\n-275\n-276\n-277// DifferentiableGridFunction concept\n-##############################################\n-278template class\n-DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n-_\b2_\b7_\b9struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-280\n-293template class\n-DerivativeTraits>\n-_\b2_\b9_\b4struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-295 Refines<\n-296 Dune::Functions::Concept::DifferentiableFunction,\n-297 Dune::Functions::Concept::GridFunction\n-298 >\n-299{\n-_\b3_\b0_\b0 using _\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(typename EntitySet::LocalCoordinate);\n-_\b3_\b0_\b1 using _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt = typename EntitySet::Element;\n-302\n-303 template\n-_\b3_\b0_\b4 using _\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs = typename _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be Traits;\n-305\n-306 template\n-_\b3_\b0_\b7 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-308 requireConcept>(localFunction(f))\n-309 );\n-310};\n-311\n-313template class\n-DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n-_\b3_\b1_\b4static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-315{ return models, F>(); }\n-316\n-317\n-318\n-319// GridViewFunction concept ##############################################\n-320template\n-_\b3_\b2_\b1struct _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-322\n-335template\n-_\b3_\b3_\b6struct _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-337 Refines>>\n-338{\n-339 template\n-_\b3_\b4_\b0 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-341 0 // We don't need to check any further expressions, because a\n-GridViewFunction is just a GridFunction with a special EntitySet\n-342 );\n-343};\n-344\n-346template\n-_\b3_\b4_\b7static constexpr bool _\bi_\bs_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-348{ return models, F>(); }\n-349\n-350\n-351// DifferentiableGridViewFunction concept\n-##############################################\n-352template class\n-DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n-_\b3_\b5_\b3struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-354\n-368template class\n+158template class\n DerivativeTraits>\n-_\b3_\b6_\b9struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-370 Refines, DerivativeTraits>>\n-371{\n-372 template\n-_\b3_\b7_\b3 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-374 0 // We don't need to check any further expressions, because a\n-GridViewFunction is just a GridFunction with a special EntitySet\n-375 );\n-376};\n-377\n-379template class\n-DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n-_\b3_\b8_\b0static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-381{ return models, F>(); }\n-382\n-383\n-384\n-385}}} // namespace Dune::Functions::Concept\n-386\n-387#endif // DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n-_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\n-_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-static constexpr bool isGridFunction()\n-Check if F models the GridFunction concept with given signature and entity set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:273\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-static constexpr bool isDifferentiableLocalFunction()\n-Check if F models the DifferentiableLocalFunction concept with given signature\n-and local context.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:208\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-static constexpr bool isFunction()\n-Check if F models the Function concept with given signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:92\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-static constexpr bool isDifferentiableGridViewFunction()\n-Check if F models the DifferentiableGridViewFunction concept with given\n-signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:380\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-static constexpr bool isDifferentiableFunction()\n-Check if F models the DifferentiableFunction concept with given signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:131\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-static constexpr bool isGridViewFunction()\n-Check if F models the GridViewFunction concept with given signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:347\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-static constexpr bool isEntitySet()\n-Check if F models the GridFunction concept with given signature and entity set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:235\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-static constexpr bool isDifferentiableGridFunction()\n-Check if F models the DifferentiableGridFunction concept with given signature\n-and entity set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:314\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-static constexpr bool isLocalFunction()\n-Check if F models the LocalFunction concept with given signature and local\n-context.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:170\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n-TrigonometricFunction< K, sinFactor, cosFactor > &f)\n-Obtain derivative of TrigonometricFunction function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-static constexpr auto isCallable()\n-Check if f is callable with given argument list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:51\n+_\b1_\b5_\b9auto _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b> tag)\n+160{\n+161 if constexpr (maxOrder==0) {\n+162 // If maxOrder== 0 we just need the given SignatureTag\n+163 return std::make_tuple(tag);\n+164 } else {\n+165 // else we first construct the tail tuple with SignatureTags for\n+derivatives\n+166 // of order 1 to maxOrder\n+167 auto tailTagsTuple = _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\bs\n+(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg(tag));\n+168 // and prepend this with the given SignatureTag.\n+169 // This is done by unpacking the tail tuple with apply().\n+170 return std::apply([&](auto&&... tailTags){\n+171 return std::make_tuple(tag, tailTags...);\n+172 }, tailTagsTuple);\n+173 }\n+174}\n+175\n+176\n+177\n+178} // namespace Functions\n+179} // namespace Dune\n+180\n+181#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n+auto derivativeSignatureTag(SignatureTag< Range(Domain), DerivativeTraits >\n+tag)\n+Construct SignatureTag for derivative.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:137\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\bs\n+auto derivativeSignatureTags(Dune::Functions::SignatureTag< Signature,\n+DerivativeTraits > tag)\n+Construct SignatureTags for derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:159\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Default implementation for derivative traits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:41\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-Concept objects that can be called with given argument list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:37\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n-auto require(F &&f) -> decltype(f(std::declval< Args >()...))\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:70\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n-auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval<\n-Domain >())))\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:104\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-typename SignatureTraits< Range(Domain)>::template DerivativeSignature<\n-DerivativeTraits > DerivativeSignature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:120\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n-auto require(F &&f) -> decltype(derivative(f), requireConcept< Function<\n-DerivativeSignature > >(derivative(f)))\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:143\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\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-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:176\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n-auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()),\n-f.unbind(), f.localContext(), requireConvertible< LocalContext >(f.localContext\n-()))\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-Concept for an entity set for a Concept::GridFunction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:224\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n-auto require(E &&f) -> decltype(requireType< typename E::Element >(),\n-requireType< typename E::LocalCoordinate >(), requireType< typename E::\n-GlobalCoordinate >())\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:242\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b _\b>_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt\n-typename EntitySet::Element LocalContext\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:258\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b _\b>_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-Range(typename EntitySet::LocalCoordinate) LocalSignature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:257\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\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-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:279\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-typename Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits\n->::template Traits< R > LocalDerivativeTraits\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:304\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n-auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction<\n-LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-Range(typename EntitySet::LocalCoordinate) LocalSignature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:300\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt\n-typename EntitySet::Element LocalContext\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:301\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:321\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n-auto require(F &&f) -> decltype(0)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:353\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n-auto require(F &&f) -> decltype(0)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+Helper class to check that F is callable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:24\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n Helper class to deduce the signature of a callable.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:60\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Derivative traits for local functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:32\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\bT_\b _\b>_\b:_\b:\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+DerivativeTraitsT< T > DerivativeTraits\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:123\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\bT_\b _\b>_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+Range(Domain) Signature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:120\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: multiindex.hh File Reference\n+dune-functions: utility.hh File Reference\n \n \n \n \n \n \n \n@@ -72,48 +72,90 @@\n
  • dune
  • functions
  • common
  • \n
    \n \n
    \n \n-
    multiindex.hh File Reference
    \n+
    utility.hh File Reference
    \n
    \n
    \n-
    #include <cstddef>
    \n-#include <array>
    \n-#include <iostream>
    \n-#include <dune/common/hash.hh>
    \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
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::StaticMultiIndex< size_type, n >
     A statically sized MultiIndex type. More...
    struct  Dune::Functions::LastType< T >
     Get last entry of type list. More...
     
    class  Dune::Functions::StaticMultiIndex< size_type, 1 >
     A statically sized MultiIndex type. More...
     
    struct  std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > >
    struct  Dune::Functions::RotateTuple< T >
     Rotate type list by one, such that last entry is moved to first position. More...
     
    \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n+Typedefs

    template<template< class... > class T, class ArgTuple >
    using Dune::Functions::ExpandTuple = typename Imp::ExpandTupleHelper< T, ArgTuple >::Type
     Expand tuple arguments as template arguments.
     
    template<template< class... > class F, class... Tuples>
    using Dune::Functions::TransformTuple = typename Imp::TransformTupleHelper< F, Tuples... >::Type
     Transform tuple types argument using type-functor.
     
    template<class IntegerSequence >
    using Dune::Functions::IntegerSequenceTuple = typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type
     Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>
     
    \n \n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<typename Stream , class size_type , std::size_t n>
    Stream & Dune::Functions::operator<< (Stream &stream, const StaticMultiIndex< size_type, n > &c)
     
    template<class F , class size_type , size_type firstValue, class... Args>
    auto Dune::Functions::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)...))
     
    template<class F , class size_type , size_type firstValue, size_type secondValue, size_type... otherValues, class... Args>
    auto Dune::Functions::forwardAsStaticInteger (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)...))
     
    template<std::size_t end, class F , class size_type , class... Args>
    auto Dune::Functions::forwardAsStaticIndex (const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))
     Transform dynamic index to static index_constant.
     
    template<class F , class... T>
    auto Dune::Functions::transformTuple (F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >{}))
     Transform tuple value using a functor.
     
    template<class F , class... T1, class... T2>
    auto Dune::Functions::transformTuple (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... >{}))
     Transform tuple value using a binary functor.
     
    template<class Expression >
    auto Dune::Functions::callableCheck (Expression f)
     Create a predicate for checking validity of expressions.
     
    template<class Check >
    auto Dune::Functions::negatePredicate (Check check)
     Negate given predicate.
     
    template<class T >
    auto Dune::Functions::forwardCapture (T &&t)
     Create a capture object for perfect forwarding.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,92 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-multiindex.hh File Reference\n-#include \n-#include \n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+utility.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\bn_\b _\b>\n-\u00a0 A statically sized MultiIndex type. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bs_\bt_\bT_\by_\bp_\be_\b<_\b _\bT_\b _\b>\n+\u00a0 Get last entry of type list. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>\n-\u00a0 A statically sized MultiIndex type. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bs_\bt_\bd_\b:_\b:_\bt_\bu_\bp_\bl_\be_\b__\bs_\bi_\bz_\be_\b<_\b _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\bn_\b _\b>_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be_\b<_\b _\bT_\b _\b>\n+\u00a0 Rotate type list by one, such that last entry is moved to first\n+ position. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template class T, class ArgTuple >\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\ba_\bn_\bd_\bT_\bu_\bp_\bl_\be = typename Imp::ExpandTupleHelper< T,\n+ ArgTuple >::Type\n+\u00a0 Expand tuple arguments as template arguments.\n+\u00a0\n+template class F, class... Tuples>\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be = typename Imp::TransformTupleHelper< F,\n+ Tuples... >::Type\n+\u00a0 Transform tuple types argument using type-functor.\n+\u00a0\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be_\bT_\bu_\bp_\bl_\be = typename Imp::\n+ IntegerSequenceTupleHelper< IntegerSequence >::Type\n+\u00a0 Transform integer_sequence to tuple...>\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-Stream &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b< (Stream &stream, const _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx<\n- size_type, n > &c)\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br (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\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br (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\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bd_\be_\bx (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.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be (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.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be (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.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk (Expression f)\n+\u00a0 Create a predicate for checking validity of expressions.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be (Check check)\n+\u00a0 Negate given predicate.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be (T &&t)\n+\u00a0 Create a capture object for perfect forwarding.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: multiindex.hh Source File\n+dune-functions: utility.hh Source File\n \n \n \n \n \n \n \n@@ -74,123 +74,308 @@\n \n \n
    \n
    \n-
    multiindex.hh
    \n+
    utility.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n
    9
    \n-
    10#include <cstddef>
    \n-
    11#include <array>
    \n-
    12#include <iostream>
    \n+
    10
    \n+
    11#include <utility>
    \n+
    12#include <type_traits>
    \n
    13
    \n-
    14#include <dune/common/hash.hh>
    \n-
    15
    \n+
    14#include <dune/common/overloadset.hh>
    \n+
    15#include <dune/common/indices.hh>
    \n
    16
    \n-
    17namespace Dune::Functions {
    \n+\n
    18
    \n-
    19
    \n-
    20
    \n-
    26template<class size_type, std::size_t n>
    \n-
    \n-\n-
    28 public std::array<size_type, n>
    \n-
    29{
    \n-
    30public:
    \n-
    31 static constexpr std::size_t size() { return n; }
    \n-
    32 static constexpr std::size_t max_size() { return n; }
    \n-
    33
    \n-
    \n-
    34 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {
    \n-
    35 return hash_range(v.begin(), v.end());
    \n-
    36 }
    \n-
    \n-
    37
    \n-
    38};
    \n+
    19namespace Dune {
    \n+
    20namespace Functions {
    \n+
    21
    \n+
    22
    \n+
    23
    \n+
    24template<class F, class size_type, size_type firstValue, class... Args>
    \n+
    \n+
    25auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue> values, const size_type& i, F&& f, Args&&... args)
    \n+
    26 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
    \n+
    27{
    \n+
    28 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
    \n+
    29}
    \n+
    \n+
    30
    \n+
    31template<class F, class size_type, size_type firstValue, size_type secondValue, size_type... otherValues, class... Args>
    \n+
    \n+
    32auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue, secondValue, otherValues...> values, const size_type i, F&& f, Args&&... args)
    \n+
    33 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
    \n+
    34{
    \n+
    35 if (i==firstValue)
    \n+
    36 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
    \n+
    37 return forwardAsStaticInteger(std::integer_sequence<size_type, secondValue, otherValues...>(), i, std::forward<F>(f), std::forward<Args>(args)...);
    \n+
    38}
    \n
    \n
    39
    \n
    40
    \n
    41
    \n-
    51template<class size_type>
    \n-
    \n-
    52class StaticMultiIndex<size_type,1> :
    \n-
    53 public std::array<size_type, 1>
    \n-
    54{
    \n-
    55public:
    \n-
    56
    \n-
    57 static constexpr std::size_t size() { return 1; }
    \n-
    58 static constexpr std::size_t max_size() { return 1; }
    \n-
    59
    \n-
    60
    \n-
    \n-
    61 operator const size_type& () const {
    \n-
    62 return (*this)[0];
    \n-
    63 }
    \n-
    \n-
    64
    \n-
    \n-
    65 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {
    \n-
    66 return hash_range(v.begin(), v.end());
    \n-
    67 }
    \n-
    \n-
    68
    \n-
    \n-
    69 operator size_type& () {
    \n-
    70 return (*this)[0];
    \n-
    71 }
    \n-
    \n-
    72
    \n-
    73};
    \n-
    \n-
    74
    \n-
    75
    \n-
    76
    \n-
    77template<typename Stream, class size_type, std::size_t n>
    \n-
    \n-
    78inline Stream& operator<<(Stream& stream, const StaticMultiIndex<size_type,n>& c) {
    \n-
    79 for (const auto& ci : c)
    \n-
    80 stream << ci << " ";
    \n-
    81 return stream;
    \n-
    82}
    \n-
    \n+
    63template<std::size_t end, class F, class size_type, class... Args>
    \n+
    \n+
    64auto forwardAsStaticIndex(const size_type& i, F&& f, Args&&... args)
    \n+
    65 ->decltype(f(Dune::Indices::_0, std::forward<Args>(args)...))
    \n+
    66{
    \n+
    67 return forwardAsStaticInteger(std::make_index_sequence<end>{}, i, std::forward<F>(f), std::forward<Args>(args)...);
    \n+
    68}
    \n+
    \n+
    69
    \n+
    70
    \n+
    71
    \n+
    72namespace Imp {
    \n+
    73
    \n+
    74 template<template<class...> class T, class List>
    \n+
    75 struct ExpandTupleHelper
    \n+
    76 {};
    \n+
    77
    \n+
    78 template<template<class...> class T, template<class...> class ListType, class... Args>
    \n+
    79 struct ExpandTupleHelper<T, ListType<Args...>>
    \n+
    80 {
    \n+
    81 using Type = T<Args...>;
    \n+
    82 };
    \n
    83
    \n-
    84
    \n+
    84} // end namespace Imp
    \n
    85
    \n-
    86} // namespace Dune::Functions
    \n-
    87
    \n-
    88template<class size_type, std::size_t n>
    \n-
    \n-
    89struct std::tuple_size< Dune::Functions::StaticMultiIndex<size_type,n> >
    \n-
    90 : std::integral_constant<std::size_t, n> { };
    \n-
    \n-
    91
    \n-
    92DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(typename size_type, std::size_t n),DUNE_HASH_TYPE(Dune::Functions::StaticMultiIndex<size_type,n>))
    \n-
    93
    \n-
    94#endif // DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n+
    97template<template<class...> class T, class ArgTuple>
    \n+
    98using ExpandTuple = typename Imp::ExpandTupleHelper<T, ArgTuple>::Type;
    \n+
    99
    \n+
    100
    \n+
    101
    \n+
    102namespace Imp {
    \n+
    103
    \n+
    104 template<template<class...> class T, class... Tuple>
    \n+
    105 struct TransformTupleHelper
    \n+
    106 {};
    \n+
    107
    \n+
    108 template<template<class...> class T, class... Args1>
    \n+
    109 struct TransformTupleHelper<T, typename std::tuple<Args1...>>
    \n+
    110 {
    \n+
    111 using Type = std::tuple<T<Args1>...>;
    \n+
    112 };
    \n+
    113
    \n+
    114 template<template<class...> class T, class... Args1, class... Args2>
    \n+
    115 struct TransformTupleHelper<T, typename std::tuple<Args1...>, typename std::tuple<Args2...>>
    \n+
    116 {
    \n+
    117 using Type = std::tuple<T<Args1, Args2>...>;
    \n+
    118 };
    \n+
    119
    \n+
    120} // end namespace Imp
    \n+
    121
    \n+
    134template<template<class...> class F, class... Tuples>
    \n+
    135using TransformTuple = typename Imp::TransformTupleHelper<F, Tuples...>::Type;
    \n+
    136
    \n+
    137
    \n+
    138
    \n+
    139namespace Imp {
    \n+
    140
    \n+
    141 template<class F, class... T, std::size_t... k>
    \n+
    142 auto transformTupleHelper(F&& f, const std::tuple<T...>& tuple, std::index_sequence<k...>)
    \n+
    143 -> decltype(std::make_tuple(f(std::get<k>(tuple))...))
    \n+
    144 {
    \n+
    145 return std::make_tuple(f(std::get<k>(tuple))...);
    \n+
    146 }
    \n+
    147
    \n+
    148 template<class F, class... T1, class...T2, std::size_t... k>
    \n+
    149 auto transformTupleHelper(F&& f, const std::tuple<T1...>& tuple1, const std::tuple<T2...>& tuple2, std::index_sequence<k...>)
    \n+
    150 -> decltype(std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...))
    \n+
    151 {
    \n+
    152 return std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...);
    \n+
    153 }
    \n+
    154
    \n+
    155} // end namespace Imp
    \n+
    156
    \n+
    168template<class F, class... T>
    \n+
    \n+
    169auto transformTuple(F&& f, const std::tuple<T...>& tuple)
    \n+
    170 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{}))
    \n+
    171{
    \n+
    172 return Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{});
    \n+
    173}
    \n+
    \n+
    174
    \n+
    188template<class F, class... T1, class... T2>
    \n+
    \n+
    189auto transformTuple(F&& f, const std::tuple<T1...>& tuple1, const std::tuple<T2...>& tuple2)
    \n+
    190 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{}))
    \n+
    191{
    \n+
    192 return Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{});
    \n+
    193}
    \n+
    \n+
    194
    \n+
    195
    \n+
    196
    \n+
    197namespace Imp {
    \n+
    198
    \n+
    199 template<class IntegerSequence>
    \n+
    200 struct IntegerSequenceTupleHelper
    \n+
    201 {};
    \n+
    202
    \n+
    203 template<class I, I... k>
    \n+
    204 struct IntegerSequenceTupleHelper<std::integer_sequence<I, k...>>
    \n+
    205 {
    \n+
    206 using Type = std::tuple<std::integral_constant<I, k>...>;
    \n+
    207 };
    \n+
    208
    \n+
    209} // end namespace Imp
    \n+
    210
    \n+
    214template<class IntegerSequence>
    \n+
    215using IntegerSequenceTuple= typename Imp::IntegerSequenceTupleHelper<IntegerSequence>::Type;
    \n+
    216
    \n+
    217
    \n+
    218
    \n+
    224template<class... T>
    \n+
    \n+\n+
    226{
    \n+
    227 using type = std::tuple_element_t<sizeof...(T)-1, std::tuple<T...>>;
    \n+
    228};
    \n+
    \n+
    229
    \n+
    230
    \n+
    231
    \n+
    232namespace Imp {
    \n+
    233
    \n+
    234template<class T, class I>
    \n+
    235struct RotateHelper;
    \n+
    236
    \n+
    237template<class... T, std::size_t... I>
    \n+
    238struct RotateHelper<std::tuple<T...>, std::index_sequence<I...> >
    \n+
    239{
    \n+
    240 using type = typename std::tuple<typename LastType<T...>::type, std::tuple_element_t<I,std::tuple<T...>>...>;
    \n+
    241};
    \n+
    242
    \n+
    243} // end namespace Imp
    \n+
    244
    \n+
    245
    \n+
    253template<class... T>
    \n+
    \n+\n+
    255{
    \n+
    256 using type = typename Imp::RotateHelper<std::tuple<T...>, std::make_index_sequence<sizeof...(T)-1>>::type;
    \n+
    257};
    \n+
    \n+
    258
    \n+
    259
    \n+
    260
    \n+
    282template<class Expression>
    \n+
    \n+
    283auto callableCheck(Expression f)
    \n+
    284{
    \n+
    285 return [f](auto&&... args){
    \n+
    286 return Functions::Concept::isCallable(f, std::forward<decltype(args)>(args)...);
    \n+
    287 };
    \n+
    288}
    \n+
    \n+
    289
    \n+
    290
    \n+
    291
    \n+
    307template<class Check>
    \n+
    \n+
    308auto negatePredicate(Check check)
    \n+
    309{
    \n+
    310 return [check](auto&&... args){
    \n+
    311 auto negate = overload(
    \n+
    312 [](std::true_type) { return std::false_type{};},
    \n+
    313 [](std::false_type) { return std::true_type{};},
    \n+
    314 [](bool v) { return not v;});
    \n+
    315 return negate(check(std::forward<decltype(args)>(args)...));
    \n+
    316 };
    \n+
    317}
    \n+
    \n+
    318
    \n+
    319
    \n+
    320namespace Impl {
    \n+
    321
    \n+
    322 // Wrapper to capture values in a lambda for perfect forwarding.
    \n+
    323 // This captures value types by value and reference types by reference.
    \n+
    324 template <typename T>
    \n+
    325 struct ForwardCaptureWrapper;
    \n+
    326
    \n+
    327 template <typename T>
    \n+
    328 struct ForwardCaptureWrapper
    \n+
    329 {
    \n+
    330 template <typename TT>
    \n+
    331 ForwardCaptureWrapper(TT&& t) : t_{std::forward<TT>(t)} {}
    \n+
    332
    \n+
    333 auto forward() const { return std::move(t_); }
    \n+
    334
    \n+
    335 T t_;
    \n+
    336 };
    \n+
    337
    \n+
    338 template <typename T>
    \n+
    339 struct ForwardCaptureWrapper<T&>
    \n+
    340 {
    \n+
    341 ForwardCaptureWrapper(T& t) : t_{t} {}
    \n+
    342
    \n+
    343 T& forward() const { return t_; };
    \n+
    344
    \n+
    345 T& t_;
    \n+
    346 };
    \n+
    347
    \n+
    348 template <typename T>
    \n+
    349 struct ForwardCaptureWrapper<const T&>
    \n+
    350 {
    \n+
    351 ForwardCaptureWrapper(const T& t) : t_{t} {}
    \n+
    352
    \n+
    353 const T& forward() const { return t_; };
    \n+
    354
    \n+
    355 const T& t_;
    \n+
    356 };
    \n+
    357
    \n+
    358} // end namespace Dune::Functions::Impl
    \n+
    359
    \n+
    360
    \n+
    361
    \n+
    375template <class T>
    \n+
    \n+
    376auto forwardCapture(T&& t)
    \n+
    377{
    \n+
    378 return Impl::ForwardCaptureWrapper<T>(std::forward<T>(t));
    \n+
    379}
    \n+
    \n+
    380
    \n+
    381
    \n+
    382
    \n+
    383} // namespace Dune::Functions
    \n+
    384} // namespace Dune
    \n+
    385
    \n+
    386
    \n+
    387#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n+\n+
    typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple
    Expand tuple arguments as template arguments.
    Definition utility.hh:98
    \n+
    typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple
    Transform tuple types argument using type-functor.
    Definition utility.hh:135
    \n+
    static constexpr auto isCallable()
    Check if f is callable with given argument list.
    Definition functionconcepts.hh:51
    \n+
    auto transformTuple(F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >{}))
    Transform tuple value using a functor.
    Definition utility.hh:169
    \n+
    auto callableCheck(Expression f)
    Create a predicate for checking validity of expressions.
    Definition utility.hh:283
    \n+
    auto forwardAsStaticIndex(const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))
    Transform dynamic index to static index_constant.
    Definition utility.hh:64
    \n+
    auto negatePredicate(Check check)
    Negate given predicate.
    Definition utility.hh:308
    \n
    Definition polynomial.hh:17
    \n-
    Definition polynomial.hh:18
    \n-
    Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)
    Definition multiindex.hh:78
    \n-
    A statically sized MultiIndex type.
    Definition multiindex.hh:29
    \n-
    static constexpr std::size_t size()
    Definition multiindex.hh:31
    \n-
    friend std::size_t hash_value(const StaticMultiIndex &v) noexcept
    Definition multiindex.hh:34
    \n-
    static constexpr std::size_t max_size()
    Definition multiindex.hh:32
    \n-
    static constexpr std::size_t max_size()
    Definition multiindex.hh:58
    \n-
    static constexpr std::size_t size()
    Definition multiindex.hh:57
    \n-
    friend std::size_t hash_value(const StaticMultiIndex &v) noexcept
    Definition multiindex.hh:65
    \n+
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:376
    \n+
    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)...))
    Definition utility.hh:25
    \n+
    typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type IntegerSequenceTuple
    Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>
    Definition utility.hh:215
    \n+
    Get last entry of type list.
    Definition utility.hh:226
    \n+
    std::tuple_element_t< sizeof...(T) -1, std::tuple< T... > > type
    Definition utility.hh:227
    \n+
    Rotate type list by one, such that last entry is moved to first position.
    Definition utility.hh:255
    \n+
    typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence< sizeof...(T) -1 > >::type type
    Definition utility.hh:256
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,123 +1,353 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-multiindex.hh\n+utility.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n-8#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+8#define DUNE_FUNCTIONS_COMMON_UTILITY_HH\n 9\n-10#include \n-11#include \n-12#include \n+10\n+11#include \n+12#include \n 13\n-14#include \n-15\n+14#include \n+15#include \n 16\n-17namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n 18\n-19\n-20\n-26template\n-_\b2_\b7class _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx :\n-28 public std::array\n-29{\n-30public:\n-_\b3_\b1 static constexpr std::size_t _\bs_\bi_\bz_\be() { return n; }\n-_\b3_\b2 static constexpr std::size_t _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() { return n; }\n-33\n-_\b3_\b4 inline friend std::size_t _\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be(const _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx& v) noexcept {\n-35 return hash_range(v.begin(), v.end());\n-36 }\n-37\n-38};\n+19namespace _\bD_\bu_\bn_\be {\n+20namespace Functions {\n+21\n+22\n+23\n+24template\n+_\b2_\b5auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br(std::integer_sequence\n+values, const size_type& i, F&& f, Args&&... args)\n+26 ->decltype(f(std::integral_constant(), std::\n+forward(args)...))\n+27{\n+28 return f(std::integral_constant(), std::forward\n+(args)...);\n+29}\n+30\n+31template\n+_\b3_\b2auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br(std::integer_sequence values, const size_type i, F&& f, Args&&... args)\n+33 ->decltype(f(std::integral_constant(), std::\n+forward(args)...))\n+34{\n+35 if (i==firstValue)\n+36 return f(std::integral_constant(), std::forward\n+(args)...);\n+37 return _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br(std::integer_sequence(), i, std::forward(f), std::forward(args)...);\n+38}\n 39\n 40\n 41\n-51template\n-_\b5_\b2class _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx :\n-53 public std::array\n-54{\n-55public:\n-56\n-_\b5_\b7 static constexpr std::size_t _\bs_\bi_\bz_\be() { return 1; }\n-_\b5_\b8 static constexpr std::size_t _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() { return 1; }\n-59\n-60\n-_\b6_\b1 operator const size_type& () const {\n-62 return (*this)[0];\n-63 }\n-64\n-_\b6_\b5 inline friend std::size_t _\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be(const _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx& v) noexcept {\n-66 return hash_range(v.begin(), v.end());\n-67 }\n-68\n-_\b6_\b9 operator size_type& () {\n-70 return (*this)[0];\n-71 }\n-72\n-73};\n-74\n-75\n-76\n-77template\n-_\b7_\b8inline Stream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(Stream& stream, const\n-_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\bn_\b>& c) {\n-79 for (const auto& ci : c)\n-80 stream << ci << \" \";\n-81 return stream;\n-82}\n+63template\n+_\b6_\b4auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bd_\be_\bx(const size_type& i, F&& f, Args&&... args)\n+65 ->decltype(f(Dune::Indices::_0, std::forward(args)...))\n+66{\n+67 return _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br(std::make_index_sequence{}, i, std::\n+forward(f), std::forward(args)...);\n+68}\n+69\n+70\n+71\n+72namespace Imp {\n+73\n+74 template class T, class List>\n+75 struct ExpandTupleHelper\n+76 {};\n+77\n+78 template class T, template class ListType,\n+class... Args>\n+79 struct ExpandTupleHelper>\n+80 {\n+81 using Type = T;\n+82 };\n 83\n-84\n+84} // end namespace Imp\n 85\n-86} // namespace Dune::Functions\n-87\n-88template\n-_\b8_\b9struct std::tuple_size< _\bD_\bu_\bn_\be::Functions::StaticMultiIndex >\n-90 : std::integral_constant { };\n-91\n-92DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(typename size_type, std::size_t\n-n),DUNE_HASH_TYPE(_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\bn_\b>))\n-93\n-94#endif // DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+97template class T, class ArgTuple>\n+_\b9_\b8using _\bE_\bx_\bp_\ba_\bn_\bd_\bT_\bu_\bp_\bl_\be = typename Imp::ExpandTupleHelper::Type;\n+99\n+100\n+101\n+102namespace Imp {\n+103\n+104 template class T, class... Tuple>\n+105 struct TransformTupleHelper\n+106 {};\n+107\n+108 template class T, class... Args1>\n+109 struct TransformTupleHelper>\n+110 {\n+111 using Type = std::tuple...>;\n+112 };\n+113\n+114 template class T, class... Args1, class... Args2>\n+115 struct TransformTupleHelper, typename\n+std::tuple>\n+116 {\n+117 using Type = std::tuple...>;\n+118 };\n+119\n+120} // end namespace Imp\n+121\n+134template class F, class... Tuples>\n+_\b1_\b3_\b5using _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be = typename Imp::TransformTupleHelper::\n+Type;\n+136\n+137\n+138\n+139namespace Imp {\n+140\n+141 template\n+142 auto transformTupleHelper(F&& f, const std::tuple& tuple, std::\n+index_sequence)\n+143 -> decltype(std::make_tuple(f(std::get(tuple))...))\n+144 {\n+145 return std::make_tuple(f(std::get(tuple))...);\n+146 }\n+147\n+148 template\n+149 auto transformTupleHelper(F&& f, const std::tuple& tuple1, const\n+std::tuple& tuple2, std::index_sequence)\n+150 -> decltype(std::make_tuple(f(std::get(tuple1), std::get\n+(tuple2))...))\n+151 {\n+152 return std::make_tuple(f(std::get(tuple1), std::get(tuple2))...);\n+153 }\n+154\n+155} // end namespace Imp\n+156\n+168template\n+_\b1_\b6_\b9auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be(F&& f, const std::tuple& tuple)\n+170 -> decltype(Imp::transformTupleHelper(std::forward(f), tuple, std::\n+index_sequence_for{}))\n+171{\n+172 return Imp::transformTupleHelper(std::forward(f), tuple, std::\n+index_sequence_for{});\n+173}\n+174\n+188template\n+_\b1_\b8_\b9auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be(F&& f, const std::tuple& tuple1, const std::\n+tuple& tuple2)\n+190 -> decltype(Imp::transformTupleHelper(std::forward(f), tuple1, tuple2,\n+std::index_sequence_for{}))\n+191{\n+192 return Imp::transformTupleHelper(std::forward(f), tuple1, tuple2, std::\n+index_sequence_for{});\n+193}\n+194\n+195\n+196\n+197namespace Imp {\n+198\n+199 template\n+200 struct IntegerSequenceTupleHelper\n+201 {};\n+202\n+203 template\n+204 struct IntegerSequenceTupleHelper>\n+205 {\n+206 using Type = std::tuple...>;\n+207 };\n+208\n+209} // end namespace Imp\n+210\n+214template\n+_\b2_\b1_\b5using _\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be_\bT_\bu_\bp_\bl_\be= typename Imp::\n+IntegerSequenceTupleHelper::Type;\n+216\n+217\n+218\n+224template\n+_\b2_\b2_\b5struct _\bL_\ba_\bs_\bt_\bT_\by_\bp_\be\n+226{\n+_\b2_\b2_\b7 using _\bt_\by_\bp_\be = std::tuple_element_t>;\n+228};\n+229\n+230\n+231\n+232namespace Imp {\n+233\n+234template\n+235struct RotateHelper;\n+236\n+237template\n+238struct RotateHelper, std::index_sequence >\n+239{\n+240 using type = typename std::tuple::type, std::\n+tuple_element_t>...>;\n+241};\n+242\n+243} // end namespace Imp\n+244\n+245\n+253template\n+_\b2_\b5_\b4struct _\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be\n+255{\n+_\b2_\b5_\b6 using _\bt_\by_\bp_\be = typename Imp::RotateHelper, std::\n+make_index_sequence>_\b:_\b:_\bt_\by_\bp_\be;\n+257};\n+258\n+259\n+260\n+282template\n+_\b2_\b8_\b3auto _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk(Expression f)\n+284{\n+285 return [f](auto&&... args){\n+286 return _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(f, std::forward\n+(args)...);\n+287 };\n+288}\n+289\n+290\n+291\n+307template\n+_\b3_\b0_\b8auto _\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be(Check check)\n+309{\n+310 return [check](auto&&... args){\n+311 auto negate = overload(\n+312 [](std::true_type) { return std::false_type{};},\n+313 [](std::false_type) { return std::true_type{};},\n+314 [](bool v) { return not v;});\n+315 return negate(check(std::forward(args)...));\n+316 };\n+317}\n+318\n+319\n+320namespace Impl {\n+321\n+322 // Wrapper to capture values in a lambda for perfect forwarding.\n+323 // This captures value types by value and reference types by reference.\n+324 template \n+325 struct ForwardCaptureWrapper;\n+326\n+327 template \n+328 struct ForwardCaptureWrapper\n+329 {\n+330 template \n+331 ForwardCaptureWrapper(TT&& t) : t_{std::forward(t)} {}\n+332\n+333 auto forward() const { return std::move(t_); }\n+334\n+335 T t_;\n+336 };\n+337\n+338 template \n+339 struct ForwardCaptureWrapper\n+340 {\n+341 ForwardCaptureWrapper(T& t) : t_{t} {}\n+342\n+343 T& forward() const { return t_; };\n+344\n+345 T& t_;\n+346 };\n+347\n+348 template \n+349 struct ForwardCaptureWrapper\n+350 {\n+351 ForwardCaptureWrapper(const T& t) : t_{t} {}\n+352\n+353 const T& forward() const { return t_; };\n+354\n+355 const T& t_;\n+356 };\n+357\n+358} // end namespace Dune::Functions::Impl\n+359\n+360\n+361\n+375template \n+_\b3_\b7_\b6auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(T&& t)\n+377{\n+378 return Impl::ForwardCaptureWrapper(std::forward(t));\n+379}\n+380\n+381\n+382\n+383} // namespace Dune::Functions\n+384} // namespace Dune\n+385\n+386\n+387#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\ba_\bn_\bd_\bT_\bu_\bp_\bl_\be\n+typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple\n+Expand tuple arguments as template arguments.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:98\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be\n+typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple\n+Transform tuple types argument using type-functor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:135\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+static constexpr auto isCallable()\n+Check if f is callable with given argument list.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:51\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk\n+auto callableCheck(Expression f)\n+Create a predicate for checking validity of expressions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:283\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bd_\be_\bx\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:64\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be\n+auto negatePredicate(Check check)\n+Negate given predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:308\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-A statically sized MultiIndex type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:29\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr std::size_t size()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:31\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be\n-friend std::size_t hash_value(const StaticMultiIndex &v) noexcept\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:34\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bm_\ba_\bx_\b__\bs_\bi_\bz_\be\n-static constexpr std::size_t max_size()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:32\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>_\b:_\b:_\bm_\ba_\bx_\b__\bs_\bi_\bz_\be\n-static constexpr std::size_t max_size()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr std::size_t size()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>_\b:_\b:_\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be\n-friend std::size_t hash_value(const StaticMultiIndex &v) noexcept\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:65\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be\n+auto forwardCapture(T &&t)\n+Create a capture object for perfect forwarding.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:376\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:25\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be_\bT_\bu_\bp_\bl_\be\n+typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type\n+IntegerSequenceTuple\n+Transform integer_sequence to tuple...>\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:215\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bs_\bt_\bT_\by_\bp_\be\n+Get last entry of type list.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:226\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bs_\bt_\bT_\by_\bp_\be_\b:_\b:_\bt_\by_\bp_\be\n+std::tuple_element_t< sizeof...(T) -1, std::tuple< T... > > type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:227\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be\n+Rotate type list by one, such that last entry is moved to first position.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:255\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be_\b:_\b:_\bt_\by_\bp_\be\n+typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence<\n+sizeof...(T) -1 > >::type type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:256\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: localfunction_imp.hh File Reference\n+dune-functions: polymorphicsmallobject.hh File Reference\n \n \n \n \n \n \n \n@@ -70,23 +70,32 @@\n \n
    \n
    \n \n-
    localfunction_imp.hh File Reference
    \n+
    polymorphicsmallobject.hh File Reference
    \n
    \n
    \n-
    #include <dune/functions/common/type_traits.hh>
    \n-#include <dune/functions/common/differentiablefunction_imp.hh>
    \n+
    #include <cstddef>
    \n+#include <utility>
    \n+#include <type_traits>
    \n+#include <algorithm>
    \n
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+

    \n+Classes

    class  Dune::Functions::PolymorphicSmallObject< Base, bufferSize >
     A wrapper providing small object optimization with polymorphic types. More...
     
    \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,19 +1,26 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-localfunction_imp.hh File Reference\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+polymorphicsmallobject.hh File Reference\n+#include \n+#include \n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b<_\b _\bB_\ba_\bs_\be_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0 A wrapper providing small object optimization with polymorphic types.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: localfunction_imp.hh Source File\n+dune-functions: polymorphicsmallobject.hh Source File\n \n \n \n \n \n \n \n@@ -74,92 +74,203 @@\n \n \n
    \n
    \n-
    localfunction_imp.hh
    \n+
    polymorphicsmallobject.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n
    9
    \n-\n-\n-
    12
    \n-
    13
    \n+
    10#include <cstddef>
    \n+
    11#include <utility>
    \n+
    12#include <type_traits>
    \n+
    13#include <algorithm>
    \n
    14
    \n
    15namespace Dune {
    \n
    16namespace Functions {
    \n-
    17namespace Imp {
    \n+
    17
    \n
    18
    \n-
    19// Interface of type erasure wrapper
    \n-
    20//
    \n-
    21// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n-
    22// will be added by the type erasure foundation classes.
    \n-
    23template<class Signature, class DerivativeInterface, class LocalContext>
    \n-
    24class LocalFunctionWrapperInterface :
    \n-
    25 public DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>
    \n-
    26{
    \n-
    27public:
    \n-
    28 virtual void bind(const LocalContext&) = 0;
    \n-
    29
    \n-
    30 virtual void unbind() = 0;
    \n-
    31
    \n-
    32 virtual bool bound() const = 0;
    \n-
    33
    \n-
    34 virtual const LocalContext& localContext() const = 0;
    \n-
    35};
    \n-
    36
    \n-
    37
    \n-
    38// Implementation of type erasure wrapper
    \n-
    39template<class Signature, class DerivativeInterface, class LocalContext, class B>
    \n-
    40class LocalFunctionWrapperImplementation :
    \n-
    41 public DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>
    \n-
    42{
    \n-
    43 using Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n-
    44public:
    \n-
    45 using Base::Base;
    \n-
    46
    \n-
    47 virtual void bind(const LocalContext& context)
    \n-
    48 {
    \n-
    49 this->get().bind(context);
    \n-
    50 }
    \n-
    51
    \n-
    52 virtual void unbind()
    \n-
    53 {
    \n-
    54 this->get().unbind();
    \n-
    55 }
    \n-
    56
    \n-
    57 virtual bool bound() const
    \n-
    58 {
    \n-
    59 return this->get().bound();
    \n-
    60 }
    \n-
    61
    \n-
    62 virtual const LocalContext& localContext() const
    \n-
    63 {
    \n-
    64 return this->get().localContext();
    \n-
    65 }
    \n-
    66};
    \n-
    67
    \n-
    68}}} // namespace Dune::Functions::Imp
    \n-
    69
    \n-
    70
    \n-
    71
    \n-
    72#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n-\n-\n+
    49template<class Base, size_t bufferSize>
    \n+
    \n+\n+
    51{
    \n+
    52 // Actual buffer size must be > 0
    \n+
    53 static constexpr std::size_t actualBufferSize = std::max(sizeof(std::byte), bufferSize);
    \n+
    54
    \n+
    55 // Alignment requirement for the buffer. The `Derived` type must have
    \n+
    56 // an alignment requirement that is a divisor of `bufferAlignment`
    \n+
    57 static constexpr std::size_t bufferAlignment = alignof(std::max_align_t);
    \n+
    58
    \n+
    59public:
    \n+
    60
    \n+
    \n+\n+
    63 p_(nullptr)
    \n+
    64 {}
    \n+
    \n+
    65
    \n+
    72 template<class Derived,
    \n+
    73 std::enable_if_t<std::is_base_of_v<Base, std::remove_cv_t<
    \n+
    74 std::remove_reference_t<Derived>>>, int> = 0>
    \n+
    \n+
    75 PolymorphicSmallObject(Derived&& derived)
    \n+
    76 {
    \n+
    77 constexpr bool useBuffer = (sizeof(Derived) <= bufferSize)
    \n+
    78 && (bufferAlignment % alignof(Derived) == 0);
    \n+
    79
    \n+
    80 if constexpr (useBuffer) {
    \n+
    81 p_ = new (&buffer_) Derived(std::forward<Derived>(derived));
    \n+
    82 } else {
    \n+
    83 p_ = new Derived(std::forward<Derived>(derived));
    \n+
    84 }
    \n+
    85 }
    \n+
    \n+
    86
    \n+
    \n+\n+
    89 {
    \n+
    90 moveToWrappedObject(std::move(other));
    \n+
    91 }
    \n+
    \n+
    92
    \n+
    \n+\n+
    95 {
    \n+
    96 copyToWrappedObject(other);
    \n+
    97 }
    \n+
    \n+
    98
    \n+
    \n+\n+
    101 {
    \n+
    102 destroyWrappedObject();
    \n+
    103 }
    \n+
    \n+
    104
    \n+
    \n+\n+
    107 {
    \n+
    108 if (&other!=this)
    \n+
    109 {
    \n+
    110 destroyWrappedObject();
    \n+
    111 copyToWrappedObject(other);
    \n+
    112 }
    \n+
    113 return *this;
    \n+
    114 }
    \n+
    \n+
    115
    \n+
    \n+\n+
    118 {
    \n+
    119 destroyWrappedObject();
    \n+
    120 moveToWrappedObject(std::move(other));
    \n+
    121 return *this;
    \n+
    122 }
    \n+
    \n+
    123
    \n+
    \n+
    125 explicit operator bool() const
    \n+
    126 {
    \n+
    127 return p_;
    \n+
    128 }
    \n+
    \n+
    129
    \n+
    \n+
    131 bool bufferUsed() const
    \n+
    132 {
    \n+
    133 return ((void*) (p_) == (void*)(&buffer_));
    \n+
    134 }
    \n+
    \n+
    135
    \n+
    \n+
    137 const Base& get() const
    \n+
    138 {
    \n+
    139 return *p_;
    \n+
    140 }
    \n+
    \n+
    141
    \n+
    \n+
    143 Base& get()
    \n+
    144 {
    \n+
    145 return *p_;
    \n+
    146 }
    \n+
    \n+
    147
    \n+
    148private:
    \n+
    149
    \n+
    150 void destroyWrappedObject() noexcept
    \n+
    151 {
    \n+
    152 if (operator bool())
    \n+
    153 {
    \n+
    154 if (bufferUsed())
    \n+
    155 p_->~Base();
    \n+
    156 else
    \n+
    157 delete p_;
    \n+
    158 }
    \n+
    159 }
    \n+
    160
    \n+
    161 void moveToWrappedObject(PolymorphicSmallObject&& other) noexcept
    \n+
    162 {
    \n+
    163 if (other.bufferUsed())
    \n+
    164 p_ = other.p_->move(&buffer_);
    \n+
    165 else
    \n+
    166 {
    \n+
    167 // We don't need to check for &other_!=this, because you can't
    \n+
    168 // have an rvalue to *this and call it's assignment/constructor
    \n+
    169 // at the same time. (Despite trying to shoot yourself in the foot
    \n+
    170 // with std::move explicitly.)
    \n+
    171
    \n+
    172 // Take ownership of allocated object
    \n+
    173 p_ = other.p_;
    \n+
    174
    \n+
    175 // Leave pointer in a clean state to avoid double freeing it.
    \n+
    176 other.p_ = 0;
    \n+
    177 }
    \n+
    178 }
    \n+
    179
    \n+
    180 void copyToWrappedObject(const PolymorphicSmallObject& other)
    \n+
    181 {
    \n+
    182 if (other.bufferUsed())
    \n+
    183 p_ = other.p_->clone(&buffer_);
    \n+
    184 else
    \n+
    185 p_ = other.p_->clone();
    \n+
    186 }
    \n+
    187
    \n+
    188 alignas(bufferAlignment) std::byte buffer_[actualBufferSize];
    \n+
    189 Base* p_;
    \n+
    190};
    \n+
    \n+
    191
    \n+
    192
    \n+
    193} // namespace Functions
    \n+
    194} // namespace Dune
    \n+
    195
    \n+
    196#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n
    Definition polynomial.hh:17
    \n+
    A wrapper providing small object optimization with polymorphic types.
    Definition polymorphicsmallobject.hh:51
    \n+
    const Base & get() const
    Obtain reference to stored object.
    Definition polymorphicsmallobject.hh:137
    \n+
    bool bufferUsed() const
    Check if object is stored in internal stack buffer.
    Definition polymorphicsmallobject.hh:131
    \n+
    PolymorphicSmallObject(Derived &&derived)
    Construct from object.
    Definition polymorphicsmallobject.hh:75
    \n+
    PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept
    Move constructor from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:88
    \n+
    PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)
    Copy assignment from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:106
    \n+
    PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept
    Move assignment from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:117
    \n+
    PolymorphicSmallObject(const PolymorphicSmallObject &other)
    Copy constructor from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:94
    \n+
    ~PolymorphicSmallObject()
    Destructor.
    Definition polymorphicsmallobject.hh:100
    \n+
    PolymorphicSmallObject()
    Default constructor.
    Definition polymorphicsmallobject.hh:62
    \n+
    Base & get()
    Obtain mutable reference to stored object.
    Definition polymorphicsmallobject.hh:143
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,94 +1,209 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-localfunction_imp.hh\n+polymorphicsmallobject.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n-8#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+8#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n 9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n-12\n-13\n+10#include \n+11#include \n+12#include \n+13#include \n 14\n 15namespace _\bD_\bu_\bn_\be {\n 16namespace Functions {\n-17namespace Imp {\n+17\n 18\n-19// Interface of type erasure wrapper\n-20//\n-21// Notice that the basic interface of polymorphic classes (destructor, clone,\n-...)\n-22// will be added by the type erasure foundation classes.\n-23template\n-24class LocalFunctionWrapperInterface :\n-25 public DifferentiableFunctionWrapperInterface\n-26{\n-27public:\n-28 virtual void bind(const LocalContext&) = 0;\n-29\n-30 virtual void unbind() = 0;\n-31\n-32 virtual bool bound() const = 0;\n-33\n-34 virtual const LocalContext& localContext() const = 0;\n-35};\n-36\n-37\n-38// Implementation of type erasure wrapper\n-39template\n-40class LocalFunctionWrapperImplementation :\n-41 public DifferentiableFunctionWrapperImplementation\n-42{\n-43 using Base = DifferentiableFunctionWrapperImplementation;\n-44public:\n-45 using Base::Base;\n-46\n-47 virtual void bind(const LocalContext& context)\n-48 {\n-49 this->get().bind(context);\n-50 }\n-51\n-52 virtual void unbind()\n-53 {\n-54 this->get().unbind();\n-55 }\n-56\n-57 virtual bool bound() const\n-58 {\n-59 return this->get().bound();\n-60 }\n-61\n-62 virtual const LocalContext& localContext() const\n-63 {\n-64 return this->get().localContext();\n-65 }\n-66};\n-67\n-68}}} // namespace Dune::Functions::Imp\n-69\n-70\n-71\n-72#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n-_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+49template\n+_\b5_\b0class _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n+51{\n+52 // Actual buffer size must be > 0\n+53 static constexpr std::size_t actualBufferSize = std::max(sizeof(std::byte),\n+bufferSize);\n+54\n+55 // Alignment requirement for the buffer. The `Derived` type must have\n+56 // an alignment requirement that is a divisor of `bufferAlignment`\n+57 static constexpr std::size_t bufferAlignment = alignof(std::max_align_t);\n+58\n+59public:\n+60\n+_\b6_\b2 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt() :\n+63 p_(nullptr)\n+64 {}\n+65\n+72 template>>, int> = 0>\n+_\b7_\b5 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt(Derived&& derived)\n+76 {\n+77 constexpr bool useBuffer = (sizeof(Derived) <= bufferSize)\n+78 && (bufferAlignment % alignof(Derived) == 0);\n+79\n+80 if constexpr (useBuffer) {\n+81 p_ = new (&buffer_) Derived(std::forward(derived));\n+82 } else {\n+83 p_ = new Derived(std::forward(derived));\n+84 }\n+85 }\n+86\n+_\b8_\b8 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt(_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt&& other) noexcept\n+89 {\n+90 moveToWrappedObject(std::move(other));\n+91 }\n+92\n+_\b9_\b4 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt(const _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& other)\n+95 {\n+96 copyToWrappedObject(other);\n+97 }\n+98\n+_\b1_\b0_\b0 _\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt()\n+101 {\n+102 destroyWrappedObject();\n+103 }\n+104\n+_\b1_\b0_\b6 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& other)\n+107 {\n+108 if (&other!=this)\n+109 {\n+110 destroyWrappedObject();\n+111 copyToWrappedObject(other);\n+112 }\n+113 return *this;\n+114 }\n+115\n+_\b1_\b1_\b7 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt&& other) noexcept\n+118 {\n+119 destroyWrappedObject();\n+120 moveToWrappedObject(std::move(other));\n+121 return *this;\n+122 }\n+123\n+_\b1_\b2_\b5 explicit operator bool() const\n+126 {\n+127 return p_;\n+128 }\n+129\n+_\b1_\b3_\b1 bool _\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd() const\n+132 {\n+133 return ((void*) (p_) == (void*)(&buffer_));\n+134 }\n+135\n+_\b1_\b3_\b7 const Base& _\bg_\be_\bt() const\n+138 {\n+139 return *p_;\n+140 }\n+141\n+_\b1_\b4_\b3 Base& _\bg_\be_\bt()\n+144 {\n+145 return *p_;\n+146 }\n+147\n+148private:\n+149\n+150 void destroyWrappedObject() noexcept\n+151 {\n+152 if (operator bool())\n+153 {\n+154 if (_\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd())\n+155 p_->~Base();\n+156 else\n+157 delete p_;\n+158 }\n+159 }\n+160\n+161 void moveToWrappedObject(_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt&& other) noexcept\n+162 {\n+163 if (other.bufferUsed())\n+164 p_ = other.p_->move(&buffer_);\n+165 else\n+166 {\n+167 // We don't need to check for &other_!=this, because you can't\n+168 // have an rvalue to *this and call it's assignment/constructor\n+169 // at the same time. (Despite trying to shoot yourself in the foot\n+170 // with std::move explicitly.)\n+171\n+172 // Take ownership of allocated object\n+173 p_ = other.p_;\n+174\n+175 // Leave pointer in a clean state to avoid double freeing it.\n+176 other.p_ = 0;\n+177 }\n+178 }\n+179\n+180 void copyToWrappedObject(const _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& other)\n+181 {\n+182 if (other.bufferUsed())\n+183 p_ = other.p_->clone(&buffer_);\n+184 else\n+185 p_ = other.p_->clone();\n+186 }\n+187\n+188 alignas(bufferAlignment) std::byte buffer_[actualBufferSize];\n+189 Base* p_;\n+190};\n+191\n+192\n+193} // namespace Functions\n+194} // namespace Dune\n+195\n+196#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n+A wrapper providing small object optimization with polymorphic types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:51\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bg_\be_\bt\n+const Base & get() const\n+Obtain reference to stored object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:137\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd\n+bool bufferUsed() const\n+Check if object is stored in internal stack buffer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:131\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n+PolymorphicSmallObject(Derived &&derived)\n+Construct from object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n+PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept\n+Move constructor from other PolymorphicSmallObject.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:88\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)\n+Copy assignment from other PolymorphicSmallObject.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:106\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept\n+Move assignment from other PolymorphicSmallObject.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:117\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n+PolymorphicSmallObject(const PolymorphicSmallObject &other)\n+Copy constructor from other PolymorphicSmallObject.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:94\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n+~PolymorphicSmallObject()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:100\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n+PolymorphicSmallObject()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b:_\b:_\bg_\be_\bt\n+Base & get()\n+Obtain mutable reference to stored object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:143\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: differentiablefunctionfromcallables.hh File Reference\n+dune-functions: overflowarray.hh File Reference\n \n \n \n \n \n \n \n@@ -71,49 +71,39 @@\n \n
    \n \n
    \n \n-
    differentiablefunctionfromcallables.hh File Reference
    \n+Namespaces
    \n+
    overflowarray.hh File Reference
    \n \n
    \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+
    #include <algorithm>
    \n+#include <iostream>
    \n+#include <cstddef>
    \n+#include <array>
    \n+#include <initializer_list>
    \n+#include <dune/common/genericiterator.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >
     Wrap a list of callable objects as derivative sequence modelling Concept::DifferentiableFunction<Range(Domain), DerivativeTraits> More...
     
    class  Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >
     Wrap a list of callable objects as derivative sequence modelling Concept::DifferentiableFunction<Range(Domain), DerivativeTraits> More...
    class  Dune::Functions::OverflowArray< BA, maxSize >
     A dynamically sized array-like class with overflow. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\n-\n-\n-\n-\n

    \n-Functions

    template<class Signature , template< class > class DerivativeTraits, class... F>
    DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > Dune::Functions::makeDifferentiableFunctionFromCallables (const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)
     Create a DifferentiableFunction from callables.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +1,27 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-differentiablefunctionfromcallables.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+overflowarray.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n- _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>\n- Wrap a list of callable objects as derivative sequence modelling\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n- _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>\n- Wrap a list of callable objects as derivative sequence modelling\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b<_\b _\bB_\bA_\b,_\b _\bm_\ba_\bx_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0 A dynamically sized array-like class with overflow. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template class DerivativeTraits, class...\n-F>\n-_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs< _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-Signature, DerivativeTraits, F... >\u00a0 _\bm_\ba_\bk_\be_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n- (const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg< Signature,\n- DerivativeTraits > &signatureTag, F &&...\n- f)\n-\u00a0 Create a _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from\n- callables.\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: differentiablefunctionfromcallables.hh Source File\n+dune-functions: overflowarray.hh Source File\n \n \n \n \n \n \n \n@@ -74,163 +74,282 @@\n \n \n
    \n
    \n-
    differentiablefunctionfromcallables.hh
    \n+
    overflowarray.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n
    9
    \n-
    10
    \n-
    11#include <dune/common/typeutilities.hh>
    \n-
    12#include <dune/common/hybridutilities.hh>
    \n-
    13
    \n-\n+
    10#include <algorithm>
    \n+
    11#include <iostream>
    \n+
    12#include <cstddef>
    \n+
    13#include <array>
    \n+
    14#include <initializer_list>
    \n
    15
    \n-\n-\n+
    16#include <dune/common/genericiterator.hh>
    \n+
    17
    \n
    18
    \n
    19
    \n-
    20
    \n-
    21namespace Dune {
    \n-
    22namespace Functions {
    \n-
    23
    \n-
    24
    \n-
    25
    \n-
    26template<class Signature, template<class> class DerivativeTraits, class... Callables>
    \n-\n-
    28
    \n-
    29
    \n-
    30
    \n-
    47template<class Range, class Domain, template<class> class DerivativeTraits, class F>
    \n-
    \n-
    48class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F>
    \n+
    20namespace Dune::Functions {
    \n+
    21
    \n+
    22
    \n+
    46template<class BA, std::size_t maxSize = std::tuple_size_v<BA>>
    \n+
    \n+\n+
    48 public BA
    \n
    49{
    \n-
    50public:
    \n+
    50 static constexpr std::size_t baseSize = std::tuple_size_v<BA>;
    \n
    51
    \n-
    53 using Signature = Range(Domain);
    \n+
    52public:
    \n+
    53 using BaseArray = BA;
    \n
    54
    \n-\n-
    56
    \n-
    58 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n-
    59
    \n-\n-
    62
    \n-
    64 template<class FF, disableCopyMove<DifferentiableFunctionFromCallables, FF> = 0>
    \n-
    \n-\n-
    66 f_(std::forward<FF>(f))
    \n-
    67 {}
    \n-
    \n+
    55 using value_type = typename BaseArray::value_type;
    \n+\n+\n+\n+
    59 using difference_type = std::ptrdiff_t;
    \n+
    60 using size_type = std::size_t;
    \n+
    61 using iterator = Dune::GenericIterator<OverflowArray, value_type>;
    \n+
    62 using const_iterator = Dune::GenericIterator<const OverflowArray, const value_type>;
    \n+
    63
    \n+
    64private:
    \n+
    65 using OverflowBuffer = std::array<value_type, maxSize-baseSize>;
    \n+
    66
    \n+
    67public:
    \n
    68
    \n-
    \n-
    70 Range operator() (const Domain& x) const
    \n-
    71 {
    \n-
    72 return f_(x);
    \n-
    73 }
    \n-
    \n-
    74
    \n-
    \n-\n-
    81 {
    \n-
    82 DUNE_THROW(Dune::NotImplemented, "Derivative not implemented");
    \n-
    83 }
    \n-
    \n-
    84
    \n-
    85private:
    \n-
    86 F f_;
    \n-
    87};
    \n+
    69 OverflowArray() = default;
    \n+
    70
    \n+
    \n+
    71 OverflowArray(const std::initializer_list<value_type>& l) {
    \n+
    72 assert(l.size() <= capacity());
    \n+
    73 size_ = l.size();
    \n+
    74 std::copy_n(l.begin(), size_, begin());
    \n+
    75 }
    \n+
    \n+
    76
    \n+
    \n+
    77 bool operator == (const OverflowArray& other) const {
    \n+
    78 if (size() != other.size())
    \n+
    79 return false;
    \n+
    80 for (size_type i=0; i<size(); ++i)
    \n+
    81 if ((*this)[i] != other[i])
    \n+
    82 return false;
    \n+
    83 return true;
    \n+
    84 }
    \n+
    \n+
    85
    \n+
    \n+
    87 void clear() {
    \n+
    88 size_ = 0;
    \n+
    89 }
    \n
    \n-
    88
    \n-
    89
    \n
    90
    \n-
    107template<class Range, class Domain, template<class> class DerivativeTraits, class F, class DF, class... Derivatives>
    \n-
    \n-
    108class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F, DF, Derivatives...>
    \n-
    109{
    \n-
    110public:
    \n-
    111
    \n-
    112 using Signature = Range(Domain);
    \n-\n-
    114 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n-
    115
    \n-
    116 using Derivative = DifferentiableFunctionFromCallables<DerivativeSignature, DerivativeTraits, DF, Derivatives...>;
    \n-
    117
    \n-
    124 template<class FF, class DFF, class... DDFF>
    \n-
    \n-
    125 DifferentiableFunctionFromCallables(FF&& f, DFF&& df, DDFF&&... ddf) :
    \n-
    126 f_(std::forward<FF>(f)),
    \n-
    127 df_(std::forward<DFF>(df), std::forward<DDFF>(ddf)...)
    \n-
    128 {}
    \n-
    \n-
    129
    \n-
    \n-
    131 Range operator() (const Domain& x) const
    \n-
    132 {
    \n-
    133 return f_(x);
    \n-
    134 }
    \n-
    \n-
    135
    \n-
    \n-\n-
    142 {
    \n-
    143 return t.df_;
    \n-
    144 }
    \n-
    \n-
    145
    \n-
    146private:
    \n-
    147 F f_;
    \n-
    148 Derivative df_;
    \n-
    149};
    \n-
    \n-
    150
    \n-
    151
    \n-
    166template<class Signature, template<class> class DerivativeTraits, class... F>
    \n-
    167DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>
    \n-
    \n-\n-
    169{
    \n-
    170 return DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>(f...);
    \n-
    171}
    \n+
    \n+
    97 void resize(size_type n) {
    \n+
    98 assert(n <= capacity());
    \n+
    99 size_ = n;
    \n+
    100 }
    \n+
    \n+
    101
    \n+
    \n+
    108 void push_back(const value_type& t) {
    \n+
    109 assert(size() < capacity());
    \n+
    110 (*this)[size_++] = t;
    \n+
    111 }
    \n+
    \n+
    112
    \n+
    \n+
    114 void pop_back() {
    \n+
    115 assert(size() > 0);
    \n+
    116 if (! empty())
    \n+
    117 size_--;
    \n+
    118 }
    \n+
    \n+
    119
    \n+
    \n+
    126 void push_front(const value_type& t) {
    \n+
    127 assert(size() < capacity());
    \n+
    128 for (size_type i=0; i<size(); i++)
    \n+
    129 (*this)[i+1] = (*this)[i];
    \n+
    130 (*this)[0] = t;
    \n+
    131 }
    \n+
    \n+
    132
    \n+
    \n+\n+
    135 return iterator(*this, 0);
    \n+
    136 }
    \n+
    \n+
    137
    \n+
    \n+\n+
    140 return const_iterator(*this, 0);
    \n+
    141 }
    \n+
    \n+
    142
    \n+
    \n+\n+
    145 return iterator(*this, size());
    \n+
    146 }
    \n+
    \n+
    147
    \n+
    \n+\n+
    150 return const_iterator(*this, size());
    \n+
    151 }
    \n+
    \n+
    152
    \n+
    \n+\n+
    155 assert(i < size());
    \n+
    156 // If there's no padding between the base class and the overflow_ member,
    \n+
    157 // the compiler should be able to optimize this to
    \n+
    158 // return *(&BaseArray::operator[](0) + i);
    \n+
    159 if (i<baseSize)
    \n+
    160 return BaseArray::operator[](i);
    \n+
    161 return overflow_[i-baseSize];
    \n+
    162 }
    \n+
    \n+
    163
    \n+
    \n+\n+
    166 assert(i < size());
    \n+
    167 // If there's no padding between the base class and the overflow_ member,
    \n+
    168 // the compiler should be able to optimize this to
    \n+
    169 // return *(&BaseArray::operator[](0) + i);
    \n+
    170 if (i<baseSize)
    \n+
    171 return BaseArray::operator[](i);
    \n+
    172 return overflow_[i-baseSize];
    \n+
    173 }
    \n
    \n-
    172
    \n-
    173
    \n
    174
    \n-
    175} // namespace Functions
    \n-
    176} // namespace Dune
    \n-
    177
    \n-
    178#endif //DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n-\n-\n-\n-
    friend Derivative derivative(const DifferentiableFunctionFromCallables &t)
    Get derivative of DifferentiableFunctionFromCallables.
    Definition differentiablefunctionfromcallables.hh:80
    \n-
    DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > makeDifferentiableFunctionFromCallables(const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)
    Create a DifferentiableFunction from callables.
    Definition differentiablefunctionfromcallables.hh:168
    \n-
    Definition polynomial.hh:17
    \n-
    Definition differentiablefunction.hh:33
    \n-
    Definition differentiablefunctionfromcallables.hh:27
    \n-
    DifferentiableFunctionFromCallables(FF &&f)
    Constructor copying the given function.
    Definition differentiablefunctionfromcallables.hh:65
    \n-
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition differentiablefunctionfromcallables.hh:55
    \n-
    Range(Domain) Signature
    Signature of function.
    Definition differentiablefunctionfromcallables.hh:53
    \n-
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Signature of derivative.
    Definition differentiablefunctionfromcallables.hh:58
    \n-
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Definition differentiablefunctionfromcallables.hh:114
    \n-\n-
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition differentiablefunctionfromcallables.hh:113
    \n-
    DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)
    Constructor copying the given functions.
    Definition differentiablefunctionfromcallables.hh:125
    \n-
    Helper class to deduce the signature of a callable.
    Definition signature.hh:60
    \n-
    Definition signature.hh:106
    \n+
    \n+\n+
    177 assert(size() > 0);
    \n+
    178 return (*this)[0];
    \n+
    179 }
    \n+
    \n+
    180
    \n+
    \n+\n+
    183 assert(size() > 0);
    \n+
    184 return (*this)[0];
    \n+
    185 }
    \n+
    \n+
    186
    \n+
    \n+\n+
    189 assert(size() > 0);
    \n+
    190 return (*this)[size()-1];
    \n+
    191 }
    \n+
    \n+
    192
    \n+
    \n+\n+
    195 assert(size() > 0);
    \n+
    196 return (*this)[size()-1];
    \n+
    197 }
    \n+
    \n+
    198
    \n+
    \n+
    200 size_type size () const {
    \n+
    201 return size_;
    \n+
    202 }
    \n+
    \n+
    203
    \n+
    \n+
    205 bool empty() const {
    \n+
    206 return size() == 0;
    \n+
    207 }
    \n+
    \n+
    208
    \n+
    \n+
    210 static constexpr size_type capacity() {
    \n+
    211 return maxSize;
    \n+
    212 }
    \n+
    \n+
    213
    \n+
    \n+
    215 static constexpr size_type max_size() {
    \n+
    216 return maxSize;
    \n+
    217 }
    \n+
    \n+
    218
    \n+
    \n+
    220 inline friend std::size_t hash_value(const OverflowArray& v) noexcept {
    \n+
    221 return hash_range(v.begin(), v.end());
    \n+
    222 }
    \n+
    \n+
    223
    \n+
    \n+
    225 friend std::ostream& operator<< (std::ostream& s, const OverflowArray& c) {
    \n+
    226 for (const auto& ci : c)
    \n+
    227 s << ci << " ";
    \n+
    228 return s;
    \n+
    229 }
    \n+
    \n+
    230
    \n+
    231private:
    \n+
    232 OverflowBuffer overflow_;
    \n+
    233 size_type size_ = 0;
    \n+
    234};
    \n+
    \n+
    235
    \n+
    236
    \n+
    237
    \n+
    238} // namespace Dune::Functions
    \n+
    239
    \n+
    240
    \n+
    241
    \n+
    242#endif // DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n+
    Definition polynomial.hh:18
    \n+
    A dynamically sized array-like class with overflow.
    Definition overflowarray.hh:49
    \n+
    const value_type & const_reference
    Definition overflowarray.hh:57
    \n+
    value_type & reference
    Definition overflowarray.hh:56
    \n+
    const_iterator end() const
    Returns a const_iterator pointing to the end of the OverflowArray.
    Definition overflowarray.hh:149
    \n+
    bool operator==(const OverflowArray &other) const
    Definition overflowarray.hh:77
    \n+
    friend std::size_t hash_value(const OverflowArray &v) noexcept
    Compute hash value.
    Definition overflowarray.hh:220
    \n+
    void push_back(const value_type &t)
    Appends an element to the end of the OverflowArray,.
    Definition overflowarray.hh:108
    \n+
    friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)
    Write container to an output stream.
    Definition overflowarray.hh:225
    \n+
    iterator begin()
    Returns a iterator pointing to the beginning of the OverflowArray.
    Definition overflowarray.hh:134
    \n+
    bool empty() const
    Returns true if OverflowArray has no elements.
    Definition overflowarray.hh:205
    \n+
    size_type size() const
    Returns number of elements in the OverflowArray.
    Definition overflowarray.hh:200
    \n+
    typename BaseArray::value_type value_type
    Definition overflowarray.hh:55
    \n+
    void pop_back()
    Erases the last element of the OverflowArray, O(1) time.
    Definition overflowarray.hh:114
    \n+
    Dune::GenericIterator< OverflowArray, value_type > iterator
    Definition overflowarray.hh:61
    \n+
    const_iterator begin() const
    Returns a const_iterator pointing to the beginning of the OverflowArray.
    Definition overflowarray.hh:139
    \n+
    std::ptrdiff_t difference_type
    Definition overflowarray.hh:59
    \n+\n+
    BA BaseArray
    Definition overflowarray.hh:53
    \n+
    static constexpr size_type capacity()
    Returns the capacity of the OverflowArray.
    Definition overflowarray.hh:210
    \n+
    static constexpr size_type max_size()
    Returns the maximum length of the OverflowArray.
    Definition overflowarray.hh:215
    \n+
    const_reference front() const
    Returns const reference to first element of OverflowArray.
    Definition overflowarray.hh:182
    \n+
    void clear()
    Erases all elements.
    Definition overflowarray.hh:87
    \n+
    iterator end()
    Returns an iterator pointing to the end of the OverflowArray.
    Definition overflowarray.hh:144
    \n+
    std::size_t size_type
    Definition overflowarray.hh:60
    \n+
    void resize(size_type n)
    Specifies a new size for the OverflowArray.
    Definition overflowarray.hh:97
    \n+
    value_type * pointer
    Definition overflowarray.hh:58
    \n+
    Dune::GenericIterator< const OverflowArray, const value_type > const_iterator
    Definition overflowarray.hh:62
    \n+
    const_reference back() const
    Returns const reference to last element of OverflowArray.
    Definition overflowarray.hh:194
    \n+
    OverflowArray(const std::initializer_list< value_type > &l)
    Definition overflowarray.hh:71
    \n+
    reference back()
    Returns reference to last element of OverflowArray.
    Definition overflowarray.hh:188
    \n+
    void push_front(const value_type &t)
    Inserts an element to the begin of the OverflowArray,.
    Definition overflowarray.hh:126
    \n+
    reference front()
    Returns reference to first element of OverflowArray.
    Definition overflowarray.hh:176
    \n+
    reference operator[](size_type i)
    Returns reference to the i'th element.
    Definition overflowarray.hh:154
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,196 +1,317 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-differentiablefunctionfromcallables.hh\n+overflowarray.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n-8#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+8#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n 9\n-10\n-11#include \n-12#include \n-13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+10#include \n+11#include \n+12#include \n+13#include \n+14#include \n 15\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+16#include \n+17\n 18\n 19\n-20\n-21namespace _\bD_\bu_\bn_\be {\n-22namespace Functions {\n-23\n-24\n-25\n-26template class DerivativeTraits, class...\n-Callables>\n-_\b2_\b7class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs;\n-28\n-29\n-30\n-47template class DerivativeTraits,\n-class F>\n-_\b4_\b8class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n+20namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+21\n+22\n+46template>\n+_\b4_\b7class _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by :\n+48 public BA\n 49{\n-50public:\n+50 static constexpr std::size_t baseSize = std::tuple_size_v;\n 51\n-_\b5_\b3 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n+52public:\n+_\b5_\b3 using _\bB_\ba_\bs_\be_\bA_\br_\br_\ba_\by = BA;\n 54\n-_\b5_\b5 using _\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be;\n-56\n-_\b5_\b8 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename DerivativeTraits::Range\n-(Domain);\n-59\n-_\b6_\b1 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be = _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>;\n-62\n-64 template\n-= 0>\n-_\b6_\b5 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs(FF&& f) :\n-66 f_(std::forward(f))\n-67 {}\n+_\b5_\b5 using _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be = typename BaseArray::value_type;\n+_\b5_\b6 using _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be&;\n+_\b5_\b7 using _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be&;\n+_\b5_\b8 using _\bp_\bo_\bi_\bn_\bt_\be_\br = _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be*;\n+_\b5_\b9 using _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be = std::ptrdiff_t;\n+_\b6_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b6_\b1 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br = Dune::GenericIterator;\n+_\b6_\b2 using _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br = Dune::GenericIterator;\n+63\n+64private:\n+65 using OverflowBuffer = std::array<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be, maxSize-baseSize>;\n+66\n+67public:\n 68\n-_\b7_\b0 Range operator() (const Domain& x) const\n-71 {\n-72 return f_(x);\n-73 }\n-74\n-_\b8_\b0 friend _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs& t)\n-81 {\n-82 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n-83 }\n-84\n-85private:\n-86 F f_;\n-87};\n-88\n-89\n+_\b6_\b9 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by() = default;\n+70\n+_\b7_\b1 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by(const std::initializer_list& l) {\n+72 assert(l.size() <= _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n+73 size_ = l.size();\n+74 std::copy_n(l.begin(), size_, _\bb_\be_\bg_\bi_\bn());\n+75 }\n+76\n+_\b7_\b7 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b=_\b=_\b (const _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by& other) const {\n+78 if (_\bs_\bi_\bz_\be() != other._\bs_\bi_\bz_\be())\n+79 return false;\n+80 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); ++i)\n+81 if ((*this)[i] != other[i])\n+82 return false;\n+83 return true;\n+84 }\n+85\n+_\b8_\b7 void _\bc_\bl_\be_\ba_\br() {\n+88 size_ = 0;\n+89 }\n 90\n-107template class DerivativeTraits,\n-class F, class DF, class... Derivatives>\n-_\b1_\b0_\b8class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n-109{\n-110public:\n-111\n-_\b1_\b1_\b2 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n-_\b1_\b1_\b3 using _\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be;\n-_\b1_\b1_\b4 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename DerivativeTraits::Range\n-(Domain);\n-115\n-_\b1_\b1_\b6 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be = _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be,\n-DerivativeTraits, DF, Derivatives...>;\n-117\n-124 template\n-_\b1_\b2_\b5 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs(FF&& f, DFF&& df, DDFF&&... ddf) :\n-126 f_(std::forward(f)),\n-127 df_(std::forward(df), std::forward(ddf)...)\n-128 {}\n-129\n-_\b1_\b3_\b1 Range operator() (const Domain& x) const\n-132 {\n-133 return f_(x);\n-134 }\n-135\n-_\b1_\b4_\b1 friend _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs& t)\n-142 {\n-143 return t.df_;\n-144 }\n-145\n-146private:\n-147 F f_;\n-148 Derivative df_;\n-149};\n-150\n-151\n-166template class DerivativeTraits, class...\n-F>\n-167DifferentiableFunctionFromCallables\n-_\b1_\b6_\b8 _\bm_\ba_\bk_\be_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs(const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>& signatureTag, F&&... f)\n-169{\n-170 return _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs(f...);\n-171}\n-172\n-173\n+_\b9_\b7 void _\br_\be_\bs_\bi_\bz_\be(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n) {\n+98 assert(n <= _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n+99 size_ = n;\n+100 }\n+101\n+_\b1_\b0_\b8 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& t) {\n+109 assert(_\bs_\bi_\bz_\be() < _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n+110 (*this)[size_++] = t;\n+111 }\n+112\n+_\b1_\b1_\b4 void _\bp_\bo_\bp_\b__\bb_\ba_\bc_\bk() {\n+115 assert(_\bs_\bi_\bz_\be() > 0);\n+116 if (! _\be_\bm_\bp_\bt_\by())\n+117 size_--;\n+118 }\n+119\n+_\b1_\b2_\b6 void _\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt(const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& t) {\n+127 assert(_\bs_\bi_\bz_\be() < _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n+128 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+129 (*this)[i+1] = (*this)[i];\n+130 (*this)[0] = t;\n+131 }\n+132\n+_\b1_\b3_\b4 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() {\n+135 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n+136 }\n+137\n+_\b1_\b3_\b9 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const {\n+140 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n+141 }\n+142\n+_\b1_\b4_\b4 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() {\n+145 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n+146 }\n+147\n+_\b1_\b4_\b9 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const {\n+150 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n+151 }\n+152\n+_\b1_\b5_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) {\n+155 assert(i < _\bs_\bi_\bz_\be());\n+156 // If there's no padding between the base class and the overflow_ member,\n+157 // the compiler should be able to optimize this to\n+158 // return *(&BaseArray::operator[](0) + i);\n+159 if (i_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend Derivative derivative(const DifferentiableFunctionFromCallables &t)\n-Get derivative of DifferentiableFunctionFromCallables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:80\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n-DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... >\n-makeDifferentiableFunctionFromCallables(const SignatureTag< Signature,\n-DerivativeTraits > &signatureTag, F &&... f)\n-Create a DifferentiableFunction from callables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:168\n-_\bD_\bu_\bn_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:33\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n-DifferentiableFunctionFromCallables(FF &&f)\n-Constructor copying the given function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:65\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-typename SignatureTraits< Signature >::RawSignature RawSignature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:55\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-Range(Domain) Signature\n-Signature of function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:53\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n-Signature of derivative.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:114\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-Range(Domain) Signature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:112\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-typename SignatureTraits< Signature >::RawSignature RawSignature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:113\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n-DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)\n-Constructor copying the given functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:125\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Helper class to deduce the signature of a callable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:106\n+_\b1_\b7_\b6 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt() {\n+177 assert(_\bs_\bi_\bz_\be() > 0);\n+178 return (*this)[0];\n+179 }\n+180\n+_\b1_\b8_\b2 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt() const {\n+183 assert(_\bs_\bi_\bz_\be() > 0);\n+184 return (*this)[0];\n+185 }\n+186\n+_\b1_\b8_\b8 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() {\n+189 assert(_\bs_\bi_\bz_\be() > 0);\n+190 return (*this)[_\bs_\bi_\bz_\be()-1];\n+191 }\n+192\n+_\b1_\b9_\b4 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() const {\n+195 assert(_\bs_\bi_\bz_\be() > 0);\n+196 return (*this)[_\bs_\bi_\bz_\be()-1];\n+197 }\n+198\n+_\b2_\b0_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be () const {\n+201 return size_;\n+202 }\n+203\n+_\b2_\b0_\b5 bool _\be_\bm_\bp_\bt_\by() const {\n+206 return _\bs_\bi_\bz_\be() == 0;\n+207 }\n+208\n+_\b2_\b1_\b0 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by() {\n+211 return maxSize;\n+212 }\n+213\n+_\b2_\b1_\b5 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() {\n+216 return maxSize;\n+217 }\n+218\n+_\b2_\b2_\b0 inline friend std::size_t _\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be(const _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by& v) noexcept {\n+221 return hash_range(v.begin(), v.end());\n+222 }\n+223\n+_\b2_\b2_\b5 friend std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b (std::ostream& s, const _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by& c) {\n+226 for (const auto& ci : c)\n+227 s << ci << \" \";\n+228 return s;\n+229 }\n+230\n+231private:\n+232 OverflowBuffer overflow_;\n+233 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be size_ = 0;\n+234};\n+235\n+236\n+237\n+238} // namespace Dune::Functions\n+239\n+240\n+241\n+242#endif // DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by\n+A dynamically sized array-like class with overflow.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:49\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+const value_type & const_reference\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+value_type & reference\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:56\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bn_\bd\n+const_iterator end() const\n+Returns a const_iterator pointing to the end of the OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:149\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const OverflowArray &other) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:77\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be\n+friend std::size_t hash_value(const OverflowArray &v) noexcept\n+Compute hash value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:220\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+void push_back(const value_type &t)\n+Appends an element to the end of the OverflowArray,.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:108\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)\n+Write container to an output stream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:225\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+iterator begin()\n+Returns a iterator pointing to the beginning of the OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:134\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+Returns true if OverflowArray has no elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:205\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Returns number of elements in the OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:200\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+typename BaseArray::value_type value_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:55\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bp_\bo_\bp_\b__\bb_\ba_\bc_\bk\n+void pop_back()\n+Erases the last element of the OverflowArray, O(1) time.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:114\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+Dune::GenericIterator< OverflowArray, value_type > iterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:61\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+const_iterator begin() const\n+Returns a const_iterator pointing to the beginning of the OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:139\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be\n+std::ptrdiff_t difference_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:59\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by\n+OverflowArray()=default\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bB_\ba_\bs_\be_\bA_\br_\br_\ba_\by\n+BA BaseArray\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:53\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by\n+static constexpr size_type capacity()\n+Returns the capacity of the OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:210\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bm_\ba_\bx_\b__\bs_\bi_\bz_\be\n+static constexpr size_type max_size()\n+Returns the maximum length of the OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:215\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bf_\br_\bo_\bn_\bt\n+const_reference front() const\n+Returns const reference to first element of OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:182\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bl_\be_\ba_\br\n+void clear()\n+Erases all elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:87\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\be_\bn_\bd\n+iterator end()\n+Returns an iterator pointing to the end of the OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:144\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n+void resize(size_type n)\n+Specifies a new size for the OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:97\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n+value_type * pointer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+Dune::GenericIterator< const OverflowArray, const value_type > const_iterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\ba_\bc_\bk\n+const_reference back() const\n+Returns const reference to last element of OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:194\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by\n+OverflowArray(const std::initializer_list< value_type > &l)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:71\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bb_\ba_\bc_\bk\n+reference back()\n+Returns reference to last element of OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:188\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt\n+void push_front(const value_type &t)\n+Inserts an element to the begin of the OverflowArray,.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bf_\br_\bo_\bn_\bt\n+reference front()\n+Returns reference to first element of OverflowArray.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:176\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+reference operator[](size_type i)\n+Returns reference to the i'th element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:154\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: interfaces.hh File Reference\n+dune-functions: localfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -72,25 +72,33 @@\n
  • dune
  • functions
  • common
  • \n
    \n
    \n
    \n \n-
    interfaces.hh File Reference
    \n+
    localfunction.hh File Reference
    \n
    \n
    \n \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::PolymorphicType< Interface >
     Base class with polymorphic type boiler plate code. More...
    class  Dune::Functions::LocalFunction< Signature, LocalContext, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >
     Class storing local functions using type erasure. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,20 +2,30 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-interfaces.hh File Reference\n+localfunction.hh File Reference\n #include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b<_\b _\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>\n-\u00a0 Base class with polymorphic type boiler plate code. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0 Class storing local functions using type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n ===============================================================================\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 \n \n \n \n \n \n \n-dune-functions: interfaces.hh Source File\n+dune-functions: localfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,64 +74,174 @@\n \n \n \n
    \n-
    interfaces.hh
    \n+
    localfunction.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n
    9
    \n
    10#include <type_traits>
    \n
    11
    \n-
    12
    \n-
    13namespace Dune {
    \n-
    14namespace Functions {
    \n-
    15
    \n-
    16
    \n-
    17
    \n-
    27template<class Interface>
    \n-
    \n-\n-
    29{
    \n-
    30public:
    \n-
    31
    \n-
    \n-\n-
    34 {}
    \n+
    12#include <dune/common/typeutilities.hh>
    \n+
    13
    \n+\n+\n+\n+\n+\n+
    19
    \n+
    20
    \n+
    21
    \n+
    22namespace Dune {
    \n+
    23namespace Functions {
    \n+
    24
    \n+
    25
    \n+
    26
    \n+
    27/*
    \n+
    28 * Default implementation is empty
    \n+
    29 * The actual implementation is only given if Signature is an type
    \n+
    30 * describing a function signature as Range(Domain).
    \n+
    31 */
    \n+
    32template<class Signature, class LocalContext, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n+
    \n+\n+
    34{};
    \n
    \n
    35
    \n-
    44 virtual Interface* clone() const = 0;
    \n-
    45
    \n-
    55 virtual Interface* clone(void* buffer) const = 0;
    \n-
    56
    \n-
    66 virtual Interface* move(void* buffer) = 0;
    \n-
    67};
    \n-
    \n+
    36
    \n+
    37
    \n+
    38namespace Imp
    \n+
    39{
    \n+
    40
    \n+
    42 template<class S, class L, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    43 struct LocalFunctionTraits :
    \n+
    44 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>
    \n+
    45 {
    \n+
    46 protected:
    \n+
    47 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;
    \n+
    48
    \n+
    49 public:
    \n+
    51 using LocalContext = L;
    \n+
    52
    \n+
    54 using DerivativeSignature = typename Base::DerivativeSignature;
    \n+
    55
    \n+\n+
    58
    \n+
    60 using Concept = LocalFunctionWrapperInterface<S, DerivativeInterface, L>;
    \n+
    61
    \n+
    63 template<class B>
    \n+
    64 using Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L, B>;
    \n+
    65 };
    \n+
    66}
    \n+
    67
    \n
    68
    \n
    69
    \n-
    70
    \n-
    71}} // namespace Dune::Functions
    \n-
    72
    \n-
    73#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH
    \n+
    90template<class Range, class Domain, class LocalContext, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    \n+
    91class LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize> :
    \n+
    92 public TypeErasureBase<
    \n+
    93 typename Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::Concept,
    \n+
    94 Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::template Model>
    \n+
    95{
    \n+
    96 using Traits = Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>;
    \n+
    97
    \n+\n+
    99
    \n+
    100 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n+
    101
    \n+
    102public:
    \n+
    103
    \n+
    115 template<class F, disableCopyMove<LocalFunction, F> = 0 >
    \n+
    \n+\n+
    117 Base(std::forward<F>(f))
    \n+
    118 {
    \n+
    119 static_assert(Dune::Functions::Concept::isLocalFunction<F, Range(Domain), LocalContext>(), "Trying to construct a LocalFunction from type that does not model the LocalFunction concept");
    \n+
    120 }
    \n+
    \n+
    121
    \n+
    122 LocalFunction() = default;
    \n+
    123
    \n+
    \n+
    127 Range operator() (const Domain& x) const
    \n+
    128 {
    \n+
    129 return this->asInterface().operator()(x);
    \n+
    130 }
    \n+
    \n+
    131
    \n+
    \n+
    139 friend DerivativeInterface derivative(const LocalFunction& t)
    \n+
    140 {
    \n+
    141 return t.asInterface().derivative();
    \n+
    142 }
    \n+
    \n+
    143
    \n+
    \n+
    150 void bind(const LocalContext& context)
    \n+
    151 {
    \n+
    152 this->asInterface().bind(context);
    \n+
    153 }
    \n+
    \n+
    154
    \n+
    \n+
    158 void unbind()
    \n+
    159 {
    \n+
    160 this->asInterface().unbind();
    \n+
    161 }
    \n+
    \n+
    162
    \n+
    \n+
    165 bool bound() const
    \n+
    166 {
    \n+
    167 return this->asInterface().bound();
    \n+
    168 }
    \n+
    \n+
    169
    \n+
    \n+
    173 const LocalContext& localContext() const
    \n+
    174 {
    \n+
    175 return this->asInterface().localContext();
    \n+
    176 }
    \n+
    \n+
    177};
    \n+
    \n+
    178
    \n+
    179
    \n+
    180
    \n+
    181}} // namespace Dune::Functions
    \n+
    182
    \n+
    183
    \n+
    184
    \n+
    185#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n+\n+\n+\n+\n+\n+
    friend DerivativeInterface derivative(const LocalFunction &t)
    Get derivative of wrapped function.
    Definition localfunction.hh:139
    \n
    Definition polynomial.hh:17
    \n-
    Base class with polymorphic type boiler plate code.
    Definition interfaces.hh:29
    \n-
    virtual Interface * clone(void *buffer) const =0
    Clones the object into buffer.
    \n-
    virtual Interface * clone() const =0
    Clones the object.
    \n-
    virtual Interface * move(void *buffer)=0
    Move object into buffer.
    \n-
    virtual ~PolymorphicType()
    Destructor.
    Definition interfaces.hh:33
    \n+
    Definition localfunction.hh:34
    \n+
    const LocalContext & localContext() const
    Obtain local context this LocalFunction is bound to.
    Definition localfunction.hh:173
    \n+
    LocalFunction(F &&f)
    Construct from function.
    Definition localfunction.hh:116
    \n+
    void unbind()
    Unbind from local context.
    Definition localfunction.hh:158
    \n+
    bool bound() const
    Return if the local function is bound to a grid element.
    Definition localfunction.hh:165
    \n+
    void bind(const LocalContext &context)
    Bind function to a local context.
    Definition localfunction.hh:150
    \n+\n+
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:169
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,68 +1,194 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-interfaces.hh\n+localfunction.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n-8#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+8#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n 9\n 10#include \n 11\n-12\n-13namespace _\bD_\bu_\bn_\be {\n-14namespace Functions {\n-15\n-16\n-17\n-27template\n-_\b2_\b8class _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be\n-29{\n-30public:\n-31\n-_\b3_\b3 virtual _\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be()\n-34 {}\n+12#include \n+13\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+19\n+20\n+21\n+22namespace _\bD_\bu_\bn_\be {\n+23namespace Functions {\n+24\n+25\n+26\n+27/*\n+28 * Default implementation is empty\n+29 * The actual implementation is only given if Signature is an type\n+30 * describing a function signature as Range(Domain).\n+31 */\n+32template class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+_\b3_\b3class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+34{};\n 35\n-_\b4_\b4 virtual Interface* _\bc_\bl_\bo_\bn_\be() const = 0;\n-45\n-_\b5_\b5 virtual Interface* _\bc_\bl_\bo_\bn_\be(void* buffer) const = 0;\n-56\n-_\b6_\b6 virtual Interface* _\bm_\bo_\bv_\be(void* buffer) = 0;\n-67};\n+36\n+37\n+38namespace Imp\n+39{\n+40\n+42 template class DerivativeTraits, size_t\n+bufferSize>\n+43 struct LocalFunctionTraits :\n+44 DifferentiableFunctionTraits\n+45 {\n+46 protected:\n+47 using Base=DifferentiableFunctionTraits;\n+48\n+49 public:\n+51 using LocalContext = L;\n+52\n+54 using DerivativeSignature = typename Base::DerivativeSignature;\n+55\n+57 using DerivativeInterface = _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bL_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b>;\n+58\n+60 using Concept = LocalFunctionWrapperInterface;\n+61\n+63 template\n+64 using Model = LocalFunctionWrapperImplementation;\n+65 };\n+66}\n+67\n 68\n 69\n-70\n-71}} // namespace Dune::Functions\n-72\n-73#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH\n+90template class\n+DerivativeTraits, size_t bufferSize>\n+_\b9_\b1class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< Range(Domain), LocalContext, DerivativeTraits,\n+bufferSize> :\n+92 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n+93 typename Imp::LocalFunctionTraits::Concept,\n+94 Imp::LocalFunctionTraits::template Model>\n+95{\n+96 using Traits = Imp::LocalFunctionTraits;\n+97\n+98 using _\bB_\ba_\bs_\be = _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n+_\bM_\bo_\bd_\be_\bl_\b>;\n+99\n+100 using DerivativeInterface = typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n+101\n+102public:\n+103\n+115 template = 0 >\n+_\b1_\b1_\b6 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n+117 _\bB_\ba_\bs_\be(std::forward(f))\n+118 {\n+119 static_assert(Dune::Functions::Concept::isLocalFunction(), \"Trying to construct a LocalFunction from type that does not\n+model the LocalFunction concept\");\n+120 }\n+121\n+_\b1_\b2_\b2 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n+123\n+_\b1_\b2_\b7 Range operator() (const Domain& x) const\n+128 {\n+129 return this->asInterface().operator()(x);\n+130 }\n+131\n+_\b1_\b3_\b9 friend DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n+140 {\n+141 return t.asInterface().derivative();\n+142 }\n+143\n+_\b1_\b5_\b0 void _\bb_\bi_\bn_\bd(const LocalContext& context)\n+151 {\n+152 this->asInterface().bind(context);\n+153 }\n+154\n+_\b1_\b5_\b8 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+159 {\n+160 this->asInterface().unbind();\n+161 }\n+162\n+_\b1_\b6_\b5 bool _\bb_\bo_\bu_\bn_\bd() const\n+166 {\n+167 return this->asInterface().bound();\n+168 }\n+169\n+_\b1_\b7_\b3 const LocalContext& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt() const\n+174 {\n+175 return this->asInterface().localContext();\n+176 }\n+177};\n+178\n+179\n+180\n+181}} // namespace Dune::Functions\n+182\n+183\n+184\n+185#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh\n+_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend DerivativeInterface derivative(const LocalFunction &t)\n+Get derivative of wrapped function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:139\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be\n-Base class with polymorphic type boiler plate code.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn interfaces.hh:29\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual Interface * clone(void *buffer) const =0\n-Clones the object into buffer.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual Interface * clone() const =0\n-Clones the object.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b:_\b:_\bm_\bo_\bv_\be\n-virtual Interface * move(void *buffer)=0\n-Move object into buffer.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b:_\b:_\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be\n-virtual ~PolymorphicType()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn interfaces.hh:33\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:34\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt\n+const LocalContext & localContext() const\n+Obtain local context this LocalFunction is bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:173\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+LocalFunction(F &&f)\n+Construct from function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:116\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bu_\bn_\bb_\bi_\bn_\bd\n+void unbind()\n+Unbind from local context.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:158\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bb_\bo_\bu_\bn_\bd\n+bool bound() const\n+Return if the local function is bound to a grid element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const LocalContext &context)\n+Bind function to a local context.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localfunction.hh:150\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+LocalFunction()=default\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n+Base class for type-erased interface wrapper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:169\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: signature.hh File Reference\n+dune-functions: functionconcepts.hh File Reference\n \n \n \n \n \n \n \n@@ -73,49 +73,121 @@\n
    \n \n
    \n \n-
    signature.hh File Reference
    \n+
    functionconcepts.hh File Reference
    \n
    \n
    \n-
    #include <type_traits>
    \n-#include <tuple>
    \n-#include <dune/functions/common/defaultderivativetraits.hh>
    \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
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
    \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

    \n Classes

    struct  Dune::Functions::SignatureTraits< Signature, isCallable >
     Helper class to deduce the signature of a callable. More...
    struct  Dune::Functions::Concept::Callable< Args >
     Concept objects that can be called with given argument list. More...
     
    struct  Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT >
     Tag-class to encapsulate signature information. More...
    struct  Dune::Functions::Concept::Function< Range(Domain)>
     Concept for a function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits >
     Concept for a differentiable function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext >
     Concept for a local function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits >
     Concept for a differentiable local function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::EntitySet
     Concept for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits> More...
     
    struct  Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >
     Concept for a grid function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >
     Concept for a differentiable grid function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView >
     Concept for a grid view function mapping Domain to Range. More...
     
    struct  Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits >
     Concept for a differentiable grid view function mapping Domain to Range. More...
     
    \n \n \n \n \n \n+\n+\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::Concept
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class Range , class Domain , template< class > class DerivativeTraits>
    auto Dune::Functions::derivativeSignatureTag (SignatureTag< Range(Domain), DerivativeTraits > tag)
     Construct SignatureTag for derivative.
     
    template<std::size_t maxOrder, class Signature , template< class > class DerivativeTraits>
    auto Dune::Functions::derivativeSignatureTags (Dune::Functions::SignatureTag< Signature, DerivativeTraits > tag)
     Construct SignatureTags for derivatives.
     
    template<class F , class... Args>
    static constexpr auto Dune::Functions::Concept::isCallable ()
     Check if f is callable with given argument list.
     
    template<class F , class... Args>
    static constexpr auto Dune::Functions::Concept::isCallable (F &&, Args &&...)
     Check if f is callable with given argument list.
     
    template<class F , class Signature >
    static constexpr bool Dune::Functions::Concept::isFunction ()
     Check if F models the Function concept with given signature.
     
    template<class F , class Signature , template< class > class DerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isFunction (F &&f, SignatureTag< Signature, DerivativeTraits >)
     Check if f models the Function concept with given signature.
     
    template<class F , class Signature , template< class > class DerivativeTraits = DefaultDerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableFunction ()
     Check if F models the DifferentiableFunction concept with given signature.
     
    template<class F , class Signature , template< class > class DerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableFunction (F &&f, SignatureTag< Signature, DerivativeTraits >)
     Check if f models the DifferentiableFunction concept with given signature.
     
    template<class F , class Signature , class LocalContext >
    static constexpr bool Dune::Functions::Concept::isLocalFunction ()
     Check if F models the LocalFunction concept with given signature and local context.
     
    template<class F , class Signature , class LocalContext , template< class > class DerivativeTraits = DefaultDerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableLocalFunction ()
     Check if F models the DifferentiableLocalFunction concept with given signature and local context.
     
    template<class E >
    static constexpr bool Dune::Functions::Concept::isEntitySet ()
     Check if F models the GridFunction concept with given signature and entity set.
     
    template<class F , class Signature , class EntitySet >
    static constexpr bool Dune::Functions::Concept::isGridFunction ()
     Check if F models the GridFunction concept with given signature and entity set.
     
    template<class F , class Signature , class EntitySet , template< class > class DerivativeTraits = DefaultDerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableGridFunction ()
     Check if F models the DifferentiableGridFunction concept with given signature and entity set.
     
    template<class F , class Signature , class GridView >
    static constexpr bool Dune::Functions::Concept::isGridViewFunction ()
     Check if F models the GridViewFunction concept with given signature.
     
    template<class F , class Signature , class GridView , template< class > class DerivativeTraits = DefaultDerivativeTraits>
    static constexpr bool Dune::Functions::Concept::isDifferentiableGridViewFunction ()
     Check if F models the DifferentiableGridViewFunction concept with given signature.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,39 +2,135 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-signature.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+functionconcepts.hh File Reference\n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b _\b>\n-\u00a0 Helper class to deduce the signature of a callable. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bA_\br_\bg_\bs_\b _\b>\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt objects that can be called with given argument list. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\bT_\b _\b>\n-\u00a0 Tag-class to encapsulate signature information. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b>\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a differentiable function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b _\b>\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a local function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+ _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a differentiable local function mapping Domain to Range.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for an entity set for a Concept::GridFunction _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b _\b>\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a grid function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+ _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a differentiable grid function mapping Domain to Range.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b _\b>\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a grid view function mapping Domain to Range. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be\n+ _\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt for a differentiable grid view function mapping Domain to\n+ Range. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template class\n-DerivativeTraits>\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg (_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg< Range(Domain),\n- DerivativeTraits > tag)\n-\u00a0 Construct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg for derivative.\n-\u00a0\n-template class\n-DerivativeTraits>\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\bs (_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg<\n- Signature, DerivativeTraits > tag)\n-\u00a0 Construct SignatureTags for derivatives.\n+template\n+static constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be ()\n+\u00a0 Check if f is callable with given argument list.\n+\u00a0\n+template\n+static constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be (F &&, Args &&...)\n+\u00a0 Check if f is callable with given argument list.\n+\u00a0\n+template\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n+\u00a0 Check if F models the _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n+ signature.\n+\u00a0\n+template class DerivativeTraits>\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F &&f,\n+ _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg< Signature, DerivativeTraits >)\n+\u00a0 Check if f models the _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n+ signature.\n+\u00a0\n+template class DerivativeTraits =\n+DefaultDerivativeTraits>\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n+\u00a0 Check if F models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept\n+ with given signature.\n+\u00a0\n+template class DerivativeTraits>\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (F\n+ &&f, _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg< Signature, DerivativeTraits >)\n+\u00a0 Check if f models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept\n+ with given signature.\n+\u00a0\n+template\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n+\u00a0 Check if F models the _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n+ signature and local context.\n+\u00a0\n+template\n+class DerivativeTraits = DefaultDerivativeTraits>\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+ ()\n+\u00a0 Check if F models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+ concept with given signature and local context.\n+\u00a0\n+template\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt ()\n+\u00a0 Check if F models the _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n+ signature and entity set.\n+\u00a0\n+template\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n+\u00a0 Check if F models the _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with given\n+ signature and entity set.\n+\u00a0\n+template class\n+DerivativeTraits = DefaultDerivativeTraits>\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+ ()\n+\u00a0 Check if F models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept\n+ with given signature and entity set.\n+\u00a0\n+template\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n+\u00a0 Check if F models the _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn concept with\n+ given signature.\n+\u00a0\n+template class\n+DerivativeTraits = DefaultDerivativeTraits>\n+static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:\n+ _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn ()\n+\u00a0 Check if F models the _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+ concept with given signature.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: signature.hh Source File\n+dune-functions: functionconcepts.hh Source File\n \n \n \n \n \n \n \n@@ -74,168 +74,370 @@\n \n \n \n
    \n-
    signature.hh
    \n+
    functionconcepts.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n-
    11#include <tuple>
    \n+
    10#include <dune/common/typelist.hh>
    \n+
    11#include <dune/common/concept.hh>
    \n
    12
    \n-\n-
    14
    \n-
    15namespace Dune {
    \n-
    16namespace Functions {
    \n-
    17
    \n-
    23template<typename F>
    \n-\n-
    25
    \n-
    26#ifndef DOXYGEN
    \n-
    27template<typename F>
    \n-
    28struct IsCallable
    \n-
    29{
    \n-
    30 struct yes { std::size_t dummy[2]; };
    \n-
    31 struct no { std::size_t dummy[1]; };
    \n-
    32
    \n-
    33 template<typename C>
    \n-
    34 static yes test(const decltype(&C::operator()) *);
    \n-
    35 template<typename C>
    \n-
    36 static no test(...);
    \n-
    37
    \n-
    38 enum { value = (sizeof(test<F>(0)) == sizeof(yes)) };
    \n-
    39};
    \n-
    40
    \n-
    41template<typename R, typename D>
    \n-
    42struct IsCallable<R(D)>
    \n-
    43{
    \n-
    44 enum { value = true };
    \n-
    45};
    \n-
    46
    \n-
    47template<typename R, typename D>
    \n-
    48struct IsCallable<R(*)(D)>
    \n-
    49{
    \n-
    50 enum { value = true };
    \n-
    51};
    \n-
    52#endif
    \n+\n+\n+\n+
    16
    \n+
    17namespace Dune {
    \n+
    18namespace Functions {
    \n+
    19namespace Concept {
    \n+
    20
    \n+
    21using namespace Dune::Concept;
    \n+
    22
    \n+
    23
    \n+
    24
    \n+
    25// Callable concept ############################################################
    \n+
    26
    \n+
    27
    \n+
    35template<class... Args>
    \n+
    \n+\n+
    37{
    \n+
    38 template<class F>
    \n+
    39 auto require(F&& f) -> decltype(
    \n+
    40 f(std::declval<Args>()...)
    \n+
    41 );
    \n+
    42};
    \n+
    \n+
    43
    \n+
    50template<class F, class... Args>
    \n+
    \n+
    51static constexpr auto isCallable()
    \n+
    52{ return models<Concept::Callable<Args...>, F>(); }
    \n+
    \n
    53
    \n-
    59template<class Signature, bool isCallable = IsCallable<Signature>::value >
    \n-\n-
    61
    \n-
    62#ifndef DOXYGEN
    \n-
    64template<class T>
    \n-
    65struct SignatureTraits<T, true>
    \n-
    66 : public SignatureTraits<decltype(&T::operator()), true>
    \n-
    67{};
    \n-
    68
    \n-
    70template <typename C, typename R, typename D>
    \n-
    71struct SignatureTraits<R(C::*)(D) const, true>
    \n-
    72 : public SignatureTraits<R(D), true>
    \n-
    73{};
    \n-
    74
    \n-
    76template <typename C, typename R, typename D>
    \n-
    77struct SignatureTraits<R(C::*)(D), true>
    \n-
    78 : public SignatureTraits<R(D), true>
    \n-
    79{};
    \n-
    80
    \n-
    82template <typename R, typename D>
    \n-
    83struct SignatureTraits<R(*)(D), true>
    \n-
    84 : public SignatureTraits<R(D), true>
    \n-
    85{};
    \n-
    86
    \n-
    88template<class R, class D>
    \n-
    89struct SignatureTraits<R(D), true>
    \n-
    90{
    \n-
    91 using Range = R;
    \n-
    92 using Domain = D;
    \n-
    93
    \n-
    94 using RawRange = std::decay_t<Range>;
    \n-
    95 using RawDomain = std::decay_t<Domain>;
    \n-
    96
    \n-
    97 using RawSignature = RawRange(RawDomain);
    \n-
    98
    \n-
    99 template<template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-
    100 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n-
    101};
    \n-
    102#endif
    \n-
    103
    \n-
    104
    \n-
    105template<class Signature, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-\n-
    107
    \n-
    117template<class Range, class Domain, template<class> class DerivativeTraitsT>
    \n+
    60template<class F, class... Args>
    \n+
    \n+
    61static constexpr auto isCallable(F&&, Args&&...)
    \n+
    62{
    \n+
    63 return models<Concept::Callable<Args&&...>, F>();
    \n+
    64}
    \n+
    \n+
    65
    \n+
    66
    \n+
    67
    \n+
    68// Function concept ############################################################
    \n+
    69template<class Signature>
    \n+
    70struct Function;
    \n+
    71
    \n+
    80template<class Range, class Domain>
    \n+
    \n+
    81struct Function<Range(Domain)> : Refines<Callable<Domain> >
    \n+
    82{
    \n+
    83 template<class F>
    \n+
    84 auto require(F&& f) -> decltype(
    \n+
    85 // F models Function<Range(Domain)> if the result of F(Domain) is implicitly convertible to Range
    \n+
    86 requireConvertible<Range>(f(std::declval<Domain>()))
    \n+
    87 );
    \n+
    88};
    \n+
    \n+
    89
    \n+
    91template<class F, class Signature>
    \n+
    \n+
    92static constexpr bool isFunction()
    \n+
    93{ return models<Concept::Function<Signature>, F>(); }
    \n+
    \n+
    94
    \n+
    96template<class F, class Signature, template<class> class DerivativeTraits>
    \n+
    \n+\n+
    98{ return models<Concept::Function<Signature>, F>(); }
    \n+
    \n+
    99
    \n+
    100
    \n+
    101
    \n+
    102// DifferentiableFunction concept ##############################################
    \n+
    103template<class Signature, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+\n+
    105
    \n+
    117template<class Range, class Domain, template<class> class DerivativeTraits>
    \n
    \n-
    118struct SignatureTag<Range(Domain), DerivativeTraitsT>
    \n+
    118struct DifferentiableFunction<Range(Domain), DerivativeTraits> : Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n
    119{
    \n-
    120 using Signature = Range(Domain);
    \n+\n
    121
    \n-
    122 template<class T>
    \n-
    123 using DerivativeTraits = DerivativeTraitsT<T>;
    \n-
    124};
    \n-
    \n-
    125
    \n-
    126
    \n-
    127
    \n-
    136template<class Range, class Domain, template<class> class DerivativeTraits>
    \n-
    \n-
    137auto derivativeSignatureTag(SignatureTag<Range(Domain), DerivativeTraits> tag)
    \n-
    138{
    \n-
    139 using DerivativeRange = typename DerivativeTraits<Range(Domain)>::Range;
    \n-\n-
    141}
    \n+
    122 template<class F>
    \n+
    123 auto require(F&& f) -> decltype(
    \n+
    124 derivative(f),
    \n+
    125 requireConcept<Function<DerivativeSignature>>(derivative(f))
    \n+
    126 );
    \n+
    127};
    \n
    \n-
    142
    \n-
    143
    \n+
    128
    \n+
    130template<class F, class Signature, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+
    \n+
    131static constexpr bool isDifferentiableFunction()
    \n+
    132{ return models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }
    \n+
    \n+
    133
    \n+
    135template<class F, class Signature, template<class> class DerivativeTraits>
    \n+
    \n+\n+
    137{ return models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }
    \n+
    \n+
    138
    \n+
    139
    \n+
    140
    \n+
    141// LocalFunction concept ##############################################
    \n+
    142template<class Signature, class LocalContext>
    \n+\n
    144
    \n-
    158template<std::size_t maxOrder, class Signature, template<class> class DerivativeTraits>
    \n-
    \n-\n-
    160{
    \n-
    161 if constexpr (maxOrder==0) {
    \n-
    162 // If maxOrder== 0 we just need the given SignatureTag
    \n-
    163 return std::make_tuple(tag);
    \n-
    164 } else {
    \n-
    165 // else we first construct the tail tuple with SignatureTags for derivatives
    \n-
    166 // of order 1 to maxOrder
    \n-
    167 auto tailTagsTuple = derivativeSignatureTags<std::size_t(maxOrder-1)>(derivativeSignatureTag(tag));
    \n-
    168 // and prepend this with the given SignatureTag.
    \n-
    169 // This is done by unpacking the tail tuple with apply().
    \n-
    170 return std::apply([&](auto&&... tailTags){
    \n-
    171 return std::make_tuple(tag, tailTags...);
    \n-
    172 }, tailTagsTuple);
    \n-
    173 }
    \n-
    174}
    \n+
    154template<class Range, class Domain, class LocalContext>
    \n+
    \n+
    155struct LocalFunction<Range(Domain), LocalContext> :
    \n+
    156 Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n+
    157{
    \n+
    158 template<class F>
    \n+
    159 auto require(F&& f) -> decltype(
    \n+
    160 f.bind(std::declval<LocalContext>()),
    \n+
    161 f.unbind(),
    \n+
    162 requireConvertible<bool>(f.bound()),
    \n+
    163 f.localContext(),
    \n+
    164 requireConvertible<LocalContext>(f.localContext())
    \n+
    165 );
    \n+
    166};
    \n+
    \n+
    167
    \n+
    169template<class F, class Signature, class LocalContext>
    \n+
    \n+
    170static constexpr bool isLocalFunction()
    \n+
    171{ return models<Concept::LocalFunction<Signature, LocalContext>, F>(); }
    \n
    \n-
    175
    \n-
    176
    \n+
    172
    \n+
    173
    \n+
    174// DifferentiableLocalFunction concept ##############################################
    \n+
    175template<class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+\n
    177
    \n-
    178} // namespace Functions
    \n-
    179} // namespace Dune
    \n-
    180
    \n-
    181#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n-\n-
    auto derivativeSignatureTag(SignatureTag< Range(Domain), DerivativeTraits > tag)
    Construct SignatureTag for derivative.
    Definition signature.hh:137
    \n-
    auto derivativeSignatureTags(Dune::Functions::SignatureTag< Signature, DerivativeTraits > tag)
    Construct SignatureTags for derivatives.
    Definition signature.hh:159
    \n+
    190template<class Range, class Domain, class LocalContext, template<class> class DerivativeTraits>
    \n+
    \n+
    191struct DifferentiableLocalFunction<Range(Domain), LocalContext, DerivativeTraits> :
    \n+
    192 Refines<
    \n+
    193 Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,
    \n+
    194 Dune::Functions::Concept::LocalFunction<Range(Domain),LocalContext>
    \n+
    195 >
    \n+
    196{
    \n+
    197 template<class F>
    \n+
    198 auto require(F&& f) -> decltype(
    \n+
    199 f.bind(std::declval<LocalContext>()),
    \n+
    200 f.unbind(),
    \n+
    201 f.localContext(),
    \n+
    202 requireConvertible<LocalContext>(f.localContext())
    \n+
    203 );
    \n+
    204};
    \n+
    \n+
    205
    \n+
    207template<class F, class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+
    \n+
    208static constexpr bool isDifferentiableLocalFunction()
    \n+
    209{ return models<Concept::DifferentiableLocalFunction<Signature, LocalContext, DerivativeTraits>, F>(); }
    \n+
    \n+
    210
    \n+
    211
    \n+
    212// EntitySet concept ##############################################
    \n+
    213
    \n+
    \n+\n+
    224{
    \n+
    225 template<class E>
    \n+
    226 auto require(E&& f) -> decltype(
    \n+
    227 requireType<typename E::Element>(),
    \n+
    228 requireType<typename E::LocalCoordinate>(),
    \n+
    229 requireType<typename E::GlobalCoordinate>()
    \n+
    230 );
    \n+
    231};
    \n+
    \n+
    232
    \n+
    234template<class E>
    \n+
    \n+
    235static constexpr bool isEntitySet()
    \n+
    236{ return models<Concept::EntitySet, E>(); }
    \n+
    \n+
    237
    \n+
    238
    \n+
    239
    \n+
    240// GridFunction concept ##############################################
    \n+
    241template<class Signature, class EntitySet>
    \n+\n+
    243
    \n+
    253template<class Range, class Domain, class EntitySet>
    \n+
    \n+
    254struct GridFunction<Range(Domain), EntitySet> :
    \n+
    255 Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n+
    256{
    \n+
    257 using LocalSignature = Range(typename EntitySet::LocalCoordinate);
    \n+
    258 using LocalContext = typename EntitySet::Element;
    \n+
    259
    \n+
    260 template<class F>
    \n+
    261 auto require(F&& f) -> decltype(
    \n+
    262 localFunction(f),
    \n+
    263 f.entitySet(),
    \n+
    264 requireConcept<LocalFunction<LocalSignature, LocalContext>>(localFunction(f)),
    \n+
    265 requireConcept<Concept::EntitySet, EntitySet>(),
    \n+
    266 requireConvertible<EntitySet>(f.entitySet()),
    \n+
    267 requireConvertible<typename EntitySet::GlobalCoordinate, Domain>()
    \n+
    268 );
    \n+
    269};
    \n+
    \n+
    270
    \n+
    272template<class F, class Signature, class EntitySet>
    \n+
    \n+
    273static constexpr bool isGridFunction()
    \n+
    274{ return models<Concept::GridFunction<Signature, EntitySet>, F>(); }
    \n+
    \n+
    275
    \n+
    276
    \n+
    277// DifferentiableGridFunction concept ##############################################
    \n+
    278template<class Signature, class EntitySet, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+\n+
    280
    \n+
    293template<class Range, class Domain, class EntitySet, template<class> class DerivativeTraits>
    \n+
    \n+
    294struct DifferentiableGridFunction<Range(Domain), EntitySet, DerivativeTraits> :
    \n+
    295 Refines<
    \n+
    296 Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,
    \n+
    297 Dune::Functions::Concept::GridFunction<Range(Domain),EntitySet>
    \n+
    298 >
    \n+
    299{
    \n+
    300 using LocalSignature = Range(typename EntitySet::LocalCoordinate);
    \n+
    301 using LocalContext = typename EntitySet::Element;
    \n+
    302
    \n+
    303 template<class R>
    \n+\n+
    305
    \n+
    306 template<class F>
    \n+
    307 auto require(F&& f) -> decltype(
    \n+
    308 requireConcept<DifferentiableLocalFunction<LocalSignature, LocalContext, LocalDerivativeTraits>>(localFunction(f))
    \n+
    309 );
    \n+
    310};
    \n+
    \n+
    311
    \n+
    313template<class F, class Signature, class EntitySet, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+
    \n+
    314static constexpr bool isDifferentiableGridFunction()
    \n+
    315{ return models<Concept::DifferentiableGridFunction<Signature, EntitySet, DerivativeTraits>, F>(); }
    \n+
    \n+
    316
    \n+
    317
    \n+
    318
    \n+
    319// GridViewFunction concept ##############################################
    \n+
    320template<class Signature, class GridView>
    \n+\n+
    322
    \n+
    335template<class Range, class Domain, class GridView>
    \n+
    \n+
    336struct GridViewFunction<Range(Domain), GridView> :
    \n+
    337 Refines<Dune::Functions::Concept::GridFunction<Range(Domain), GridViewEntitySet<GridView,0>>>
    \n+
    338{
    \n+
    339 template<class F>
    \n+
    340 auto require(F&& f) -> decltype(
    \n+
    341 0 // We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet
    \n+
    342 );
    \n+
    343};
    \n+
    \n+
    344
    \n+
    346template<class F, class Signature, class GridView>
    \n+
    \n+
    347static constexpr bool isGridViewFunction()
    \n+
    348{ return models<Concept::GridViewFunction<Signature, GridView>, F>(); }
    \n+
    \n+
    349
    \n+
    350
    \n+
    351// DifferentiableGridViewFunction concept ##############################################
    \n+
    352template<class Signature, class GridView, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+\n+
    354
    \n+
    368template<class Range, class Domain, class GridView, template<class> class DerivativeTraits>
    \n+
    \n+
    369struct DifferentiableGridViewFunction<Range(Domain), GridView, DerivativeTraits> :
    \n+
    370 Refines<Dune::Functions::Concept::DifferentiableGridFunction<Range(Domain), GridViewEntitySet<GridView,0>, DerivativeTraits>>
    \n+
    371{
    \n+
    372 template<class F>
    \n+
    373 auto require(F&& f) -> decltype(
    \n+
    374 0 // We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet
    \n+
    375 );
    \n+
    376};
    \n+
    \n+
    377
    \n+
    379template<class F, class Signature, class GridView, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+
    \n+
    380static constexpr bool isDifferentiableGridViewFunction()
    \n+
    381{ return models<Concept::DifferentiableGridViewFunction<Signature, GridView, DerivativeTraits>, F>(); }
    \n+
    \n+
    382
    \n+
    383
    \n+
    384
    \n+
    385}}} // namespace Dune::Functions::Concept
    \n+
    386
    \n+
    387#endif // DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n+\n+\n+\n+
    static constexpr bool isGridFunction()
    Check if F models the GridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:273
    \n+
    static constexpr bool isDifferentiableLocalFunction()
    Check if F models the DifferentiableLocalFunction concept with given signature and local context.
    Definition functionconcepts.hh:208
    \n+
    static constexpr bool isFunction()
    Check if F models the Function concept with given signature.
    Definition functionconcepts.hh:92
    \n+
    static constexpr bool isDifferentiableGridViewFunction()
    Check if F models the DifferentiableGridViewFunction concept with given signature.
    Definition functionconcepts.hh:380
    \n+
    static constexpr bool isDifferentiableFunction()
    Check if F models the DifferentiableFunction concept with given signature.
    Definition functionconcepts.hh:131
    \n+
    static constexpr bool isGridViewFunction()
    Check if F models the GridViewFunction concept with given signature.
    Definition functionconcepts.hh:347
    \n+
    static constexpr bool isEntitySet()
    Check if F models the GridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:235
    \n+
    static constexpr bool isDifferentiableGridFunction()
    Check if F models the DifferentiableGridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:314
    \n+
    static constexpr bool isLocalFunction()
    Check if F models the LocalFunction concept with given signature and local context.
    Definition functionconcepts.hh:170
    \n+
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n+
    static constexpr auto isCallable()
    Check if f is callable with given argument list.
    Definition functionconcepts.hh:51
    \n
    Definition polynomial.hh:17
    \n-
    Helper class to check that F is callable.
    Definition signature.hh:24
    \n+
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:41
    \n+
    Concept objects that can be called with given argument list.
    Definition functionconcepts.hh:37
    \n+
    auto require(F &&f) -> decltype(f(std::declval< Args >()...))
    \n+
    Definition functionconcepts.hh:70
    \n+
    auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval< Domain >())))
    \n+
    Definition functionconcepts.hh:104
    \n+
    typename SignatureTraits< Range(Domain)>::template DerivativeSignature< DerivativeTraits > DerivativeSignature
    Definition functionconcepts.hh:120
    \n+
    auto require(F &&f) -> decltype(derivative(f), requireConcept< Function< DerivativeSignature > >(derivative(f)))
    \n+
    Definition functionconcepts.hh:143
    \n+
    auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()), f.unbind(), requireConvertible< bool >(f.bound()), f.localContext(), requireConvertible< LocalContext >(f.localContext()))
    \n+\n+
    auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()), f.unbind(), f.localContext(), requireConvertible< LocalContext >(f.localContext()))
    \n+
    Concept for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits>
    Definition functionconcepts.hh:224
    \n+
    auto require(E &&f) -> decltype(requireType< typename E::Element >(), requireType< typename E::LocalCoordinate >(), requireType< typename E::GlobalCoordinate >())
    \n+
    Definition functionconcepts.hh:242
    \n+
    typename EntitySet::Element LocalContext
    Definition functionconcepts.hh:258
    \n+
    Range(typename EntitySet::LocalCoordinate) LocalSignature
    Definition functionconcepts.hh:257
    \n+
    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 >())
    \n+\n+
    typename Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits< R > LocalDerivativeTraits
    Definition functionconcepts.hh:304
    \n+
    auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction< LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))
    \n+
    Range(typename EntitySet::LocalCoordinate) LocalSignature
    Definition functionconcepts.hh:300
    \n+\n+
    Definition functionconcepts.hh:321
    \n+\n+\n+\n
    Helper class to deduce the signature of a callable.
    Definition signature.hh:60
    \n
    Definition signature.hh:106
    \n-
    DerivativeTraitsT< T > DerivativeTraits
    Definition signature.hh:123
    \n-\n+
    Derivative traits for local functions.
    Definition localderivativetraits.hh:32
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,184 +1,465 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-signature.hh\n+functionconcepts.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n-8#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+8#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n 9\n-10#include \n-11#include \n+10#include \n+11#include \n 12\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-14\n-15namespace _\bD_\bu_\bn_\be {\n-16namespace Functions {\n-17\n-23template\n-_\b2_\b4struct _\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be;\n-25\n-26#ifndef DOXYGEN\n-27template\n-28struct _\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-29{\n-30 struct yes { std::size_t dummy[2]; };\n-31 struct no { std::size_t dummy[1]; };\n-32\n-33 template\n-34 static yes test(const decltype(&C::operator()) *);\n-35 template\n-36 static no test(...);\n-37\n-38 enum { value = (sizeof(test(0)) == sizeof(yes)) };\n-39};\n-40\n-41template\n-42struct IsCallable\n-43{\n-44 enum { value = true };\n-45};\n-46\n-47template\n-48struct IsCallable\n-49{\n-50 enum { value = true };\n-51};\n-52#endif\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+16\n+17namespace _\bD_\bu_\bn_\be {\n+18namespace Functions {\n+19namespace Concept {\n+20\n+21using namespace Dune::Concept;\n+22\n+23\n+24\n+25// Callable concept\n+############################################################\n+26\n+27\n+35template\n+_\b3_\b6struct _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+37{\n+38 template\n+_\b3_\b9 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+40 f(std::declval()...)\n+41 );\n+42};\n+43\n+50template\n+_\b5_\b1static constexpr auto _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be()\n+52{ return models<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be, F>(); }\n 53\n-59template::value >\n-_\b6_\b0struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs {};\n-61\n-62#ifndef DOXYGEN\n-64template\n-65struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n-66 : public _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n-67{};\n-68\n-70template \n-71struct SignatureTraits\n-72 : public SignatureTraits\n-73{};\n-74\n-76template \n-77struct SignatureTraits\n-78 : public SignatureTraits\n-79{};\n-80\n-82template \n-83struct SignatureTraits\n-84 : public SignatureTraits\n-85{};\n-86\n-88template\n-89struct SignatureTraits\n-90{\n-91 using Range = R;\n-92 using Domain = D;\n-93\n-94 using RawRange = std::decay_t;\n-95 using RawDomain = std::decay_t;\n-96\n-97 using RawSignature = RawRange(RawDomain);\n-98\n-99 template class DerivativeTraits=DefaultDerivativeTraits>\n-100 using DerivativeSignature = typename DerivativeTraits::Range\n-(Domain);\n-101};\n-102#endif\n-103\n-104\n-105template class\n-DerivativeTraits=DefaultDerivativeTraits>\n-_\b1_\b0_\b6struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg;\n-107\n-117template class DerivativeTraitsT>\n-_\b1_\b1_\b8struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n+60template\n+_\b6_\b1static constexpr auto _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(F&&, Args&&...)\n+62{\n+63 return models<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be, F>();\n+64}\n+65\n+66\n+67\n+68// Function concept\n+############################################################\n+69template\n+_\b7_\b0struct _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+71\n+80template\n+_\b8_\b1struct _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn : Refines >\n+82{\n+83 template\n+_\b8_\b4 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+85 // F models Function if the result of F(Domain) is implicitly\n+convertible to Range\n+86 requireConvertible(f(std::declval()))\n+87 );\n+88};\n+89\n+91template\n+_\b9_\b2static constexpr bool _\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+93{ return models, F>(); }\n+94\n+96template class DerivativeTraits>\n+_\b9_\b7static constexpr bool _\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f, _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>)\n+98{ return models, F>(); }\n+99\n+100\n+101\n+102// DifferentiableFunction concept\n+##############################################\n+103template class DerivativeTraits =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n+_\b1_\b0_\b4struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+105\n+117template class DerivativeTraits>\n+_\b1_\b1_\b8struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+Refines >\n 119{\n-_\b1_\b2_\b0 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n+_\b1_\b2_\b0 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs::\n+template _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>;\n 121\n-122 template\n-_\b1_\b2_\b3 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs = DerivativeTraitsT;\n-124};\n-125\n-126\n-127\n-136template class DerivativeTraits>\n-_\b1_\b3_\b7auto _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n-tag)\n-138{\n-139 using DerivativeRange = typename DerivativeTraits::Range;\n-140 return _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>();\n-141}\n-142\n-143\n+122 template\n+_\b1_\b2_\b3 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+124 _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f),\n+125 requireConcept>(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f))\n+126 );\n+127};\n+128\n+130template class DerivativeTraits =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n+_\b1_\b3_\b1static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+132{ return models, F>(); }\n+133\n+135template class DerivativeTraits>\n+_\b1_\b3_\b6static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f,\n+_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>)\n+137{ return models, F>(); }\n+138\n+139\n+140\n+141// LocalFunction concept ##############################################\n+142template\n+_\b1_\b4_\b3struct _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n 144\n-158template class\n-DerivativeTraits>\n-_\b1_\b5_\b9auto _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b> tag)\n-160{\n-161 if constexpr (maxOrder==0) {\n-162 // If maxOrder== 0 we just need the given SignatureTag\n-163 return std::make_tuple(tag);\n-164 } else {\n-165 // else we first construct the tail tuple with SignatureTags for\n-derivatives\n-166 // of order 1 to maxOrder\n-167 auto tailTagsTuple = _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\bs\n-(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg(tag));\n-168 // and prepend this with the given SignatureTag.\n-169 // This is done by unpacking the tail tuple with apply().\n-170 return std::apply([&](auto&&... tailTags){\n-171 return std::make_tuple(tag, tailTags...);\n-172 }, tailTagsTuple);\n-173 }\n-174}\n-175\n-176\n+154template\n+_\b1_\b5_\b5struct _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+156 Refines >\n+157{\n+158 template\n+_\b1_\b5_\b9 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+160 f.bind(std::declval()),\n+161 f.unbind(),\n+162 requireConvertible(f.bound()),\n+163 f.localContext(),\n+164 requireConvertible(f.localContext())\n+165 );\n+166};\n+167\n+169template\n+_\b1_\b7_\b0static constexpr bool _\bi_\bs_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+171{ return models, F>(); }\n+172\n+173\n+174// DifferentiableLocalFunction concept\n+##############################################\n+175template class\n+DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n+_\b1_\b7_\b6struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n 177\n-178} // namespace Functions\n-179} // namespace Dune\n-180\n-181#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n-auto derivativeSignatureTag(SignatureTag< Range(Domain), DerivativeTraits >\n-tag)\n-Construct SignatureTag for derivative.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:137\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\bs\n-auto derivativeSignatureTags(Dune::Functions::SignatureTag< Signature,\n-DerivativeTraits > tag)\n-Construct SignatureTags for derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:159\n+190template\n+class DerivativeTraits>\n+_\b1_\b9_\b1struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+192 Refines<\n+193 Dune::Functions::Concept::DifferentiableFunction,\n+194 Dune::Functions::Concept::LocalFunction\n+195 >\n+196{\n+197 template\n+_\b1_\b9_\b8 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+199 f.bind(std::declval()),\n+200 f.unbind(),\n+201 f.localContext(),\n+202 requireConvertible(f.localContext())\n+203 );\n+204};\n+205\n+207template class\n+DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n+_\b2_\b0_\b8static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+209{ return models, F>(); }\n+210\n+211\n+212// EntitySet concept ##############################################\n+213\n+_\b2_\b2_\b3struct _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+224{\n+225 template\n+_\b2_\b2_\b6 auto _\br_\be_\bq_\bu_\bi_\br_\be(E&& f) -> decltype(\n+227 requireType(),\n+228 requireType(),\n+229 requireType()\n+230 );\n+231};\n+232\n+234template\n+_\b2_\b3_\b5static constexpr bool _\bi_\bs_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt()\n+236{ return models(); }\n+237\n+238\n+239\n+240// GridFunction concept ##############################################\n+241template\n+_\b2_\b4_\b2struct _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+243\n+253template\n+_\b2_\b5_\b4struct _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+255 Refines >\n+256{\n+_\b2_\b5_\b7 using _\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(typename EntitySet::LocalCoordinate);\n+_\b2_\b5_\b8 using _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt = typename EntitySet::Element;\n+259\n+260 template\n+_\b2_\b6_\b1 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+262 localFunction(f),\n+263 f.entitySet(),\n+264 requireConcept>(localFunction\n+(f)),\n+265 requireConcept(),\n+266 requireConvertible(f.entitySet()),\n+267 requireConvertible()\n+268 );\n+269};\n+270\n+272template\n+_\b2_\b7_\b3static constexpr bool _\bi_\bs_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+274{ return models, F>(); }\n+275\n+276\n+277// DifferentiableGridFunction concept\n+##############################################\n+278template class\n+DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n+_\b2_\b7_\b9struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+280\n+293template class\n+DerivativeTraits>\n+_\b2_\b9_\b4struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+295 Refines<\n+296 Dune::Functions::Concept::DifferentiableFunction,\n+297 Dune::Functions::Concept::GridFunction\n+298 >\n+299{\n+_\b3_\b0_\b0 using _\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(typename EntitySet::LocalCoordinate);\n+_\b3_\b0_\b1 using _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt = typename EntitySet::Element;\n+302\n+303 template\n+_\b3_\b0_\b4 using _\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs = typename _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be Traits;\n+305\n+306 template\n+_\b3_\b0_\b7 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+308 requireConcept>(localFunction(f))\n+309 );\n+310};\n+311\n+313template class\n+DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n+_\b3_\b1_\b4static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+315{ return models, F>(); }\n+316\n+317\n+318\n+319// GridViewFunction concept ##############################################\n+320template\n+_\b3_\b2_\b1struct _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+322\n+335template\n+_\b3_\b3_\b6struct _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+337 Refines>>\n+338{\n+339 template\n+_\b3_\b4_\b0 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+341 0 // We don't need to check any further expressions, because a\n+GridViewFunction is just a GridFunction with a special EntitySet\n+342 );\n+343};\n+344\n+346template\n+_\b3_\b4_\b7static constexpr bool _\bi_\bs_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+348{ return models, F>(); }\n+349\n+350\n+351// DifferentiableGridViewFunction concept\n+##############################################\n+352template class\n+DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n+_\b3_\b5_\b3struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+354\n+368template class\n+DerivativeTraits>\n+_\b3_\b6_\b9struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+370 Refines, DerivativeTraits>>\n+371{\n+372 template\n+_\b3_\b7_\b3 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+374 0 // We don't need to check any further expressions, because a\n+GridViewFunction is just a GridFunction with a special EntitySet\n+375 );\n+376};\n+377\n+379template class\n+DerivativeTraits = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs>\n+_\b3_\b8_\b0static constexpr bool _\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+381{ return models, F>(); }\n+382\n+383\n+384\n+385}}} // namespace Dune::Functions::Concept\n+386\n+387#endif // DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\n+_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+static constexpr bool isGridFunction()\n+Check if F models the GridFunction concept with given signature and entity set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:273\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+static constexpr bool isDifferentiableLocalFunction()\n+Check if F models the DifferentiableLocalFunction concept with given signature\n+and local context.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:208\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+static constexpr bool isFunction()\n+Check if F models the Function concept with given signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:92\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+static constexpr bool isDifferentiableGridViewFunction()\n+Check if F models the DifferentiableGridViewFunction concept with given\n+signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:380\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+static constexpr bool isDifferentiableFunction()\n+Check if F models the DifferentiableFunction concept with given signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:131\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+static constexpr bool isGridViewFunction()\n+Check if F models the GridViewFunction concept with given signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:347\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+static constexpr bool isEntitySet()\n+Check if F models the GridFunction concept with given signature and entity set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:235\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+static constexpr bool isDifferentiableGridFunction()\n+Check if F models the DifferentiableGridFunction concept with given signature\n+and entity set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:314\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+static constexpr bool isLocalFunction()\n+Check if F models the LocalFunction concept with given signature and local\n+context.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:170\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n+TrigonometricFunction< K, sinFactor, cosFactor > &f)\n+Obtain derivative of TrigonometricFunction function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+static constexpr auto isCallable()\n+Check if f is callable with given argument list.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:51\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-Helper class to check that F is callable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:24\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+Default implementation for derivative traits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultderivativetraits.hh:41\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+Concept objects that can be called with given argument list.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:37\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n+auto require(F &&f) -> decltype(f(std::declval< Args >()...))\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:70\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n+auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval<\n+Domain >())))\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:104\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+typename SignatureTraits< Range(Domain)>::template DerivativeSignature<\n+DerivativeTraits > DerivativeSignature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:120\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n+auto require(F &&f) -> decltype(derivative(f), requireConcept< Function<\n+DerivativeSignature > >(derivative(f)))\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:143\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\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+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:176\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n+auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()),\n+f.unbind(), f.localContext(), requireConvertible< LocalContext >(f.localContext\n+()))\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+Concept for an entity set for a Concept::GridFunction\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:224\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n+auto require(E &&f) -> decltype(requireType< typename E::Element >(),\n+requireType< typename E::LocalCoordinate >(), requireType< typename E::\n+GlobalCoordinate >())\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:242\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b _\b>_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt\n+typename EntitySet::Element LocalContext\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:258\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b _\b>_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+Range(typename EntitySet::LocalCoordinate) LocalSignature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:257\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\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+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:279\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+typename Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits\n+>::template Traits< R > LocalDerivativeTraits\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:304\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n+auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction<\n+LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+Range(typename EntitySet::LocalCoordinate) LocalSignature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:300\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt\n+typename EntitySet::Element LocalContext\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:301\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:321\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n+auto require(F &&f) -> decltype(0)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:353\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n+auto require(F &&f) -> decltype(0)\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n Helper class to deduce the signature of a callable.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:60\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\bT_\b _\b>_\b:_\b:\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-DerivativeTraitsT< T > DerivativeTraits\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:123\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\bT_\b _\b>_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-Range(Domain) Signature\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:120\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+Derivative traits for local functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn localderivativetraits.hh:32\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: staticforloop.hh File Reference\n+dune-functions: multiindex.hh File Reference\n \n \n \n \n \n \n \n@@ -70,38 +70,50 @@\n \n
    \n
    \n \n-
    staticforloop.hh File Reference
    \n+
    multiindex.hh File Reference
    \n
    \n
    \n-
    #include <dune/common/concept.hh>
    \n-#include <dune/functions/common/type_traits.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n+
    #include <cstddef>
    \n+#include <array>
    \n+#include <iostream>
    \n+#include <dune/common/hash.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n+Classes

    class  Dune::Functions::StaticMultiIndex< size_type, n >
     A statically sized MultiIndex type. More...
     
    class  Dune::Functions::StaticMultiIndex< size_type, 1 >
     A statically sized MultiIndex type. More...
     
    struct  std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > >
     
    \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n \n-\n-\n-\n-\n+\n+\n+\n

    \n Functions

    template<std::size_t begin_t, std::size_t end_t, class F , class... Args>
    void Dune::Functions::staticFindInRange (F &&f, Args &&... args)
     Static find loop.
     
    template<typename Stream , class size_type , std::size_t n>
    Stream & Dune::Functions::operator<< (Stream &stream, const StaticMultiIndex< size_type, n > &c)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,35 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-staticforloop.hh File Reference\n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+multiindex.hh File Reference\n+#include \n+#include \n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\bn_\b _\b>\n+\u00a0 A statically sized MultiIndex type. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>\n+\u00a0 A statically sized MultiIndex type. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bs_\bt_\bd_\b:_\b:_\bt_\bu_\bp_\bl_\be_\b__\bs_\bi_\bz_\be_\b<_\b _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\bn_\b _\b>_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bt_\ba_\bt_\bi_\bc_\bF_\bi_\bn_\bd_\bI_\bn_\bR_\ba_\bn_\bg_\be (F &&f, Args &&... args)\n-\u00a0 Static find loop.\n+template\n+Stream &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b< (Stream &stream, const _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx<\n+ size_type, n > &c)\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: staticforloop.hh Source File\n+dune-functions: multiindex.hh Source File\n \n \n \n \n \n \n \n@@ -74,81 +74,123 @@\n \n \n
    \n
    \n-
    staticforloop.hh
    \n+
    multiindex.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n
    9
    \n-
    10
    \n-
    11#include <dune/common/concept.hh>
    \n-
    12
    \n-\n-\n+
    10#include <cstddef>
    \n+
    11#include <array>
    \n+
    12#include <iostream>
    \n+
    13
    \n+
    14#include <dune/common/hash.hh>
    \n
    15
    \n
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n+
    17namespace Dune::Functions {
    \n+
    18
    \n
    19
    \n-
    20namespace Imp {
    \n-
    21
    \n-
    22template<class ST, ST begin, ST end>
    \n-
    23struct StaticFindInRange
    \n-
    24{
    \n-
    25 template<class F, class...Args>
    \n-
    26 static void apply(F&& f, Args&&... args)
    \n-
    27 {
    \n-
    28 if (f(std::integral_constant<ST, begin>(), std::forward<Args>(args)...))
    \n-
    29 return;
    \n-
    30 StaticFindInRange<ST, begin+1, end>::apply(std::forward<F>(f), std::forward<Args>(args)...);
    \n-
    31 }
    \n-
    32};
    \n+
    20
    \n+
    26template<class size_type, std::size_t n>
    \n+
    \n+\n+
    28 public std::array<size_type, n>
    \n+
    29{
    \n+
    30public:
    \n+
    31 static constexpr std::size_t size() { return n; }
    \n+
    32 static constexpr std::size_t max_size() { return n; }
    \n
    33
    \n-
    34template<class ST, ST end>
    \n-
    35struct StaticFindInRange<ST, end, end>
    \n-
    36{
    \n-
    37 template<class F, class...Args>
    \n-
    38 static void apply(F&& f, Args&&...)
    \n-
    39 {}
    \n-
    40};
    \n+
    \n+
    34 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {
    \n+
    35 return hash_range(v.begin(), v.end());
    \n+
    36 }
    \n+
    \n+
    37
    \n+
    38};
    \n+
    \n+
    39
    \n+
    40
    \n
    41
    \n-
    42} //end namespace Imp
    \n-
    43
    \n-
    44
    \n-
    45
    \n-
    59template<std::size_t begin_t, std::size_t end_t, class F, class... Args>
    \n-
    \n-
    60void staticFindInRange(F&& f, Args&&... args)
    \n-
    61{
    \n-
    62 Imp::StaticFindInRange<std::size_t, begin_t, end_t>::apply(std::forward<F>(f), std::forward<Args>(args)...);
    \n-
    63}
    \n+
    51template<class size_type>
    \n+
    \n+
    52class StaticMultiIndex<size_type,1> :
    \n+
    53 public std::array<size_type, 1>
    \n+
    54{
    \n+
    55public:
    \n+
    56
    \n+
    57 static constexpr std::size_t size() { return 1; }
    \n+
    58 static constexpr std::size_t max_size() { return 1; }
    \n+
    59
    \n+
    60
    \n+
    \n+
    61 operator const size_type& () const {
    \n+
    62 return (*this)[0];
    \n+
    63 }
    \n
    \n
    64
    \n-
    65
    \n-
    66} // namespace Dune::Functions
    \n-
    67} // namespace Dune
    \n+
    \n+
    65 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {
    \n+
    66 return hash_range(v.begin(), v.end());
    \n+
    67 }
    \n+
    \n
    68
    \n-
    69
    \n-
    70
    \n-
    71#endif //DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n-\n-
    void staticFindInRange(F &&f, Args &&... args)
    Static find loop.
    Definition staticforloop.hh:60
    \n+
    \n+
    69 operator size_type& () {
    \n+
    70 return (*this)[0];
    \n+
    71 }
    \n+
    \n+
    72
    \n+
    73};
    \n+
    \n+
    74
    \n+
    75
    \n+
    76
    \n+
    77template<typename Stream, class size_type, std::size_t n>
    \n+
    \n+
    78inline Stream& operator<<(Stream& stream, const StaticMultiIndex<size_type,n>& c) {
    \n+
    79 for (const auto& ci : c)
    \n+
    80 stream << ci << " ";
    \n+
    81 return stream;
    \n+
    82}
    \n+
    \n+
    83
    \n+
    84
    \n+
    85
    \n+
    86} // namespace Dune::Functions
    \n+
    87
    \n+
    88template<class size_type, std::size_t n>
    \n+
    \n+
    89struct std::tuple_size< Dune::Functions::StaticMultiIndex<size_type,n> >
    \n+
    90 : std::integral_constant<std::size_t, n> { };
    \n+
    \n+
    91
    \n+
    92DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(typename size_type, std::size_t n),DUNE_HASH_TYPE(Dune::Functions::StaticMultiIndex<size_type,n>))
    \n+
    93
    \n+
    94#endif // DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n
    Definition polynomial.hh:17
    \n-\n+
    Definition polynomial.hh:18
    \n+
    Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)
    Definition multiindex.hh:78
    \n+
    A statically sized MultiIndex type.
    Definition multiindex.hh:29
    \n+
    static constexpr std::size_t size()
    Definition multiindex.hh:31
    \n+
    friend std::size_t hash_value(const StaticMultiIndex &v) noexcept
    Definition multiindex.hh:34
    \n+
    static constexpr std::size_t max_size()
    Definition multiindex.hh:32
    \n+
    static constexpr std::size_t max_size()
    Definition multiindex.hh:58
    \n+
    static constexpr std::size_t size()
    Definition multiindex.hh:57
    \n+
    friend std::size_t hash_value(const StaticMultiIndex &v) noexcept
    Definition multiindex.hh:65
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,81 +1,123 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-staticforloop.hh\n+multiindex.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n-8#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+8#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n 9\n-10\n-11#include \n-12\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+10#include \n+11#include \n+12#include \n+13\n+14#include \n 15\n 16\n-17namespace _\bD_\bu_\bn_\be {\n-18namespace Functions {\n+17namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+18\n 19\n-20namespace Imp {\n-21\n-22template\n-23struct StaticFindInRange\n-24{\n-25 template\n-26 static void apply(F&& f, Args&&... args)\n-27 {\n-28 if (f(std::integral_constant(), std::forward(args)...))\n-29 return;\n-30 StaticFindInRange::apply(std::forward(f), std::\n-forward(args)...);\n-31 }\n-32};\n+20\n+26template\n+_\b2_\b7class _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx :\n+28 public std::array\n+29{\n+30public:\n+_\b3_\b1 static constexpr std::size_t _\bs_\bi_\bz_\be() { return n; }\n+_\b3_\b2 static constexpr std::size_t _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() { return n; }\n 33\n-34template\n-35struct StaticFindInRange\n-36{\n-37 template\n-38 static void apply(F&& f, Args&&...)\n-39 {}\n-40};\n+_\b3_\b4 inline friend std::size_t _\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be(const _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx& v) noexcept {\n+35 return hash_range(v.begin(), v.end());\n+36 }\n+37\n+38};\n+39\n+40\n 41\n-42} //end namespace Imp\n-43\n-44\n-45\n-59template\n-_\b6_\b0void _\bs_\bt_\ba_\bt_\bi_\bc_\bF_\bi_\bn_\bd_\bI_\bn_\bR_\ba_\bn_\bg_\be(F&& f, Args&&... args)\n-61{\n-62 Imp::StaticFindInRange::apply(std::forward\n-(f), std::forward(args)...);\n-63}\n+51template\n+_\b5_\b2class _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx :\n+53 public std::array\n+54{\n+55public:\n+56\n+_\b5_\b7 static constexpr std::size_t _\bs_\bi_\bz_\be() { return 1; }\n+_\b5_\b8 static constexpr std::size_t _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() { return 1; }\n+59\n+60\n+_\b6_\b1 operator const size_type& () const {\n+62 return (*this)[0];\n+63 }\n 64\n-65\n-66} // namespace Dune::Functions\n-67} // namespace Dune\n+_\b6_\b5 inline friend std::size_t _\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be(const _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx& v) noexcept {\n+66 return hash_range(v.begin(), v.end());\n+67 }\n 68\n-69\n-70\n-71#endif //DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bt_\ba_\bt_\bi_\bc_\bF_\bi_\bn_\bd_\bI_\bn_\bR_\ba_\bn_\bg_\be\n-void staticFindInRange(F &&f, Args &&... args)\n-Static find loop.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn staticforloop.hh:60\n+_\b6_\b9 operator size_type& () {\n+70 return (*this)[0];\n+71 }\n+72\n+73};\n+74\n+75\n+76\n+77template\n+_\b7_\b8inline Stream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(Stream& stream, const\n+_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\bn_\b>& c) {\n+79 for (const auto& ci : c)\n+80 stream << ci << \" \";\n+81 return stream;\n+82}\n+83\n+84\n+85\n+86} // namespace Dune::Functions\n+87\n+88template\n+_\b8_\b9struct std::tuple_size< _\bD_\bu_\bn_\be::Functions::StaticMultiIndex >\n+90 : std::integral_constant { };\n+91\n+92DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(typename size_type, std::size_t\n+n),DUNE_HASH_TYPE(_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\bn_\b>))\n+93\n+94#endif // DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+A statically sized MultiIndex type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:29\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n+static constexpr std::size_t size()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:31\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be\n+friend std::size_t hash_value(const StaticMultiIndex &v) noexcept\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:34\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bm_\ba_\bx_\b__\bs_\bi_\bz_\be\n+static constexpr std::size_t max_size()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:32\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>_\b:_\b:_\bm_\ba_\bx_\b__\bs_\bi_\bz_\be\n+static constexpr std::size_t max_size()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be\n+static constexpr std::size_t size()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>_\b:_\b:_\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be\n+friend std::size_t hash_value(const StaticMultiIndex &v) noexcept\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:65\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: differentiablefunction.hh File Reference\n+dune-functions: reserveddeque.hh File Reference\n \n \n \n \n \n \n \n@@ -71,44 +71,69 @@\n \n
    \n \n
    \n \n-
    differentiablefunction.hh File Reference
    \n+Namespaces |\n+Macros
    \n+
    reserveddeque.hh File Reference
    \n \n
    \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+\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
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::DifferentiableFunction< Signature, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >
     Class storing differentiable functions using type erasure. More...
    class  Dune::Functions::ReservedDeque< T, n >
     A double-ended queue (deque) class with statically reserved memory. More...
     
    \n \n \n \n \n \n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n+\n+\n+\n

    \n+Macros

    #define CHECKSIZE(X)   {}
     
    \n+

    Detailed Description

    \n+

    An stl-compliant double-ended queue which stores everything on the stack.

    \n+

    Macro Definition Documentation

    \n+\n+

    ◆ CHECKSIZE

    \n+\n+
    \n+
    \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
    #define CHECKSIZE( X)   {}
    \n+
    \n+\n+
    \n+
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,37 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-differentiablefunction.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n+reserveddeque.hh File Reference\n+An stl-compliant double-ended queue which stores everything on the stack.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n- _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n- _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0 Class storing differentiable functions using type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b<_\b _\bT_\b,_\b _\bn_\b _\b>\n+\u00a0 A double-ended queue (deque) class with statically reserved memory.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(X)\u00a0\u00a0\u00a0{}\n+\u00a0\n+*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+An stl-compliant double-ended queue which stores everything on the stack.\n+*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0C\bCH\bHE\bEC\bCK\bKS\bSI\bIZ\bZE\bE *\b**\b**\b**\b**\b*\n+#define CHECKSIZE ( \u00a0 X ) \u00a0\u00a0\u00a0{}\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: differentiablefunction.hh Source File\n+dune-functions: reserveddeque.hh Source File\n \n \n \n \n \n \n \n@@ -74,142 +74,281 @@\n \n \n
    \n
    \n-
    differentiablefunction.hh
    \n+
    reserveddeque.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n-
    11
    \n-
    12#include <dune/common/typeutilities.hh>
    \n-
    13
    \n-\n-\n-\n-\n-\n-\n+
    14#include <algorithm>
    \n+
    15#include <iostream>
    \n+
    16#include <cstddef>
    \n+
    17#include <initializer_list>
    \n+
    18
    \n+
    19#include <dune/common/genericiterator.hh>
    \n
    20
    \n-
    21namespace Dune {
    \n-
    22namespace Functions {
    \n-
    23
    \n-
    24
    \n-
    25
    \n-
    26/*
    \n-
    27 * Default implementation is empty
    \n-
    28 * The actual implementation is only given if Signature is an type
    \n-
    29 * describing a function signature as Range(Domain).
    \n-
    30 */
    \n-
    31template<class Signature, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n-
    \n-\n-
    33{};
    \n-
    \n-
    34
    \n-
    35
    \n-
    36
    \n-
    37namespace Imp
    \n-
    38{
    \n-
    39
    \n-
    41 template<class S, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    42 struct DifferentiableFunctionTraits
    \n-
    43 {
    \n-
    45 using Signature = S;
    \n-
    46
    \n-
    48 using Range = typename SignatureTraits<Signature>::Range;
    \n-
    49
    \n-
    51 using Domain = typename SignatureTraits<Signature>::Domain;
    \n-
    52
    \n-
    54 using DerivativeSignature = typename SignatureTraits<Signature>::template DerivativeSignature<DerivativeTraits>;
    \n-
    55
    \n-\n-
    58
    \n-
    60 using Concept = DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>;
    \n-
    61
    \n-
    63 template<class B>
    \n-
    64 using Model = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n-
    65 };
    \n-
    66}
    \n-
    67
    \n-
    68
    \n-
    69
    \n-
    84template<class Range, class Domain, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    \n-
    85class DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize> :
    \n-
    86 public TypeErasureBase<
    \n-
    87 typename Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::Concept,
    \n-
    88 Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::template Model>
    \n-
    89{
    \n-
    90 using Traits = Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>;
    \n-
    91
    \n-\n-
    93
    \n-
    94 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n-
    95
    \n-
    96public:
    \n-
    97
    \n-
    109 template<class F, disableCopyMove<DifferentiableFunction, F> = 0 >
    \n-
    \n-\n-
    111 Base(std::forward<F>(f))
    \n-
    112 {
    \n-
    113 static_assert(Dune::Functions::Concept::isFunction<F, Range(Domain)>(), "Trying to construct a DifferentiableFunction from type that does not model the Function concept");
    \n-
    114 }
    \n-
    \n-
    115
    \n-\n-
    118
    \n-
    \n-
    122 Range operator() (const Domain& x) const
    \n-
    123 {
    \n-
    124 return this->asInterface().operator()(x);
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    \n-
    134 friend DerivativeInterface derivative(const DifferentiableFunction& t)
    \n-
    135 {
    \n-
    136 return t.asInterface().derivative();
    \n-
    137 }
    \n-
    \n-
    138};
    \n-
    \n-
    139
    \n-
    140
    \n-
    141
    \n-
    142}} // namespace Dune::Functions
    \n+
    21#ifdef CHECK_RESERVEDDEQUE
    \n+
    22#define CHECKSIZE(X) assert(X)
    \n+
    23#else
    \n+
    24#define CHECKSIZE(X) {}
    \n+
    25#endif
    \n+
    26
    \n+
    27namespace Dune {
    \n+
    28namespace Functions {
    \n+
    29
    \n+
    47 template<class T, int n>
    \n+
    \n+\n+
    49 {
    \n+
    50 public:
    \n+
    51
    \n+
    55 typedef T value_type;
    \n+
    57 typedef T* pointer;
    \n+
    59 typedef T& reference;
    \n+
    61 typedef const T& const_reference;
    \n+
    63 typedef size_t size_type;
    \n+
    65 typedef std::ptrdiff_t difference_type;
    \n+
    67 typedef Dune::GenericIterator<ReservedDeque, value_type> iterator;
    \n+
    69 typedef Dune::GenericIterator<const ReservedDeque, const value_type> const_iterator;
    \n+
    70
    \n+
    \n+\n+
    77 size_(0),
    \n+
    78 first_(0)
    \n+
    79 {}
    \n+
    \n+
    80
    \n+
    \n+
    81 ReservedDeque(std::initializer_list<T> const &l)
    \n+
    82 {
    \n+
    83 assert(l.size() <= n);// Actually, this is not needed any more!
    \n+
    84 size_ = l.size();
    \n+
    85 std::copy_n(l.begin(), size_, data_);
    \n+
    86 }
    \n+
    \n+
    87
    \n+
    \n+
    93 void clear()
    \n+
    94 {
    \n+
    95 first_ = 0;
    \n+
    96 size_ = 0;
    \n+
    97 }
    \n+
    \n+
    98
    \n+
    \n+
    100 void resize(size_t s)
    \n+
    101 {
    \n+
    102 CHECKSIZE(s<=n);
    \n+
    103 size_ = s;
    \n+
    104 }
    \n+
    \n+
    105
    \n+
    \n+
    107 void push_back(const T& t)
    \n+
    108 {
    \n+
    109 CHECKSIZE(size_<n);
    \n+
    110 data_[size_++ % n] = t;
    \n+
    111 }
    \n+
    \n+
    112
    \n+
    \n+
    114 void push_front(const T& t)
    \n+
    115 {
    \n+
    116 CHECKSIZE(size_<n);
    \n+
    117 ++size_;
    \n+
    118 first_ = (first_+(n-1)) % n;
    \n+
    119 data_[first_] = t;
    \n+
    120 }
    \n+
    \n+
    121
    \n+
    \n+
    123 void pop_back()
    \n+
    124 {
    \n+
    125 if (! empty())
    \n+
    126 size_--;
    \n+
    127 }
    \n+
    \n+
    128
    \n+
    \n+\n+
    131 {
    \n+
    132 if (! empty())
    \n+
    133 {
    \n+
    134 size_--;
    \n+
    135 first_ = (++first_) % n;
    \n+
    136 }
    \n+
    137 }
    \n+
    \n+
    138
    \n+
    \n+\n+
    141 return iterator(*this, 0);
    \n+
    142 }
    \n+
    \n
    143
    \n-
    144
    \n-
    145
    \n-
    146#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH
    \n-\n-\n-\n-\n-\n-\n-
    friend DerivativeInterface derivative(const DifferentiableFunction &t)
    Get derivative of wrapped function.
    Definition differentiablefunction.hh:134
    \n+
    \n+\n+
    146 return const_iterator(*this, 0);
    \n+
    147 }
    \n+
    \n+
    148
    \n+
    \n+\n+
    151 return iterator(*this, size_);
    \n+
    152 }
    \n+
    \n+
    153
    \n+
    \n+\n+
    156 return const_iterator(*this, size_);
    \n+
    157 }
    \n+
    \n+
    158
    \n+
    \n+\n+
    161 {
    \n+
    162 CHECKSIZE(size_>i);
    \n+
    163 return data_[(first_ + i) % n];
    \n+
    164 }
    \n+
    \n+
    165
    \n+
    \n+\n+
    168 {
    \n+
    169 CHECKSIZE(size_>i);
    \n+
    170 return data_[(first_ + i) % n];
    \n+
    171 }
    \n+
    \n+
    172
    \n+
    \n+\n+
    175 {
    \n+
    176 CHECKSIZE(size_>0);
    \n+
    177 return data_[first_];
    \n+
    178 }
    \n+
    \n+
    179
    \n+
    \n+\n+
    182 {
    \n+
    183 CHECKSIZE(size_>0);
    \n+
    184 return data_[first_];
    \n+
    185 }
    \n+
    \n+
    186
    \n+
    \n+\n+
    189 {
    \n+
    190 CHECKSIZE(size_>0);
    \n+
    191 return data_[(first_ + size_-1) % n];
    \n+
    192 }
    \n+
    \n+
    193
    \n+
    \n+\n+
    196 {
    \n+
    197 CHECKSIZE(size_>0);
    \n+
    198 return data_[(first_ + size_-1) % n];
    \n+
    199 }
    \n+
    \n+
    200
    \n+
    \n+\n+
    207 {
    \n+
    208 return size_;
    \n+
    209 }
    \n+
    \n+
    210
    \n+
    \n+
    212 bool empty() const
    \n+
    213 {
    \n+
    214 return size_==0;
    \n+
    215 }
    \n+
    \n+
    216
    \n+
    \n+
    218 static constexpr size_type capacity()
    \n+
    219 {
    \n+
    220 return n;
    \n+
    221 }
    \n+
    \n+
    222
    \n+
    \n+
    224 static constexpr size_type max_size()
    \n+
    225 {
    \n+
    226 return n;
    \n+
    227 }
    \n+
    \n+
    228
    \n+
    \n+
    232 friend std::ostream& operator<< (std::ostream& s, const ReservedDeque& v)
    \n+
    233 {
    \n+
    234 for (size_t i=0; i<v.size(); i++)
    \n+
    235 s << v[i] << " ";
    \n+
    236 return s;
    \n+
    237 }
    \n+
    \n+
    238
    \n+
    239 private:
    \n+
    240 T data_[n];
    \n+
    241 size_type first_;
    \n+
    242 size_type size_;
    \n+
    243 };
    \n+
    \n+
    244
    \n+
    245} // end namespace Functions
    \n+
    246} // end namespace Dune
    \n+
    247
    \n+
    248#undef CHECKSIZE
    \n+
    249
    \n+
    250#endif // DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n+
    #define CHECKSIZE(X)
    Definition reserveddeque.hh:24
    \n
    Definition polynomial.hh:17
    \n-
    Definition differentiablefunction.hh:33
    \n-
    DifferentiableFunction(F &&f)
    Construct from function.
    Definition differentiablefunction.hh:110
    \n-\n-
    Helper class to deduce the signature of a callable.
    Definition signature.hh:60
    \n-
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:169
    \n+
    A double-ended queue (deque) class with statically reserved memory.
    Definition reserveddeque.hh:49
    \n+
    void pop_front()
    Erases the first element of the vector, O(1) time.
    Definition reserveddeque.hh:130
    \n+
    static constexpr size_type capacity()
    Returns current capacity (allocated memory) of the vector.
    Definition reserveddeque.hh:218
    \n+
    void clear()
    Erases all elements.
    Definition reserveddeque.hh:93
    \n+
    Dune::GenericIterator< ReservedDeque, value_type > iterator
    Iterator used to iterate through a vector.
    Definition reserveddeque.hh:67
    \n+
    T value_type
    The type of object, T, stored in the vector.
    Definition reserveddeque.hh:55
    \n+
    ReservedDeque()
    Constructor.
    Definition reserveddeque.hh:76
    \n+
    bool empty() const
    Returns true if vector has no elements.
    Definition reserveddeque.hh:212
    \n+
    const_reference back() const
    Returns const reference to last element of vector.
    Definition reserveddeque.hh:195
    \n+
    friend std::ostream & operator<<(std::ostream &s, const ReservedDeque &v)
    Send ReservedDeque to an output stream.
    Definition reserveddeque.hh:232
    \n+
    void push_front(const T &t)
    Prepends an element to the begin of a deque if size<capacity, O(1) time.
    Definition reserveddeque.hh:114
    \n+
    reference operator[](size_type i)
    Returns reference to the i'th element.
    Definition reserveddeque.hh:160
    \n+
    reference front()
    Returns reference to first element of vector.
    Definition reserveddeque.hh:174
    \n+
    T * pointer
    Pointer to T.
    Definition reserveddeque.hh:57
    \n+
    const_reference front() const
    Returns const reference to first element of vector.
    Definition reserveddeque.hh:181
    \n+
    iterator end()
    Returns an iterator pointing to the end of the vector.
    Definition reserveddeque.hh:150
    \n+
    reference back()
    Returns reference to last element of vector.
    Definition reserveddeque.hh:188
    \n+
    void pop_back()
    Erases the last element of the vector, O(1) time.
    Definition reserveddeque.hh:123
    \n+
    const T & const_reference
    Const reference to T.
    Definition reserveddeque.hh:61
    \n+
    static constexpr size_type max_size()
    Returns the maximum length of the vector.
    Definition reserveddeque.hh:224
    \n+
    std::ptrdiff_t difference_type
    A signed integral type.
    Definition reserveddeque.hh:65
    \n+
    T & reference
    Reference to T.
    Definition reserveddeque.hh:59
    \n+
    Dune::GenericIterator< const ReservedDeque, const value_type > const_iterator
    Const iterator used to iterate through a vector.
    Definition reserveddeque.hh:69
    \n+
    size_type size() const
    Returns number of elements in the vector.
    Definition reserveddeque.hh:206
    \n+
    const_iterator end() const
    Returns a const_iterator pointing to the end of the vector.
    Definition reserveddeque.hh:155
    \n+
    void resize(size_t s)
    Specifies a new size for the vector.
    Definition reserveddeque.hh:100
    \n+
    iterator begin()
    Returns a iterator pointing to the beginning of the vector.
    Definition reserveddeque.hh:140
    \n+
    const_iterator begin() const
    Returns a const_iterator pointing to the beginning of the vector.
    Definition reserveddeque.hh:145
    \n+
    ReservedDeque(std::initializer_list< T > const &l)
    Definition reserveddeque.hh:81
    \n+
    size_t size_type
    An unsigned integral type.
    Definition reserveddeque.hh:63
    \n+
    void push_back(const T &t)
    Appends an element to the end of a vector, up to the maximum size n, O(1) time.
    Definition reserveddeque.hh:107
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,157 +1,324 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-differentiablefunction.hh\n+reserveddeque.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n-8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n+8#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n 9\n-10#include \n-11\n-12#include \n-13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+14#include \n+15#include \n+16#include \n+17#include \n+18\n+19#include \n 20\n-21namespace _\bD_\bu_\bn_\be {\n-22namespace Functions {\n-23\n-24\n-25\n-26/*\n-27 * Default implementation is empty\n-28 * The actual implementation is only given if Signature is an type\n-29 * describing a function signature as Range(Domain).\n-30 */\n-31template class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-_\b3_\b2class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-33{};\n-34\n-35\n-36\n-37namespace Imp\n-38{\n-39\n-41 template class DerivativeTraits, size_t bufferSize>\n-42 struct DifferentiableFunctionTraits\n-43 {\n-45 using Signature = S;\n-46\n-48 using Range = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n-49\n-51 using Domain = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n-52\n-54 using DerivativeSignature = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n-DerivativeSignature;\n-55\n-57 using DerivativeInterface = _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n-_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b>;\n-58\n-60 using Concept = DifferentiableFunctionWrapperInterface;\n-61\n-63 template\n-64 using Model = DifferentiableFunctionWrapperImplementation;\n-65 };\n-66}\n-67\n-68\n-69\n-84template class DerivativeTraits,\n-size_t bufferSize>\n-_\b8_\b5class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< Range(Domain), DerivativeTraits, bufferSize> :\n-86 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n-87 typename Imp::DifferentiableFunctionTraits::Concept,\n-88 Imp::DifferentiableFunctionTraits::template Model>\n-89{\n-90 using Traits = Imp::DifferentiableFunctionTraits;\n-91\n-92 using _\bB_\ba_\bs_\be = _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n-_\bM_\bo_\bd_\be_\bl_\b>;\n-93\n-94 using DerivativeInterface = typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be;\n-95\n-96public:\n-97\n-109 template = 0 >\n-_\b1_\b1_\b0 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n-111 _\bB_\ba_\bs_\be(std::forward(f))\n-112 {\n-113 static_assert(Dune::Functions::Concept::isFunction(),\n-\"Trying to construct a DifferentiableFunction from type that does not model the\n-Function concept\");\n-114 }\n-115\n-_\b1_\b1_\b7 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n-118\n-_\b1_\b2_\b2 Range operator() (const Domain& x) const\n-123 {\n-124 return this->asInterface().operator()(x);\n-125 }\n-126\n-_\b1_\b3_\b4 friend DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-135 {\n-136 return t.asInterface().derivative();\n+21#ifdef CHECK_RESERVEDDEQUE\n+22#define CHECKSIZE(X) assert(X)\n+23#else\n+_\b2_\b4#define CHECKSIZE(X) {}\n+25#endif\n+26\n+27namespace _\bD_\bu_\bn_\be {\n+28namespace Functions {\n+29\n+47 template\n+_\b4_\b8 class _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be\n+49 {\n+50 public:\n+51\n+_\b5_\b5 typedef T _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+_\b5_\b7 typedef T* _\bp_\bo_\bi_\bn_\bt_\be_\br;\n+_\b5_\b9 typedef T& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+_\b6_\b1 typedef const T& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+_\b6_\b3 typedef size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n+_\b6_\b5 typedef std::ptrdiff_t _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be;\n+_\b6_\b7 typedef Dune::GenericIterator _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b6_\b9 typedef Dune::GenericIterator\n+_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+70\n+_\b7_\b6 _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be() :\n+77 size_(0),\n+78 first_(0)\n+79 {}\n+80\n+_\b8_\b1 _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be(std::initializer_list const &l)\n+82 {\n+83 assert(l.size() <= n);// Actually, this is not needed any more!\n+84 size_ = l.size();\n+85 std::copy_n(l.begin(), size_, data_);\n+86 }\n+87\n+_\b9_\b3 void _\bc_\bl_\be_\ba_\br()\n+94 {\n+95 first_ = 0;\n+96 size_ = 0;\n+97 }\n+98\n+_\b1_\b0_\b0 void _\br_\be_\bs_\bi_\bz_\be(size_t s)\n+101 {\n+102 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(s<=n);\n+103 size_ = s;\n+104 }\n+105\n+_\b1_\b0_\b7 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const T& t)\n+108 {\n+109 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size__\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend DerivativeInterface derivative(const DifferentiableFunction &t)\n-Get derivative of wrapped function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:134\n+_\b1_\b4_\b5 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const {\n+146 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n+147 }\n+148\n+_\b1_\b5_\b0 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd(){\n+151 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, size_);\n+152 }\n+153\n+_\b1_\b5_\b5 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const {\n+156 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, size_);\n+157 }\n+158\n+_\b1_\b6_\b0 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i)\n+161 {\n+162 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>i);\n+163 return data_[(first_ + i) % n];\n+164 }\n+165\n+_\b1_\b6_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n+168 {\n+169 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>i);\n+170 return data_[(first_ + i) % n];\n+171 }\n+172\n+_\b1_\b7_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt()\n+175 {\n+176 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n+177 return data_[first_];\n+178 }\n+179\n+_\b1_\b8_\b1 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt() const\n+182 {\n+183 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n+184 return data_[first_];\n+185 }\n+186\n+_\b1_\b8_\b8 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk()\n+189 {\n+190 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n+191 return data_[(first_ + size_-1) % n];\n+192 }\n+193\n+_\b1_\b9_\b5 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() const\n+196 {\n+197 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n+198 return data_[(first_ + size_-1) % n];\n+199 }\n+200\n+_\b2_\b0_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be () const\n+207 {\n+208 return size_;\n+209 }\n+210\n+_\b2_\b1_\b2 bool _\be_\bm_\bp_\bt_\by() const\n+213 {\n+214 return size_==0;\n+215 }\n+216\n+_\b2_\b1_\b8 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by()\n+219 {\n+220 return n;\n+221 }\n+222\n+_\b2_\b2_\b4 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be()\n+225 {\n+226 return n;\n+227 }\n+228\n+_\b2_\b3_\b2 friend std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b (std::ostream& s, const _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be& v)\n+233 {\n+234 for (size_t i=0; i_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-DifferentiableFunction(F &&f)\n-Construct from function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:110\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n-_\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-DifferentiableFunction()=default\n-Default constructor.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n-Helper class to deduce the signature of a callable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n-Base class for type-erased interface wrapper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be\n+A double-ended queue (deque) class with statically reserved memory.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:49\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bp_\bo_\bp_\b__\bf_\br_\bo_\bn_\bt\n+void pop_front()\n+Erases the first element of the vector, O(1) time.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:130\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by\n+static constexpr size_type capacity()\n+Returns current capacity (allocated memory) of the vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:218\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bc_\bl_\be_\ba_\br\n+void clear()\n+Erases all elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:93\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+Dune::GenericIterator< ReservedDeque, value_type > iterator\n+Iterator used to iterate through a vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+T value_type\n+The type of object, T, stored in the vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:55\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be\n+ReservedDeque()\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:76\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+Returns true if vector has no elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:212\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bb_\ba_\bc_\bk\n+const_reference back() const\n+Returns const reference to last element of vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:195\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+friend std::ostream & operator<<(std::ostream &s, const ReservedDeque &v)\n+Send ReservedDeque to an output stream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:232\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt\n+void push_front(const T &t)\n+Prepends an element to the begin of a deque if size const_iterator\n+Const iterator used to iterate through a vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:69\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Returns number of elements in the vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:206\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\be_\bn_\bd\n+const_iterator end() const\n+Returns a const_iterator pointing to the end of the vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:155\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n+void resize(size_t s)\n+Specifies a new size for the vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:100\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+iterator begin()\n+Returns a iterator pointing to the beginning of the vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:140\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+const_iterator begin() const\n+Returns a const_iterator pointing to the beginning of the vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:145\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be\n+ReservedDeque(std::initializer_list< T > const &l)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:81\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+size_t size_type\n+An unsigned integral type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:63\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:107\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: utility.hh File Reference\n+dune-functions: typeerasure.hh File Reference\n \n \n \n \n \n \n \n@@ -71,91 +71,38 @@\n \n \n \n
    \n \n-
    utility.hh File Reference
    \n+Namespaces
    \n+
    typeerasure.hh File Reference
    \n \n
    \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+
    #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
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    struct  Dune::Functions::LastType< T >
     Get last entry of type list. More...
     
    struct  Dune::Functions::RotateTuple< T >
     Rotate type list by one, such that last entry is moved to first position. More...
    class  Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize >
     Base class for type-erased interface wrapper. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Typedefs

    template<template< class... > class T, class ArgTuple >
    using Dune::Functions::ExpandTuple = typename Imp::ExpandTupleHelper< T, ArgTuple >::Type
     Expand tuple arguments as template arguments.
     
    template<template< class... > class F, class... Tuples>
    using Dune::Functions::TransformTuple = typename Imp::TransformTupleHelper< F, Tuples... >::Type
     Transform tuple types argument using type-functor.
     
    template<class IntegerSequence >
    using Dune::Functions::IntegerSequenceTuple = typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type
     Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

    template<class F , class size_type , size_type firstValue, class... Args>
    auto Dune::Functions::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)...))
     
    template<class F , class size_type , size_type firstValue, size_type secondValue, size_type... otherValues, class... Args>
    auto Dune::Functions::forwardAsStaticInteger (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)...))
     
    template<std::size_t end, class F , class size_type , class... Args>
    auto Dune::Functions::forwardAsStaticIndex (const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))
     Transform dynamic index to static index_constant.
     
    template<class F , class... T>
    auto Dune::Functions::transformTuple (F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >{}))
     Transform tuple value using a functor.
     
    template<class F , class... T1, class... T2>
    auto Dune::Functions::transformTuple (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... >{}))
     Transform tuple value using a binary functor.
     
    template<class Expression >
    auto Dune::Functions::callableCheck (Expression f)
     Create a predicate for checking validity of expressions.
     
    template<class Check >
    auto Dune::Functions::negatePredicate (Check check)
     Negate given predicate.
     
    template<class T >
    auto Dune::Functions::forwardCapture (T &&t)
     Create a capture object for perfect forwarding.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,92 +1,27 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-utility.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+typeerasure.hh File Reference\n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bs_\bm_\ba_\bl_\bl_\bo_\bb_\bj_\be_\bc_\bt_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bs_\bt_\bT_\by_\bp_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 Get last entry of type list. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 Rotate type list by one, such that last entry is moved to first\n- position. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b<_\b _\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b,_\b _\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+ _\b>\n+\u00a0 Base class for type-erased interface wrapper. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template class T, class ArgTuple >\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\ba_\bn_\bd_\bT_\bu_\bp_\bl_\be = typename Imp::ExpandTupleHelper< T,\n- ArgTuple >::Type\n-\u00a0 Expand tuple arguments as template arguments.\n-\u00a0\n-template class F, class... Tuples>\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be = typename Imp::TransformTupleHelper< F,\n- Tuples... >::Type\n-\u00a0 Transform tuple types argument using type-functor.\n-\u00a0\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be_\bT_\bu_\bp_\bl_\be = typename Imp::\n- IntegerSequenceTupleHelper< IntegerSequence >::Type\n-\u00a0 Transform integer_sequence to tuple...>\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br (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\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br (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\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bd_\be_\bx (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.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be (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.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be (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.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk (Expression f)\n-\u00a0 Create a predicate for checking validity of expressions.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be (Check check)\n-\u00a0 Negate given predicate.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be (T &&t)\n-\u00a0 Create a capture object for perfect forwarding.\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: utility.hh Source File\n+dune-functions: typeerasure.hh Source File\n \n \n \n \n \n \n \n@@ -74,308 +74,173 @@\n \n \n
    \n
    \n-
    utility.hh
    \n+
    typeerasure.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n
    9
    \n-
    10
    \n-
    11#include <utility>
    \n-
    12#include <type_traits>
    \n+
    10#include <typeinfo>
    \n+
    11
    \n+
    12#include <dune/common/typeutilities.hh>
    \n
    13
    \n-
    14#include <dune/common/overloadset.hh>
    \n-
    15#include <dune/common/indices.hh>
    \n-
    16
    \n-\n-
    18
    \n-
    19namespace Dune {
    \n-
    20namespace Functions {
    \n+\n+\n+\n+
    17
    \n+
    18namespace Dune {
    \n+
    19namespace Functions {
    \n+
    20namespace Imp {
    \n
    21
    \n
    22
    \n
    23
    \n-
    24template<class F, class size_type, size_type firstValue, class... Args>
    \n-
    \n-
    25auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue> values, const size_type& i, F&& f, Args&&... args)
    \n-
    26 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
    \n-
    27{
    \n-
    28 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
    \n-
    29}
    \n-
    \n-
    30
    \n-
    31template<class F, class size_type, size_type firstValue, size_type secondValue, size_type... otherValues, class... Args>
    \n-
    \n-
    32auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue, secondValue, otherValues...> values, const size_type i, F&& f, Args&&... args)
    \n-
    33 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
    \n-
    34{
    \n-
    35 if (i==firstValue)
    \n-
    36 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
    \n-
    37 return forwardAsStaticInteger(std::integer_sequence<size_type, secondValue, otherValues...>(), i, std::forward<F>(f), std::forward<Args>(args)...);
    \n-
    38}
    \n-
    \n-
    39
    \n-
    40
    \n-
    41
    \n-
    63template<std::size_t end, class F, class size_type, class... Args>
    \n-
    \n-
    64auto forwardAsStaticIndex(const size_type& i, F&& f, Args&&... args)
    \n-
    65 ->decltype(f(Dune::Indices::_0, std::forward<Args>(args)...))
    \n-
    66{
    \n-
    67 return forwardAsStaticInteger(std::make_index_sequence<end>{}, i, std::forward<F>(f), std::forward<Args>(args)...);
    \n-
    68}
    \n-
    \n-
    69
    \n-
    70
    \n-
    71
    \n-
    72namespace Imp {
    \n+
    37template<class Interface>
    \n+
    38class TypeErasureWrapperInterface :
    \n+
    39 public Interface,
    \n+
    40 public PolymorphicType<TypeErasureWrapperInterface<Interface>>
    \n+
    41{
    \n+
    42public:
    \n+
    43 virtual const std::type_info& target_type() const = 0;
    \n+
    44};
    \n+
    45
    \n+
    46
    \n+
    47
    \n+
    64template<class Interface, class T>
    \n+
    65class TypeErasureWrapperBase :
    \n+
    66 public TypeErasureWrapperInterface<Interface>
    \n+
    67{
    \n+
    68public:
    \n+
    69 template<class TT, disableCopyMove<TypeErasureWrapperBase, TT> = 0>
    \n+
    70 TypeErasureWrapperBase(TT&& t) :
    \n+
    71 wrapped_(std::forward<TT>(t))
    \n+
    72 {}
    \n
    73
    \n-
    74 template<template<class...> class T, class List>
    \n-
    75 struct ExpandTupleHelper
    \n-
    76 {};
    \n-
    77
    \n-
    78 template<template<class...> class T, template<class...> class ListType, class... Args>
    \n-
    79 struct ExpandTupleHelper<T, ListType<Args...>>
    \n-
    80 {
    \n-
    81 using Type = T<Args...>;
    \n-
    82 };
    \n-
    83
    \n-
    84} // end namespace Imp
    \n+
    75 T& get()
    \n+
    76 {
    \n+
    77 return wrapped_;
    \n+
    78 }
    \n+
    79
    \n+
    81 const T& get() const
    \n+
    82 {
    \n+
    83 return wrapped_;
    \n+
    84 }
    \n
    85
    \n-
    97template<template<class...> class T, class ArgTuple>
    \n-
    98using ExpandTuple = typename Imp::ExpandTupleHelper<T, ArgTuple>::Type;
    \n-
    99
    \n-
    100
    \n-
    101
    \n-
    102namespace Imp {
    \n-
    103
    \n-
    104 template<template<class...> class T, class... Tuple>
    \n-
    105 struct TransformTupleHelper
    \n-
    106 {};
    \n-
    107
    \n-
    108 template<template<class...> class T, class... Args1>
    \n-
    109 struct TransformTupleHelper<T, typename std::tuple<Args1...>>
    \n-
    110 {
    \n-
    111 using Type = std::tuple<T<Args1>...>;
    \n-
    112 };
    \n-
    113
    \n-
    114 template<template<class...> class T, class... Args1, class... Args2>
    \n-
    115 struct TransformTupleHelper<T, typename std::tuple<Args1...>, typename std::tuple<Args2...>>
    \n-
    116 {
    \n-
    117 using Type = std::tuple<T<Args1, Args2>...>;
    \n-
    118 };
    \n-
    119
    \n-
    120} // end namespace Imp
    \n+
    86protected:
    \n+
    87 using Wrapped = T;
    \n+
    88 Wrapped wrapped_;
    \n+
    89};
    \n+
    90
    \n+
    91
    \n+
    92
    \n+
    116template<class Interface, template<class> class Implementation, class T>
    \n+
    117class TypeErasureWrapperImplementation :
    \n+
    118 public Implementation<TypeErasureWrapperBase<Interface, T> >
    \n+
    119{
    \n+
    120public:
    \n
    121
    \n-
    134template<template<class...> class F, class... Tuples>
    \n-
    135using TransformTuple = typename Imp::TransformTupleHelper<F, Tuples...>::Type;
    \n-
    136
    \n-
    137
    \n-
    138
    \n-
    139namespace Imp {
    \n-
    140
    \n-
    141 template<class F, class... T, std::size_t... k>
    \n-
    142 auto transformTupleHelper(F&& f, const std::tuple<T...>& tuple, std::index_sequence<k...>)
    \n-
    143 -> decltype(std::make_tuple(f(std::get<k>(tuple))...))
    \n-
    144 {
    \n-
    145 return std::make_tuple(f(std::get<k>(tuple))...);
    \n-
    146 }
    \n-
    147
    \n-
    148 template<class F, class... T1, class...T2, std::size_t... k>
    \n-
    149 auto transformTupleHelper(F&& f, const std::tuple<T1...>& tuple1, const std::tuple<T2...>& tuple2, std::index_sequence<k...>)
    \n-
    150 -> decltype(std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...))
    \n-
    151 {
    \n-
    152 return std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...);
    \n-
    153 }
    \n+
    123 template<class TT, disableCopyMove<TypeErasureWrapperImplementation, T> = 0>
    \n+
    124 TypeErasureWrapperImplementation(TT&& t) :
    \n+
    125 Implementation<TypeErasureWrapperBase<Interface, T> >(std::forward<TT>(t))
    \n+
    126 {}
    \n+
    127
    \n+
    129 virtual TypeErasureWrapperImplementation* clone() const
    \n+
    130 {
    \n+
    131 return new TypeErasureWrapperImplementation(*this);
    \n+
    132 }
    \n+
    133
    \n+
    135 virtual TypeErasureWrapperImplementation* clone(void* buffer) const
    \n+
    136 {
    \n+
    137 return new (buffer) TypeErasureWrapperImplementation(*this);
    \n+
    138 }
    \n+
    139
    \n+
    141 virtual TypeErasureWrapperImplementation* move(void* buffer)
    \n+
    142 {
    \n+
    143 return new (buffer) TypeErasureWrapperImplementation(std::move(*this));
    \n+
    144 }
    \n+
    145
    \n+
    147 virtual const std::type_info& target_type() const
    \n+
    148 {
    \n+
    149 return typeid(T);
    \n+
    150 }
    \n+
    151};
    \n+
    152
    \n+
    153} // namespace Dune::Functions::Imp
    \n
    154
    \n-
    155} // end namespace Imp
    \n+
    155
    \n
    156
    \n-
    168template<class F, class... T>
    \n-
    \n-
    169auto transformTuple(F&& f, const std::tuple<T...>& tuple)
    \n-
    170 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{}))
    \n-
    171{
    \n-
    172 return Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{});
    \n-
    173}
    \n-
    \n-
    174
    \n-
    188template<class F, class... T1, class... T2>
    \n-
    \n-
    189auto transformTuple(F&& f, const std::tuple<T1...>& tuple1, const std::tuple<T2...>& tuple2)
    \n-
    190 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{}))
    \n-
    191{
    \n-
    192 return Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{});
    \n-
    193}
    \n-
    \n-
    194
    \n-
    195
    \n-
    196
    \n-
    197namespace Imp {
    \n+
    167template<class Interface, template<class> class Implementation, size_t bufferSize = 56>
    \n+
    \n+\n+
    169{
    \n+
    170public:
    \n+
    171
    \n+
    173 template<class T, disableCopyMove<TypeErasureBase, T> = 0 >
    \n+
    \n+\n+
    175 wrapped_(Imp::TypeErasureWrapperImplementation<Interface, Implementation, std::decay_t<T>>(std::forward<T>(t)))
    \n+
    176 {}
    \n+
    \n+
    177
    \n+
    179 TypeErasureBase() = default;
    \n+
    180
    \n+
    \n+
    182 Interface& asInterface()
    \n+
    183 {
    \n+
    184 return wrapped_.get();
    \n+
    185 }
    \n+
    \n+
    186
    \n+
    \n+
    188 const Interface& asInterface() const
    \n+
    189 {
    \n+
    190 return wrapped_.get();
    \n+
    191 }
    \n+
    \n+
    192
    \n+
    \n+
    194 const std::type_info& target_type() const
    \n+
    195 {
    \n+
    196 return wrapped_.get().target_type();
    \n+
    197 }
    \n+
    \n
    198
    \n-
    199 template<class IntegerSequence>
    \n-
    200 struct IntegerSequenceTupleHelper
    \n-
    201 {};
    \n+
    199protected:
    \n+\n+
    201};
    \n+
    \n
    202
    \n-
    203 template<class I, I... k>
    \n-
    204 struct IntegerSequenceTupleHelper<std::integer_sequence<I, k...>>
    \n-
    205 {
    \n-
    206 using Type = std::tuple<std::integral_constant<I, k>...>;
    \n-
    207 };
    \n-
    208
    \n-
    209} // end namespace Imp
    \n-
    210
    \n-
    214template<class IntegerSequence>
    \n-
    215using IntegerSequenceTuple= typename Imp::IntegerSequenceTupleHelper<IntegerSequence>::Type;
    \n-
    216
    \n-
    217
    \n-
    218
    \n-
    224template<class... T>
    \n-
    \n-\n-
    226{
    \n-
    227 using type = std::tuple_element_t<sizeof...(T)-1, std::tuple<T...>>;
    \n-
    228};
    \n-
    \n-
    229
    \n-
    230
    \n-
    231
    \n-
    232namespace Imp {
    \n-
    233
    \n-
    234template<class T, class I>
    \n-
    235struct RotateHelper;
    \n-
    236
    \n-
    237template<class... T, std::size_t... I>
    \n-
    238struct RotateHelper<std::tuple<T...>, std::index_sequence<I...> >
    \n-
    239{
    \n-
    240 using type = typename std::tuple<typename LastType<T...>::type, std::tuple_element_t<I,std::tuple<T...>>...>;
    \n-
    241};
    \n-
    242
    \n-
    243} // end namespace Imp
    \n-
    244
    \n-
    245
    \n-
    253template<class... T>
    \n-
    \n-\n-
    255{
    \n-
    256 using type = typename Imp::RotateHelper<std::tuple<T...>, std::make_index_sequence<sizeof...(T)-1>>::type;
    \n-
    257};
    \n-
    \n-
    258
    \n-
    259
    \n-
    260
    \n-
    282template<class Expression>
    \n-
    \n-
    283auto callableCheck(Expression f)
    \n-
    284{
    \n-
    285 return [f](auto&&... args){
    \n-
    286 return Functions::Concept::isCallable(f, std::forward<decltype(args)>(args)...);
    \n-
    287 };
    \n-
    288}
    \n-
    \n-
    289
    \n-
    290
    \n-
    291
    \n-
    307template<class Check>
    \n-
    \n-
    308auto negatePredicate(Check check)
    \n-
    309{
    \n-
    310 return [check](auto&&... args){
    \n-
    311 auto negate = overload(
    \n-
    312 [](std::true_type) { return std::false_type{};},
    \n-
    313 [](std::false_type) { return std::true_type{};},
    \n-
    314 [](bool v) { return not v;});
    \n-
    315 return negate(check(std::forward<decltype(args)>(args)...));
    \n-
    316 };
    \n-
    317}
    \n-
    \n-
    318
    \n-
    319
    \n-
    320namespace Impl {
    \n-
    321
    \n-
    322 // Wrapper to capture values in a lambda for perfect forwarding.
    \n-
    323 // This captures value types by value and reference types by reference.
    \n-
    324 template <typename T>
    \n-
    325 struct ForwardCaptureWrapper;
    \n-
    326
    \n-
    327 template <typename T>
    \n-
    328 struct ForwardCaptureWrapper
    \n-
    329 {
    \n-
    330 template <typename TT>
    \n-
    331 ForwardCaptureWrapper(TT&& t) : t_{std::forward<TT>(t)} {}
    \n-
    332
    \n-
    333 auto forward() const { return std::move(t_); }
    \n-
    334
    \n-
    335 T t_;
    \n-
    336 };
    \n-
    337
    \n-
    338 template <typename T>
    \n-
    339 struct ForwardCaptureWrapper<T&>
    \n-
    340 {
    \n-
    341 ForwardCaptureWrapper(T& t) : t_{t} {}
    \n-
    342
    \n-
    343 T& forward() const { return t_; };
    \n-
    344
    \n-
    345 T& t_;
    \n-
    346 };
    \n-
    347
    \n-
    348 template <typename T>
    \n-
    349 struct ForwardCaptureWrapper<const T&>
    \n-
    350 {
    \n-
    351 ForwardCaptureWrapper(const T& t) : t_{t} {}
    \n-
    352
    \n-
    353 const T& forward() const { return t_; };
    \n-
    354
    \n-
    355 const T& t_;
    \n-
    356 };
    \n-
    357
    \n-
    358} // end namespace Dune::Functions::Impl
    \n-
    359
    \n-
    360
    \n-
    361
    \n-
    375template <class T>
    \n-
    \n-
    376auto forwardCapture(T&& t)
    \n-
    377{
    \n-
    378 return Impl::ForwardCaptureWrapper<T>(std::forward<T>(t));
    \n-
    379}
    \n-
    \n-
    380
    \n-
    381
    \n-
    382
    \n-
    383} // namespace Dune::Functions
    \n-
    384} // namespace Dune
    \n-
    385
    \n-
    386
    \n-
    387#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n-\n-
    typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple
    Expand tuple arguments as template arguments.
    Definition utility.hh:98
    \n-
    typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple
    Transform tuple types argument using type-functor.
    Definition utility.hh:135
    \n-
    static constexpr auto isCallable()
    Check if f is callable with given argument list.
    Definition functionconcepts.hh:51
    \n-
    auto transformTuple(F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >{}))
    Transform tuple value using a functor.
    Definition utility.hh:169
    \n-
    auto callableCheck(Expression f)
    Create a predicate for checking validity of expressions.
    Definition utility.hh:283
    \n-
    auto forwardAsStaticIndex(const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))
    Transform dynamic index to static index_constant.
    Definition utility.hh:64
    \n-
    auto negatePredicate(Check check)
    Negate given predicate.
    Definition utility.hh:308
    \n+
    203
    \n+
    204}} // namespace Dune::Functions
    \n+
    205
    \n+
    206
    \n+
    207
    \n+
    208#endif // DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n+\n+\n+\n
    Definition polynomial.hh:17
    \n-
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:376
    \n-
    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)...))
    Definition utility.hh:25
    \n-
    typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type IntegerSequenceTuple
    Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>
    Definition utility.hh:215
    \n-
    Get last entry of type list.
    Definition utility.hh:226
    \n-
    std::tuple_element_t< sizeof...(T) -1, std::tuple< T... > > type
    Definition utility.hh:227
    \n-
    Rotate type list by one, such that last entry is moved to first position.
    Definition utility.hh:255
    \n-
    typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence< sizeof...(T) -1 > >::type type
    Definition utility.hh:256
    \n+
    A wrapper providing small object optimization with polymorphic types.
    Definition polymorphicsmallobject.hh:51
    \n+
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:169
    \n+
    const std::type_info & target_type() const
    Get type of stored object.
    Definition typeerasure.hh:194
    \n+
    TypeErasureBase(T &&t)
    Construct wrapper from object.
    Definition typeerasure.hh:174
    \n+
    PolymorphicSmallObject< Imp::TypeErasureWrapperInterface< Interface >, bufferSize > wrapped_
    Definition typeerasure.hh:200
    \n+
    TypeErasureBase()=default
    Default constructor.
    \n+
    Interface & asInterface()
    Get mutable reference to wrapped object.
    Definition typeerasure.hh:182
    \n+
    const Interface & asInterface() const
    Get reference to wrapped object.
    Definition typeerasure.hh:188
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,353 +1,185 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-utility.hh\n+typeerasure.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH\n-8#define DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+8#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n 9\n-10\n-11#include \n-12#include \n+10#include \n+11\n+12#include \n 13\n-14#include \n-15#include \n-16\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-18\n-19namespace _\bD_\bu_\bn_\be {\n-20namespace Functions {\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bs_\bm_\ba_\bl_\bl_\bo_\bb_\bj_\be_\bc_\bt_\b._\bh_\bh>\n+17\n+18namespace _\bD_\bu_\bn_\be {\n+19namespace Functions {\n+20namespace Imp {\n 21\n 22\n 23\n-24template\n-_\b2_\b5auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br(std::integer_sequence\n-values, const size_type& i, F&& f, Args&&... args)\n-26 ->decltype(f(std::integral_constant(), std::\n-forward(args)...))\n-27{\n-28 return f(std::integral_constant(), std::forward\n-(args)...);\n-29}\n-30\n-31template\n-_\b3_\b2auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br(std::integer_sequence values, const size_type i, F&& f, Args&&... args)\n-33 ->decltype(f(std::integral_constant(), std::\n-forward(args)...))\n-34{\n-35 if (i==firstValue)\n-36 return f(std::integral_constant(), std::forward\n-(args)...);\n-37 return _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br(std::integer_sequence(), i, std::forward(f), std::forward(args)...);\n-38}\n-39\n-40\n-41\n-63template\n-_\b6_\b4auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bd_\be_\bx(const size_type& i, F&& f, Args&&... args)\n-65 ->decltype(f(Dune::Indices::_0, std::forward(args)...))\n-66{\n-67 return _\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br(std::make_index_sequence{}, i, std::\n-forward(f), std::forward(args)...);\n-68}\n-69\n-70\n-71\n-72namespace Imp {\n+37template\n+38class TypeErasureWrapperInterface :\n+39 public Interface,\n+40 public PolymorphicType>\n+41{\n+42public:\n+43 virtual const std::type_info& target_type() const = 0;\n+44};\n+45\n+46\n+47\n+64template\n+65class TypeErasureWrapperBase :\n+66 public TypeErasureWrapperInterface\n+67{\n+68public:\n+69 template = 0>\n+70 TypeErasureWrapperBase(TT&& t) :\n+71 wrapped_(std::forward(t))\n+72 {}\n 73\n-74 template class T, class List>\n-75 struct ExpandTupleHelper\n-76 {};\n-77\n-78 template class T, template class ListType,\n-class... Args>\n-79 struct ExpandTupleHelper>\n-80 {\n-81 using Type = T;\n-82 };\n-83\n-84} // end namespace Imp\n+75 T& get()\n+76 {\n+77 return wrapped_;\n+78 }\n+79\n+81 const T& get() const\n+82 {\n+83 return wrapped_;\n+84 }\n 85\n-97template class T, class ArgTuple>\n-_\b9_\b8using _\bE_\bx_\bp_\ba_\bn_\bd_\bT_\bu_\bp_\bl_\be = typename Imp::ExpandTupleHelper::Type;\n-99\n-100\n-101\n-102namespace Imp {\n-103\n-104 template class T, class... Tuple>\n-105 struct TransformTupleHelper\n-106 {};\n-107\n-108 template class T, class... Args1>\n-109 struct TransformTupleHelper>\n-110 {\n-111 using Type = std::tuple...>;\n-112 };\n-113\n-114 template class T, class... Args1, class... Args2>\n-115 struct TransformTupleHelper, typename\n-std::tuple>\n-116 {\n-117 using Type = std::tuple...>;\n-118 };\n-119\n-120} // end namespace Imp\n+86protected:\n+87 using Wrapped = T;\n+88 Wrapped wrapped_;\n+89};\n+90\n+91\n+92\n+116template class Implementation, class T>\n+117class TypeErasureWrapperImplementation :\n+118 public Implementation >\n+119{\n+120public:\n 121\n-134template class F, class... Tuples>\n-_\b1_\b3_\b5using _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be = typename Imp::TransformTupleHelper::\n-Type;\n-136\n-137\n-138\n-139namespace Imp {\n-140\n-141 template\n-142 auto transformTupleHelper(F&& f, const std::tuple& tuple, std::\n-index_sequence)\n-143 -> decltype(std::make_tuple(f(std::get(tuple))...))\n-144 {\n-145 return std::make_tuple(f(std::get(tuple))...);\n-146 }\n-147\n-148 template\n-149 auto transformTupleHelper(F&& f, const std::tuple& tuple1, const\n-std::tuple& tuple2, std::index_sequence)\n-150 -> decltype(std::make_tuple(f(std::get(tuple1), std::get\n-(tuple2))...))\n-151 {\n-152 return std::make_tuple(f(std::get(tuple1), std::get(tuple2))...);\n-153 }\n+123 template =\n+0>\n+124 TypeErasureWrapperImplementation(TT&& t) :\n+125 Implementation >(std::forward(t))\n+126 {}\n+127\n+129 virtual TypeErasureWrapperImplementation* clone() const\n+130 {\n+131 return new TypeErasureWrapperImplementation(*this);\n+132 }\n+133\n+135 virtual TypeErasureWrapperImplementation* clone(void* buffer) const\n+136 {\n+137 return new (buffer) TypeErasureWrapperImplementation(*this);\n+138 }\n+139\n+141 virtual TypeErasureWrapperImplementation* move(void* buffer)\n+142 {\n+143 return new (buffer) TypeErasureWrapperImplementation(std::move(*this));\n+144 }\n+145\n+147 virtual const std::type_info& target_type() const\n+148 {\n+149 return typeid(T);\n+150 }\n+151};\n+152\n+153} // namespace Dune::Functions::Imp\n 154\n-155} // end namespace Imp\n+155\n 156\n-168template\n-_\b1_\b6_\b9auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be(F&& f, const std::tuple& tuple)\n-170 -> decltype(Imp::transformTupleHelper(std::forward(f), tuple, std::\n-index_sequence_for{}))\n-171{\n-172 return Imp::transformTupleHelper(std::forward(f), tuple, std::\n-index_sequence_for{});\n-173}\n-174\n-188template\n-_\b1_\b8_\b9auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be(F&& f, const std::tuple& tuple1, const std::\n-tuple& tuple2)\n-190 -> decltype(Imp::transformTupleHelper(std::forward(f), tuple1, tuple2,\n-std::index_sequence_for{}))\n-191{\n-192 return Imp::transformTupleHelper(std::forward(f), tuple1, tuple2, std::\n-index_sequence_for{});\n-193}\n-194\n-195\n-196\n-197namespace Imp {\n+167template class Implementation, size_t\n+bufferSize = 56>\n+_\b1_\b6_\b8class _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n+169{\n+170public:\n+171\n+173 template = 0 >\n+_\b1_\b7_\b4 _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be(T&& t) :\n+175 _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_(Imp::TypeErasureWrapperImplementation>(std::forward(t)))\n+176 {}\n+177\n+_\b1_\b7_\b9 _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be() = default;\n+180\n+_\b1_\b8_\b2 Interface& _\ba_\bs_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be()\n+183 {\n+184 return _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_.get();\n+185 }\n+186\n+_\b1_\b8_\b8 const Interface& _\ba_\bs_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be() const\n+189 {\n+190 return _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_.get();\n+191 }\n+192\n+_\b1_\b9_\b4 const std::type_info& _\bt_\ba_\br_\bg_\be_\bt_\b__\bt_\by_\bp_\be() const\n+195 {\n+196 return _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_.get().target_type();\n+197 }\n 198\n-199 template\n-200 struct IntegerSequenceTupleHelper\n-201 {};\n+199protected:\n+_\b2_\b0_\b0 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt_\b<_\bI_\bm_\bp_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b<_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b>,\n+bufferSize > _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_;\n+201};\n 202\n-203 template\n-204 struct IntegerSequenceTupleHelper>\n-205 {\n-206 using Type = std::tuple...>;\n-207 };\n-208\n-209} // end namespace Imp\n-210\n-214template\n-_\b2_\b1_\b5using _\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be_\bT_\bu_\bp_\bl_\be= typename Imp::\n-IntegerSequenceTupleHelper::Type;\n-216\n-217\n-218\n-224template\n-_\b2_\b2_\b5struct _\bL_\ba_\bs_\bt_\bT_\by_\bp_\be\n-226{\n-_\b2_\b2_\b7 using _\bt_\by_\bp_\be = std::tuple_element_t>;\n-228};\n-229\n-230\n-231\n-232namespace Imp {\n-233\n-234template\n-235struct RotateHelper;\n-236\n-237template\n-238struct RotateHelper, std::index_sequence >\n-239{\n-240 using type = typename std::tuple::type, std::\n-tuple_element_t>...>;\n-241};\n-242\n-243} // end namespace Imp\n-244\n-245\n-253template\n-_\b2_\b5_\b4struct _\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be\n-255{\n-_\b2_\b5_\b6 using _\bt_\by_\bp_\be = typename Imp::RotateHelper, std::\n-make_index_sequence>_\b:_\b:_\bt_\by_\bp_\be;\n-257};\n-258\n-259\n-260\n-282template\n-_\b2_\b8_\b3auto _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk(Expression f)\n-284{\n-285 return [f](auto&&... args){\n-286 return _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(f, std::forward\n-(args)...);\n-287 };\n-288}\n-289\n-290\n-291\n-307template\n-_\b3_\b0_\b8auto _\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be(Check check)\n-309{\n-310 return [check](auto&&... args){\n-311 auto negate = overload(\n-312 [](std::true_type) { return std::false_type{};},\n-313 [](std::false_type) { return std::true_type{};},\n-314 [](bool v) { return not v;});\n-315 return negate(check(std::forward(args)...));\n-316 };\n-317}\n-318\n-319\n-320namespace Impl {\n-321\n-322 // Wrapper to capture values in a lambda for perfect forwarding.\n-323 // This captures value types by value and reference types by reference.\n-324 template \n-325 struct ForwardCaptureWrapper;\n-326\n-327 template \n-328 struct ForwardCaptureWrapper\n-329 {\n-330 template \n-331 ForwardCaptureWrapper(TT&& t) : t_{std::forward(t)} {}\n-332\n-333 auto forward() const { return std::move(t_); }\n-334\n-335 T t_;\n-336 };\n-337\n-338 template \n-339 struct ForwardCaptureWrapper\n-340 {\n-341 ForwardCaptureWrapper(T& t) : t_{t} {}\n-342\n-343 T& forward() const { return t_; };\n-344\n-345 T& t_;\n-346 };\n-347\n-348 template \n-349 struct ForwardCaptureWrapper\n-350 {\n-351 ForwardCaptureWrapper(const T& t) : t_{t} {}\n-352\n-353 const T& forward() const { return t_; };\n-354\n-355 const T& t_;\n-356 };\n-357\n-358} // end namespace Dune::Functions::Impl\n-359\n-360\n-361\n-375template \n-_\b3_\b7_\b6auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(T&& t)\n-377{\n-378 return Impl::ForwardCaptureWrapper(std::forward(t));\n-379}\n-380\n-381\n-382\n-383} // namespace Dune::Functions\n-384} // namespace Dune\n-385\n-386\n-387#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH\n-_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\ba_\bn_\bd_\bT_\bu_\bp_\bl_\be\n-typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple\n-Expand tuple arguments as template arguments.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:98\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be\n-typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple\n-Transform tuple types argument using type-functor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:135\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-static constexpr auto isCallable()\n-Check if f is callable with given argument list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:51\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk\n-auto callableCheck(Expression f)\n-Create a predicate for checking validity of expressions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:283\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bd_\be_\bx\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:64\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be\n-auto negatePredicate(Check check)\n-Negate given predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:308\n+203\n+204}} // namespace Dune::Functions\n+205\n+206\n+207\n+208#endif // DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bp_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bs_\bm_\ba_\bl_\bl_\bo_\bb_\bj_\be_\bc_\bt_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be\n-auto forwardCapture(T &&t)\n-Create a capture object for perfect forwarding.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:376\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:25\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be_\bT_\bu_\bp_\bl_\be\n-typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type\n-IntegerSequenceTuple\n-Transform integer_sequence to tuple...>\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:215\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bs_\bt_\bT_\by_\bp_\be\n-Get last entry of type list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:226\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bs_\bt_\bT_\by_\bp_\be_\b:_\b:_\bt_\by_\bp_\be\n-std::tuple_element_t< sizeof...(T) -1, std::tuple< T... > > type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:227\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be\n-Rotate type list by one, such that last entry is moved to first position.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:255\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be_\b:_\b:_\bt_\by_\bp_\be\n-typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence<\n-sizeof...(T) -1 > >::type type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:256\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n+A wrapper providing small object optimization with polymorphic types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:51\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n+Base class for type-erased interface wrapper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b:_\b:_\bt_\ba_\br_\bg_\be_\bt_\b__\bt_\by_\bp_\be\n+const std::type_info & target_type() const\n+Get type of stored object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:194\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n+TypeErasureBase(T &&t)\n+Construct wrapper from object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:174\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b:_\b:_\bw_\br_\ba_\bp_\bp_\be_\bd_\b_\n+PolymorphicSmallObject< Imp::TypeErasureWrapperInterface< Interface >,\n+bufferSize > wrapped_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:200\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n+TypeErasureBase()=default\n+Default constructor.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bs_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+Interface & asInterface()\n+Get mutable reference to wrapped object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:182\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bs_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n+const Interface & asInterface() const\n+Get reference to wrapped object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeerasure.hh:188\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: indexaccess.hh File Reference\n+dune-functions: differentiablefunction_imp.hh File Reference\n \n \n \n \n \n \n \n@@ -70,61 +70,30 @@\n \n \n
    \n \n-
    indexaccess.hh File Reference
    \n+Namespaces
    \n+
    differentiablefunction_imp.hh File Reference
    \n \n
    \n-
    #include <utility>
    \n-#include <type_traits>
    \n-#include <dune/common/typetraits.hh>
    \n+
    #include <dune/common/exceptions.hh>
    \n #include <dune/common/concept.hh>
    \n-#include <dune/common/hybridutilities.hh>
    \n-#include <dune/functions/common/utility.hh>
    \n+#include <dune/functions/common/type_traits.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

    template<class C , class I , class F , std::enable_if_t< Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int > = 0>
    auto Dune::Functions::hybridIndexAccess (C &&c, const I &i, F &&f) -> decltype(f(c[i]))
     Provide operator[] index-access for containers.
     
    template<class C , class I , class F , std::enable_if_t< not Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int > = 0>
    decltype(auto) Dune::Functions::hybridIndexAccess (C &&c, const I &i, F &&f)
     Provide operator[] index-access for containers.
     
    template<class Result , class C , class MultiIndex >
    Result Dune::Functions::hybridMultiIndexAccess (C &&c, const MultiIndex &index)
     Provide multi-index access by chaining operator[].
     
    template<class C , class MultiIndex , class IsFinal >
    constexpr decltype(auto) Dune::Functions::resolveDynamicMultiIndex (C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
     Provide multi-index access by chaining operator[].
     
    template<class C , class MultiIndex >
    constexpr decltype(auto) Dune::Functions::resolveDynamicMultiIndex (C &&c, const MultiIndex &multiIndex)
     Provide multi-index access by chaining operator[].
     
    template<class C , class MultiIndex >
    constexpr decltype(auto) Dune::Functions::resolveStaticMultiIndex (C &&c, const MultiIndex &multiIndex)
     Provide multi-index access by chaining operator[].
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,56 +1,20 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-indexaccess.hh File Reference\n-#include \n-#include \n-#include \n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+differentiablefunction_imp.hh File Reference\n+#include \n #include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template, C >(), int > = 0>\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs (C &&c, const I\n- &i, F &&f) -> decltype(f(c[i]))\n-\u00a0 Provide operator[] index-access for containers.\n-\u00a0\n-template, C >(), int > = 0>\n- decltype(auto)\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs (C &&c, const I\n- &i, F &&f)\n-\u00a0 Provide operator[] index-access for containers.\n-\u00a0\n-template\n- Result\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs (C &&c, const\n- MultiIndex &index)\n-\u00a0 Provide multi-index access by chaining operator[].\n-\u00a0\n-template\n-constexpr decltype(auto)\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (C &&c,\n- const MultiIndex &multiIndex, const IsFinal &isFinal)\n-\u00a0 Provide multi-index access by chaining operator[].\n-\u00a0\n-template\n-constexpr decltype(auto)\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (C &&c,\n- const MultiIndex &multiIndex)\n-\u00a0 Provide multi-index access by chaining operator[].\n-\u00a0\n-template\n-constexpr decltype(auto)\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (C &&c,\n- const MultiIndex &multiIndex)\n-\u00a0 Provide multi-index access by chaining operator[].\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: indexaccess.hh Source File\n+dune-functions: differentiablefunction_imp.hh Source File\n \n \n \n \n \n \n \n@@ -74,339 +74,120 @@\n \n \n
    \n
    \n-
    indexaccess.hh
    \n+
    differentiablefunction_imp.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n
    9
    \n-
    10
    \n-
    11#include <utility>
    \n-
    12#include <type_traits>
    \n-
    13
    \n-
    14#include <dune/common/typetraits.hh>
    \n-
    15#include <dune/common/concept.hh>
    \n-
    16#include <dune/common/hybridutilities.hh>
    \n-
    17
    \n-\n+
    10#include <dune/common/exceptions.hh>
    \n+
    11#include <dune/common/concept.hh>
    \n+
    12
    \n+\n+
    14
    \n+
    15
    \n+
    16namespace Dune {
    \n+
    17namespace Functions {
    \n+
    18namespace Imp {
    \n
    19
    \n-
    20
    \n-
    21
    \n-
    22namespace Dune {
    \n-
    23namespace Functions {
    \n-
    24
    \n-
    25
    \n-
    26namespace Imp {
    \n-
    27
    \n-
    28namespace Concept {
    \n-
    29
    \n-
    30template<class size_type>
    \n-
    31struct HasDynamicIndexAccess
    \n-
    32{
    \n-
    33 template<class C>
    \n-
    34 auto require(C&& c) -> decltype(
    \n-
    35 c[std::declval<size_type>()]
    \n-
    36 );
    \n-
    37};
    \n-
    38
    \n-
    39struct HasStaticIndexAccess
    \n-
    40{
    \n-
    41 template<class C>
    \n-
    42 auto require(C&& c) -> decltype(
    \n-
    43 c[Dune::Indices::_0]
    \n-
    44 );
    \n-
    45};
    \n-
    46
    \n-
    47} // namespace Concept
    \n-
    48
    \n-
    49} // namespace Imp
    \n+
    23struct HasFreeDerivative
    \n+
    24{
    \n+
    25 template<class F>
    \n+
    26 auto require(F&& f) -> decltype(
    \n+
    27 derivative(f)
    \n+
    28 );
    \n+
    29};
    \n+
    30
    \n+
    31
    \n+
    32
    \n+
    33template<class Dummy, class F,
    \n+
    34 std::enable_if_t<
    \n+
    35 models< HasFreeDerivative, F>() , int> = 0>
    \n+
    36auto derivativeIfImplemented(const F& f) -> decltype(derivative(f))
    \n+
    37{
    \n+
    38 return derivative(f);
    \n+
    39}
    \n+
    40
    \n+
    41
    \n+
    42
    \n+
    43template<class Dummy, class F,
    \n+
    44 std::enable_if_t<
    \n+
    45 not(models< HasFreeDerivative, F>()) , int> = 0>
    \n+
    46Dummy derivativeIfImplemented(const F& f)
    \n+
    47{
    \n+
    48 DUNE_THROW(Dune::NotImplemented, "Derivative not implemented");
    \n+
    49}
    \n
    50
    \n
    51
    \n
    52
    \n-
    65template<class C, class I, class F,
    \n-
    66 std::enable_if_t< Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), int> = 0>
    \n-
    \n-
    67auto hybridIndexAccess(C&& c, const I& i, F&& f)
    \n-
    68 -> decltype(f(c[i]))
    \n-
    69{
    \n-
    70 return f(c[i]);
    \n-
    71}
    \n-
    \n-
    72
    \n-
    90template<class C, class I, class F,
    \n-
    91 std::enable_if_t< not Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), int> = 0>
    \n-
    \n-
    92decltype(auto) hybridIndexAccess(C&& c, const I& i, F&& f)
    \n-
    93{
    \n-
    94 using Size = decltype(Hybrid::size(c));
    \n-
    95 return Hybrid::switchCases(std::make_index_sequence<Size::value>(), i,
    \n-
    96 [&](const auto& ii) -> decltype(auto){
    \n-
    97 return f(c[ii]);
    \n-
    98 }, [&]() -> decltype(auto){
    \n-
    99 return f(c[Dune::Indices::_0]);
    \n-
    100 });
    \n-
    101}
    \n-
    \n+
    53template<class Signature, class DerivativeInterface>
    \n+
    54class DifferentiableFunctionWrapperInterface
    \n+
    55{};
    \n+
    56
    \n+
    57// Interface of type erasure wrapper
    \n+
    58//
    \n+
    59// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n+
    60// will be added by the type erasure foundation classes.
    \n+
    61template<class Range, class Domain, class DerivativeInterface>
    \n+
    62class DifferentiableFunctionWrapperInterface<Range(Domain), DerivativeInterface>
    \n+
    63{
    \n+
    64public:
    \n+
    65 virtual Range operator() (const Domain& x) const = 0;
    \n+
    66
    \n+
    67 virtual DerivativeInterface derivative() const = 0;
    \n+
    68};
    \n+
    69
    \n+
    70
    \n+
    71
    \n+
    72template<class Signature, class DerivativeInterface, class B>
    \n+
    73class DifferentiableFunctionWrapperImplementation
    \n+
    74{};
    \n+
    75
    \n+
    76// Implementation of type erasure wrapper
    \n+
    77template<class Range, class Domain, class DerivativeInterface, class B>
    \n+
    78class DifferentiableFunctionWrapperImplementation< Range(Domain), DerivativeInterface, B> :
    \n+
    79 public B
    \n+
    80{
    \n+
    81public:
    \n+
    82
    \n+
    83 using B::B;
    \n+
    84 using Wrapped = typename B::Wrapped;
    \n+
    85
    \n+
    86 virtual Range operator() (const Domain& x) const
    \n+
    87 {
    \n+
    88 return this->get()(x);
    \n+
    89 }
    \n+
    90
    \n+
    91 virtual DerivativeInterface derivative() const
    \n+
    92 {
    \n+
    93 return derivativeIfImplemented<DerivativeInterface, Wrapped>(this->get());
    \n+
    94 }
    \n+
    95};
    \n+
    96
    \n+
    97
    \n+
    98
    \n+
    99}}} // namespace Dune::Functions::Imp
    \n+
    100
    \n+
    101
    \n
    102
    \n-
    103
    \n-
    104namespace Imp {
    \n-
    105
    \n-
    119 template<class Index, std::size_t offset=1>
    \n-
    120 class ShiftedDynamicMultiIndex
    \n-
    121 {
    \n-
    122 public:
    \n-
    123 ShiftedDynamicMultiIndex(const Index& index) :
    \n-
    124 index_(index)
    \n-
    125 {}
    \n-
    126
    \n-
    127 std::size_t operator[](std::size_t position) const
    \n-
    128 {
    \n-
    129 if (position<size())
    \n-
    130 return index_[position+offset];
    \n-
    131 else
    \n-
    132 return 0;
    \n-
    133 }
    \n-
    134
    \n-
    138 ShiftedDynamicMultiIndex<Index, offset+1> pop() const
    \n-
    139 {
    \n-
    140 return {index_};
    \n-
    141 }
    \n-
    142
    \n-
    143 std::size_t size() const
    \n-
    144 {
    \n-
    145 if (offset < index_.size())
    \n-
    146 return index_.size() - offset;
    \n-
    147 else
    \n-
    148 return 0;
    \n-
    149 }
    \n-
    150
    \n-
    151 const Index& originalIndex() const
    \n-
    152 {
    \n-
    153 return index_;
    \n-
    154 }
    \n-
    155
    \n-
    156 private:
    \n-
    157 const Index& index_;
    \n-
    158 };
    \n-
    159
    \n-
    160 template<class Index, std::size_t offset=1>
    \n-
    161 class ShiftedStaticMultiIndex
    \n-
    162 {
    \n-
    163 public:
    \n-
    164 ShiftedStaticMultiIndex(const Index& index) :
    \n-
    165 index_(index)
    \n-
    166 {}
    \n-
    167
    \n-
    168 template<std::size_t i>
    \n-
    169 auto operator[](Dune::index_constant<i>) const
    \n-
    170 {
    \n-
    171 if constexpr (i<size()) {
    \n-
    172 return index_[Dune::index_constant<i+offset>{}];
    \n-
    173 } else {
    \n-
    174 return Dune::index_constant<0>{};
    \n-
    175 }
    \n-
    176 }
    \n-
    177
    \n-
    181 ShiftedStaticMultiIndex<Index, offset+1> pop() const
    \n-
    182 {
    \n-
    183 return {index_};
    \n-
    184 }
    \n-
    185
    \n-
    186 static constexpr std::size_t size()
    \n-
    187 {
    \n-
    188 auto fullSize = decltype(Hybrid::size(std::declval<Index>()))::value;
    \n-
    189 if (offset < fullSize)
    \n-
    190 return fullSize - offset;
    \n-
    191 else
    \n-
    192 return 0;
    \n-
    193 }
    \n-
    194
    \n-
    195 private:
    \n-
    196 const Index& index_;
    \n-
    197 };
    \n-
    198
    \n-
    204 template<std::size_t offset, class Index>
    \n-
    205 ShiftedDynamicMultiIndex<Index, offset> shiftedDynamicMultiIndex(const Index& index)
    \n-
    206 {
    \n-
    207 return {index};
    \n-
    208 }
    \n-
    209
    \n-
    218 template<std::size_t offset, class Index, std::size_t oldOffset>
    \n-
    219 ShiftedDynamicMultiIndex<Index, offset+oldOffset> shiftedDynamicMultiIndex(const ShiftedDynamicMultiIndex<Index, oldOffset>& index)
    \n-
    220 {
    \n-
    221 return {index.originalIndex()};
    \n-
    222 }
    \n-
    223
    \n-
    224 template<std::size_t offset, class Index>
    \n-
    225 ShiftedStaticMultiIndex<Index, offset> shiftedStaticMultiIndex(const Index& index)
    \n-
    226 {
    \n-
    227 return {index};
    \n-
    228 }
    \n-
    229
    \n-
    230} // namespace Imp
    \n-
    231
    \n-
    232
    \n-
    233
    \n-
    234
    \n-
    235namespace Imp {
    \n-
    236
    \n-
    237template<class Result, class Index>
    \n-
    238struct MultiIndexResolver
    \n-
    239{
    \n-
    240 MultiIndexResolver(const Index& index) :
    \n-
    241 index_(index)
    \n-
    242 {}
    \n-
    243
    \n-
    244 template<class C,
    \n-
    245 std::enable_if_t<not std::is_convertible_v<C&, Result>, int> = 0>
    \n-
    246 Result operator()(C&& c)
    \n-
    247 {
    \n-
    248 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);
    \n-
    249 auto&& subIndexResolver = MultiIndexResolver<Result, decltype(subIndex)>(subIndex);
    \n-
    250 return (Result)(hybridIndexAccess(c, index_[Dune::Indices::_0], subIndexResolver));
    \n-
    251 }
    \n-
    252
    \n-
    253 template<class C,
    \n-
    254 std::enable_if_t<std::is_convertible_v<C&, Result>, int> = 0>
    \n-
    255 Result operator()(C&& c)
    \n-
    256 {
    \n-
    257 return (Result)(std::forward<C>(c));
    \n-
    258 }
    \n-
    259
    \n-
    260 const Index& index_;
    \n-
    261};
    \n-
    262
    \n-
    263} // namespace Imp
    \n-
    264
    \n-
    265
    \n-
    266
    \n-
    285template<class Result, class C, class MultiIndex>
    \n-
    \n-
    286Result hybridMultiIndexAccess(C&& c, const MultiIndex& index)
    \n-
    287{
    \n-
    288
    \n-
    289 Imp::MultiIndexResolver<Result, MultiIndex> multiIndexResolver(index);
    \n-
    290 return multiIndexResolver(c);
    \n-
    291}
    \n-
    \n-
    292
    \n-
    293
    \n-
    294
    \n-
    295
    \n-
    296
    \n-
    297
    \n-
    298namespace Imp {
    \n-
    299
    \n-
    300 template<class C, class MultiIndex, class IsFinal>
    \n-
    301 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex, const IsFinal& isFinal)
    \n-
    302 {
    \n-
    303 // If c is already considered final simply return it,
    \n-
    304 // else resolve the next multiIndex entry.
    \n-
    305 return Hybrid::ifElse(isFinal(c), [&, c = forwardCapture(std::forward<C>(c))](auto) -> decltype(auto) {
    \n-
    306 assert(multiIndex.size() == 0);
    \n-
    307 return c.forward();
    \n-
    308 }, [&](auto) -> decltype(auto) {
    \n-
    309 auto hasDynamicAccess = callableCheck([](auto&& cc) -> std::void_t<decltype(cc[0])> {});
    \n-
    310
    \n-
    311 // Split multiIndex into first entry and remaining ones.
    \n-
    312 auto i = multiIndex[0];
    \n-
    313 auto tail = multiIndex.pop();
    \n-
    314
    \n-
    315 // Resolve first multiIndex entry by c[multiIndex[0]] and
    \n-
    316 // continue resolving with the remaining remaining ones.
    \n-
    317 // If c has a dynamic operator[] this is straight forward.
    \n-
    318 // Else the dynamic multiIndex[0] has to be translated into
    \n-
    319 // a static one using hybridIndexAccess.
    \n-
    320 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto) {
    \n-
    321 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);
    \n-
    322 }, [&](auto id) -> decltype(auto) {
    \n-
    323 // auto indexRange = range(Hybrid::size(id(c)));
    \n-
    324 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::integer_sequence();
    \n-
    325 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype(auto){
    \n-
    326 // Do rescursion with static version of i
    \n-
    327 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);
    \n-
    328 }, [&]() -> decltype(auto){
    \n-
    329 // As fallback we use c[0] this is needed, because there must be one branch that matches.
    \n-
    330 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail, isFinal);
    \n-
    331 });
    \n-
    332 });
    \n-
    333 });
    \n-
    334 }
    \n-
    335
    \n-
    336 template<class C, class MultiIndex>
    \n-
    337 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n-
    338 {
    \n-
    339 auto isExhausted = Hybrid::equal_to(Hybrid::size(multiIndex), Dune::Indices::_0);
    \n-
    340 return Hybrid::ifElse(isExhausted, [&, c = forwardCapture(std::forward<C>(c))](auto) -> decltype(auto) {
    \n-
    341 return c.forward();
    \n-
    342 }, [&](auto id) -> decltype(auto) {
    \n-
    343 auto head = multiIndex[Dune::Indices::_0];
    \n-
    344 auto tail = multiIndex.pop();
    \n-
    345
    \n-
    346 return Imp::resolveStaticMultiIndex(id(c)[head], tail);
    \n-
    347 });
    \n-
    348 }
    \n-
    349
    \n-
    350} // namespace Imp
    \n-
    351
    \n-
    352
    \n-
    353
    \n-
    376template<class C, class MultiIndex, class IsFinal>
    \n-
    \n-
    377constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex, const IsFinal& isFinal)
    \n-
    378{
    \n-
    379 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), isFinal);
    \n-
    380}
    \n-
    \n-
    381
    \n-
    398template<class C, class MultiIndex>
    \n-
    \n-
    399constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n-
    400{
    \n-
    401 auto hasNoIndexAccess = negatePredicate(callableCheck([](auto&& cc) -> std::void_t<decltype(cc[Dune::Indices::_0])> {}));
    \n-
    402 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);
    \n-
    403}
    \n-
    \n-
    404
    \n-
    420template<class C, class MultiIndex>
    \n-
    \n-
    421constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n-
    422{
    \n-
    423 return Imp::resolveStaticMultiIndex(std::forward<C>(c), Imp::shiftedStaticMultiIndex<0>(multiIndex));
    \n-
    424}
    \n-
    \n-
    425
    \n-
    426
    \n-
    427
    \n-
    428} // namespace Dune::Functions
    \n-
    429} // namespace Dune
    \n-
    430
    \n-
    431
    \n-
    432
    \n-
    433#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n-\n-
    auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))
    Provide operator[] index-access for containers.
    Definition indexaccess.hh:67
    \n-
    constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:421
    \n-
    auto callableCheck(Expression f)
    Create a predicate for checking validity of expressions.
    Definition utility.hh:283
    \n-
    constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:377
    \n-
    Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:286
    \n-
    auto negatePredicate(Check check)
    Negate given predicate.
    Definition utility.hh:308
    \n+
    103#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n+\n+
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n
    Definition polynomial.hh:17
    \n-
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:376
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,371 +1,124 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-indexaccess.hh\n+differentiablefunction_imp.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n-8#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n 9\n-10\n-11#include \n-12#include \n-13\n-14#include \n-15#include \n-16#include \n-17\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+10#include \n+11#include \n+12\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+14\n+15\n+16namespace _\bD_\bu_\bn_\be {\n+17namespace Functions {\n+18namespace Imp {\n 19\n-20\n-21\n-22namespace _\bD_\bu_\bn_\be {\n-23namespace Functions {\n-24\n-25\n-26namespace Imp {\n-27\n-28namespace Concept {\n-29\n-30template\n-31struct HasDynamicIndexAccess\n-32{\n-33 template\n-34 auto require(C&& c) -> decltype(\n-35 c[std::declval()]\n-36 );\n-37};\n-38\n-39struct HasStaticIndexAccess\n-40{\n-41 template\n-42 auto require(C&& c) -> decltype(\n-43 c[Dune::Indices::_0]\n-44 );\n-45};\n-46\n-47} // namespace Concept\n-48\n-49} // namespace Imp\n+23struct HasFreeDerivative\n+24{\n+25 template\n+26 auto require(F&& f) -> decltype(\n+27 _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f)\n+28 );\n+29};\n+30\n+31\n+32\n+33template() , int> = 0>\n+36auto derivativeIfImplemented(const F& f) -> decltype(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f))\n+37{\n+38 return _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f);\n+39}\n+40\n+41\n+42\n+43template()) , int> = 0>\n+46Dummy derivativeIfImplemented(const F& f)\n+47{\n+48 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n+49}\n 50\n 51\n 52\n-65template, C>(),\n-int> = 0>\n-_\b6_\b7auto _\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs(C&& c, const I& i, F&& f)\n-68 -> decltype(f(c[i]))\n-69{\n-70 return f(c[i]);\n-71}\n-72\n-90template,\n-C>(), int> = 0>\n-_\b9_\b2decltype(auto) _\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs(C&& c, const I& i, F&& f)\n-93{\n-94 using Size = decltype(Hybrid::size(c));\n-95 return Hybrid::switchCases(std::make_index_sequence(), i,\n-96 [&](const auto& ii) -> decltype(auto){\n-97 return f(c[ii]);\n-98 }, [&]() -> decltype(auto){\n-99 return f(c[Dune::Indices::_0]);\n-100 });\n-101}\n+53template\n+54class DifferentiableFunctionWrapperInterface\n+55{};\n+56\n+57// Interface of type erasure wrapper\n+58//\n+59// Notice that the basic interface of polymorphic classes (destructor, clone,\n+...)\n+60// will be added by the type erasure foundation classes.\n+61template\n+62class DifferentiableFunctionWrapperInterface\n+63{\n+64public:\n+65 virtual Range operator() (const Domain& x) const = 0;\n+66\n+67 virtual DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be() const = 0;\n+68};\n+69\n+70\n+71\n+72template\n+73class DifferentiableFunctionWrapperImplementation\n+74{};\n+75\n+76// Implementation of type erasure wrapper\n+77template\n+78class DifferentiableFunctionWrapperImplementation< Range(Domain),\n+DerivativeInterface, B> :\n+79 public B\n+80{\n+81public:\n+82\n+83 using B::B;\n+84 using Wrapped = typename B::Wrapped;\n+85\n+86 virtual Range operator() (const Domain& x) const\n+87 {\n+88 return this->get()(x);\n+89 }\n+90\n+91 virtual DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be() const\n+92 {\n+93 return derivativeIfImplemented(this->get());\n+94 }\n+95};\n+96\n+97\n+98\n+99}}} // namespace Dune::Functions::Imp\n+100\n+101\n 102\n-103\n-104namespace Imp {\n-105\n-119 template\n-120 class ShiftedDynamicMultiIndex\n-121 {\n-122 public:\n-123 ShiftedDynamicMultiIndex(const Index& index) :\n-124 index_(index)\n-125 {}\n-126\n-127 std::size_t operator[](std::size_t position) const\n-128 {\n-129 if (position pop() const\n-139 {\n-140 return {index_};\n-141 }\n-142\n-143 std::size_t size() const\n-144 {\n-145 if (offset < index_.size())\n-146 return index_.size() - offset;\n-147 else\n-148 return 0;\n-149 }\n-150\n-151 const Index& originalIndex() const\n-152 {\n-153 return index_;\n-154 }\n-155\n-156 private:\n-157 const Index& index_;\n-158 };\n-159\n-160 template\n-161 class ShiftedStaticMultiIndex\n-162 {\n-163 public:\n-164 ShiftedStaticMultiIndex(const Index& index) :\n-165 index_(index)\n-166 {}\n-167\n-168 template\n-169 auto operator[](Dune::index_constant) const\n-170 {\n-171 if constexpr (i{}];\n-173 } else {\n-174 return Dune::index_constant<0>{};\n-175 }\n-176 }\n-177\n-181 ShiftedStaticMultiIndex pop() const\n-182 {\n-183 return {index_};\n-184 }\n-185\n-186 static constexpr std::size_t size()\n-187 {\n-188 auto fullSize = decltype(Hybrid::size(std::declval()))::value;\n-189 if (offset < fullSize)\n-190 return fullSize - offset;\n-191 else\n-192 return 0;\n-193 }\n-194\n-195 private:\n-196 const Index& index_;\n-197 };\n-198\n-204 template\n-205 ShiftedDynamicMultiIndex shiftedDynamicMultiIndex(const\n-Index& index)\n-206 {\n-207 return {index};\n-208 }\n-209\n-218 template\n-219 ShiftedDynamicMultiIndex shiftedDynamicMultiIndex\n-(const ShiftedDynamicMultiIndex& index)\n-220 {\n-221 return {index.originalIndex()};\n-222 }\n-223\n-224 template\n-225 ShiftedStaticMultiIndex shiftedStaticMultiIndex(const Index&\n-index)\n-226 {\n-227 return {index};\n-228 }\n-229\n-230} // namespace Imp\n-231\n-232\n-233\n-234\n-235namespace Imp {\n-236\n-237template\n-238struct MultiIndexResolver\n-239{\n-240 MultiIndexResolver(const Index& index) :\n-241 index_(index)\n-242 {}\n-243\n-244 template, int> = 0>\n-246 Result operator()(C&& c)\n-247 {\n-248 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);\n-249 auto&& subIndexResolver = MultiIndexResolver\n-(subIndex);\n-250 return (Result)(_\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs(c, index_[Dune::Indices::_0],\n-subIndexResolver));\n-251 }\n-252\n-253 template, int> = 0>\n-255 Result operator()(C&& c)\n-256 {\n-257 return (Result)(std::forward(c));\n-258 }\n-259\n-260 const Index& index_;\n-261};\n-262\n-263} // namespace Imp\n-264\n-265\n-266\n-285template\n-_\b2_\b8_\b6Result _\bh_\by_\bb_\br_\bi_\bd_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs(C&& c, const MultiIndex& index)\n-287{\n-288\n-289 Imp::MultiIndexResolver multiIndexResolver(index);\n-290 return multiIndexResolver(c);\n-291}\n-292\n-293\n-294\n-295\n-296\n-297\n-298namespace Imp {\n-299\n-300 template\n-301 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n-multiIndex, const IsFinal& isFinal)\n-302 {\n-303 // If c is already considered final simply return it,\n-304 // else resolve the next multiIndex entry.\n-305 return Hybrid::ifElse(isFinal(c), [&, c = _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(std::forward\n-(c))](auto) -> decltype(auto) {\n-306 assert(multiIndex.size() == 0);\n-307 return c.forward();\n-308 }, [&](auto) -> decltype(auto) {\n-309 auto hasDynamicAccess = _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk([](auto&& cc) -> std::void_t {});\n-310\n-311 // Split multiIndex into first entry and remaining ones.\n-312 auto i = multiIndex[0];\n-313 auto tail = multiIndex.pop();\n-314\n-315 // Resolve first multiIndex entry by c[multiIndex[0]] and\n-316 // continue resolving with the remaining remaining ones.\n-317 // If c has a dynamic operator[] this is straight forward.\n-318 // Else the dynamic multiIndex[0] has to be translated into\n-319 // a static one using hybridIndexAccess.\n-320 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto) {\n-321 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);\n-322 }, [&](auto id) -> decltype(auto) {\n-323 // auto indexRange = range(Hybrid::size(id(c)));\n-324 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::\n-integer_sequence();\n-325 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype\n-(auto){\n-326 // Do rescursion with static version of i\n-327 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);\n-328 }, [&]() -> decltype(auto){\n-329 // As fallback we use c[0] this is needed, because there must be one branch\n-that matches.\n-330 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail,\n-isFinal);\n-331 });\n-332 });\n-333 });\n-334 }\n-335\n-336 template\n-337 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex&\n-multiIndex)\n-338 {\n-339 auto isExhausted = Hybrid::equal_to(Hybrid::size(multiIndex), Dune::\n-Indices::_0);\n-340 return Hybrid::ifElse(isExhausted, [&, c = _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(std::forward\n-(c))](auto) -> decltype(auto) {\n-341 return c.forward();\n-342 }, [&](auto id) -> decltype(auto) {\n-343 auto head = multiIndex[Dune::Indices::_0];\n-344 auto tail = multiIndex.pop();\n-345\n-346 return Imp::resolveStaticMultiIndex(id(c)[head], tail);\n-347 });\n-348 }\n-349\n-350} // namespace Imp\n-351\n-352\n-353\n-376template\n-_\b3_\b7_\b7constexpr decltype(auto) _\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(C&& c, const MultiIndex&\n-multiIndex, const IsFinal& isFinal)\n-378{\n-379 return Imp::resolveDynamicMultiIndex(std::forward(c), Imp::\n-shiftedDynamicMultiIndex<0>(multiIndex), isFinal);\n-380}\n-381\n-398template\n-_\b3_\b9_\b9constexpr decltype(auto) _\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(C&& c, const MultiIndex&\n-multiIndex)\n-400{\n-401 auto hasNoIndexAccess = _\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be(_\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk([](auto&& cc) -\n-> std::void_t {}));\n-402 return Imp::resolveDynamicMultiIndex(std::forward(c), Imp::\n-shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);\n-403}\n-404\n-420template\n-_\b4_\b2_\b1constexpr decltype(auto) _\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(C&& c, const MultiIndex&\n-multiIndex)\n-422{\n-423 return Imp::resolveStaticMultiIndex(std::forward(c), Imp::\n-shiftedStaticMultiIndex<0>(multiIndex));\n-424}\n-425\n-426\n-427\n-428} // namespace Dune::Functions\n-429} // namespace Dune\n-430\n-431\n-432\n-433#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n-_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs\n-auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))\n-Provide operator[] index-access for containers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex\n-&multiIndex)\n-Provide multi-index access by chaining operator[].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:421\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk\n-auto callableCheck(Expression f)\n-Create a predicate for checking validity of expressions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:283\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n-&multiIndex, const IsFinal &isFinal)\n-Provide multi-index access by chaining operator[].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:377\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bA_\bc_\bc_\be_\bs_\bs\n-Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)\n-Provide multi-index access by chaining operator[].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:286\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be\n-auto negatePredicate(Check check)\n-Negate given predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:308\n+103#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n+TrigonometricFunction< K, sinFactor, cosFactor > &f)\n+Obtain derivative of TrigonometricFunction function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be\n-auto forwardCapture(T &&t)\n-Create a capture object for perfect forwarding.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:376\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: trigonometricfunction.hh File Reference\n+dune-functions: differentiablefunctionfromcallables.hh File Reference\n \n \n \n \n \n \n \n@@ -65,48 +65,55 @@\n \n \n \n \n \n \n \n
    \n \n-
    trigonometricfunction.hh File Reference
    \n+
    differentiablefunctionfromcallables.hh File Reference
    \n
    \n
    \n-
    #include <cmath>
    \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
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::TrigonometricFunction< K, sinFactor, cosFactor >
     A linear combination of trigonomic functions. More...
    class  Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >
     Wrap a list of callable objects as derivative sequence modelling Concept::DifferentiableFunction<Range(Domain), DerivativeTraits> More...
     
    class  Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >
     Wrap a list of callable objects as derivative sequence modelling Concept::DifferentiableFunction<Range(Domain), DerivativeTraits> More...
     
    \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Functions

    template<class K , int sinFactor, int cosFactor>
    TrigonometricFunction< K, -cosFactor, sinFactor > Dune::Functions::derivative (const TrigonometricFunction< K, sinFactor, cosFactor > &f)
     Obtain derivative of TrigonometricFunction function.
     
    template<class Signature , template< class > class DerivativeTraits, class... F>
    DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > Dune::Functions::makeDifferentiableFunctionFromCallables (const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)
     Create a DifferentiableFunction from callables.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,46 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-trigonometricfunction.hh File Reference\n-#include \n+differentiablefunctionfromcallables.hh File Reference\n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bK_\b,_\b _\bs_\bi_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bc_\bo_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n-\u00a0 A linear combination of trigonomic functions. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>\n+ Wrap a list of callable objects as derivative sequence modelling\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>\n+ Wrap a list of callable objects as derivative sequence modelling\n+\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< K, -cosFactor, _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be (const\n- sinFactor >\u00a0 _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< K, sinFactor,\n- cosFactor > &f)\n-\u00a0 Obtain derivative of\n- _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn function.\n+template class DerivativeTraits, class...\n+F>\n+_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs< _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+Signature, DerivativeTraits, F... >\u00a0 _\bm_\ba_\bk_\be_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n+ (const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg< Signature,\n+ DerivativeTraits > &signatureTag, F &&...\n+ f)\n+\u00a0 Create a _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from\n+ callables.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: trigonometricfunction.hh Source File\n+dune-functions: differentiablefunctionfromcallables.hh Source File\n \n \n \n \n \n \n \n@@ -70,71 +70,167 @@\n
    \n \n \n \n \n \n \n
    \n-
    trigonometricfunction.hh
    \n+
    differentiablefunctionfromcallables.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n
    9
    \n-
    10#include <cmath>
    \n-
    11
    \n-
    12namespace Dune {
    \n-
    13namespace Functions {
    \n-
    14
    \n+
    10
    \n+
    11#include <dune/common/typeutilities.hh>
    \n+
    12#include <dune/common/hybridutilities.hh>
    \n+
    13
    \n+\n
    15
    \n-
    16
    \n-
    29template<class K, int sinFactor, int cosFactor>
    \n-
    \n-\n-
    31{
    \n-
    32public:
    \n-
    \n-
    34 K operator () (const K& x) const
    \n-
    35 {
    \n-
    36 return sinFactor * std::sin(x) + cosFactor * std::cos(x);
    \n-
    37 }
    \n-
    \n-
    38};
    \n-
    \n-
    39
    \n-
    40
    \n-
    42template<class K, int sinFactor, int cosFactor>
    \n-
    \n-\n-
    44{
    \n-
    45 return TrigonometricFunction<K, -cosFactor, sinFactor>();
    \n-
    46}
    \n-
    \n-
    47
    \n-
    48
    \n-
    49
    \n-
    50}} // namespace Dune::Functions
    \n+\n+\n+
    18
    \n+
    19
    \n+
    20
    \n+
    21namespace Dune {
    \n+
    22namespace Functions {
    \n+
    23
    \n+
    24
    \n+
    25
    \n+
    26template<class Signature, template<class> class DerivativeTraits, class... Callables>
    \n+\n+
    28
    \n+
    29
    \n+
    30
    \n+
    47template<class Range, class Domain, template<class> class DerivativeTraits, class F>
    \n+
    \n+
    48class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F>
    \n+
    49{
    \n+
    50public:
    \n
    51
    \n-
    52
    \n-
    53
    \n-
    54#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n-
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n+
    53 using Signature = Range(Domain);
    \n+
    54
    \n+\n+
    56
    \n+
    58 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n+
    59
    \n+\n+
    62
    \n+
    64 template<class FF, disableCopyMove<DifferentiableFunctionFromCallables, FF> = 0>
    \n+
    \n+\n+
    66 f_(std::forward<FF>(f))
    \n+
    67 {}
    \n+
    \n+
    68
    \n+
    \n+
    70 Range operator() (const Domain& x) const
    \n+
    71 {
    \n+
    72 return f_(x);
    \n+
    73 }
    \n+
    \n+
    74
    \n+
    \n+\n+
    81 {
    \n+
    82 DUNE_THROW(Dune::NotImplemented, "Derivative not implemented");
    \n+
    83 }
    \n+
    \n+
    84
    \n+
    85private:
    \n+
    86 F f_;
    \n+
    87};
    \n+
    \n+
    88
    \n+
    89
    \n+
    90
    \n+
    107template<class Range, class Domain, template<class> class DerivativeTraits, class F, class DF, class... Derivatives>
    \n+
    \n+
    108class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F, DF, Derivatives...>
    \n+
    109{
    \n+
    110public:
    \n+
    111
    \n+
    112 using Signature = Range(Domain);
    \n+\n+
    114 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n+
    115
    \n+
    116 using Derivative = DifferentiableFunctionFromCallables<DerivativeSignature, DerivativeTraits, DF, Derivatives...>;
    \n+
    117
    \n+
    124 template<class FF, class DFF, class... DDFF>
    \n+
    \n+
    125 DifferentiableFunctionFromCallables(FF&& f, DFF&& df, DDFF&&... ddf) :
    \n+
    126 f_(std::forward<FF>(f)),
    \n+
    127 df_(std::forward<DFF>(df), std::forward<DDFF>(ddf)...)
    \n+
    128 {}
    \n+
    \n+
    129
    \n+
    \n+
    131 Range operator() (const Domain& x) const
    \n+
    132 {
    \n+
    133 return f_(x);
    \n+
    134 }
    \n+
    \n+
    135
    \n+
    \n+\n+
    142 {
    \n+
    143 return t.df_;
    \n+
    144 }
    \n+
    \n+
    145
    \n+
    146private:
    \n+
    147 F f_;
    \n+
    148 Derivative df_;
    \n+
    149};
    \n+
    \n+
    150
    \n+
    151
    \n+
    166template<class Signature, template<class> class DerivativeTraits, class... F>
    \n+
    167DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>
    \n+
    \n+\n+
    169{
    \n+
    170 return DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>(f...);
    \n+
    171}
    \n+
    \n+
    172
    \n+
    173
    \n+
    174
    \n+
    175} // namespace Functions
    \n+
    176} // namespace Dune
    \n+
    177
    \n+
    178#endif //DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n+\n+\n+\n+
    friend Derivative derivative(const DifferentiableFunctionFromCallables &t)
    Get derivative of DifferentiableFunctionFromCallables.
    Definition differentiablefunctionfromcallables.hh:80
    \n+
    DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > makeDifferentiableFunctionFromCallables(const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)
    Create a DifferentiableFunction from callables.
    Definition differentiablefunctionfromcallables.hh:168
    \n
    Definition polynomial.hh:17
    \n-
    A linear combination of trigonomic functions.
    Definition trigonometricfunction.hh:31
    \n-
    K operator()(const K &x) const
    Evaluate function.
    Definition trigonometricfunction.hh:34
    \n+
    Definition differentiablefunction.hh:33
    \n+
    Definition differentiablefunctionfromcallables.hh:27
    \n+
    DifferentiableFunctionFromCallables(FF &&f)
    Constructor copying the given function.
    Definition differentiablefunctionfromcallables.hh:65
    \n+
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition differentiablefunctionfromcallables.hh:55
    \n+
    Range(Domain) Signature
    Signature of function.
    Definition differentiablefunctionfromcallables.hh:53
    \n+
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Signature of derivative.
    Definition differentiablefunctionfromcallables.hh:58
    \n+
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Definition differentiablefunctionfromcallables.hh:114
    \n+\n+
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition differentiablefunctionfromcallables.hh:113
    \n+
    DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)
    Constructor copying the given functions.
    Definition differentiablefunctionfromcallables.hh:125
    \n+
    Helper class to deduce the signature of a callable.
    Definition signature.hh:60
    \n+
    Definition signature.hh:106
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,68 +1,196 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-trigonometricfunction.hh\n+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+differentiablefunctionfromcallables.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n-8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n+8#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n 9\n-10#include \n-11\n-12namespace _\bD_\bu_\bn_\be {\n-13namespace Functions {\n-14\n+10\n+11#include \n+12#include \n+13\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n 15\n-16\n-29template\n-_\b3_\b0class _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-31{\n-32public:\n-_\b3_\b4 K _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b(_\b)_\b (const K& x) const\n-35 {\n-36 return sinFactor * std::sin(x) + cosFactor * std::cos(x);\n-37 }\n-38};\n-39\n-40\n-42template\n-_\b4_\b3_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const\n-_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bK_\b,_\b _\bs_\bi_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bc_\bo_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b>& f)\n-44{\n-45 return _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn();\n-46}\n-47\n-48\n-49\n-50}} // namespace Dune::Functions\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+18\n+19\n+20\n+21namespace _\bD_\bu_\bn_\be {\n+22namespace Functions {\n+23\n+24\n+25\n+26template class DerivativeTraits, class...\n+Callables>\n+_\b2_\b7class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs;\n+28\n+29\n+30\n+47template class DerivativeTraits,\n+class F>\n+_\b4_\b8class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n+49{\n+50public:\n 51\n-52\n-53\n-54#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n-TrigonometricFunction< K, sinFactor, cosFactor > &f)\n-Obtain derivative of TrigonometricFunction function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n+_\b5_\b3 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n+54\n+_\b5_\b5 using _\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be;\n+56\n+_\b5_\b8 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename DerivativeTraits::Range\n+(Domain);\n+59\n+_\b6_\b1 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be = _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>;\n+62\n+64 template\n+= 0>\n+_\b6_\b5 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs(FF&& f) :\n+66 f_(std::forward(f))\n+67 {}\n+68\n+_\b7_\b0 Range operator() (const Domain& x) const\n+71 {\n+72 return f_(x);\n+73 }\n+74\n+_\b8_\b0 friend _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs& t)\n+81 {\n+82 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n+83 }\n+84\n+85private:\n+86 F f_;\n+87};\n+88\n+89\n+90\n+107template class DerivativeTraits,\n+class F, class DF, class... Derivatives>\n+_\b1_\b0_\b8class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n+109{\n+110public:\n+111\n+_\b1_\b1_\b2 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n+_\b1_\b1_\b3 using _\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be;\n+_\b1_\b1_\b4 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = typename DerivativeTraits::Range\n+(Domain);\n+115\n+_\b1_\b1_\b6 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be = _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs<_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be,\n+DerivativeTraits, DF, Derivatives...>;\n+117\n+124 template\n+_\b1_\b2_\b5 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs(FF&& f, DFF&& df, DDFF&&... ddf) :\n+126 f_(std::forward(f)),\n+127 df_(std::forward(df), std::forward(ddf)...)\n+128 {}\n+129\n+_\b1_\b3_\b1 Range operator() (const Domain& x) const\n+132 {\n+133 return f_(x);\n+134 }\n+135\n+_\b1_\b4_\b1 friend _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs& t)\n+142 {\n+143 return t.df_;\n+144 }\n+145\n+146private:\n+147 F f_;\n+148 Derivative df_;\n+149};\n+150\n+151\n+166template class DerivativeTraits, class...\n+F>\n+167DifferentiableFunctionFromCallables\n+_\b1_\b6_\b8 _\bm_\ba_\bk_\be_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs(const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg_\b<_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>& signatureTag, F&&... f)\n+169{\n+170 return _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs(f...);\n+171}\n+172\n+173\n+174\n+175} // namespace Functions\n+176} // namespace Dune\n+177\n+178#endif //DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend Derivative derivative(const DifferentiableFunctionFromCallables &t)\n+Get derivative of DifferentiableFunctionFromCallables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:80\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n+DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... >\n+makeDifferentiableFunctionFromCallables(const SignatureTag< Signature,\n+DerivativeTraits > &signatureTag, F &&... f)\n+Create a DifferentiableFunction from callables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:168\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-A linear combination of trigonomic functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:31\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-K operator()(const K &x) const\n-Evaluate function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:34\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:33\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:27\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n+DifferentiableFunctionFromCallables(FF &&f)\n+Constructor copying the given function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:65\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+typename SignatureTraits< Signature >::RawSignature RawSignature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:55\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+Range(Domain) Signature\n+Signature of function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:53\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n+Signature of derivative.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:114\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+Range(Domain) Signature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:112\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>_\b:_\b:_\bR_\ba_\bw_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+typename SignatureTraits< Signature >::RawSignature RawSignature\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:113\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n+_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n+DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)\n+Constructor copying the given functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunctionfromcallables.hh:125\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n+Helper class to deduce the signature of a callable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn signature.hh:106\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: polynomial.hh File Reference\n+dune-functions: localfunction_imp.hh File Reference\n \n \n \n \n \n \n \n@@ -65,67 +65,34 @@\n \n \n \n \n \n \n \n
    \n \n-
    polynomial.hh File Reference
    \n+Namespaces
    \n+
    localfunction_imp.hh File Reference
    \n \n
    \n-
    #include <cmath>
    \n-#include <initializer_list>
    \n-#include <vector>
    \n-#include <dune/common/hybridutilities.hh>
    \n+\n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::Functions::Polynomial< K, C >
     A univariate polynomial implementation. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

    template<class K >
     Dune::Functions::Polynomial (std::vector< K >) -> Polynomial< K, std::vector< K > >
     
    template<class K , std::size_t n>
     Dune::Functions::Polynomial (std::array< K, n >) -> Polynomial< K, std::array< K, n > >
     
    template<class K , K... ci>
     Dune::Functions::Polynomial (std::integer_sequence< K, ci... >) -> Polynomial< K, std::integer_sequence< K, ci... > >
     
    template<class K >
     Dune::Functions::Polynomial (std::initializer_list< K >) -> Polynomial< K, std::vector< K > >
     
    template<class K , class Coefficients >
    auto Dune::Functions::makePolynomial (Coefficients coefficients)
     Create Polynomial.
     
    template<class K , class C >
    auto Dune::Functions::makePolynomial (std::initializer_list< C > coefficients)
     Create Polynomial.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,50 +1,19 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-polynomial.hh File Reference\n-#include \n-#include \n-#include \n-#include \n+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+localfunction_imp.hh File Reference\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\b _\bK_\b,_\b _\bC_\b _\b>\n-\u00a0 A univariate polynomial implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::vector< K >) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl< K, std::\n- vector< K > >\n-\u00a0\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::array< K, n >) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl< K, std::\n- array< K, n > >\n-\u00a0\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::integer_sequence< K, ci... >) -\n- > _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl< K, std::integer_sequence< K, ci... > >\n-\u00a0\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::initializer_list< K >) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl<\n- K, std::vector< K > >\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (Coefficients coefficients)\n-\u00a0 Create _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl (std::initializer_list< C > coefficients)\n-\u00a0 Create _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl.\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: polynomial.hh Source File\n+dune-functions: localfunction_imp.hh Source File\n \n \n \n \n \n \n \n@@ -70,236 +70,96 @@\n
    \n \n \n \n \n \n \n
    \n-
    polynomial.hh
    \n+
    localfunction_imp.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n-
    8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH
    \n
    9
    \n-
    10#include <cmath>
    \n-
    11#include <initializer_list>
    \n-
    12#include <vector>
    \n+\n+\n+
    12
    \n
    13
    \n
    14
    \n-
    15#include <dune/common/hybridutilities.hh>
    \n-
    16
    \n-
    \n-
    17namespace Dune {
    \n-
    \n-
    18namespace Functions {
    \n-
    19
    \n-
    20namespace Impl {
    \n-
    21
    \n-
    22 // Compute coefficients of derivative of polynomial.
    \n-
    23 // Overload for std::vector
    \n-
    24 template<class K, class Allocator>
    \n-
    25 auto polynomialDerivativeCoefficients(const std::vector<K, Allocator>& coefficients) {
    \n-
    26 if (coefficients.size()==0)
    \n-
    27 return std::vector<K, Allocator>();
    \n-
    28 std::vector<K, Allocator> dpCoefficients(coefficients.size()-1);
    \n-
    29 for (size_t i=1; i<coefficients.size(); ++i)
    \n-
    30 dpCoefficients[i-1] = coefficients[i]*K(i);
    \n-
    31 return dpCoefficients;
    \n-
    32 }
    \n+
    15namespace Dune {
    \n+
    16namespace Functions {
    \n+
    17namespace Imp {
    \n+
    18
    \n+
    19// Interface of type erasure wrapper
    \n+
    20//
    \n+
    21// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n+
    22// will be added by the type erasure foundation classes.
    \n+
    23template<class Signature, class DerivativeInterface, class LocalContext>
    \n+
    24class LocalFunctionWrapperInterface :
    \n+
    25 public DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>
    \n+
    26{
    \n+
    27public:
    \n+
    28 virtual void bind(const LocalContext&) = 0;
    \n+
    29
    \n+
    30 virtual void unbind() = 0;
    \n+
    31
    \n+
    32 virtual bool bound() const = 0;
    \n
    33
    \n-
    34 // Compute coefficients of derivative of polynomial.
    \n-
    35 // Overload for std::array
    \n-
    36 template<class K, std::size_t n>
    \n-
    37 auto polynomialDerivativeCoefficients(const std::array<K, n>& coefficients) {
    \n-
    38 if constexpr (n==0)
    \n-
    39 return coefficients;
    \n-
    40 else
    \n-
    41 {
    \n-
    42 std::array<K, n-1> dpCoefficients;
    \n-
    43 for (size_t i=1; i<coefficients.size(); ++i)
    \n-
    44 dpCoefficients[i-1] = coefficients[i]*K(i);
    \n-
    45 return dpCoefficients;
    \n-
    46 }
    \n-
    47 }
    \n-
    48
    \n-
    49 // Compute coefficients of derivative of polynomial.
    \n-
    50 // Helper function for the std::integer_sequence overload.
    \n-
    51 // With C++20 this can be avoided, because lambda function
    \n-
    52 // can partially specify template arguments which allows
    \n-
    53 // to do the same inline.
    \n-
    54 template<class I, I i0, I... i, class J, J j0, J... j>
    \n-
    55 auto polynomialDerivativeCoefficientsHelper(std::integer_sequence<I, i0, i...>, std::integer_sequence<J, j0, j...>) {
    \n-
    56 return std::integer_sequence<I, i*I(j)...>();
    \n-
    57 }
    \n-
    58
    \n-
    59 // Compute coefficients of derivative of polynomial.
    \n-
    60 // Overload for std::integer_sequence
    \n-
    61 template<class I, I... i>
    \n-
    62 auto polynomialDerivativeCoefficients(std::integer_sequence<I, i...> coefficients) {
    \n-
    63 if constexpr (sizeof...(i)==0)
    \n-
    64 return coefficients;
    \n-
    65 else
    \n-
    66 return polynomialDerivativeCoefficientsHelper(coefficients, std::make_index_sequence<sizeof...(i)>());
    \n-
    67 }
    \n-
    68
    \n-
    69 // Compute coefficients of derivative of polynomial.
    \n-
    70 // Overload for std::tuple
    \n-
    71 template<class...T>
    \n-
    72 auto polynomialDerivativeCoefficients(const std::tuple<T...>& coefficients) {
    \n-
    73 if constexpr (sizeof...(T)==0)
    \n-
    74 return coefficients;
    \n-
    75 else
    \n-
    76 {
    \n-
    77 // Notice that std::multiplies<void> has issues with signed types.
    \n-
    78 // E.g., `decltype(-2,2ul)` is `long unsigned int`.
    \n-
    79 // Hence the same is deduced as return type in std::multiplies.
    \n-
    80 // To avoid this, we explicitly pass the exponent `i+1` as signed type.
    \n-
    81 // If the coefficient is signed, both types are now signed and
    \n-
    82 // so is the deduced result type of std::multiplies.
    \n-
    83 auto mult = Dune::Hybrid::hybridFunctor(std::multiplies());
    \n-
    84 return Dune::unpackIntegerSequence([&](auto... i) {
    \n-
    85 using signed_type = std::conditional_t<std::is_same_v<std::size_t, long unsigned int>,
    \n-
    86 long signed int, signed int>;
    \n-
    87 return std::tuple(mult(std::get<i+1>(coefficients), std::integral_constant<signed_type, i+1>()) ...);
    \n-
    88 }, std::make_index_sequence<sizeof...(T)-1>());
    \n-
    89 }
    \n-
    90 }
    \n-
    91
    \n-
    92} // namespace Impl in Dune::Functions::
    \n-
    93
    \n-
    94
    \n-
    95
    \n-
    122template<class K, class C=std::vector<K>>
    \n-
    \n-\n-
    124{
    \n-
    125 template<class CC>
    \n-
    126 struct IsIntegerSequence : public std::false_type {};
    \n-
    127
    \n-
    128 template<class I, I... i>
    \n-
    129 struct IsIntegerSequence<std::integer_sequence<I, i...>> : public std::true_type {};
    \n-
    130
    \n-
    131public:
    \n-
    132
    \n-
    134 using Coefficients = C;
    \n-
    135
    \n-
    137 Polynomial() = default;
    \n-
    138
    \n-
    \n-\n-
    148 coefficients_(std::move(coefficients))
    \n-
    149 {}
    \n-
    \n-
    150
    \n-
    \n-
    152 K operator() (const K& x) const
    \n-
    153 {
    \n-
    154 auto y = K(0);
    \n-
    155 auto n = Dune::Hybrid::size(coefficients_);
    \n-
    156 Dune::Hybrid::forEach(Dune::range(n), [&](auto i) {
    \n-
    157 y += Dune::Hybrid::elementAt(coefficients_, i) * std::pow(x, int(i));
    \n-
    158 });
    \n-
    159 return y;
    \n-
    160 }
    \n-
    \n-
    161
    \n-
    \n-
    163 bool operator==(const Polynomial& other) const
    \n-
    164 {
    \n-
    165 if constexpr (IsIntegerSequence<Coefficients>::value)
    \n-
    166 return true;
    \n-
    167 else
    \n-
    168 return coefficients()==other.coefficients();
    \n-
    169 }
    \n-
    \n-
    170
    \n-
    \n-
    180 friend auto derivative(const Polynomial& p)
    \n-
    181 {
    \n-
    182 auto derivativeCoefficients = Impl::polynomialDerivativeCoefficients(p.coefficients());
    \n-
    183 using DerivativeCoefficients = decltype(derivativeCoefficients);
    \n-
    184 return Polynomial<K, DerivativeCoefficients>(std::move(derivativeCoefficients));
    \n-
    185 }
    \n-
    \n-
    186
    \n-
    \n-\n-
    189 {
    \n-
    190 return coefficients_;
    \n-
    191 }
    \n-
    \n-
    192
    \n-
    193private:
    \n-
    194 Coefficients coefficients_;
    \n-
    195};
    \n-
    \n-
    196
    \n-
    197
    \n-
    198
    \n-
    199template<class K>
    \n-\n-
    201
    \n-
    202template<class K, std::size_t n>
    \n-\n-
    204
    \n-
    205template<class K, K... ci>
    \n-
    206Polynomial(std::integer_sequence<K, ci...>) -> Polynomial<K, std::integer_sequence<K,ci...>>;
    \n-
    207
    \n-
    208template<class K>
    \n-
    209Polynomial(std::initializer_list<K>) -> Polynomial<K, std::vector<K>>;
    \n-
    210
    \n-
    211
    \n-
    212
    \n-
    225template<class K, class Coefficients>
    \n-
    \n-
    226auto makePolynomial(Coefficients coefficients)
    \n-
    227{
    \n-
    228 return Polynomial<K, Coefficients>(std::move(coefficients));
    \n-
    229}
    \n-
    \n-
    230
    \n-
    240template<class K, class C>
    \n-
    \n-
    241auto makePolynomial(std::initializer_list<C> coefficients)
    \n-
    242{
    \n-
    243 return Polynomial<K>(std::move(coefficients));
    \n-
    244}
    \n-
    \n-
    245
    \n-
    246
    \n-
    247
    \n-
    248
    \n-
    249
    \n-
    250}} // namespace Dune::Functions
    \n-
    \n-
    \n-
    251
    \n-
    252
    \n-
    253
    \n-
    254#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n-
    friend auto derivative(const Polynomial &p)
    Obtain derivative of Polynomial function.
    Definition polynomial.hh:180
    \n+
    34 virtual const LocalContext& localContext() const = 0;
    \n+
    35};
    \n+
    36
    \n+
    37
    \n+
    38// Implementation of type erasure wrapper
    \n+
    39template<class Signature, class DerivativeInterface, class LocalContext, class B>
    \n+
    40class LocalFunctionWrapperImplementation :
    \n+
    41 public DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>
    \n+
    42{
    \n+
    43 using Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n+
    44public:
    \n+
    45 using Base::Base;
    \n+
    46
    \n+
    47 virtual void bind(const LocalContext& context)
    \n+
    48 {
    \n+
    49 this->get().bind(context);
    \n+
    50 }
    \n+
    51
    \n+
    52 virtual void unbind()
    \n+
    53 {
    \n+
    54 this->get().unbind();
    \n+
    55 }
    \n+
    56
    \n+
    57 virtual bool bound() const
    \n+
    58 {
    \n+
    59 return this->get().bound();
    \n+
    60 }
    \n+
    61
    \n+
    62 virtual const LocalContext& localContext() const
    \n+
    63 {
    \n+
    64 return this->get().localContext();
    \n+
    65 }
    \n+
    66};
    \n+
    67
    \n+
    68}}} // namespace Dune::Functions::Imp
    \n+
    69
    \n+
    70
    \n+
    71
    \n+
    72#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n+\n+\n
    Definition polynomial.hh:17
    \n-
    auto makePolynomial(Coefficients coefficients)
    Create Polynomial.
    Definition polynomial.hh:226
    \n-
    A univariate polynomial implementation.
    Definition polynomial.hh:124
    \n-
    Polynomial()=default
    Default constructor.
    \n-
    K operator()(const K &x) const
    Evaluate polynomial.
    Definition polynomial.hh:152
    \n-
    C Coefficients
    The type of the stored coefficient container.
    Definition polynomial.hh:134
    \n-
    const Coefficients & coefficients() const
    Obtain reference to coefficient vector.
    Definition polynomial.hh:188
    \n-
    Polynomial(Coefficients coefficients)
    Create from container of coefficients.
    Definition polynomial.hh:147
    \n-
    bool operator==(const Polynomial &other) const
    Comparison of coefficients.
    Definition polynomial.hh:163
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,246 +1,94 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-polynomial.hh\n+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+localfunction_imp.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n-8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n+8#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n 9\n-10#include \n-11#include \n-12#include \n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+12\n 13\n 14\n-15#include \n-16\n-_\b1_\b7namespace _\bD_\bu_\bn_\be {\n-_\b1_\b8namespace Functions {\n-19\n-20namespace Impl {\n-21\n-22 // Compute coefficients of derivative of polynomial.\n-23 // Overload for std::vector\n-24 template\n-25 auto polynomialDerivativeCoefficients(const std::vector&\n-coefficients) {\n-26 if (coefficients.size()==0)\n-27 return std::vector();\n-28 std::vector dpCoefficients(coefficients.size()-1);\n-29 for (size_t i=1; i\n+24class LocalFunctionWrapperInterface :\n+25 public DifferentiableFunctionWrapperInterface\n+26{\n+27public:\n+28 virtual void bind(const LocalContext&) = 0;\n+29\n+30 virtual void unbind() = 0;\n+31\n+32 virtual bool bound() const = 0;\n 33\n-34 // Compute coefficients of derivative of polynomial.\n-35 // Overload for std::array\n-36 template\n-37 auto polynomialDerivativeCoefficients(const std::array& coefficients)\n-{\n-38 if constexpr (n==0)\n-39 return coefficients;\n-40 else\n-41 {\n-42 std::array dpCoefficients;\n-43 for (size_t i=1; i\n-55 auto polynomialDerivativeCoefficientsHelper(std::integer_sequence, std::integer_sequence) {\n-56 return std::integer_sequence();\n-57 }\n-58\n-59 // Compute coefficients of derivative of polynomial.\n-60 // Overload for std::integer_sequence\n-61 template\n-62 auto polynomialDerivativeCoefficients(std::integer_sequence\n-coefficients) {\n-63 if constexpr (sizeof...(i)==0)\n-64 return coefficients;\n-65 else\n-66 return polynomialDerivativeCoefficientsHelper(coefficients, std::\n-make_index_sequence());\n-67 }\n-68\n-69 // Compute coefficients of derivative of polynomial.\n-70 // Overload for std::tuple\n-71 template\n-72 auto polynomialDerivativeCoefficients(const std::tuple& coefficients)\n-{\n-73 if constexpr (sizeof...(T)==0)\n-74 return coefficients;\n-75 else\n-76 {\n-77 // Notice that std::multiplies has issues with signed types.\n-78 // E.g., `decltype(-2,2ul)` is `long unsigned int`.\n-79 // Hence the same is deduced as return type in std::multiplies.\n-80 // To avoid this, we explicitly pass the exponent `i+1` as signed type.\n-81 // If the coefficient is signed, both types are now signed and\n-82 // so is the deduced result type of std::multiplies.\n-83 auto mult = Dune::Hybrid::hybridFunctor(std::multiplies());\n-84 return Dune::unpackIntegerSequence([&](auto... i) {\n-85 using signed_type = std::conditional_t,\n-86 long signed int, signed int>;\n-87 return std::tuple(mult(std::get(coefficients), std::\n-integral_constant()) ...);\n-88 }, std::make_index_sequence());\n-89 }\n-90 }\n-91\n-92} // namespace Impl in Dune::Functions::\n-93\n-94\n-95\n-122template>\n-_\b1_\b2_\b3class _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n-124{\n-125 template\n-126 struct IsIntegerSequence : public std::false_type {};\n-127\n-128 template\n-129 struct IsIntegerSequence> : public std::\n-true_type {};\n-130\n-131public:\n-132\n-_\b1_\b3_\b4 using _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs = C;\n-135\n-_\b1_\b3_\b7 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl() = default;\n-138\n-_\b1_\b4_\b7 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs) :\n-148 coefficients_(std::move(_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs))\n-149 {}\n-150\n-_\b1_\b5_\b2 K _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)_\b (const K& x) const\n-153 {\n-154 auto y = K(0);\n-155 auto n = Dune::Hybrid::size(coefficients_);\n-156 Dune::Hybrid::forEach(Dune::range(n), [&](auto i) {\n-157 y += Dune::Hybrid::elementAt(coefficients_, i) * std::pow(x, int(i));\n-158 });\n-159 return y;\n-160 }\n-161\n-_\b1_\b6_\b3 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& other) const\n-164 {\n-165 if constexpr (IsIntegerSequence::value)\n-166 return true;\n-167 else\n-168 return _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs()==other._\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs();\n-169 }\n-170\n-_\b1_\b8_\b0 friend auto _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& p)\n-181 {\n-182 auto derivativeCoefficients = Impl::polynomialDerivativeCoefficients\n-(p._\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs());\n-183 using DerivativeCoefficients = decltype(derivativeCoefficients);\n-184 return _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b>(std::move\n-(derivativeCoefficients));\n-185 }\n-186\n-_\b1_\b8_\b8 const _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs& _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs() const\n-189 {\n-190 return coefficients_;\n-191 }\n-192\n-193private:\n-194 _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs coefficients_;\n-195};\n-196\n-197\n-198\n-199template\n-_\b2_\b0_\b0_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::vector) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bs_\bt_\bd_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b<_\bK_\b>>;\n-201\n-202template\n-_\b2_\b0_\b3_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::array) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bs_\bt_\bd_\b:_\b:_\ba_\br_\br_\ba_\by_\b<_\bK_\b,_\bn_\b>>;\n-204\n-205template\n-_\b2_\b0_\b6_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::integer_sequence) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl>;\n-207\n-208template\n-_\b2_\b0_\b9_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::initializer_list) -> _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bs_\bt_\bd_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b<_\bK_\b>>;\n-210\n-211\n-212\n-225template\n-_\b2_\b2_\b6auto _\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(Coefficients coefficients)\n-227{\n-228 return _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b,_\b _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b>(std::move(coefficients));\n-229}\n-230\n-240template\n-_\b2_\b4_\b1auto _\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::initializer_list coefficients)\n-242{\n-243 return _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\bK_\b>(std::move(coefficients));\n-244}\n-245\n-246\n-247\n-248\n-249\n-250}} // namespace Dune::Functions\n-251\n-252\n-253\n-254#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend auto derivative(const Polynomial &p)\n-Obtain derivative of Polynomial function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:180\n+34 virtual const LocalContext& localContext() const = 0;\n+35};\n+36\n+37\n+38// Implementation of type erasure wrapper\n+39template\n+40class LocalFunctionWrapperImplementation :\n+41 public DifferentiableFunctionWrapperImplementation\n+42{\n+43 using Base = DifferentiableFunctionWrapperImplementation;\n+44public:\n+45 using Base::Base;\n+46\n+47 virtual void bind(const LocalContext& context)\n+48 {\n+49 this->get().bind(context);\n+50 }\n+51\n+52 virtual void unbind()\n+53 {\n+54 this->get().unbind();\n+55 }\n+56\n+57 virtual bool bound() const\n+58 {\n+59 return this->get().bound();\n+60 }\n+61\n+62 virtual const LocalContext& localContext() const\n+63 {\n+64 return this->get().localContext();\n+65 }\n+66};\n+67\n+68}}} // namespace Dune::Functions::Imp\n+69\n+70\n+71\n+72#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n-auto makePolynomial(Coefficients coefficients)\n-Create Polynomial.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:226\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n-A univariate polynomial implementation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:124\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n-Polynomial()=default\n-Default constructor.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-K operator()(const K &x) const\n-Evaluate polynomial.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n-C Coefficients\n-The type of the stored coefficient container.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:134\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n-const Coefficients & coefficients() const\n-Obtain reference to coefficient vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n-Polynomial(Coefficients coefficients)\n-Create from container of coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const Polynomial &other) const\n-Comparison of coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:163\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00095.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00095.html", "unified_diff": "@@ -80,17 +80,17 @@\n Functions \n
    lagrangedgbasis.hh File Reference
    \n \n
    \n \n

    Go to the source code of this file.

    \n \n \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": "@@ -90,17 +90,17 @@\n
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n
    9
    \n
    10#include <array>
    \n
    11#include <dune/common/exceptions.hh>
    \n
    12#include <dune/common/math.hh>
    \n
    13
    \n-\n-\n-\n+\n+\n+\n \n
    18
    \n
    19
    \n
    20
    \n
    21
    \n
    22namespace Dune {
    \n
    23namespace Functions {
    \n@@ -316,17 +316,17 @@\n
    233
    \n
    234
    \n
    235} // end namespace Functions
    \n
    236} // end namespace Dune
    \n
    237
    \n
    238
    \n
    239#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n-\n-\n-\n+\n+\n+\n \n
    auto lagrangeDG()
    Create a pre-basis factory that can create a LagrangeDG pre-basis.
    Definition lagrangedgbasis.hh:208
    \n
    Definition polynomial.hh:17
    \n
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n
    Definition lagrangebasis.hh:375
    \n
    const Element & element() const
    Return current element, throw if unbound.
    Definition lagrangebasis.hh:427
    \n
    Definition lagrangedgbasis.hh:44
    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -240,16 +240,16 @@\n 233\n 234\n 235} // end namespace Functions\n 236} // end namespace Dune\n 237\n 238\n 239#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n _\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n _\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG\n auto lagrangeDG()\n Create a pre-basis factory that can create a LagrangeDG pre-basis.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:208\n _\bD_\bu_\bn_\be\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 \n \n \n \n \n \n \n-dune-functions: hierarchicvectorwrapper.hh File Reference\n+dune-functions: bsplinebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,53 +72,80 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    hierarchicvectorwrapper.hh File Reference
    \n+
    bsplinebasis.hh File Reference
    \n
    \n
    \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+\n+

    The B-spline global function space basis. \n+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+#include <dune/functions/functionspacebases/leafprebasismixin.hh>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Classes

    class  Dune::Functions::LagrangeDGPreBasis< GV, k >
    \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::HierarchicVectorWrapper< V, CO >
     A wrapper providing multiindex access to vector entries. More...
    class  Dune::Functions::BSplineLocalBasis< GV, R >
     LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch to a knot span. More...
     
    class  Dune::Functions::BSplineLocalCoefficients< dim >
     Attaches a shape function to an entity. More...
     
    class  Dune::Functions::BSplineLocalInterpolation< dim, LB >
     Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. More...
     
    class  Dune::Functions::BSplineLocalFiniteElement< GV, R >
     LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. More...
     
    class  Dune::Functions::BSplinePreBasis< GV >
     Pre-basis for B-spline basis. More...
     
    class  Dune::Functions::BSplineNode< GV >
     
    \n \n \n \n \n \n+\n+\n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n+\n+\n+\n+\n+\n

    \n+Typedefs

    template<typename GV >
    using Dune::Functions::BSplineBasis = DefaultGlobalBasis< BSplinePreBasis< GV > >
     A global B-spline basis.
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n

    \n Functions

    template<class V >
    HierarchicVectorWrapper< V > Dune::Functions::hierarchicVector (V &v)
     
    template<class MultiIndex , class V , std::enable_if_t< models< Concept::HasIndexAccess, V, MultiIndex >(), int > = 0>
    V & Dune::Functions::makeHierarchicVectorForMultiIndex (V &v)
     
    template<class MultiIndex , class V , std::enable_if_t< not models< Concept::HasIndexAccess, V, MultiIndex >(), int > = 0>
    HierarchicVectorWrapper< V > Dune::Functions::makeHierarchicVectorForMultiIndex (V &v)
     
    auto Dune::Functions::BasisFactory::bSpline (const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)
     Create a pre-basis factory that can create a B-spline pre-basis.
     
    \n-
    \n+

    Detailed Description

    \n+

    The B-spline global function space basis.

    \n+
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,42 +1,65 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-hierarchicvectorwrapper.hh File Reference\n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+bsplinebasis.hh File Reference\n+The B-spline global function space basis. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bV_\b,_\b _\bC_\bO_\b _\b>\n-\u00a0 A wrapper providing multiindex access to vector entries. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bR_\b _\b>\n+\u00a0 LocalBasis class in the sense of dune-localfunctions, presenting the\n+ restriction of a B-spline patch to a knot span. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b<_\b _\bd_\bi_\bm_\b _\b>\n+\u00a0 Attaches a shape function to an entity. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b<_\b _\bd_\bi_\bm_\b,_\b _\bL_\bB_\b _\b>\n+\u00a0 Local interpolation in the sense of dune-localfunctions, for the B-\n+ spline basis on tensor-product grids. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bG_\bV_\b,_\b _\bR_\b _\b>\n+\u00a0 LocalFiniteElement in the sense of dune-localfunctions, for the B-\n+ spline basis on tensor-product grids. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b _\b>\n+\u00a0 Pre-basis for B-spline basis. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br< V >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br (V &v)\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n \u00a0\n-template(), int > = 0>\n- V &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n- _\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (V &v)\n-\u00a0\n-template(), int > = 0>\n-_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br< V >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n- _\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (V &v)\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV\n+ > >\n+\u00a0 A global B-spline basis.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\bS_\bp_\bl_\bi_\bn_\be (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.\n \u00a0\n+*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+The B-spline global function space basis.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: hierarchicvectorwrapper.hh Source File\n+dune-functions: bsplinebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,294 +74,1284 @@\n \n \n \n
    \n-
    hierarchicvectorwrapper.hh
    \n+
    bsplinebasis.hh
    \n
    \n
    \n-Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n+Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n
    9
    \n-
    10#ifndef DUNE_FUNCTIONS_HIERARCHICVECTORWRAPPER_TEST_NO_DEPRECATION
    \n-
    11#warning The header dune/functions/functionspacebases/hierarchicvectorwrapper.hh is deprecated and will be removed after release 2.10.
    \n-
    12#endif
    \n-
    13
    \n-
    14#include <dune/common/concept.hh>
    \n-
    15#include <dune/common/hybridutilities.hh>
    \n-
    16#include <dune/common/indices.hh>
    \n-
    17
    \n-\n-\n-\n-\n-
    22
    \n-
    23
    \n-
    24namespace Dune {
    \n-
    25namespace Functions {
    \n-
    26
    \n-
    27
    \n+
    14#include <array>
    \n+
    15#include <numeric>
    \n+
    16
    \n+
    18#include <dune/common/dynmatrix.hh>
    \n+
    19
    \n+
    20#include <dune/localfunctions/common/localbasis.hh>
    \n+
    21#include <dune/common/diagonalmatrix.hh>
    \n+
    22#include <dune/localfunctions/common/localkey.hh>
    \n+
    23#include <dune/localfunctions/common/localfiniteelementtraits.hh>
    \n+
    24#include <dune/geometry/type.hh>
    \n+\n+\n+\n
    28
    \n-
    29namespace Imp {
    \n-
    30
    \n-
    31 // Construct default coefficient type from vector and multiindex type
    \n-
    32 // This requires that MultiIndex has a static size. Otherwise the
    \n-
    33 // vector type itself is returned.
    \n-
    34 template<class V, class MultiIndex>
    \n-
    35 struct CoefficientType
    \n-
    36 {
    \n-
    37 template<class E, std::size_t size>
    \n-
    38 struct DefaultCoefficientTypeHelper
    \n-
    39 {
    \n-
    40 using E0 = decltype(std::declval<E>()[Dune::Indices::_0]);
    \n-
    41 using type = typename DefaultCoefficientTypeHelper<E0, size-1>::type;
    \n-
    42 };
    \n-
    43
    \n-
    44 template<class E>
    \n-
    45 struct DefaultCoefficientTypeHelper<E, 0>
    \n-
    46 {
    \n-
    47 using type = E;
    \n-
    48 };
    \n-
    49
    \n-
    50 using type = typename DefaultCoefficientTypeHelper<V, StaticSizeOrZero<MultiIndex>::value>::type;
    \n-
    51 };
    \n-
    52
    \n+
    29namespace Dune
    \n+
    30{
    \n+
    31namespace Functions {
    \n+
    32
    \n+
    33// A maze of dependencies between the different parts of this. We need a few forward declarations
    \n+
    34template<typename GV, typename R>
    \n+\n+
    36
    \n+
    37template<typename GV>
    \n+
    38class BSplinePreBasis;
    \n+
    39
    \n+
    40
    \n+
    49template<class GV, class R>
    \n+
    \n+\n+
    51{
    \n+
    52 friend class BSplineLocalFiniteElement<GV,R>;
    \n
    53
    \n-
    54
    \n-
    55 // This tag class is used as Coefficient template parameter
    \n-
    56 // for HierarchicVectorWrapper if the coefficient type should
    \n-
    57 // be deduced.
    \n-
    58 struct DeducedCoefficientTag {};
    \n-
    59
    \n-
    60} // namespace Imp
    \n+
    54 typedef typename GV::ctype D;
    \n+
    55 enum {dim = GV::dimension};
    \n+
    56public:
    \n+
    57
    \n+
    59 typedef LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,
    \n+
    60 FieldMatrix<R,1,dim> > Traits;
    \n
    61
    \n-
    62
    \n-
    63
    \n-
    86template<class V, class CO=Imp::DeducedCoefficientTag>
    \n-
    \n-
    87class
    \n-
    88[[deprecated("HierarchicVectorWrapper is deprecated and will be removed after release 2.10.")]]
    \n-\n-
    90{
    \n-
    91 template<class MultiIndex>
    \n-
    92 using Coefficient = std::conditional_t< std::is_same_v<Imp::DeducedCoefficientTag,CO> and HasStaticSize_v<MultiIndex>,
    \n-
    93 typename Imp::CoefficientType<V, MultiIndex>::type,
    \n-
    94 CO
    \n-
    95 >;
    \n-
    96
    \n-
    97
    \n-
    98 using size_type = std::size_t;
    \n+
    \n+\n+\n+
    68 : preBasis_(preBasis),
    \n+
    69 lFE_(lFE)
    \n+
    70 {}
    \n+
    \n+
    71
    \n+
    \n+
    75 void evaluateFunction (const FieldVector<D,dim>& in,
    \n+
    76 std::vector<FieldVector<R,1> >& out) const
    \n+
    77 {
    \n+
    78 FieldVector<D,dim> globalIn = offset_;
    \n+
    79 scaling_.umv(in,globalIn);
    \n+
    80
    \n+
    81 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);
    \n+
    82 }
    \n+
    \n+
    83
    \n+
    \n+
    87 void evaluateJacobian (const FieldVector<D,dim>& in,
    \n+
    88 std::vector<FieldMatrix<D,1,dim> >& out) const
    \n+
    89 {
    \n+
    90 FieldVector<D,dim> globalIn = offset_;
    \n+
    91 scaling_.umv(in,globalIn);
    \n+
    92
    \n+
    93 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);
    \n+
    94
    \n+
    95 for (size_t i=0; i<out.size(); i++)
    \n+
    96 for (int j=0; j<dim; j++)
    \n+
    97 out[i][0][j] *= scaling_[j][j];
    \n+
    98 }
    \n+
    \n
    99
    \n-
    100 template<class C, class SizeProvider,
    \n-
    101 std::enable_if_t< not models<Concept::HasResize, C>(), int> = 0,
    \n-
    102 std::enable_if_t< not models<Concept::HasSizeMethod, C>(), int> = 0>
    \n-
    103 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    104 {
    \n-
    105 auto size = sizeProvider.size(prefix);
    \n-
    106 if (size != 0)
    \n-
    107 DUNE_THROW(RangeError, "Can't resize scalar vector entry v[" << prefix << "] to size(" << prefix << ")=" << size);
    \n-
    108 }
    \n-
    109
    \n-
    110 struct StaticResizeHelper
    \n-
    111 {
    \n-
    112 template<class I, class C, class SizeProvider>
    \n-
    113 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    114 {
    \n-
    115 prefix.back() = i;
    \n-
    116 resizeHelper(c[i], sizeProvider, prefix);
    \n-
    117 }
    \n-
    118 };
    \n-
    119
    \n-
    120 template<class C, class SizeProvider,
    \n-
    121 std::enable_if_t< not models<Concept::HasResize, C>(), int> = 0,
    \n-
    122 std::enable_if_t< models<Concept::HasSizeMethod, C>(), int> = 0>
    \n-
    123 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    124 {
    \n-
    125 auto size = sizeProvider.size(prefix);
    \n-
    126 if (size == 0)
    \n-
    127 return;
    \n+
    101 template<size_t k>
    \n+
    \n+
    102 inline void evaluate (const typename std::array<int,k>& directions,
    \n+
    103 const typename Traits::DomainType& in,
    \n+
    104 std::vector<typename Traits::RangeType>& out) const
    \n+
    105 {
    \n+
    106 switch(k)
    \n+
    107 {
    \n+
    108 case 0:
    \n+
    109 evaluateFunction(in, out);
    \n+
    110 break;
    \n+
    111 case 1:
    \n+
    112 {
    \n+
    113 FieldVector<D,dim> globalIn = offset_;
    \n+
    114 scaling_.umv(in,globalIn);
    \n+
    115
    \n+
    116 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);
    \n+
    117
    \n+
    118 for (size_t i=0; i<out.size(); i++)
    \n+
    119 out[i][0] *= scaling_[directions[0]][directions[0]];
    \n+
    120 break;
    \n+
    121 }
    \n+
    122 case 2:
    \n+
    123 {
    \n+
    124 FieldVector<D,dim> globalIn = offset_;
    \n+
    125 scaling_.umv(in,globalIn);
    \n+
    126
    \n+
    127 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);
    \n
    128
    \n-
    129 if (c.size() != size)
    \n-
    130 DUNE_THROW(RangeError, "Can't resize statically sized vector entry v[" << prefix << "] of size " << c.size() << " to size(" << prefix << ")=" << size);
    \n-
    131
    \n-
    132 using namespace Dune::Hybrid;
    \n-
    133 prefix.push_back(0);
    \n-
    134 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {
    \n-
    135 StaticResizeHelper::apply(i, c, sizeProvider, prefix);
    \n-
    136 });
    \n-
    137 }
    \n-
    138
    \n-
    139 template<class C, class SizeProvider,
    \n-
    140 std::enable_if_t< models<Concept::HasResize, C>(), int> = 0>
    \n-
    141 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    142 {
    \n-
    143 auto size = sizeProvider.size(prefix);
    \n-
    144 if (size==0)
    \n-
    145 {
    \n-
    146 if (c.size()==0)
    \n-
    147 DUNE_THROW(RangeError, "Can't resize dynamically sized vector entry v[" << prefix << "]. Its size is 0 but the target size is unknown due to size(" << prefix << ")=0.");
    \n-
    148 else
    \n-
    149 return;
    \n-
    150 }
    \n-
    151
    \n-
    152 c.resize(size);
    \n-
    153 prefix.push_back(0);
    \n-
    154 for(std::size_t i=0; i<size; ++i)
    \n-
    155 {
    \n-
    156 prefix.back() = i;
    \n-
    157 resizeHelper(c[i], sizeProvider, prefix);
    \n-
    158 }
    \n-
    159 }
    \n-
    160
    \n+
    129 for (size_t i=0; i<out.size(); i++)
    \n+
    130 out[i][0] *= scaling_[directions[0]][directions[0]]*scaling_[directions[1]][directions[1]];
    \n+
    131 break;
    \n+
    132 }
    \n+
    133 default:
    \n+
    134 DUNE_THROW(NotImplemented, "B-Spline derivatives of order " << k << " not implemented yet!");
    \n+
    135 }
    \n+
    136 }
    \n+
    \n+
    137
    \n+
    \n+
    145 unsigned int order () const
    \n+
    146 {
    \n+
    147 return *std::max_element(preBasis_.order_.begin(), preBasis_.order_.end());
    \n+
    148 }
    \n+
    \n+
    149
    \n+
    \n+
    152 std::size_t size() const
    \n+
    153 {
    \n+
    154 return lFE_.size();
    \n+
    155 }
    \n+
    \n+
    156
    \n+
    157private:
    \n+
    158 const BSplinePreBasis<GV>& preBasis_;
    \n+
    159
    \n+\n
    161
    \n-
    162
    \n-
    163public:
    \n-
    164
    \n-
    165 using Vector = V;
    \n-
    166
    \n-
    167 template<class MultiIndex>
    \n-
    168 using Entry = Coefficient<MultiIndex>;
    \n-
    169
    \n-
    \n-\n-
    171 vector_(&vector)
    \n-
    172 {}
    \n-
    \n-
    173
    \n-
    174 template<class SizeProvider>
    \n-
    \n-
    175 void resize(const SizeProvider& sizeProvider)
    \n-
    176 {
    \n-
    177 typename SizeProvider::SizePrefix prefix;
    \n-
    178 prefix.resize(0);
    \n-
    179 resizeHelper(*vector_, sizeProvider, prefix);
    \n-
    180 }
    \n-
    \n-
    181
    \n-
    182 template<class MultiIndex>
    \n-
    \n-
    183 const Entry<MultiIndex>& operator[](const MultiIndex& index) const
    \n-
    184 {
    \n-
    185 static_assert(not std::is_same_v<Imp::DeducedCoefficientTag,Entry<MultiIndex>>, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n-
    186 return hybridMultiIndexAccess<const Entry<MultiIndex>&>(*vector_, index);
    \n-
    187 }
    \n-
    \n-
    188
    \n-
    189 template<class MultiIndex>
    \n-
    \n-
    190 Entry<MultiIndex>& operator[](const MultiIndex& index)
    \n-
    191 {
    \n-
    192 static_assert(not std::is_same_v<Imp::DeducedCoefficientTag,Entry<MultiIndex>>, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n-
    193 return hybridMultiIndexAccess<Entry<MultiIndex>&>(*vector_, index);
    \n-
    194 }
    \n+
    162 // Coordinates in a single knot span differ from coordinates on the B-spline patch
    \n+
    163 // by an affine transformation. This transformation is stored in offset_ and scaling_.
    \n+
    164 FieldVector<D,dim> offset_;
    \n+
    165 DiagonalMatrix<D,dim> scaling_;
    \n+
    166};
    \n
    \n+
    167
    \n+
    181template<int dim>
    \n+
    \n+\n+
    183{
    \n+
    184 // Return i as a d-digit number in the (k+1)-nary system
    \n+
    185 std::array<unsigned int,dim> multiindex (unsigned int i) const
    \n+
    186 {
    \n+
    187 std::array<unsigned int,dim> alpha;
    \n+
    188 for (int j=0; j<dim; j++)
    \n+
    189 {
    \n+
    190 alpha[j] = i % sizes_[j];
    \n+
    191 i = i/sizes_[j];
    \n+
    192 }
    \n+
    193 return alpha;
    \n+
    194 }
    \n
    195
    \n-
    196 template<class MultiIndex>
    \n-
    \n-
    197 const Entry<MultiIndex>& operator()(const MultiIndex& index) const
    \n-
    198 {
    \n-
    199 static_assert(not std::is_same_v<Imp::DeducedCoefficientTag,Entry<MultiIndex>>, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n-
    200 return (*this)[index];
    \n-
    201 }
    \n-
    \n-
    202
    \n-
    203 template<class MultiIndex>
    \n-
    \n-
    204 Entry<MultiIndex>& operator()(const MultiIndex& index)
    \n-
    205 {
    \n-
    206 static_assert(not std::is_same_v<Imp::DeducedCoefficientTag,Entry<MultiIndex>>, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n-
    207 return (*this)[index];
    \n-
    208 }
    \n-
    \n-
    209
    \n-
    \n-
    210 const Vector& vector() const
    \n-
    211 {
    \n-
    212 return *vector_;
    \n-
    213 }
    \n-
    \n+
    197 void setup1d(std::vector<unsigned int>& subEntity)
    \n+
    198 {
    \n+
    199 if (sizes_[0]==1)
    \n+
    200 {
    \n+
    201 subEntity[0] = 0;
    \n+
    202 return;
    \n+
    203 }
    \n+
    204
    \n+
    205 /* edge and vertex numbering
    \n+
    206 0----0----1
    \n+
    207 */
    \n+
    208 unsigned lastIndex=0;
    \n+
    209 subEntity[lastIndex++] = 0; // corner 0
    \n+
    210 for (unsigned i = 0; i < sizes_[0] - 2; ++i)
    \n+
    211 subEntity[lastIndex++] = 0; // inner dofs of element (0)
    \n+
    212
    \n+
    213 subEntity[lastIndex++] = 1; // corner 1
    \n
    214
    \n-
    \n-\n-
    216 {
    \n-
    217 return *vector_;
    \n-
    218 }
    \n-
    \n-
    219
    \n-
    220private:
    \n+
    215 assert(size()==lastIndex);
    \n+
    216 }
    \n+
    217
    \n+
    218 void setup2d(std::vector<unsigned int>& subEntity)
    \n+
    219 {
    \n+
    220 unsigned lastIndex=0;
    \n
    221
    \n-
    222 Vector* vector_;
    \n-
    223};
    \n-
    \n-
    224
    \n-
    225
    \n-
    226
    \n-
    230template<class V>
    \n-\n-
    235
    \n-
    236
    \n+
    222 // LocalKey: entity number , entity codim, dof indices within each entity
    \n+
    223 /* edge and vertex numbering
    \n+
    224 2----3----3
    \n+
    225 | |
    \n+
    226 | |
    \n+
    227 0 1
    \n+
    228 | |
    \n+
    229 | |
    \n+
    230 0----2----1
    \n+
    231 */
    \n+
    232
    \n+
    233 // lower edge (2)
    \n+
    234 subEntity[lastIndex++] = 0; // corner 0
    \n+
    235 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n+
    236 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)
    \n
    237
    \n-
    241template<class MultiIndex, class V,
    \n-
    242 std::enable_if_t< models<Concept::HasIndexAccess, V, MultiIndex>(), int> = 0>
    \n-
    \n-\n-
    244{
    \n-
    245 return v;
    \n-
    246}
    \n-
    \n-
    247
    \n+
    238 subEntity[lastIndex++] = 1; // corner 1
    \n+
    239
    \n+
    240 // iterate from bottom to top over inner edge dofs
    \n+
    241 for (unsigned e = 0; e < sizes_[1]-2; ++e)
    \n+
    242 {
    \n+
    243 subEntity[lastIndex++] = 0; // left edge (0)
    \n+
    244 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n+
    245 subEntity[lastIndex++] = 0; // face dofs
    \n+
    246 subEntity[lastIndex++] = 1; // right edge (1)
    \n+
    247 }
    \n
    248
    \n-
    249
    \n-
    253template<class MultiIndex, class V,
    \n-
    254 std::enable_if_t< not models<Concept::HasIndexAccess, V, MultiIndex>(), int> = 0>
    \n-\n+
    249 // upper edge (3)
    \n+
    250 subEntity[lastIndex++] = 2; // corner 2
    \n+
    251 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n+
    252 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)
    \n+
    253
    \n+
    254 subEntity[lastIndex++] = 3; // corner 3
    \n+
    255
    \n+
    256 assert(size()==lastIndex);
    \n+
    257 }
    \n+
    258
    \n
    259
    \n-
    260
    \n-
    261
    \n-
    262} // namespace Dune::Functions
    \n-
    263} // namespace Dune
    \n+
    260public:
    \n+
    \n+
    261 void init(const std::array<unsigned,dim>& sizes)
    \n+
    262 {
    \n+
    263 sizes_ = sizes;
    \n
    264
    \n-
    265
    \n-
    266#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n-\n-\n-\n+
    265 li_.resize(size());
    \n+
    266
    \n+
    267 // Set up array of codimension-per-dof-number
    \n+
    268 std::vector<unsigned int> codim(li_.size());
    \n+
    269
    \n+
    270 for (std::size_t i=0; i<codim.size(); i++)
    \n+
    271 {
    \n+
    272 codim[i] = 0;
    \n+
    273 // Codimension gets increased by 1 for each coordinate direction
    \n+
    274 // where dof is on boundary
    \n+
    275 std::array<unsigned int,dim> mIdx = multiindex(i);
    \n+
    276 for (int j=0; j<dim; j++)
    \n+
    277 if (mIdx[j]==0 or mIdx[j]==sizes[j]-1)
    \n+
    278 codim[i]++;
    \n+
    279 }
    \n+
    280
    \n+
    281 // Set up index vector (the index of the dof in the set of dofs of a given subentity)
    \n+
    282 // Algorithm: the 'index' has the same ordering as the dof number 'i'.
    \n+
    283 // To make it consecutive we interpret 'i' in the (k+1)-adic system, omit all digits
    \n+
    284 // that correspond to axes where the dof is on the element boundary, and transform the
    \n+
    285 // rest to the (k-1)-adic system.
    \n+
    286 std::vector<unsigned int> index(size());
    \n+
    287
    \n+
    288 for (std::size_t i=0; i<index.size(); i++)
    \n+
    289 {
    \n+
    290 index[i] = 0;
    \n+
    291
    \n+
    292 std::array<unsigned int,dim> mIdx = multiindex(i);
    \n+
    293
    \n+
    294 for (int j=dim-1; j>=0; j--)
    \n+
    295 if (mIdx[j]>0 and mIdx[j]<sizes[j]-1)
    \n+
    296 index[i] = (sizes[j]-1)*index[i] + (mIdx[j]-1);
    \n+
    297 }
    \n+
    298
    \n+
    299 // Set up entity and dof numbers for each (supported) dimension separately
    \n+
    300 std::vector<unsigned int> subEntity(li_.size());
    \n+
    301
    \n+
    302 if (subEntity.size() > 0)
    \n+
    303 {
    \n+
    304 if (dim==1) {
    \n+
    305
    \n+
    306 setup1d(subEntity);
    \n+
    307
    \n+
    308 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {
    \n+
    309
    \n+
    310 setup2d(subEntity);
    \n+
    311
    \n+
    312 }
    \n+
    313 }
    \n+
    314
    \n+
    315 for (size_t i=0; i<li_.size(); i++)
    \n+
    316 li_[i] = LocalKey(subEntity[i], codim[i], index[i]);
    \n+
    317 }
    \n+
    \n+
    318
    \n+
    \n+
    320 std::size_t size () const
    \n+
    321 {
    \n+
    322 return std::accumulate(sizes_.begin(), sizes_.end(), 1, std::multiplies<unsigned int>());
    \n+
    323 }
    \n+
    \n+
    324
    \n+
    \n+
    326 const LocalKey& localKey (std::size_t i) const
    \n+
    327 {
    \n+
    328 return li_[i];
    \n+
    329 }
    \n+
    \n+
    330
    \n+
    331private:
    \n+
    332
    \n+
    333 // Number of shape functions on this element per coordinate direction
    \n+
    334 std::array<unsigned, dim> sizes_;
    \n+
    335
    \n+
    336 std::vector<LocalKey> li_;
    \n+
    337};
    \n+
    \n+
    338
    \n+
    343template<int dim, class LB>
    \n+
    \n+\n+
    345{
    \n+
    346public:
    \n+
    348 template<typename F, typename C>
    \n+
    \n+
    349 void interpolate (const F& f, std::vector<C>& out) const
    \n+
    350 {
    \n+
    351 DUNE_THROW(NotImplemented, "BSplineLocalInterpolation::interpolate");
    \n+
    352 }
    \n+
    \n+
    353
    \n+
    354};
    \n+
    \n+
    355
    \n+
    365template<class GV, class R>
    \n+
    \n+\n+
    367{
    \n+
    368 typedef typename GV::ctype D;
    \n+
    369 enum {dim = GV::dimension};
    \n+
    370 friend class BSplineLocalBasis<GV,R>;
    \n+
    371public:
    \n+
    372
    \n+
    375 typedef LocalFiniteElementTraits<BSplineLocalBasis<GV,R>,
    \n+\n+\n+
    378
    \n+
    \n+\n+
    382 : preBasis_(preBasis),
    \n+
    383 localBasis_(preBasis,*this)
    \n+
    384 {}
    \n+
    \n+
    385
    \n+
    \n+\n+
    389 : preBasis_(other.preBasis_),
    \n+\n+
    391 {}
    \n+
    \n+
    392
    \n+
    \n+
    399 void bind(const std::array<unsigned,dim>& elementIdx)
    \n+
    400 {
    \n+
    401 /* \\todo In the long run we need to precompute a table for this */
    \n+
    402 for (size_t i=0; i<elementIdx.size(); i++)
    \n+
    403 {
    \n+
    404 currentKnotSpan_[i] = 0;
    \n+
    405
    \n+
    406 // Skip over degenerate knot spans
    \n+
    407 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] < preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)
    \n+
    408 currentKnotSpan_[i]++;
    \n+
    409
    \n+
    410 for (size_t j=0; j<elementIdx[i]; j++)
    \n+
    411 {
    \n+
    412 currentKnotSpan_[i]++;
    \n+
    413
    \n+
    414 // Skip over degenerate knot spans
    \n+
    415 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] < preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)
    \n+
    416 currentKnotSpan_[i]++;
    \n+
    417 }
    \n+
    418
    \n+
    419 // Compute the geometric transformation from knotspan-local to global coordinates
    \n+
    420 localBasis_.offset_[i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]];
    \n+
    421 localBasis_.scaling_[i][i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] - preBasis_.knotVectors_[i][currentKnotSpan_[i]];
    \n+
    422 }
    \n+
    423
    \n+
    424 // Set up the LocalCoefficients object
    \n+
    425 std::array<unsigned int, dim> sizes;
    \n+
    426 for (size_t i=0; i<dim; i++)
    \n+
    427 sizes[i] = size(i);
    \n+
    428 localCoefficients_.init(sizes);
    \n+
    429 }
    \n+
    \n+
    430
    \n+
    \n+\n+
    433 {
    \n+
    434 return localBasis_;
    \n+
    435 }
    \n+
    \n+
    436
    \n+
    \n+\n+
    439 {
    \n+
    440 return localCoefficients_;
    \n+
    441 }
    \n+
    \n+
    442
    \n+\n+
    448
    \n+
    \n+
    450 unsigned size () const
    \n+
    451 {
    \n+
    452 std::size_t r = 1;
    \n+
    453 for (int i=0; i<dim; i++)
    \n+
    454 r *= size(i);
    \n+
    455 return r;
    \n+
    456 }
    \n+
    \n+
    457
    \n+
    \n+
    460 GeometryType type () const
    \n+
    461 {
    \n+
    462 return GeometryTypes::cube(dim);
    \n+
    463 }
    \n+
    \n+
    464
    \n+
    465//private:
    \n+
    466
    \n+
    \n+
    468 unsigned int size(int i) const
    \n+
    469 {
    \n+
    470 const auto& order = preBasis_.order_;
    \n+
    471 unsigned int r = order[i]+1; // The 'normal' value
    \n+
    472 if (currentKnotSpan_[i]<order[i]) // Less near the left end of the knot vector
    \n+
    473 r -= (order[i] - currentKnotSpan_[i]);
    \n+
    474 if ( order[i] > (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] - 2) )
    \n+
    475 r -= order[i] - (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] - 2);
    \n+
    476 return r;
    \n+
    477 }
    \n+
    \n+
    478
    \n+\n+
    480
    \n+\n+\n+\n+
    484
    \n+
    485 // The knot span we are bound to
    \n+
    486 std::array<unsigned,dim> currentKnotSpan_;
    \n+
    487};
    \n+
    \n+
    488
    \n+
    489
    \n+
    490template<typename GV>
    \n+
    491class BSplineNode;
    \n+
    492
    \n+
    502template<typename GV>
    \n+
    \n+\n+
    504 public LeafPreBasisMixin< BSplinePreBasis<GV> >
    \n+
    505{
    \n+\n+
    507
    \n+
    508 static const int dim = GV::dimension;
    \n+
    509
    \n+
    511 class MultiDigitCounter
    \n+
    512 {
    \n+
    513 public:
    \n+
    514
    \n+
    518 MultiDigitCounter(const std::array<unsigned int,dim>& limits)
    \n+
    519 : limits_(limits)
    \n+
    520 {
    \n+
    521 std::fill(counter_.begin(), counter_.end(), 0);
    \n+
    522 }
    \n+
    523
    \n+
    525 MultiDigitCounter& operator++()
    \n+
    526 {
    \n+
    527 for (int i=0; i<dim; i++)
    \n+
    528 {
    \n+
    529 ++counter_[i];
    \n+
    530
    \n+
    531 // no overflow?
    \n+
    532 if (counter_[i] < limits_[i])
    \n+
    533 break;
    \n+
    534
    \n+
    535 counter_[i] = 0;
    \n+
    536 }
    \n+
    537 return *this;
    \n+
    538 }
    \n+
    539
    \n+
    541 const unsigned int& operator[](int i) const
    \n+
    542 {
    \n+
    543 return counter_[i];
    \n+
    544 }
    \n+
    545
    \n+
    547 unsigned int cycle() const
    \n+
    548 {
    \n+
    549 unsigned int r = 1;
    \n+
    550 for (int i=0; i<dim; i++)
    \n+
    551 r *= limits_[i];
    \n+
    552 return r;
    \n+
    553 }
    \n+
    554
    \n+
    555 private:
    \n+
    556
    \n+
    558 const std::array<unsigned int,dim> limits_;
    \n+
    559
    \n+
    561 std::array<unsigned int,dim> counter_;
    \n+
    562
    \n+
    563 };
    \n+
    564
    \n+
    565public:
    \n+
    566
    \n+
    568 using GridView = GV;
    \n+
    569 using size_type = std::size_t;
    \n+
    570
    \n+\n+
    572
    \n+
    573 // Type used for function values
    \n+
    574 using R = double;
    \n+
    575
    \n+
    \n+\n+
    595 const std::vector<double>& knotVector,
    \n+
    596 unsigned int order,
    \n+
    597 bool makeOpen = true)
    \n+\n+
    599 {
    \n+
    600 // \\todo Detection of duplicate knots
    \n+
    601 std::fill(elements_.begin(), elements_.end(), knotVector.size()-1);
    \n+
    602
    \n+
    603 // Mediocre sanity check: we don't know the number of grid elements in each direction.
    \n+
    604 // but at least we know the total number of elements.
    \n+
    605 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::multiplies<unsigned>()) == gridView_.size(0) );
    \n+
    606
    \n+
    607 for (int i=0; i<dim; i++)
    \n+
    608 {
    \n+
    609 // Prepend the correct number of additional knots to open the knot vector
    \n+
    611 if (makeOpen)
    \n+
    612 for (unsigned int j=0; j<order; j++)
    \n+
    613 knotVectors_[i].push_back(knotVector[0]);
    \n+
    614
    \n+
    615 knotVectors_[i].insert(knotVectors_[i].end(), knotVector.begin(), knotVector.end());
    \n+
    616
    \n+
    617 if (makeOpen)
    \n+
    618 for (unsigned int j=0; j<order; j++)
    \n+
    619 knotVectors_[i].push_back(knotVector.back());
    \n+
    620 }
    \n+
    621
    \n+
    622 std::fill(order_.begin(), order_.end(), order);
    \n+
    623 }
    \n+
    \n+
    624
    \n+
    \n+\n+
    647 const FieldVector<double,dim>& lowerLeft,
    \n+
    648 const FieldVector<double,dim>& upperRight,
    \n+
    649 const std::array<unsigned int,dim>& elements,
    \n+
    650 unsigned int order,
    \n+
    651 bool makeOpen = true)
    \n+
    652 : elements_(elements),
    \n+\n+
    654 {
    \n+
    655 // Mediocre sanity check: we don't know the number of grid elements in each direction.
    \n+
    656 // but at least we know the total number of elements.
    \n+
    657 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::multiplies<unsigned>()) == gridView_.size(0) );
    \n+
    658
    \n+
    659 for (int i=0; i<dim; i++)
    \n+
    660 {
    \n+
    661 // Prepend the correct number of additional knots to open the knot vector
    \n+
    663 if (makeOpen)
    \n+
    664 for (unsigned int j=0; j<order; j++)
    \n+
    665 knotVectors_[i].push_back(lowerLeft[i]);
    \n+
    666
    \n+
    667 // Construct the actual knot vector
    \n+
    668 for (size_t j=0; j<elements[i]+1; j++)
    \n+
    669 knotVectors_[i].push_back(lowerLeft[i] + j*(upperRight[i]-lowerLeft[i]) / elements[i]);
    \n+
    670
    \n+
    671 if (makeOpen)
    \n+
    672 for (unsigned int j=0; j<order; j++)
    \n+
    673 knotVectors_[i].push_back(upperRight[i]);
    \n+
    674 }
    \n+
    675
    \n+
    676 std::fill(order_.begin(), order_.end(), order);
    \n+
    677 }
    \n+
    \n+
    678
    \n+
    \n+\n+
    681 {}
    \n+
    \n+
    682
    \n+
    \n+
    684 const GridView& gridView() const
    \n+
    685 {
    \n+
    686 return gridView_;
    \n+
    687 }
    \n+
    \n+
    688
    \n+
    \n+
    690 void update(const GridView& gv)
    \n+
    691 {
    \n+
    692 gridView_ = gv;
    \n+
    693 }
    \n+
    \n+
    694
    \n+
    \n+\n+
    699 {
    \n+
    700 return Node{this};
    \n+
    701 }
    \n+
    \n+
    702
    \n+
    \n+\n+
    705 {
    \n+
    706 size_type result = 1;
    \n+
    707 for (int i=0; i<dim; i++)
    \n+
    708 result *= order_[i]+1;
    \n+
    709 return result;
    \n+
    710 }
    \n+
    \n+
    711
    \n+
    713 template<typename It>
    \n+
    \n+
    714 It indices(const Node& node, It it) const
    \n+
    715 {
    \n+
    716 // Local degrees of freedom are arranged in a lattice.
    \n+
    717 // We need the lattice dimensions to be able to compute lattice coordinates from a local index
    \n+
    718 std::array<unsigned int, dim> localSizes;
    \n+
    719 for (int i=0; i<dim; i++)
    \n+
    720 localSizes[i] = node.finiteElement().size(i);
    \n+
    721 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n+
    722 {
    \n+
    723 std::array<unsigned int,dim> localIJK = getIJK(i, localSizes);
    \n+
    724
    \n+
    725 const auto currentKnotSpan = node.finiteElement().currentKnotSpan_;
    \n+
    726 const auto order = order_;
    \n+
    727
    \n+
    728 std::array<unsigned int,dim> globalIJK;
    \n+
    729 for (int i=0; i<dim; i++)
    \n+
    730 globalIJK[i] = std::max((int)currentKnotSpan[i] - (int)order[i], 0) + localIJK[i]; // needs to be a signed type!
    \n+
    731
    \n+
    732 // Make one global flat index from the globalIJK tuple
    \n+
    733 size_type globalIdx = globalIJK[dim-1];
    \n+
    734
    \n+
    735 for (int i=dim-2; i>=0; i--)
    \n+
    736 globalIdx = globalIdx * size(i) + globalIJK[i];
    \n+
    737
    \n+
    738 *it = {{globalIdx}};
    \n+
    739 }
    \n+
    740 return it;
    \n+
    741 }
    \n+
    \n+
    742
    \n+
    \n+
    744 unsigned int dimension () const
    \n+
    745 {
    \n+
    746 unsigned int result = 1;
    \n+
    747 for (size_t i=0; i<dim; i++)
    \n+
    748 result *= size(i);
    \n+
    749 return result;
    \n+
    750 }
    \n+
    \n+
    751
    \n+
    \n+
    753 unsigned int size (size_t d) const
    \n+
    754 {
    \n+
    755 return knotVectors_[d].size() - order_[d] - 1;
    \n+
    756 }
    \n+
    \n+
    757
    \n+
    758 using Base::size;
    \n+
    759
    \n+
    \n+
    762 void evaluateFunction (const FieldVector<typename GV::ctype,dim>& in,
    \n+
    763 std::vector<FieldVector<R,1> >& out,
    \n+
    764 const std::array<unsigned,dim>& currentKnotSpan) const
    \n+
    765 {
    \n+
    766 // Evaluate
    \n+
    767 std::array<std::vector<R>, dim> oneDValues;
    \n+
    768
    \n+
    769 for (size_t i=0; i<dim; i++)
    \n+
    770 evaluateFunction(in[i], oneDValues[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n+
    771
    \n+
    772 std::array<unsigned int, dim> limits;
    \n+
    773 for (int i=0; i<dim; i++)
    \n+
    774 limits[i] = oneDValues[i].size();
    \n+
    775
    \n+
    776 MultiDigitCounter ijkCounter(limits);
    \n+
    777
    \n+
    778 out.resize(ijkCounter.cycle());
    \n+
    779
    \n+
    780 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n+
    781 {
    \n+
    782 out[i] = R(1.0);
    \n+
    783 for (size_t j=0; j<dim; j++)
    \n+
    784 out[i] *= oneDValues[j][ijkCounter[j]];
    \n+
    785 }
    \n+
    786 }
    \n+
    \n+
    787
    \n+
    \n+
    793 void evaluateJacobian (const FieldVector<typename GV::ctype,dim>& in,
    \n+
    794 std::vector<FieldMatrix<R,1,dim> >& out,
    \n+
    795 const std::array<unsigned,dim>& currentKnotSpan) const
    \n+
    796 {
    \n+
    797 // How many shape functions to we have in each coordinate direction?
    \n+
    798 std::array<unsigned int, dim> limits;
    \n+
    799 for (int i=0; i<dim; i++)
    \n+
    800 {
    \n+
    801 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries of the knot vector
    \n+
    802 if (currentKnotSpan[i]<order_[i])
    \n+
    803 limits[i] -= (order_[i] - currentKnotSpan[i]);
    \n+
    804 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )
    \n+
    805 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] - 2);
    \n+
    806 }
    \n+
    807
    \n+
    808 // The lowest knot spans that we need values from
    \n+
    809 std::array<unsigned int, dim> offset;
    \n+
    810 for (int i=0; i<dim; i++)
    \n+
    811 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);
    \n+
    812
    \n+
    813 // Evaluate 1d function values (needed for the product rule)
    \n+
    814 std::array<std::vector<R>, dim> oneDValues;
    \n+
    815
    \n+
    816 // Evaluate 1d function values of one order lower (needed for the derivative formula)
    \n+
    817 std::array<std::vector<R>, dim> lowOrderOneDValues;
    \n+
    818
    \n+
    819 std::array<DynamicMatrix<R>, dim> values;
    \n+
    820
    \n+
    821 for (size_t i=0; i<dim; i++)
    \n+
    822 {
    \n+
    823 evaluateFunctionFull(in[i], values[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n+
    824 oneDValues[i].resize(knotVectors_[i].size()-order_[i]-1);
    \n+
    825 for (size_t j=0; j<oneDValues[i].size(); j++)
    \n+
    826 oneDValues[i][j] = values[i][order_[i]][j];
    \n+
    827
    \n+
    828 if (order_[i]!=0)
    \n+
    829 {
    \n+
    830 lowOrderOneDValues[i].resize(knotVectors_[i].size()-(order_[i]-1)-1);
    \n+
    831 for (size_t j=0; j<lowOrderOneDValues[i].size(); j++)
    \n+
    832 lowOrderOneDValues[i][j] = values[i][order_[i]-1][j];
    \n+
    833 }
    \n+
    834 }
    \n+
    835
    \n+
    836
    \n+
    837 // Evaluate 1d function derivatives
    \n+
    838 std::array<std::vector<R>, dim> oneDDerivatives;
    \n+
    839 for (size_t i=0; i<dim; i++)
    \n+
    840 {
    \n+
    841 oneDDerivatives[i].resize(limits[i]);
    \n+
    842
    \n+
    843 if (order_[i]==0) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n+
    844 std::fill(oneDDerivatives[i].begin(), oneDDerivatives[i].end(), R(0.0));
    \n+
    845 else
    \n+
    846 {
    \n+
    847 for (size_t j=offset[i]; j<offset[i]+limits[i]; j++)
    \n+
    848 {
    \n+
    849 R derivativeAddend1 = lowOrderOneDValues[i][j] / (knotVectors_[i][j+order_[i]]-knotVectors_[i][j]);
    \n+
    850 R derivativeAddend2 = lowOrderOneDValues[i][j+1] / (knotVectors_[i][j+order_[i]+1]-knotVectors_[i][j+1]);
    \n+
    851 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n+
    852 if (std::isnan(derivativeAddend1))
    \n+
    853 derivativeAddend1 = 0;
    \n+
    854 if (std::isnan(derivativeAddend2))
    \n+
    855 derivativeAddend2 = 0;
    \n+
    856 oneDDerivatives[i][j-offset[i]] = order_[i] * ( derivativeAddend1 - derivativeAddend2 );
    \n+
    857 }
    \n+
    858 }
    \n+
    859 }
    \n+
    860
    \n+
    861 // Working towards computing only the parts that we really need:
    \n+
    862 // Let's copy them out into a separate array
    \n+
    863 std::array<std::vector<R>, dim> oneDValuesShort;
    \n+
    864
    \n+
    865 for (int i=0; i<dim; i++)
    \n+
    866 {
    \n+
    867 oneDValuesShort[i].resize(limits[i]);
    \n+
    868
    \n+
    869 for (size_t j=0; j<limits[i]; j++)
    \n+
    870 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];
    \n+
    871 }
    \n+
    872
    \n+
    873
    \n+
    874
    \n+
    875 // Set up a multi-index to go from consecutive indices to integer coordinates
    \n+
    876 MultiDigitCounter ijkCounter(limits);
    \n+
    877
    \n+
    878 out.resize(ijkCounter.cycle());
    \n+
    879
    \n+
    880 // Complete Jacobian is given by the product rule
    \n+
    881 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n+
    882 for (int j=0; j<dim; j++)
    \n+
    883 {
    \n+
    884 out[i][0][j] = 1.0;
    \n+
    885 for (int k=0; k<dim; k++)
    \n+
    886 out[i][0][j] *= (j==k) ? oneDDerivatives[k][ijkCounter[k]]
    \n+
    887 : oneDValuesShort[k][ijkCounter[k]];
    \n+
    888 }
    \n+
    889
    \n+
    890 }
    \n+
    \n+
    891
    \n+
    893 template <size_type k>
    \n+
    \n+
    894 void evaluate(const typename std::array<int,k>& directions,
    \n+
    895 const FieldVector<typename GV::ctype,dim>& in,
    \n+
    896 std::vector<FieldVector<R,1> >& out,
    \n+
    897 const std::array<unsigned,dim>& currentKnotSpan) const
    \n+
    898 {
    \n+
    899 if (k != 1 && k != 2)
    \n+
    900 DUNE_THROW(RangeError, "Differentiation order greater than 2 is not supported!");
    \n+
    901
    \n+
    902 // Evaluate 1d function values (needed for the product rule)
    \n+
    903 std::array<std::vector<R>, dim> oneDValues;
    \n+
    904 std::array<std::vector<R>, dim> oneDDerivatives;
    \n+
    905 std::array<std::vector<R>, dim> oneDSecondDerivatives;
    \n+
    906
    \n+
    907 // Evaluate 1d function derivatives
    \n+
    908 if (k==1)
    \n+
    909 for (size_t i=0; i<dim; i++)
    \n+
    910 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], false, oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n+
    911 else
    \n+
    912 for (size_t i=0; i<dim; i++)
    \n+
    913 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], true, oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n+
    914
    \n+
    915 // The lowest knot spans that we need values from
    \n+
    916 std::array<unsigned int, dim> offset;
    \n+
    917 for (int i=0; i<dim; i++)
    \n+
    918 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);
    \n+
    919
    \n+
    920 // Set up a multi-index to go from consecutive indices to integer coordinates
    \n+
    921 std::array<unsigned int, dim> limits;
    \n+
    922 for (int i=0; i<dim; i++)
    \n+
    923 {
    \n+
    924 // In a proper implementation, the following line would do
    \n+
    925 //limits[i] = oneDValues[i].size();
    \n+
    926 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries of the knot vector
    \n+
    927 if (currentKnotSpan[i]<order_[i])
    \n+
    928 limits[i] -= (order_[i] - currentKnotSpan[i]);
    \n+
    929 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )
    \n+
    930 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] - 2);
    \n+
    931 }
    \n+
    932
    \n+
    933 // Working towards computing only the parts that we really need:
    \n+
    934 // Let's copy them out into a separate array
    \n+
    935 std::array<std::vector<R>, dim> oneDValuesShort;
    \n+
    936
    \n+
    937 for (int i=0; i<dim; i++)
    \n+
    938 {
    \n+
    939 oneDValuesShort[i].resize(limits[i]);
    \n+
    940
    \n+
    941 for (size_t j=0; j<limits[i]; j++)
    \n+
    942 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];
    \n+
    943 }
    \n+
    944
    \n+
    945
    \n+
    946 MultiDigitCounter ijkCounter(limits);
    \n+
    947
    \n+
    948 out.resize(ijkCounter.cycle());
    \n+
    949
    \n+
    950 if (k == 1)
    \n+
    951 {
    \n+
    952 // Complete Jacobian is given by the product rule
    \n+
    953 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n+
    954 {
    \n+
    955 out[i][0] = 1.0;
    \n+
    956 for (int l=0; l<dim; l++)
    \n+
    957 out[i][0] *= (directions[0]==l) ? oneDDerivatives[l][ijkCounter[l]]
    \n+
    958 : oneDValuesShort[l][ijkCounter[l]];
    \n+
    959 }
    \n+
    960 }
    \n+
    961
    \n+
    962 if (k == 2)
    \n+
    963 {
    \n+
    964 // Complete derivation by deriving the tensor product
    \n+
    965 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n+
    966 {
    \n+
    967 out[i][0] = 1.0;
    \n+
    968 for (int j=0; j<dim; j++)
    \n+
    969 {
    \n+
    970 if (directions[0] != directions[1]) //derivation in two different variables
    \n+
    971 if (directions[0] == j || directions[1] == j) //the spline has to be derived (once) in this direction
    \n+
    972 out[i][0] *= oneDDerivatives[j][ijkCounter[j]];
    \n+
    973 else //no derivation in this direction
    \n+
    974 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];
    \n+
    975 else //spline is derived two times in the same direction
    \n+
    976 if (directions[0] == j) //the spline is derived two times in this direction
    \n+
    977 out[i][0] *= oneDSecondDerivatives[j][ijkCounter[j]];
    \n+
    978 else //no derivation in this direction
    \n+
    979 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];
    \n+
    980 }
    \n+
    981 }
    \n+
    982 }
    \n+
    983 }
    \n+
    \n+
    984
    \n+
    985
    \n+
    \n+
    990 static std::array<unsigned int,dim> getIJK(typename GridView::IndexSet::IndexType idx, std::array<unsigned int,dim> elements)
    \n+
    991 {
    \n+
    992 std::array<unsigned,dim> result;
    \n+
    993 for (int i=0; i<dim; i++)
    \n+
    994 {
    \n+
    995 result[i] = idx%elements[i];
    \n+
    996 idx /= elements[i];
    \n+
    997 }
    \n+
    998 return result;
    \n+
    999 }
    \n+
    \n+
    1000
    \n+
    \n+
    1009 static void evaluateFunction (const typename GV::ctype& in, std::vector<R>& out,
    \n+
    1010 const std::vector<R>& knotVector,
    \n+
    1011 unsigned int order,
    \n+
    1012 unsigned int currentKnotSpan)
    \n+
    1013 {
    \n+
    1014 std::size_t outSize = order+1; // The 'standard' value away from the boundaries of the knot vector
    \n+
    1015 if (currentKnotSpan<order) // Less near the left end of the knot vector
    \n+
    1016 outSize -= (order - currentKnotSpan);
    \n+
    1017 if ( order > (knotVector.size() - currentKnotSpan - 2) )
    \n+
    1018 outSize -= order - (knotVector.size() - currentKnotSpan - 2);
    \n+
    1019 out.resize(outSize);
    \n+
    1020
    \n+
    1021 // It's not really a matrix that is needed here, a plain 2d array would do
    \n+
    1022 DynamicMatrix<R> N(order+1, knotVector.size()-1);
    \n+
    1023
    \n+
    1024 // The text books on splines use the following geometric condition here to fill the array N
    \n+
    1025 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition
    \n+
    1026 // only works if splines are never evaluated exactly on the knots.
    \n+
    1027 //
    \n+
    1028 // for (size_t i=0; i<knotVector.size()-1; i++)
    \n+
    1029 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);
    \n+
    1030 for (size_t i=0; i<knotVector.size()-1; i++)
    \n+
    1031 N[0][i] = (i == currentKnotSpan);
    \n+
    1032
    \n+
    1033 for (size_t r=1; r<=order; r++)
    \n+
    1034 for (size_t i=0; i<knotVector.size()-r-1; i++)
    \n+
    1035 {
    \n+
    1036 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)
    \n+
    1037 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])
    \n+
    1038 : 0;
    \n+
    1039 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)
    \n+
    1040 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])
    \n+
    1041 : 0;
    \n+
    1042 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];
    \n+
    1043 }
    \n+
    1044
    \n+
    1049 for (size_t i=0; i<out.size(); i++) {
    \n+
    1050 out[i] = N[order][std::max((int)(currentKnotSpan - order),0) + i];
    \n+
    1051 }
    \n+
    1052 }
    \n+
    \n+
    1053
    \n+
    \n+
    1066 static void evaluateFunctionFull(const typename GV::ctype& in,
    \n+
    1067 DynamicMatrix<R>& out,
    \n+
    1068 const std::vector<R>& knotVector,
    \n+
    1069 unsigned int order,
    \n+
    1070 unsigned int currentKnotSpan)
    \n+
    1071 {
    \n+
    1072 // It's not really a matrix that is needed here, a plain 2d array would do
    \n+
    1073 DynamicMatrix<R>& N = out;
    \n+
    1074
    \n+
    1075 N.resize(order+1, knotVector.size()-1);
    \n+
    1076
    \n+
    1077 // The text books on splines use the following geometric condition here to fill the array N
    \n+
    1078 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition
    \n+
    1079 // only works if splines are never evaluated exactly on the knots.
    \n+
    1080 //
    \n+
    1081 // for (size_t i=0; i<knotVector.size()-1; i++)
    \n+
    1082 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);
    \n+
    1083 for (size_t i=0; i<knotVector.size()-1; i++)
    \n+
    1084 N[0][i] = (i == currentKnotSpan);
    \n+
    1085
    \n+
    1086 for (size_t r=1; r<=order; r++)
    \n+
    1087 for (size_t i=0; i<knotVector.size()-r-1; i++)
    \n+
    1088 {
    \n+
    1089 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)
    \n+
    1090 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])
    \n+
    1091 : 0;
    \n+
    1092 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)
    \n+
    1093 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])
    \n+
    1094 : 0;
    \n+
    1095 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];
    \n+
    1096 }
    \n+
    1097 }
    \n+
    \n+
    1098
    \n+
    1099
    \n+
    \n+
    1109 static void evaluateAll(const typename GV::ctype& in,
    \n+
    1110 std::vector<R>& out,
    \n+
    1111 bool evaluateJacobian, std::vector<R>& outJac,
    \n+
    1112 bool evaluateHessian, std::vector<R>& outHess,
    \n+
    1113 const std::vector<R>& knotVector,
    \n+
    1114 unsigned int order,
    \n+
    1115 unsigned int currentKnotSpan)
    \n+
    1116 {
    \n+
    1117 // How many shape functions to we have in each coordinate direction?
    \n+
    1118 unsigned int limit;
    \n+
    1119 limit = order+1; // The 'standard' value away from the boundaries of the knot vector
    \n+
    1120 if (currentKnotSpan<order)
    \n+
    1121 limit -= (order - currentKnotSpan);
    \n+
    1122 if ( order > (knotVector.size() - currentKnotSpan - 2) )
    \n+
    1123 limit -= order - (knotVector.size() - currentKnotSpan - 2);
    \n+
    1124
    \n+
    1125 // The lowest knot spans that we need values from
    \n+
    1126 unsigned int offset;
    \n+
    1127 offset = std::max((int)(currentKnotSpan - order),0);
    \n+
    1128
    \n+
    1129 // Evaluate 1d function values (needed for the product rule)
    \n+
    1130 DynamicMatrix<R> values;
    \n+
    1131
    \n+
    1132 evaluateFunctionFull(in, values, knotVector, order, currentKnotSpan);
    \n+
    1133
    \n+
    1134 out.resize(knotVector.size()-order-1);
    \n+
    1135 for (size_t j=0; j<out.size(); j++)
    \n+
    1136 out[j] = values[order][j];
    \n+
    1137
    \n+
    1138 // Evaluate 1d function values of one order lower (needed for the derivative formula)
    \n+
    1139 std::vector<R> lowOrderOneDValues;
    \n+
    1140
    \n+
    1141 if (order!=0)
    \n+
    1142 {
    \n+
    1143 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);
    \n+
    1144 for (size_t j=0; j<lowOrderOneDValues.size(); j++)
    \n+
    1145 lowOrderOneDValues[j] = values[order-1][j];
    \n+
    1146 }
    \n+
    1147
    \n+
    1148 // Evaluate 1d function values of two order lower (needed for the (second) derivative formula)
    \n+
    1149 std::vector<R> lowOrderTwoDValues;
    \n+
    1150
    \n+
    1151 if (order>1 && evaluateHessian)
    \n+
    1152 {
    \n+
    1153 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);
    \n+
    1154 for (size_t j=0; j<lowOrderTwoDValues.size(); j++)
    \n+
    1155 lowOrderTwoDValues[j] = values[order-2][j];
    \n+
    1156 }
    \n+
    1157
    \n+
    1158 // Evaluate 1d function derivatives
    \n+
    1159 if (evaluateJacobian)
    \n+
    1160 {
    \n+
    1161 outJac.resize(limit);
    \n+
    1162
    \n+
    1163 if (order==0) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n+
    1164 std::fill(outJac.begin(), outJac.end(), R(0.0));
    \n+
    1165 else
    \n+
    1166 {
    \n+
    1167 for (size_t j=offset; j<offset+limit; j++)
    \n+
    1168 {
    \n+
    1169 R derivativeAddend1 = lowOrderOneDValues[j] / (knotVector[j+order]-knotVector[j]);
    \n+
    1170 R derivativeAddend2 = lowOrderOneDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]);
    \n+
    1171 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n+
    1172 if (std::isnan(derivativeAddend1))
    \n+
    1173 derivativeAddend1 = 0;
    \n+
    1174 if (std::isnan(derivativeAddend2))
    \n+
    1175 derivativeAddend2 = 0;
    \n+
    1176 outJac[j-offset] = order * ( derivativeAddend1 - derivativeAddend2 );
    \n+
    1177 }
    \n+
    1178 }
    \n+
    1179 }
    \n+
    1180
    \n+
    1181 // Evaluate 1d function second derivatives
    \n+
    1182 if (evaluateHessian)
    \n+
    1183 {
    \n+
    1184 outHess.resize(limit);
    \n+
    1185
    \n+
    1186 if (order<2) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n+
    1187 std::fill(outHess.begin(), outHess.end(), R(0.0));
    \n+
    1188 else
    \n+
    1189 {
    \n+
    1190 for (size_t j=offset; j<offset+limit; j++)
    \n+
    1191 {
    \n+
    1192 assert(j+2 < lowOrderTwoDValues.size());
    \n+
    1193 R derivativeAddend1 = lowOrderTwoDValues[j] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order-1]-knotVector[j]);
    \n+
    1194 R derivativeAddend2 = lowOrderTwoDValues[j+1] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order]-knotVector[j+1]);
    \n+
    1195 R derivativeAddend3 = lowOrderTwoDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+order]-knotVector[j+1]);
    \n+
    1196 R derivativeAddend4 = lowOrderTwoDValues[j+2] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+1+order]-knotVector[j+2]);
    \n+
    1197 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n+
    1198
    \n+
    1199 if (std::isnan(derivativeAddend1))
    \n+
    1200 derivativeAddend1 = 0;
    \n+
    1201 if (std::isnan(derivativeAddend2))
    \n+
    1202 derivativeAddend2 = 0;
    \n+
    1203 if (std::isnan(derivativeAddend3))
    \n+
    1204 derivativeAddend3 = 0;
    \n+
    1205 if (std::isnan(derivativeAddend4))
    \n+
    1206 derivativeAddend4 = 0;
    \n+
    1207 outHess[j-offset] = order * (order-1) * ( derivativeAddend1 - derivativeAddend2 -derivativeAddend3 + derivativeAddend4 );
    \n+
    1208 }
    \n+
    1209 }
    \n+
    1210 }
    \n+
    1211 }
    \n+
    \n+
    1212
    \n+
    1213
    \n+
    1215 std::array<unsigned int, dim> order_;
    \n+
    1216
    \n+
    1218 std::array<std::vector<double>, dim> knotVectors_;
    \n+
    1219
    \n+
    1221 std::array<unsigned,dim> elements_;
    \n+
    1222
    \n+\n+
    1224};
    \n+
    \n+
    1225
    \n+
    1226
    \n+
    1227
    \n+
    1228template<typename GV>
    \n+
    \n+\n+
    1230 public LeafBasisNode
    \n+
    1231{
    \n+
    1232 static const int dim = GV::dimension;
    \n+
    1233
    \n+
    1234public:
    \n+
    1235
    \n+
    1236 using size_type = std::size_t;
    \n+
    1237 using Element = typename GV::template Codim<0>::Entity;
    \n+\n+
    1239
    \n+
    \n+\n+
    1241 preBasis_(preBasis),
    \n+
    1242 finiteElement_(*preBasis)
    \n+
    1243 {}
    \n+
    \n+
    1244
    \n+
    \n+
    1246 const Element& element() const
    \n+
    1247 {
    \n+
    1248 return element_;
    \n+
    1249 }
    \n+
    \n+
    1250
    \n+
    \n+\n+
    1256 {
    \n+
    1257 return finiteElement_;
    \n+
    1258 }
    \n+
    \n+
    1259
    \n+
    \n+
    1261 void bind(const Element& e)
    \n+
    1262 {
    \n+
    1263 element_ = e;
    \n+
    1264 auto elementIndex = preBasis_->gridView().indexSet().index(e);
    \n+
    1265 finiteElement_.bind(preBasis_->getIJK(elementIndex,preBasis_->elements_));
    \n+
    1266 this->setSize(finiteElement_.size());
    \n+
    1267 }
    \n+
    \n+
    1268
    \n+
    1269protected:
    \n+
    1270
    \n+\n+
    1272
    \n+\n+\n+
    1275};
    \n+
    \n+
    1276
    \n+
    1277
    \n+
    1278
    \n+
    1279namespace BasisFactory {
    \n+
    1280
    \n+
    \n+
    1287inline auto bSpline(const std::vector<double>& knotVector,
    \n+
    1288 unsigned int order,
    \n+
    1289 bool makeOpen = true)
    \n+
    1290{
    \n+
    1291 return [&knotVector, order, makeOpen](const auto& gridView) {
    \n+
    1292 return BSplinePreBasis<std::decay_t<decltype(gridView)>>(gridView, knotVector, order, makeOpen);
    \n+
    1293 };
    \n+
    1294}
    \n+
    \n+
    1295
    \n+
    1296} // end namespace BasisFactory
    \n+
    1297
    \n+
    1298// *****************************************************************************
    \n+
    1299// This is the actual global basis implementation based on the reusable parts.
    \n+
    1300// *****************************************************************************
    \n+
    1301
    \n+
    1308template<typename GV>
    \n+\n+
    1310
    \n+
    1311
    \n+
    1312} // namespace Functions
    \n+
    1313
    \n+
    1314} // namespace Dune
    \n+
    1315
    \n+
    1316#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n+\n+\n+\n+
    auto bSpline(const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)
    Create a pre-basis factory that can create a B-spline pre-basis.
    Definition bsplinebasis.hh:1287
    \n
    Definition polynomial.hh:17
    \n-
    V & makeHierarchicVectorForMultiIndex(V &v)
    Definition hierarchicvectorwrapper.hh:243
    \n-
    HierarchicVectorWrapper< V > hierarchicVector(V &v)
    Definition hierarchicvectorwrapper.hh:231
    \n-
    A wrapper providing multiindex access to vector entries.
    Definition hierarchicvectorwrapper.hh:90
    \n-
    Entry< MultiIndex > & operator()(const MultiIndex &index)
    Definition hierarchicvectorwrapper.hh:204
    \n-
    Entry< MultiIndex > & operator[](const MultiIndex &index)
    Definition hierarchicvectorwrapper.hh:190
    \n-
    const Entry< MultiIndex > & operator[](const MultiIndex &index) const
    Definition hierarchicvectorwrapper.hh:183
    \n-
    Vector & vector()
    Definition hierarchicvectorwrapper.hh:215
    \n-
    V Vector
    Definition hierarchicvectorwrapper.hh:165
    \n-
    Coefficient< MultiIndex > Entry
    Definition hierarchicvectorwrapper.hh:168
    \n-
    const Vector & vector() const
    Definition hierarchicvectorwrapper.hh:210
    \n-
    HierarchicVectorWrapper(Vector &vector)
    Definition hierarchicvectorwrapper.hh:170
    \n-
    const Entry< MultiIndex > & operator()(const MultiIndex &index) const
    Definition hierarchicvectorwrapper.hh:197
    \n-
    void resize(const SizeProvider &sizeProvider)
    Definition hierarchicvectorwrapper.hh:175
    \n-\n+
    LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grid...
    Definition bsplinebasis.hh:367
    \n+
    BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)
    Copy constructor.
    Definition bsplinebasis.hh:388
    \n+
    const BSplinePreBasis< GV > & preBasis_
    Definition bsplinebasis.hh:479
    \n+
    const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > & localInterpolation() const
    Hand out a LocalInterpolation object.
    Definition bsplinebasis.hh:444
    \n+
    LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients< dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits
    Export various types related to this LocalFiniteElement.
    Definition bsplinebasis.hh:377
    \n+
    std::array< unsigned, dim > currentKnotSpan_
    Definition bsplinebasis.hh:486
    \n+
    BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)
    Constructor with a given B-spline basis.
    Definition bsplinebasis.hh:381
    \n+
    const BSplineLocalCoefficients< dim > & localCoefficients() const
    Hand out a LocalCoefficients object.
    Definition bsplinebasis.hh:438
    \n+
    void bind(const std::array< unsigned, dim > &elementIdx)
    Bind LocalFiniteElement to a specific knot span of the spline patch.
    Definition bsplinebasis.hh:399
    \n+
    BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > localInterpolation_
    Definition bsplinebasis.hh:483
    \n+
    GeometryType type() const
    Return the reference element that the local finite element is defined on (here, a hypercube)
    Definition bsplinebasis.hh:460
    \n+
    unsigned size() const
    Number of shape functions in this finite element.
    Definition bsplinebasis.hh:450
    \n+
    BSplineLocalCoefficients< dim > localCoefficients_
    Definition bsplinebasis.hh:482
    \n+
    unsigned int size(int i) const
    Number of degrees of freedom for one coordinate direction.
    Definition bsplinebasis.hh:468
    \n+
    BSplineLocalBasis< GV, R > localBasis_
    Definition bsplinebasis.hh:481
    \n+
    const BSplineLocalBasis< GV, R > & localBasis() const
    Hand out a LocalBasis object.
    Definition bsplinebasis.hh:432
    \n+
    Pre-basis for B-spline basis.
    Definition bsplinebasis.hh:505
    \n+
    std::array< unsigned, dim > elements_
    Number of grid elements in the different coordinate directions.
    Definition bsplinebasis.hh:1221
    \n+
    GridView gridView_
    Definition bsplinebasis.hh:1223
    \n+
    double R
    Definition bsplinebasis.hh:574
    \n+
    static void evaluateFunctionFull(const typename GV::ctype &in, DynamicMatrix< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)
    Evaluate all one-dimensional B-spline functions for a given coordinate direction.
    Definition bsplinebasis.hh:1066
    \n+
    void evaluateFunction(const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim > &currentKnotSpan) const
    Evaluate all B-spline basis functions at a given point.
    Definition bsplinebasis.hh:762
    \n+
    std::array< unsigned int, dim > order_
    Order of the B-spline for each space dimension.
    Definition bsplinebasis.hh:1215
    \n+
    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)
    Evaluate the second derivatives of all one-dimensional B-spline functions for a given coordinate dire...
    Definition bsplinebasis.hh:1109
    \n+
    static void evaluateFunction(const typename GV::ctype &in, std::vector< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)
    Evaluate all one-dimensional B-spline functions for a given coordinate direction.
    Definition bsplinebasis.hh:1009
    \n+
    unsigned int size(size_t d) const
    Number of shape functions in one direction.
    Definition bsplinebasis.hh:753
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition bsplinebasis.hh:568
    \n+
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition bsplinebasis.hh:714
    \n+
    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
    Evaluate Derivatives of all B-spline basis functions.
    Definition bsplinebasis.hh:894
    \n+
    std::size_t size_type
    Definition bsplinebasis.hh:569
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition bsplinebasis.hh:690
    \n+
    unsigned int dimension() const
    Total number of B-spline basis functions.
    Definition bsplinebasis.hh:744
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition bsplinebasis.hh:680
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition bsplinebasis.hh:684
    \n+
    static std::array< unsigned int, dim > getIJK(typename GridView::IndexSet::IndexType idx, std::array< unsigned int, dim > elements)
    Compute integer element coordinates from the element index.
    Definition bsplinebasis.hh:990
    \n+
    Node makeNode() const
    Create tree node.
    Definition bsplinebasis.hh:698
    \n+
    BSplinePreBasis(const GridView &gridView, const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)
    Construct a B-spline basis for a given grid view and set of knot vectors.
    Definition bsplinebasis.hh:594
    \n+
    void evaluateJacobian(const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldMatrix< R, 1, dim > > &out, const std::array< unsigned, dim > &currentKnotSpan) const
    Evaluate Jacobian of all B-spline basis functions.
    Definition bsplinebasis.hh:793
    \n+
    std::array< std::vector< double >, dim > knotVectors_
    The knot vectors, one for each space dimension.
    Definition bsplinebasis.hh:1218
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition bsplinebasis.hh:704
    \n+
    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)
    Construct a B-spline basis for a given grid view with uniform knot vectors.
    Definition bsplinebasis.hh:646
    \n+
    LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch ...
    Definition bsplinebasis.hh:51
    \n+
    LocalBasisTraits< D, dim, FieldVector< D, dim >, R, 1, FieldVector< R, 1 >, FieldMatrix< R, 1, dim > > Traits
    export type traits for function signature
    Definition bsplinebasis.hh:60
    \n+
    unsigned int order() const
    Polynomial order of the shape functions.
    Definition bsplinebasis.hh:145
    \n+
    std::size_t size() const
    Return the number of basis functions on the current knot span.
    Definition bsplinebasis.hh:152
    \n+
    void evaluate(const typename std::array< int, k > &directions, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
    Evaluate all shape functions and derivatives of any order.
    Definition bsplinebasis.hh:102
    \n+
    void evaluateFunction(const FieldVector< D, dim > &in, std::vector< FieldVector< R, 1 > > &out) const
    Evaluate all shape functions.
    Definition bsplinebasis.hh:75
    \n+
    void evaluateJacobian(const FieldVector< D, dim > &in, std::vector< FieldMatrix< D, 1, dim > > &out) const
    Evaluate Jacobian of all shape functions.
    Definition bsplinebasis.hh:87
    \n+
    BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const BSplineLocalFiniteElement< GV, R > &lFE)
    Constructor with a given B-spline patch.
    Definition bsplinebasis.hh:66
    \n+
    Attaches a shape function to an entity.
    Definition bsplinebasis.hh:183
    \n+
    const LocalKey & localKey(std::size_t i) const
    get i'th index
    Definition bsplinebasis.hh:326
    \n+
    void init(const std::array< unsigned, dim > &sizes)
    Definition bsplinebasis.hh:261
    \n+
    std::size_t size() const
    number of coefficients
    Definition bsplinebasis.hh:320
    \n+
    Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product gri...
    Definition bsplinebasis.hh:345
    \n+
    void interpolate(const F &f, std::vector< C > &out) const
    Local interpolation of a function.
    Definition bsplinebasis.hh:349
    \n+
    Definition bsplinebasis.hh:1231
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition bsplinebasis.hh:1255
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition bsplinebasis.hh:1237
    \n+
    const BSplinePreBasis< GV > * preBasis_
    Definition bsplinebasis.hh:1271
    \n+
    Element element_
    Definition bsplinebasis.hh:1274
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition bsplinebasis.hh:1261
    \n+
    BSplineNode(const BSplinePreBasis< GV > *preBasis)
    Definition bsplinebasis.hh:1240
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition bsplinebasis.hh:1246
    \n+
    FiniteElement finiteElement_
    Definition bsplinebasis.hh:1273
    \n+
    std::size_t size_type
    Definition bsplinebasis.hh:1236
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n+
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n+
    size_type size() const
    Get the total dimension of the space spanned by this basis.
    Definition leafprebasismixin.hh:60
    \n+
    size_type size() const
    Definition nodes.hh:147
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n+
    Definition nodes.hh:191
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,320 +1,1476 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-hierarchicvectorwrapper.hh\n+bsplinebasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n+_\b1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n 9\n-10#ifndef DUNE_FUNCTIONS_HIERARCHICVECTORWRAPPER_TEST_NO_DEPRECATION\n-11#warning The header dune/functions/functionspacebases/\n-hierarchicvectorwrapper.hh is deprecated and will be removed after release\n-2.10.\n-12#endif\n-13\n-14#include \n-15#include \n-16#include \n-17\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-22\n-23\n-24namespace _\bD_\bu_\bn_\be {\n-25namespace Functions {\n-26\n-27\n+14#include \n+15#include \n+16\n+18#include \n+19\n+20#include \n+21#include \n+22#include \n+23#include \n+24#include \n+25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+26#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+27#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n 28\n-29namespace Imp {\n-30\n-31 // Construct default coefficient type from vector and multiindex type\n-32 // This requires that MultiIndex has a static size. Otherwise the\n-33 // vector type itself is returned.\n-34 template\n-35 struct CoefficientType\n-36 {\n-37 template\n-38 struct DefaultCoefficientTypeHelper\n-39 {\n-40 using E0 = decltype(std::declval()[Dune::Indices::_0]);\n-41 using type = typename DefaultCoefficientTypeHelper::type;\n-42 };\n-43\n-44 template\n-45 struct DefaultCoefficientTypeHelper\n-46 {\n-47 using type = E;\n-48 };\n-49\n-50 using type = typename DefaultCoefficientTypeHelper::value>::type;\n-51 };\n-52\n+29namespace _\bD_\bu_\bn_\be\n+30{\n+31namespace Functions {\n+32\n+33// A maze of dependencies between the different parts of this. We need a few\n+forward declarations\n+34template\n+35class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n+36\n+37template\n+38class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs;\n+39\n+40\n+49template\n+_\b5_\b0class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+51{\n+52 friend class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n 53\n-54\n-55 // This tag class is used as Coefficient template parameter\n-56 // for HierarchicVectorWrapper if the coefficient type should\n-57 // be deduced.\n-58 struct DeducedCoefficientTag {};\n-59\n-60} // namespace Imp\n+54 typedef typename GV::ctype D;\n+55 enum {dim = GV::dimension};\n+56public:\n+57\n+59 typedef LocalBasisTraits,R,1,FieldVector,\n+_\b6_\b0 FieldMatrix > _\bT_\br_\ba_\bi_\bt_\bs;\n 61\n-62\n-63\n-86template\n-_\b8_\b7class\n-88[[deprecated(\"HierarchicVectorWrapper is deprecated and will be removed after\n-release 2.10.\")]]\n-89_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br\n-90{\n-91 template\n-92 using Coefficient = std::conditional_t< std::is_same_v and HasStaticSize_v,\n-93 typename Imp::CoefficientType::type,\n-94 CO\n-95 >;\n-96\n-97\n-98 using size_type = std::size_t;\n+_\b6_\b6 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs(const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>& preBasis,\n+67 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bG_\bV_\b,_\bR_\b>& lFE)\n+68 : preBasis_(preBasis),\n+69 lFE_(lFE)\n+70 {}\n+71\n+_\b7_\b5 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (const FieldVector& in,\n+76 std::vector >& out) const\n+77 {\n+78 FieldVector globalIn = offset_;\n+79 scaling_.umv(in,globalIn);\n+80\n+81 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);\n+82 }\n+83\n+_\b8_\b7 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn (const FieldVector& in,\n+88 std::vector >& out) const\n+89 {\n+90 FieldVector globalIn = offset_;\n+91 scaling_.umv(in,globalIn);\n+92\n+93 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);\n+94\n+95 for (size_t i=0; i(), int> = 0,\n-102 std::enable_if_t< not models(), int> = 0>\n-103 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-104 {\n-105 auto size = sizeProvider.size(prefix);\n-106 if (size != 0)\n-107 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n-\"] to size(\" << prefix << \")=\" << size);\n-108 }\n-109\n-110 struct StaticResizeHelper\n-111 {\n-112 template\n-113 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-114 {\n-115 prefix.back() = i;\n-116 resizeHelper(c[i], sizeProvider, prefix);\n-117 }\n-118 };\n-119\n-120 template(), int> = 0,\n-122 std::enable_if_t< models(), int> = 0>\n-123 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-124 {\n-125 auto size = sizeProvider.size(prefix);\n-126 if (size == 0)\n-127 return;\n+101 template\n+_\b1_\b0_\b2 inline void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be (const typename std::array& directions,\n+103 const typename Traits::DomainType& in,\n+104 std::vector& out) const\n+105 {\n+106 switch(k)\n+107 {\n+108 case 0:\n+109 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(in, out);\n+110 break;\n+111 case 1:\n+112 {\n+113 FieldVector globalIn = offset_;\n+114 scaling_.umv(in,globalIn);\n+115\n+116 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n+117\n+118 for (size_t i=0; i globalIn = offset_;\n+125 scaling_.umv(in,globalIn);\n+126\n+127 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n 128\n-129 if (c.size() != size)\n-130 DUNE_THROW(RangeError, \"Can't resize statically sized vector entry v[\" <<\n-prefix << \"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n-131\n-132 using namespace Dune::Hybrid;\n-133 prefix.push_back(0);\n-134 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n-135 StaticResizeHelper::apply(i, c, sizeProvider, prefix);\n-136 });\n-137 }\n-138\n-139 template(), int> = 0>\n-141 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-142 {\n-143 auto size = sizeProvider.size(prefix);\n-144 if (size==0)\n-145 {\n-146 if (c.size()==0)\n-147 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-148 else\n-149 return;\n-150 }\n-151\n-152 c.resize(size);\n-153 prefix.push_back(0);\n-154 for(std::size_t i=0; i& preBasis_;\n+159\n+160 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bG_\bV_\b,_\bR_\b>& lFE_;\n 161\n-162\n-163public:\n-164\n-_\b1_\b6_\b5 using _\bV_\be_\bc_\bt_\bo_\br = V;\n-166\n-167 template\n-_\b1_\b6_\b8 using _\bE_\bn_\bt_\br_\by = Coefficient;\n-169\n-_\b1_\b7_\b0 _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br(_\bV_\be_\bc_\bt_\bo_\br& vector) :\n-171 vector_(&vector)\n-172 {}\n-173\n-174 template\n-_\b1_\b7_\b5 void _\br_\be_\bs_\bi_\bz_\be(const SizeProvider& sizeProvider)\n-176 {\n-177 typename SizeProvider::SizePrefix prefix;\n-178 prefix.resize(0);\n-179 resizeHelper(*vector_, sizeProvider, prefix);\n-180 }\n-181\n-182 template\n-_\b1_\b8_\b3 const _\bE_\bn_\bt_\br_\by_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](const MultiIndex& index) const\n-184 {\n-185 static_assert(not std::is_same_v>, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n-186 return hybridMultiIndexAccess&>(*vector_, index);\n-187 }\n-188\n-189 template\n-_\b1_\b9_\b0 _\bE_\bn_\bt_\br_\by_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](const MultiIndex& index)\n-191 {\n-192 static_assert(not std::is_same_v>, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n-193 return hybridMultiIndexAccess&>(*vector_, index);\n+162 // Coordinates in a single knot span differ from coordinates on the B-\n+spline patch\n+163 // by an affine transformation. This transformation is stored in offset_\n+and scaling_.\n+164 FieldVector offset_;\n+165 DiagonalMatrix scaling_;\n+166};\n+167\n+181template\n+_\b1_\b8_\b2class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n+183{\n+184 // Return i as a d-digit number in the (k+1)-nary system\n+185 std::array multiindex (unsigned int i) const\n+186 {\n+187 std::array alpha;\n+188 for (int j=0; j\n-_\b1_\b9_\b7 const _\bE_\bn_\bt_\br_\by_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const MultiIndex& index) const\n+197 void setup1d(std::vector& subEntity)\n 198 {\n-199 static_assert(not std::is_same_v>, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n-200 return (*this)[index];\n-201 }\n-202\n-203 template\n-_\b2_\b0_\b4 _\bE_\bn_\bt_\br_\by_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const MultiIndex& index)\n-205 {\n-206 static_assert(not std::is_same_v>, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n-207 return (*this)[index];\n-208 }\n-209\n-_\b2_\b1_\b0 const _\bV_\be_\bc_\bt_\bo_\br& _\bv_\be_\bc_\bt_\bo_\br() const\n-211 {\n-212 return *vector_;\n-213 }\n+199 if (sizes_[0]==1)\n+200 {\n+201 subEntity[0] = 0;\n+202 return;\n+203 }\n+204\n+205 /* edge and vertex numbering\n+206 0----0----1\n+207 */\n+208 unsigned lastIndex=0;\n+209 subEntity[lastIndex++] = 0; // corner 0\n+210 for (unsigned i = 0; i < sizes_[0] - 2; ++i)\n+211 subEntity[lastIndex++] = 0; // inner dofs of element (0)\n+212\n+213 subEntity[lastIndex++] = 1; // corner 1\n 214\n-_\b2_\b1_\b5 _\bV_\be_\bc_\bt_\bo_\br& _\bv_\be_\bc_\bt_\bo_\br()\n-216 {\n-217 return *vector_;\n-218 }\n-219\n-220private:\n+215 assert(_\bs_\bi_\bz_\be()==lastIndex);\n+216 }\n+217\n+218 void setup2d(std::vector& subEntity)\n+219 {\n+220 unsigned lastIndex=0;\n 221\n-222 Vector* vector_;\n-223};\n-224\n-225\n-226\n-230template\n-_\b2_\b3_\b1_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bV_\b _\b> _\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br(V& v)\n-232{\n-233 return _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bV_\b>(v);\n-234}\n-235\n-236\n+222 // LocalKey: entity number , entity codim, dof indices within each entity\n+223 /* edge and vertex numbering\n+224 2----3----3\n+225 | |\n+226 | |\n+227 0 1\n+228 | |\n+229 | |\n+230 0----2----1\n+231 */\n+232\n+233 // lower edge (2)\n+234 subEntity[lastIndex++] = 0; // corner 0\n+235 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n+236 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)\n 237\n-241template(), int> =\n-0>\n-_\b2_\b4_\b3V& _\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(V& v)\n-244{\n-245 return v;\n-246}\n-247\n+238 subEntity[lastIndex++] = 1; // corner 1\n+239\n+240 // iterate from bottom to top over inner edge dofs\n+241 for (unsigned e = 0; e < sizes_[1]-2; ++e)\n+242 {\n+243 subEntity[lastIndex++] = 0; // left edge (0)\n+244 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n+245 subEntity[lastIndex++] = 0; // face dofs\n+246 subEntity[lastIndex++] = 1; // right edge (1)\n+247 }\n 248\n-249\n-253template(),\n-int> = 0>\n-_\b2_\b5_\b5_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bV_\b _\b> _\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(V& v)\n-256{\n-257 return _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bV_\b>(v);\n-258}\n+249 // upper edge (3)\n+250 subEntity[lastIndex++] = 2; // corner 2\n+251 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n+252 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)\n+253\n+254 subEntity[lastIndex++] = 3; // corner 3\n+255\n+256 assert(_\bs_\bi_\bz_\be()==lastIndex);\n+257 }\n+258\n 259\n-260\n-261\n-262} // namespace Dune::Functions\n-263} // namespace Dune\n+260public:\n+_\b2_\b6_\b1 void _\bi_\bn_\bi_\bt(const std::array& sizes)\n+262 {\n+263 sizes_ = sizes;\n 264\n-265\n-266#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n-_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh\n+265 li_.resize(_\bs_\bi_\bz_\be());\n+266\n+267 // Set up array of codimension-per-dof-number\n+268 std::vector codim(li_.size());\n+269\n+270 for (std::size_t i=0; i mIdx = multiindex(i);\n+276 for (int j=0; j index(_\bs_\bi_\bz_\be());\n+287\n+288 for (std::size_t i=0; i mIdx = multiindex(i);\n+293\n+294 for (int j=dim-1; j>=0; j--)\n+295 if (mIdx[j]>0 and mIdx[j] subEntity(li_.size());\n+301\n+302 if (subEntity.size() > 0)\n+303 {\n+304 if (dim==1) {\n+305\n+306 setup1d(subEntity);\n+307\n+308 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {\n+309\n+310 setup2d(subEntity);\n+311\n+312 }\n+313 }\n+314\n+315 for (size_t i=0; i());\n+323 }\n+324\n+_\b3_\b2_\b6 const LocalKey& _\bl_\bo_\bc_\ba_\bl_\bK_\be_\by (std::size_t i) const\n+327 {\n+328 return li_[i];\n+329 }\n+330\n+331private:\n+332\n+333 // Number of shape functions on this element per coordinate direction\n+334 std::array sizes_;\n+335\n+336 std::vector li_;\n+337};\n+338\n+343template\n+_\b3_\b4_\b4class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+345{\n+346public:\n+348 template\n+_\b3_\b4_\b9 void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const F& f, std::vector& out) const\n+350 {\n+351 DUNE_THROW(NotImplemented, \"BSplineLocalInterpolation::interpolate\");\n+352 }\n+353\n+354};\n+355\n+365template\n+_\b3_\b6_\b6class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+367{\n+_\b3_\b6_\b8 typedef typename GV::ctype D;\n+369 enum {dim = GV::dimension};\n+370 friend class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs;\n+371public:\n+372\n+375 typedef LocalFiniteElementTraits,\n+376 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b<_\bd_\bi_\bm_\b>,\n+_\b3_\b7_\b7 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b<_\bd_\bi_\bm_\b,_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bR_\b> > > _\bT_\br_\ba_\bi_\bt_\bs;\n+378\n+_\b3_\b8_\b1 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>& preBasis)\n+382 : _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(preBasis),\n+383 _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(preBasis,*this)\n+384 {}\n+385\n+_\b3_\b8_\b8 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& other)\n+389 : _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(other._\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_),\n+390 _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_,*this)\n+391 {}\n+392\n+_\b3_\b9_\b9 void _\bb_\bi_\bn_\bd(const std::array& elementIdx)\n+400 {\n+401 /* \\todo In the long run we need to precompute a table for this */\n+402 for (size_t i=0; i sizes;\n+426 for (size_t i=0; i& _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs() const\n+433 {\n+434 return _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n+435 }\n+436\n+_\b4_\b3_\b8 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b<_\bd_\bi_\bm_\b>& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs() const\n+439 {\n+440 return _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b_;\n+441 }\n+442\n+_\b4_\b4_\b4 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b<_\bd_\bi_\bm_\b,_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bR_\b> >&\n+_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn() const\n+445 {\n+446 return _\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b_;\n+447 }\n+448\n+_\b4_\b5_\b0 unsigned _\bs_\bi_\bz_\be () const\n+451 {\n+452 std::size_t r = 1;\n+453 for (int i=0; i (_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.knotVectors_[i].size() - _\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_[i] -\n+2) )\n+475 r -= order[i] - (_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.knotVectors_[i].size() - _\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_[i] -\n+2);\n+476 return r;\n+477 }\n+478\n+_\b4_\b7_\b9 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>& _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+480\n+_\b4_\b8_\b1 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bR_\b> _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n+_\b4_\b8_\b2 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b<_\bd_\bi_\bm_\b> _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b_;\n+_\b4_\b8_\b3 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b<_\bd_\bi_\bm_\b,_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bR_\b> >\n+_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b_;\n+484\n+485 // The knot span we are bound to\n+_\b4_\b8_\b6 std::array _\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_;\n+487};\n+488\n+489\n+490template\n+491class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be;\n+492\n+502template\n+_\b5_\b0_\b3class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n+504 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< BSplinePreBasis >\n+505{\n+506 using _\bB_\ba_\bs_\be = _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b> >;\n+507\n+508 static const int dim = GV::dimension;\n+509\n+511 class MultiDigitCounter\n+512 {\n+513 public:\n+514\n+518 MultiDigitCounter(const std::array& limits)\n+519 : limits_(limits)\n+520 {\n+521 std::fill(counter_.begin(), counter_.end(), 0);\n+522 }\n+523\n+525 MultiDigitCounter& operator++()\n+526 {\n+527 for (int i=0; i limits_;\n+559\n+561 std::array counter_;\n+562\n+563 };\n+564\n+565public:\n+566\n+_\b5_\b6_\b8 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b5_\b6_\b9 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+570\n+_\b5_\b7_\b1 using _\bN_\bo_\bd_\be = _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b>;\n+572\n+573 // Type used for function values\n+_\b5_\b7_\b4 using _\bR = double;\n+575\n+_\b5_\b9_\b4 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw,\n+595 const std::vector& knotVector,\n+596 unsigned int order,\n+597 bool makeOpen = true)\n+598 : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)\n+599 {\n+600 // \\todo Detection of duplicate knots\n+601 std::fill(_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.begin(), _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.end(), knotVector.size()-1);\n+602\n+603 // Mediocre sanity check: we don't know the number of grid elements in each\n+direction.\n+604 // but at least we know the total number of elements.\n+605 assert( std::accumulate(_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.begin(), _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.end(), 1, std::\n+multiplies()) == _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0) );\n+606\n+607 for (int i=0; i& lowerLeft,\n+648 const FieldVector& upperRight,\n+649 const std::array& elements,\n+650 unsigned int order,\n+651 bool makeOpen = true)\n+652 : _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_(elements),\n+653 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)\n+654 {\n+655 // Mediocre sanity check: we don't know the number of grid elements in each\n+direction.\n+656 // but at least we know the total number of elements.\n+657 assert( std::accumulate(_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.begin(), _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.end(), 1, std::\n+multiplies()) == _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0) );\n+658\n+659 for (int i=0; i\n+_\b7_\b1_\b4 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+715 {\n+716 // Local degrees of freedom are arranged in a lattice.\n+717 // We need the lattice dimensions to be able to compute lattice coordinates\n+from a local index\n+718 std::array localSizes;\n+719 for (int i=0; i localIJK = _\bg_\be_\bt_\bI_\bJ_\bK(i, localSizes);\n+724\n+725 const auto currentKnotSpan = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt()._\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_;\n+726 const auto order = _\bo_\br_\bd_\be_\br_\b_;\n+727\n+728 std::array globalIJK;\n+729 for (int i=0; i=0; i--)\n+736 globalIdx = globalIdx * _\bs_\bi_\bz_\be(i) + globalIJK[i];\n+737\n+738 *it = {{globalIdx}};\n+739 }\n+740 return it;\n+741 }\n+742\n+_\b7_\b4_\b4 unsigned int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn () const\n+745 {\n+746 unsigned int result = 1;\n+747 for (size_t i=0; i& in,\n+763 std::vector >& out,\n+764 const std::array& currentKnotSpan) const\n+765 {\n+766 // Evaluate\n+767 std::array, dim> oneDValues;\n+768\n+769 for (size_t i=0; i limits;\n+773 for (int i=0; i& in,\n+794 std::vector >& out,\n+795 const std::array& currentKnotSpan) const\n+796 {\n+797 // How many shape functions to we have in each coordinate direction?\n+798 std::array limits;\n+799 for (int i=0; i (_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_[i]._\bs_\bi_\bz_\be() - currentKnotSpan[i] - 2) )\n+805 limits[i] -= _\bo_\br_\bd_\be_\br_\b_[i] - (_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_[i]._\bs_\bi_\bz_\be() - currentKnotSpan[i] - 2);\n+806 }\n+807\n+808 // The lowest knot spans that we need values from\n+809 std::array offset;\n+810 for (int i=0; i, dim> oneDValues;\n+815\n+816 // Evaluate 1d function values of one order lower (needed for the\n+derivative formula)\n+817 std::array, dim> lowOrderOneDValues;\n+818\n+819 std::array, dim> values;\n+820\n+821 for (size_t i=0; i, dim> oneDDerivatives;\n+839 for (size_t i=0; i, dim> oneDValuesShort;\n+864\n+865 for (int i=0; i\n+_\b8_\b9_\b4 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const typename std::array& directions,\n+895 const FieldVector& in,\n+896 std::vector >& out,\n+897 const std::array& currentKnotSpan) const\n+898 {\n+899 if (k != 1 && k != 2)\n+900 DUNE_THROW(RangeError, \"Differentiation order greater than 2 is not\n+supported!\");\n+901\n+902 // Evaluate 1d function values (needed for the product rule)\n+903 std::array, dim> oneDValues;\n+904 std::array, dim> oneDDerivatives;\n+905 std::array, dim> oneDSecondDerivatives;\n+906\n+907 // Evaluate 1d function derivatives\n+908 if (k==1)\n+909 for (size_t i=0; i offset;\n+917 for (int i=0; i limits;\n+922 for (int i=0; i (_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_[i]._\bs_\bi_\bz_\be() - currentKnotSpan[i] - 2) )\n+930 limits[i] -= _\bo_\br_\bd_\be_\br_\b_[i] - (_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_[i]._\bs_\bi_\bz_\be() - currentKnotSpan[i] - 2);\n+931 }\n+932\n+933 // Working towards computing only the parts that we really need:\n+934 // Let's copy them out into a separate array\n+935 std::array, dim> oneDValuesShort;\n+936\n+937 for (int i=0; i _\bg_\be_\bt_\bI_\bJ_\bK(typename GridView::IndexSet::\n+IndexType idx, std::array elements)\n+991 {\n+992 std::array result;\n+993 for (int i=0; i& out,\n+1010 const std::vector& knotVector,\n+1011 unsigned int order,\n+1012 unsigned int currentKnotSpan)\n+1013 {\n+1014 std::size_t outSize = order+1; // The 'standard' value away from the\n+boundaries of the knot vector\n+1015 if (currentKnotSpan (knotVector.size() - currentKnotSpan - 2) )\n+1018 outSize -= order - (knotVector.size() - currentKnotSpan - 2);\n+1019 out.resize(outSize);\n+1020\n+1021 // It's not really a matrix that is needed here, a plain 2d array would do\n+1022 DynamicMatrix N(order+1, knotVector.size()-1);\n+1023\n+1024 // The text books on splines use the following geometric condition here to\n+fill the array N\n+1025 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n+this condition\n+1026 // only works if splines are never evaluated exactly on the knots.\n+1027 //\n+1028 // for (size_t i=0; i 1e-10)\n+1037 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n+1038 : 0;\n+1039 _\bR factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n+1040 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n+1041 : 0;\n+1042 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n+1043 }\n+1044\n+1049 for (size_t i=0; i& out,\n+1068 const std::vector& knotVector,\n+1069 unsigned int order,\n+1070 unsigned int currentKnotSpan)\n+1071 {\n+1072 // It's not really a matrix that is needed here, a plain 2d array would do\n+1073 DynamicMatrix& N = out;\n+1074\n+1075 N.resize(order+1, knotVector.size()-1);\n+1076\n+1077 // The text books on splines use the following geometric condition here to\n+fill the array N\n+1078 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n+this condition\n+1079 // only works if splines are never evaluated exactly on the knots.\n+1080 //\n+1081 // for (size_t i=0; i 1e-10)\n+1090 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n+1091 : 0;\n+1092 _\bR factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n+1093 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n+1094 : 0;\n+1095 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n+1096 }\n+1097 }\n+1098\n+1099\n+_\b1_\b1_\b0_\b9 static void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bA_\bl_\bl(const typename GV::ctype& in,\n+1110 std::vector& out,\n+1111 bool _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn, std::vector& outJac,\n+1112 bool evaluateHessian, std::vector& outHess,\n+1113 const std::vector& knotVector,\n+1114 unsigned int order,\n+1115 unsigned int currentKnotSpan)\n+1116 {\n+1117 // How many shape functions to we have in each coordinate direction?\n+1118 unsigned int limit;\n+1119 limit = order+1; // The 'standard' value away from the boundaries of the\n+knot vector\n+1120 if (currentKnotSpan (knotVector.size() - currentKnotSpan - 2) )\n+1123 limit -= order - (knotVector.size() - currentKnotSpan - 2);\n+1124\n+1125 // The lowest knot spans that we need values from\n+1126 unsigned int offset;\n+1127 offset = std::max((int)(currentKnotSpan - order),0);\n+1128\n+1129 // Evaluate 1d function values (needed for the product rule)\n+1130 DynamicMatrix values;\n+1131\n+1132 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\bu_\bl_\bl(in, values, knotVector, order, currentKnotSpan);\n+1133\n+1134 out.resize(knotVector.size()-order-1);\n+1135 for (size_t j=0; j lowOrderOneDValues;\n+1140\n+1141 if (order!=0)\n+1142 {\n+1143 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);\n+1144 for (size_t j=0; j lowOrderTwoDValues;\n+1150\n+1151 if (order>1 && evaluateHessian)\n+1152 {\n+1153 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);\n+1154 for (size_t j=0; j _\bo_\br_\bd_\be_\br_\b_;\n+1216\n+_\b1_\b2_\b1_\b8 std::array, dim> _\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_;\n+1219\n+_\b1_\b2_\b2_\b1 std::array _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_;\n+1222\n+_\b1_\b2_\b2_\b3 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+1224};\n+1225\n+1226\n+1227\n+1228template\n+_\b1_\b2_\b2_\b9class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be :\n+1230 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+1231{\n+1232 static const int dim = GV::dimension;\n+1233\n+1234public:\n+1235\n+_\b1_\b2_\b3_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b1_\b2_\b3_\b7 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b1_\b2_\b3_\b8 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bG_\bV_\b,_\bd_\bo_\bu_\bb_\bl_\be_\b>;\n+1239\n+_\b1_\b2_\b4_\b0 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be(const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>* preBasis) :\n+1241 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(preBasis),\n+1242 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(*preBasis)\n+1243 {}\n+1244\n+_\b1_\b2_\b4_\b6 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+1247 {\n+1248 return _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+1249 }\n+1250\n+_\b1_\b2_\b5_\b5 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n+1256 {\n+1257 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+1258 }\n+1259\n+_\b1_\b2_\b6_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+1262 {\n+1263 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = e;\n+1264 auto elementIndex = _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_->gridView().indexSet().index(e);\n+1265 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_._\bb_\bi_\bn_\bd(_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_->getIJK(elementIndex,_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_->elements_));\n+1266 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_._\bs_\bi_\bz_\be());\n+1267 }\n+1268\n+1269protected:\n+1270\n+_\b1_\b2_\b7_\b1 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>* _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+1272\n+_\b1_\b2_\b7_\b3 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b1_\b2_\b7_\b4 _\bE_\bl_\be_\bm_\be_\bn_\bt _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+1275};\n+1276\n+1277\n+1278\n+1279namespace BasisFactory {\n+1280\n+_\b1_\b2_\b8_\b7inline auto _\bb_\bS_\bp_\bl_\bi_\bn_\be(const std::vector& knotVector,\n+1288 unsigned int order,\n+1289 bool makeOpen = true)\n+1290{\n+1291 return [&knotVector, order, makeOpen](const auto& gridView) {\n+1292 return _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(gridView,\n+knotVector, order, makeOpen);\n+1293 };\n+1294}\n+1295\n+1296} // end namespace BasisFactory\n+1297\n+1298/\n+/ *****************************************************************************\n+1299// This is the actual global basis implementation based on the reusable\n+parts.\n+1300/\n+/ *****************************************************************************\n+1301\n+1308template\n+_\b1_\b3_\b0_\b9using _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b> >;\n+1310\n+1311\n+1312} // namespace Functions\n+1313\n+1314} // namespace Dune\n+1315\n+1316#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\bS_\bp_\bl_\bi_\bn_\be\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1287\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-V & makeHierarchicVectorForMultiIndex(V &v)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:243\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br\n-HierarchicVectorWrapper< V > hierarchicVector(V &v)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:231\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br\n-A wrapper providing multiindex access to vector entries.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:90\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-Entry< MultiIndex > & operator()(const MultiIndex &index)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:204\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-Entry< MultiIndex > & operator[](const MultiIndex &index)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:190\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const Entry< MultiIndex > & operator[](const MultiIndex &index) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:183\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector & vector()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:215\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n-V Vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:165\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bE_\bn_\bt_\br_\by\n-Coefficient< MultiIndex > Entry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:168\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-const Vector & vector() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:210\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br\n-HierarchicVectorWrapper(Vector &vector)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:170\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-const Entry< MultiIndex > & operator()(const MultiIndex &index) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:197\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n-void resize(const SizeProvider &sizeProvider)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:175\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis\n+on tensor-product grid...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:367\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)\n+Copy constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:388\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n+const BSplinePreBasis< GV > & preBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:479\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > &\n+localInterpolation() const\n+Hand out a LocalInterpolation object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:444\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs\n+LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients<\n+dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits\n+Export various types related to this LocalFiniteElement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:377\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_\n+std::array< unsigned, dim > currentKnotSpan_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:486\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)\n+Constructor with a given B-spline basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:381\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n+const BSplineLocalCoefficients< dim > & localCoefficients() const\n+Hand out a LocalCoefficients object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:438\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const std::array< unsigned, dim > &elementIdx)\n+Bind LocalFiniteElement to a specific knot span of the spline patch.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:399\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b_\n+BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > >\n+localInterpolation_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:483\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bt_\by_\bp_\be\n+GeometryType type() const\n+Return the reference element that the local finite element is defined on (here,\n+a hypercube)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:460\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n+unsigned size() const\n+Number of shape functions in this finite element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:450\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b_\n+BSplineLocalCoefficients< dim > localCoefficients_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:482\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n+unsigned int size(int i) const\n+Number of degrees of freedom for one coordinate direction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:468\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_\n+BSplineLocalBasis< GV, R > localBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:481\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+const BSplineLocalBasis< GV, R > & localBasis() const\n+Hand out a LocalBasis object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:432\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+Pre-basis for B-spline basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:505\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_\n+std::array< unsigned, dim > elements_\n+Number of grid elements in the different coordinate directions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1221\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n+GridView gridView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1223\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR\n+double R\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:574\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\bu_\bl_\bl\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1066\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:762\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br_\b_\n+std::array< unsigned int, dim > order_\n+Order of the B-spline for each space dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1215\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bA_\bl_\bl\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1109\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1009\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+unsigned int size(size_t d) const\n+Number of shape functions in one direction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:753\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+The grid view that the FE space is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:568\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:714\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:894\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:569\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:690\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+unsigned int dimension() const\n+Total number of B-spline basis functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:744\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void initializeIndices()\n+Initialize the global indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:680\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:684\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\be_\bt_\bI_\bJ_\bK\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:990\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:698\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:594\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:793\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_\n+std::array< std::vector< double >, dim > knotVectors_\n+The knot vectors, one for each space dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1218\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:704\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:646\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+LocalBasis class in the sense of dune-localfunctions, presenting the\n+restriction of a B-spline patch ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:51\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br\n+unsigned int order() const\n+Polynomial order of the shape functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:145\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+std::size_t size() const\n+Return the number of basis functions on the current knot span.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:102\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+void evaluateFunction(const FieldVector< D, dim > &in, std::vector<\n+FieldVector< R, 1 > > &out) const\n+Evaluate all shape functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:87\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const\n+BSplineLocalFiniteElement< GV, R > &lFE)\n+Constructor with a given B-spline patch.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:66\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n+Attaches a shape function to an entity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:183\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bK_\be_\by\n+const LocalKey & localKey(std::size_t i) const\n+get i'th index\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:326\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b:_\b:_\bi_\bn_\bi_\bt\n+void init(const std::array< unsigned, dim > &sizes)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:261\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+std::size_t size() const\n+number of coefficients\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:320\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n+Local interpolation in the sense of dune-localfunctions, for the B-spline basis\n+on tensor-product gri...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:345\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be\n+void interpolate(const F &f, std::vector< C > &out) const\n+Local interpolation of a function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:349\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1231\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1255\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename GV::template Codim< 0 >::Entity Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1237\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n+const BSplinePreBasis< GV > * preBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1271\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n+Element element_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1274\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind to element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1261\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be\n+BSplineNode(const BSplinePreBasis< GV > *preBasis)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1240\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return current element, throw if unbound.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1246\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n+FiniteElement finiteElement_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1273\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1236\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+Global basis for given pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+A generic MixIn class for PreBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b _\b>_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Get the total dimension of the space spanned by this basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n+void setSize(const size_type size)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: interpolate.hh File Reference\n+dune-functions: powerbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -70,55 +70,61 @@\n \n
    \n
    \n \n-
    interpolate.hh File Reference
    \n+
    powerbasis.hh File Reference
    \n
    \n
    \n-
    #include <memory>
    \n-#include <vector>
    \n-#include <dune/common/exceptions.hh>
    \n-#include <dune/common/bitsetvector.hh>
    \n-#include <dune/common/referencehelper.hh>
    \n-#include <dune/typetree/traversal.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/flatvectorview.hh>
    \n-#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>
    \n+\n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+

    \n+Classes

    class  Dune::Functions::PowerPreBasis< IMS, SPB, C >
     A pre-basis for power bases. More...
     
    \n \n \n \n \n \n+\n+\n+\n+\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class B , class C , class F , class BV , class NTRE >
    void Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)
     Interpolate given function in discrete function space.
     
    template<class B , class C , class F , class BV >
    void Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f, const BV &bitVector)
     Interpolate given function in discrete function space.
     
    template<class B , class C , class F >
    void Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f)
     Interpolate given function in discrete function space.
     
    template<std::size_t k, class ChildPreBasisFactory , class IndexMergingStrategy >
    auto Dune::Functions::BasisFactory::power (ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)
     Create a pre-basis factory that can build a PowerPreBasis.
     
    template<std::size_t k, class ChildPreBasisFactory >
    auto Dune::Functions::BasisFactory::power (ChildPreBasisFactory &&childPreBasisFactory)
     Create a factory builder that can build a PowerPreBasis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +1,48 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-interpolate.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs_\b/_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bn_\bo_\bd_\be_\bt_\bo_\br_\ba_\bn_\bg_\be_\bm_\ba_\bp_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+powerbasis.hh File Reference\n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\by_\bn_\ba_\bm_\bi_\bc_\bp_\bo_\bw_\be_\br_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bI_\bM_\bS_\b,_\b _\bS_\bP_\bB_\b,_\b _\bC_\b _\b>\n+\u00a0 A pre-basis for power bases. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const B &basis, C &&coeff, const F &f,\n- const BV &bv, const NTRE &nodeToRangeEntry)\n-\u00a0 Interpolate given function in discrete function space.\n-\u00a0\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const B &basis, C &&coeff, const F &f,\n- const BV &bitVector)\n-\u00a0 Interpolate given function in discrete function space.\n-\u00a0\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const B &basis, C &&coeff, const F &f)\n-\u00a0 Interpolate given function in discrete function space.\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br (ChildPreBasisFactory\n+ &&childPreBasisFactory, const _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by &)\n+\u00a0 Create a pre-basis factory that can build a _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br (ChildPreBasisFactory\n+ &&childPreBasisFactory)\n+\u00a0 Create a factory builder that can build a _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: interpolate.hh Source File\n+dune-functions: powerbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,294 +74,197 @@\n \n \n
    \n
    \n-
    interpolate.hh
    \n+
    powerbasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n
    9
    \n-
    10#include <memory>
    \n-
    11#include <vector>
    \n-
    12
    \n-
    13#include <dune/common/exceptions.hh>
    \n-
    14#include <dune/common/bitsetvector.hh>
    \n-
    15#include <dune/common/referencehelper.hh>
    \n-
    16
    \n-
    17#include <dune/typetree/traversal.hh>
    \n-
    18
    \n-\n-\n-
    21
    \n-\n-\n-\n-\n-
    26
    \n-
    27namespace Dune {
    \n-
    28namespace Functions {
    \n-
    29
    \n-
    30namespace Imp {
    \n-
    31
    \n-
    32struct AllTrueBitSetVector
    \n-
    33{
    \n-
    34 struct AllTrueBitSet
    \n-
    35 {
    \n-
    36 bool test(int) const { return true; }
    \n-
    37 } allTrue_;
    \n+
    10#include <dune/common/reservedvector.hh>
    \n+
    11#include <dune/common/typeutilities.hh>
    \n+
    12#include <dune/common/indices.hh>
    \n+
    13
    \n+\n+\n+\n+\n+\n+\n+\n+\n+
    22
    \n+
    23
    \n+
    24
    \n+
    25namespace Dune {
    \n+
    26namespace Functions {
    \n+
    27
    \n+
    28
    \n+
    29// *****************************************************************************
    \n+
    30// This is the reusable part of the power bases. It contains
    \n+
    31//
    \n+
    32// PowerPreBasis
    \n+
    33//
    \n+
    34// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    35// state. These components do _not_ depend on the global basis and local view
    \n+
    36// and can be used without a global basis.
    \n+
    37// *****************************************************************************
    \n
    38
    \n-
    39 operator bool() const
    \n-
    40 {
    \n-
    41 return true;
    \n-
    42 }
    \n-
    43
    \n-
    44 template<class I>
    \n-
    45 const AllTrueBitSetVector& operator[](const I&) const
    \n-
    46 {
    \n-
    47 return *this;
    \n-
    48 }
    \n-
    49
    \n-
    50 template<class SP>
    \n-
    51 void resize(const SP&) const
    \n-
    52 {}
    \n-
    53
    \n-
    54};
    \n-
    55
    \n+
    49template<class IMS, class SPB, std::size_t C>
    \n+
    \n+\n+
    51 public DynamicPowerPreBasis<IMS,SPB>
    \n+
    52{
    \n+\n+
    54
    \n+
    55public:
    \n
    56
    \n-
    57
    \n-
    58// This helper function implements the restriction of some given function of type F.
    \n-
    59// The restriction is a simple callback that is applied to the values of the
    \n-
    60// function and the values of its derivative.
    \n-
    61template<class F, class Restriction>
    \n-
    62class ComponentFunction
    \n-
    63{
    \n-
    64public:
    \n+
    58 using SubPreBasis = SPB;
    \n+
    59
    \n+\n+
    62
    \n+
    64 using size_type = typename Base::size_type;
    \n
    65
    \n-
    66 ComponentFunction(F f, Restriction restriction) :
    \n-
    67 f_(std::move(f)),
    \n-
    68 restriction_(std::move(restriction))
    \n-
    69 {}
    \n-
    70
    \n-
    71 template<class Domain>
    \n-
    72 auto operator()(const Domain& x) const
    \n-
    73 {
    \n-
    74 return restriction_(f_(x));
    \n-
    75 }
    \n-
    76
    \n-
    77 friend auto derivative(const ComponentFunction& cf)
    \n-
    78 {
    \n-
    79 // This provides support for capturing the derivative of the function by reference
    \n-
    80 // using forwardCapture for perfect forwarding capture. If the function caches its
    \n-
    81 // derivative, this saves a potentially costly copy.
    \n-
    82 auto&& df = derivative(Dune::resolveRef(cf.f_));
    \n-
    83 return [&, df=forwardCapture(std::forward<decltype(df)>(df))](auto&& x) {
    \n-
    84 return cf.restriction_(df.forward()(x));
    \n-
    85 };
    \n-
    86 }
    \n-
    87
    \n-
    88private:
    \n-
    89 F f_;
    \n-
    90 Restriction restriction_;
    \n-
    91};
    \n-
    92
    \n-
    93
    \n+\n+
    68
    \n+
    70 inline static constexpr std::integral_constant<std::size_t,C> children = {};
    \n+
    71
    \n+
    77 template<class... SFArgs,
    \n+
    78 disableCopyMove<PowerPreBasis, SFArgs...> = 0,
    \n+
    79 enableIfConstructible<SubPreBasis, SFArgs...> = 0>
    \n+
    \n+
    80 explicit PowerPreBasis(SFArgs&&... sfArgs) :
    \n+
    81 Base(std::size_t(C), std::forward<SFArgs>(sfArgs)...)
    \n+
    82 {}
    \n+
    \n+
    83
    \n+
    \n+
    87 Node makeNode() const
    \n+
    88 {
    \n+
    89 Node node{};
    \n+
    90 for (std::size_t i=0; i<children(); ++i)
    \n+
    91 node.setChild(i, Base::subPreBasis_.makeNode());
    \n+
    92 return node;
    \n+
    93 }
    \n+
    \n
    94
    \n-
    95
    \n-
    96// This helper function implements caching of the derivative for local functions.
    \n-
    97// When using an algorithm that gets a LocalFunction and calls its derivative
    \n-
    98// on each element, this leads to a costly call of derivative(f). E.g. for a
    \n-
    99// DiscreteGlobalBasisFunction, this will allocate several buffer.
    \n-
    100// To avoid this, this helper function caches the derivative and hands
    \n-
    101// out the cached derivative by reference. To ensure that the handed out
    \n-
    102// derivative is appropriately bound, binding the function will automatically
    \n-
    103// bind the cached derivative.
    \n-
    104//
    \n-
    105// Notice that we cannot simply create the derivative in the constructor,
    \n-
    106// because this may throw for functions that do not implement the derivative.
    \n-
    107template<class F>
    \n-
    108class CachedDerivativeLocalFunction
    \n-
    109{
    \n-
    110 using Derivative = std::decay_t<decltype(derivative(Dune::resolveRef(std::declval<const F&>())))>;
    \n-
    111
    \n-
    112public:
    \n-
    113
    \n-
    114 CachedDerivativeLocalFunction(F f) :
    \n-
    115 f_(f)
    \n-
    116 {}
    \n-
    117
    \n-
    118 template<class Element>
    \n-
    119 void bind(const Element& element)
    \n-
    120 {
    \n-
    121 Dune::resolveRef(f_).bind(element);
    \n-
    122 if (derivative_)
    \n-
    123 derivative_.value().bind(element);
    \n-
    124 }
    \n-
    125
    \n-
    126 template<class X>
    \n-
    127 auto operator()(const X& x) const
    \n-
    128 {
    \n-
    129 return f_(x);
    \n-
    130 }
    \n-
    131
    \n-
    132 friend const Derivative& derivative(const CachedDerivativeLocalFunction& cdlf)
    \n-
    133 {
    \n-
    134 if (not cdlf.derivative_)
    \n-
    135 {
    \n-
    136 auto&& lf = Dune::resolveRef(cdlf.f_);
    \n-
    137 cdlf.derivative_ = derivative(lf);
    \n-
    138 if (lf.bound())
    \n-
    139 cdlf.derivative_.value().bind(lf.localContext());
    \n-
    140 }
    \n-
    141 return cdlf.derivative_.value();
    \n-
    142 }
    \n-
    143
    \n-
    144private:
    \n-
    145 F f_;
    \n-
    146 mutable std::optional<Derivative> derivative_;
    \n-
    147};
    \n-
    148
    \n-
    149
    \n-
    150
    \n-
    151template<class VectorBackend, class BitVectorBackend, class LocalFunction, class LocalView, class NodeToRangeEntry>
    \n-
    152void interpolateLocal(VectorBackend& vector, const BitVectorBackend& bitVector, const LocalFunction& localF, const LocalView& localView, const NodeToRangeEntry& nodeToRangeEntry)
    \n-
    153{
    \n-
    154 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& treePath) {
    \n-
    155 using Node = std::decay_t<decltype(node)>;
    \n-
    156 using FiniteElement = typename Node::FiniteElement;
    \n-
    157 using FiniteElementRangeField = typename FiniteElement::Traits::LocalBasisType::Traits::RangeFieldType;
    \n-
    158
    \n-
    159 auto interpolationCoefficients = std::vector<FiniteElementRangeField>();
    \n-
    160 auto&& fe = node.finiteElement();
    \n-
    161 auto localF_RE = ComponentFunction(std::cref(localF), [&](auto&& y) { return nodeToRangeEntry(node, treePath, y); });
    \n-
    162
    \n-
    163 fe.localInterpolation().interpolate(localF_RE, interpolationCoefficients);
    \n-
    164 for (size_t i=0; i<fe.localBasis().size(); ++i)
    \n-
    165 {
    \n-
    166 auto multiIndex = localView.index(node.localIndex(i));
    \n-
    167 if ( bitVector[multiIndex] )
    \n-
    168 vector[multiIndex] = interpolationCoefficients[i];
    \n-
    169 }
    \n-
    170 });
    \n-
    171}
    \n-
    172
    \n+
    \n+\n+
    97 {
    \n+
    98 return size(Dune::ReservedVector<size_type, Base::multiIndexBufferSize>{});
    \n+
    99 }
    \n+
    \n+
    100
    \n+
    102 template<class SizePrefix>
    \n+
    \n+
    103 size_type size(const SizePrefix& prefix) const
    \n+
    104 {
    \n+\n+
    106 }
    \n+
    \n+
    107
    \n+
    109 template<class NodeType, typename It,
    \n+
    110 std::enable_if_t<NodeType::isPower, int> = 0>
    \n+
    \n+
    111 It indices(const NodeType& node, It it) const
    \n+
    112 {
    \n+\n+
    114 }
    \n+
    \n+
    115
    \n+
    \n+\n+
    118 {
    \n+\n+
    120 }
    \n+
    \n+
    121};
    \n+
    \n+
    122
    \n+
    123
    \n+
    124
    \n+
    125namespace BasisFactory {
    \n+
    126
    \n+
    139template<std::size_t k, class ChildPreBasisFactory, class IndexMergingStrategy>
    \n+
    \n+
    140auto power(ChildPreBasisFactory&& childPreBasisFactory, const IndexMergingStrategy&)
    \n+
    141{
    \n+
    142 return [childPreBasisFactory](const auto& gridView) {
    \n+
    143 auto childPreBasis = childPreBasisFactory(gridView);
    \n+\n+
    145 };
    \n+
    146}
    \n+
    \n+
    147
    \n+
    158template<std::size_t k, class ChildPreBasisFactory>
    \n+
    \n+
    159auto power(ChildPreBasisFactory&& childPreBasisFactory)
    \n+
    160{
    \n+
    161 return [childPreBasisFactory](const auto& gridView) {
    \n+
    162 auto childPreBasis = childPreBasisFactory(gridView);
    \n+\n+
    164 };
    \n+
    165}
    \n+
    \n+
    166
    \n+
    167} // end namespace BasisFactory
    \n+
    168
    \n+
    169// Backward compatibility
    \n+
    170namespace [[deprecated("Will be removed after Dune 2.10")]] BasisBuilder {
    \n+
    171
    \n+
    172 using namespace BasisFactory;
    \n
    173
    \n-
    174struct HasDerivative
    \n-
    175{
    \n-
    176 template<class F>
    \n-
    177 auto require(F&& f) -> decltype(derivative(f));
    \n-
    178};
    \n+
    174}
    \n+
    175
    \n+
    176
    \n+
    177} // end namespace Functions
    \n+
    178} // end namespace Dune
    \n
    179
    \n-
    180} // namespace Imp
    \n-
    181
    \n-
    182
    \n-
    183
    \n-
    184
    \n-
    202template <class B, class C, class F, class BV, class NTRE>
    \n-
    \n-
    203void interpolate(const B& basis, C&& coeff, const F& f, const BV& bv, const NTRE& nodeToRangeEntry)
    \n-
    204{
    \n-
    205 using GridView = typename B::GridView;
    \n-
    206 using Element = typename GridView::template Codim<0>::Entity;
    \n-
    207 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;
    \n-
    208
    \n-
    209 static_assert(Dune::Functions::Concept::isCallable<F, GlobalDomain>(), "Function passed to interpolate does not model the Callable<GlobalCoordinate> concept");
    \n-
    210
    \n-
    211 auto&& gridView = basis.gridView();
    \n-
    212
    \n-
    213 // Small helper functions to wrap vectors using istlVectorBackend
    \n-
    214 // if they do not already satisfy the VectorBackend interface.
    \n-
    215 auto toVectorBackend = [&](auto& v) -> decltype(auto) {
    \n-
    216 if constexpr (models<Concept::VectorBackend<B>, decltype(v)>()) {
    \n-
    217 return v;
    \n-
    218 } else {
    \n-
    219 return istlVectorBackend(v);
    \n-
    220 }
    \n-
    221 };
    \n-
    222
    \n-
    223 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {
    \n-
    224 if constexpr (models<Concept::ConstVectorBackend<B>, decltype(v)>()) {
    \n-
    225 return v;
    \n-
    226 } else {
    \n-
    227 return istlVectorBackend(v);
    \n-
    228 }
    \n-
    229 };
    \n-
    230
    \n-
    231 auto&& bitVector = toConstVectorBackend(bv);
    \n-
    232 auto&& vector = toVectorBackend(coeff);
    \n-
    233 vector.resize(basis);
    \n-
    234
    \n-
    235 // Make a grid function supporting local evaluation out of f
    \n-
    236 auto gf = makeGridViewFunction(f, gridView);
    \n-
    237
    \n-
    238 // Obtain a local view of f
    \n-
    239 // To avoid costly reconstruction of the derivative on each element,
    \n-
    240 // we use the CachedDerivativeLocalFunction wrapper if the function
    \n-
    241 // is differentiable. This wrapper will handout
    \n-
    242 // a reference to a single cached derivative object.
    \n-
    243 auto localF = [&](){
    \n-
    244 if constexpr (models<Imp::HasDerivative, decltype(localFunction(gf))>())
    \n-
    245 return Imp::CachedDerivativeLocalFunction(localFunction(gf));
    \n-
    246 else
    \n-
    247 return localFunction(gf);
    \n-
    248 }();
    \n-
    249
    \n-
    250 auto localView = basis.localView();
    \n-
    251
    \n-
    252 for (const auto& e : elements(gridView))
    \n-
    253 {
    \n-
    254 localView.bind(e);
    \n-
    255 localF.bind(e);
    \n-
    256 Imp::interpolateLocal(vector, bitVector, localF, localView, nodeToRangeEntry);
    \n-
    257 }
    \n-
    258}
    \n-
    \n-
    259
    \n-
    276template <class B, class C, class F, class BV>
    \n-
    \n-
    277void interpolate(const B& basis, C&& coeff, const F& f, const BV& bitVector)
    \n-
    278{
    \n-
    279 interpolate(basis, coeff, f, bitVector, HierarchicNodeToRangeMap());
    \n-
    280}
    \n-
    \n-
    281
    \n-
    296template <class B, class C, class F>
    \n-
    \n-
    297void interpolate(const B& basis, C&& coeff, const F& f)
    \n-
    298{
    \n-
    299 interpolate (basis, coeff, f, Imp::AllTrueBitSetVector(), HierarchicNodeToRangeMap());
    \n-
    300}
    \n-
    \n-
    301
    \n-
    302} // namespace Functions
    \n-
    303} // namespace Dune
    \n-
    304
    \n-
    305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n-\n-\n-\n-\n-\n-
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n-
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:350
    \n+
    180
    \n+
    181#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n+\n+\n+\n+\n+\n+\n+\n+
    auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
    Create a pre-basis factory that can build a PowerPreBasis.
    Definition dynamicpowerbasis.hh:409
    \n+
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n
    Definition polynomial.hh:17
    \n-
    void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)
    Interpolate given function in discrete function space.
    Definition interpolate.hh:203
    \n-
    std::decay_t< F > makeGridViewFunction(F &&f, const GridView &gridView)
    Construct a function modeling GridViewFunction from function and grid view.
    Definition gridviewfunction.hh:72
    \n-
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:376
    \n-
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:34
    \n-\n+
    Base class for index merging strategies to simplify detection.
    Definition basistags.hh:48
    \n+
    A pre-basis for dynamic power bases.
    Definition dynamicpowerbasis.hh:48
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition dynamicpowerbasis.hh:60
    \n+
    auto containerDescriptorImpl(Children children) const
    Definition dynamicpowerbasis.hh:372
    \n+
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatInterleaved) const
    Definition dynamicpowerbasis.hh:137
    \n+
    SubPreBasis subPreBasis_
    Definition dynamicpowerbasis.hh:389
    \n+
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::FlatInterleaved) const
    Definition dynamicpowerbasis.hh:262
    \n+
    Definition nodes.hh:198
    \n+
    A pre-basis for power bases.
    Definition powerbasis.hh:52
    \n+
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child factories.
    Definition powerbasis.hh:67
    \n+
    typename Base::size_type size_type
    Type used for indices and size information.
    Definition powerbasis.hh:64
    \n+
    SPB SubPreBasis
    The child pre-basis.
    Definition powerbasis.hh:58
    \n+
    auto containerDescriptor() const
    Return the associated container descriptor.
    Definition powerbasis.hh:117
    \n+
    It indices(const NodeType &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition powerbasis.hh:111
    \n+
    PowerPreBasis(SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects for static size of the power-basis.
    Definition powerbasis.hh:80
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition powerbasis.hh:96
    \n+
    Node makeNode() const
    Create tree node.
    Definition powerbasis.hh:87
    \n+
    static constexpr std::integral_constant< std::size_t, C > children
    Number of children provided as an integral constant.
    Definition powerbasis.hh:70
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition powerbasis.hh:103
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,323 +1,243 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-interpolate.hh\n+powerbasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n 9\n-10#include \n-11#include \n-12\n-13#include \n-14#include \n-15#include \n-16\n-17#include \n-18\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-21\n-22#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs_\b/_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh>\n-24#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\b._\bh_\bh>\n-25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bn_\bo_\bd_\be_\bt_\bo_\br_\ba_\bn_\bg_\be_\bm_\ba_\bp_\b._\bh_\bh>\n-26\n-27namespace _\bD_\bu_\bn_\be {\n-28namespace Functions {\n-29\n-30namespace Imp {\n-31\n-32struct AllTrueBitSetVector\n-33{\n-34 struct AllTrueBitSet\n-35 {\n-36 bool test(int) const { return true; }\n-37 } allTrue_;\n+10#include \n+11#include \n+12#include \n+13\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\by_\bn_\ba_\bm_\bi_\bc_\bp_\bo_\bw_\be_\br_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+22\n+23\n+24\n+25namespace _\bD_\bu_\bn_\be {\n+26namespace Functions {\n+27\n+28\n+29/\n+/ *****************************************************************************\n+30// This is the reusable part of the power bases. It contains\n+31//\n+32// PowerPreBasis\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 view\n+36// and can be used without a global basis.\n+37/\n+/ *****************************************************************************\n 38\n-39 operator bool() const\n-40 {\n-41 return true;\n-42 }\n-43\n-44 template\n-45 const AllTrueBitSetVector& operator[](const I&) const\n-46 {\n-47 return *this;\n-48 }\n-49\n-50 template\n-51 void resize(const SP&) const\n-52 {}\n-53\n-54};\n-55\n+49template\n+_\b5_\b0class _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n+51 public _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+52{\n+53 using _\bB_\ba_\bs_\be = _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bI_\bM_\bS_\b,_\bS_\bP_\bB_\b>;\n+54\n+55public:\n 56\n-57\n-58// This helper function implements the restriction of some given function of\n-type F.\n-59// The restriction is a simple callback that is applied to the values of the\n-60// function and the values of its derivative.\n-61template\n-62class ComponentFunction\n-63{\n-64public:\n+_\b5_\b8 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = SPB;\n+59\n+_\b6_\b1 using _\bN_\bo_\bd_\be = _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\bo_\bd_\be_\b,_\b _\bC_\b>;\n+62\n+_\b6_\b4 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = typename _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n 65\n-66 ComponentFunction(F f, Restriction restriction) :\n-67 f_(std::move(f)),\n-68 restriction_(std::move(restriction))\n-69 {}\n-70\n-71 template\n-72 auto operator()(const Domain& x) const\n-73 {\n-74 return restriction_(f_(x));\n-75 }\n-76\n-77 friend auto _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const ComponentFunction& cf)\n-78 {\n-79 // This provides support for capturing the derivative of the function by\n-reference\n-80 // using forwardCapture for perfect forwarding capture. If the function\n-caches its\n-81 // derivative, this saves a potentially costly copy.\n-82 auto&& df = _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(Dune::resolveRef(cf.f_));\n-83 return [&, df=_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(std::forward(df))](auto&& x) {\n-84 return cf.restriction_(df.forward()(x));\n-85 };\n-86 }\n-87\n-88private:\n-89 F f_;\n-90 Restriction restriction_;\n-91};\n-92\n-93\n+_\b6_\b7 using _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n+68\n+_\b7_\b0 inline static constexpr std::integral_constant _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn = {};\n+71\n+77 template = 0,\n+79 _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be<_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, SFArgs...> = 0>\n+_\b8_\b0 explicit _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(SFArgs&&... sfArgs) :\n+81 _\bB_\ba_\bs_\be(std::size_t(C), std::forward(sfArgs)...)\n+82 {}\n+83\n+_\b8_\b7 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+88 {\n+89 _\bN_\bo_\bd_\be node{};\n+90 for (std::size_t i=0; i<_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn(); ++i)\n+91 node.setChild(i, _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.makeNode());\n+92 return node;\n+93 }\n 94\n-95\n-96// This helper function implements caching of the derivative for local\n-functions.\n-97// When using an algorithm that gets a LocalFunction and calls its derivative\n-98// on each element, this leads to a costly call of derivative(f). E.g. for a\n-99// DiscreteGlobalBasisFunction, this will allocate several buffer.\n-100// To avoid this, this helper function caches the derivative and hands\n-101// out the cached derivative by reference. To ensure that the handed out\n-102// derivative is appropriately bound, binding the function will\n-automatically\n-103// bind the cached derivative.\n-104//\n-105// Notice that we cannot simply create the derivative in the constructor,\n-106// because this may throw for functions that do not implement the\n-derivative.\n-107template\n-108class CachedDerivativeLocalFunction\n-109{\n-110 using Derivative = std::decay_t())))>;\n-111\n-112public:\n-113\n-114 CachedDerivativeLocalFunction(F f) :\n-115 f_(f)\n-116 {}\n-117\n-118 template\n-119 void bind(const Element& element)\n-120 {\n-121 Dune::resolveRef(f_).bind(element);\n-122 if (derivative_)\n-123 derivative_.value().bind(element);\n-124 }\n-125\n-126 template\n-127 auto operator()(const X& x) const\n-128 {\n-129 return f_(x);\n-130 }\n-131\n-132 friend const Derivative& _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const CachedDerivativeLocalFunction&\n-cdlf)\n-133 {\n-134 if (not cdlf.derivative_)\n-135 {\n-136 auto&& lf = Dune::resolveRef(cdlf.f_);\n-137 cdlf.derivative_ = _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(lf);\n-138 if (lf.bound())\n-139 cdlf.derivative_.value().bind(lf.localContext());\n-140 }\n-141 return cdlf.derivative_.value();\n-142 }\n-143\n-144private:\n-145 F f_;\n-146 mutable std::optional derivative_;\n-147};\n-148\n-149\n-150\n-151template\n-152void interpolateLocal(VectorBackend& vector, const BitVectorBackend&\n-bitVector, const LocalFunction& localF, const LocalView& localView, const\n-NodeToRangeEntry& nodeToRangeEntry)\n-153{\n-154 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&&\n-treePath) {\n-155 using Node = std::decay_t;\n-156 using FiniteElement = typename Node::FiniteElement;\n-157 using FiniteElementRangeField = typename FiniteElement::Traits::\n-LocalBasisType::Traits::RangeFieldType;\n-158\n-159 auto interpolationCoefficients = std::vector();\n-160 auto&& fe = node.finiteElement();\n-161 auto localF_RE = ComponentFunction(std::cref(localF), [&](auto&& y)\n-{ return nodeToRangeEntry(node, treePath, y); });\n-162\n-163 fe.localInterpolation().interpolate(localF_RE, interpolationCoefficients);\n-164 for (size_t i=0; i{});\n+99 }\n+100\n+102 template\n+_\b1_\b0_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+104 {\n+105 return _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(prefix, _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n+106 }\n+107\n+109 template = 0>\n+_\b1_\b1_\b1 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const NodeType& node, It it) const\n+112 {\n+113 return _\bB_\ba_\bs_\be_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(node, it, _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n+114 }\n+115\n+_\b1_\b1_\b7 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n+118 {\n+119 return _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn);\n+120 }\n+121};\n+122\n+123\n+124\n+125namespace BasisFactory {\n+126\n+139template\n+_\b1_\b4_\b0auto _\bp_\bo_\bw_\be_\br(ChildPreBasisFactory&& childPreBasisFactory, const\n+_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by&)\n+141{\n+142 return [childPreBasisFactory](const auto& gridView) {\n+143 auto childPreBasis = childPreBasisFactory(gridView);\n+144 return _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by_\b,_\b _\bd_\be_\bc_\bl_\bt_\by_\bp_\be_\b(_\bc_\bh_\bi_\bl_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b)_\b,_\b _\bk_\b>\n+(std::move(childPreBasis));\n+145 };\n+146}\n+147\n+158template\n+_\b1_\b5_\b9auto _\bp_\bo_\bw_\be_\br(ChildPreBasisFactory&& childPreBasisFactory)\n+160{\n+161 return [childPreBasisFactory](const auto& gridView) {\n+162 auto childPreBasis = childPreBasisFactory(gridView);\n+163 return _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd_\b,_\b _\bd_\be_\bc_\bl_\bt_\by_\bp_\be_\b(_\bc_\bh_\bi_\bl_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b)_\b,_\b _\bk_\b>(std::\n+move(childPreBasis));\n+164 };\n+165}\n+166\n+167} // end namespace BasisFactory\n+168\n+169// Backward compatibility\n+170namespace [[deprecated(\"Will be removed after Dune 2.10\")]] BasisBuilder {\n+171\n+172 using namespace BasisFactory;\n 173\n-174struct HasDerivative\n-175{\n-176 template\n-177 auto require(F&& f) -> decltype(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f));\n-178};\n+174}\n+175\n+176\n+177} // end namespace Functions\n+178} // end namespace Dune\n 179\n-180} // namespace Imp\n-181\n-182\n-183\n-184\n-202template \n-_\b2_\b0_\b3void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f, const BV& bv, const\n-NTRE& nodeToRangeEntry)\n-204{\n-205 using GridView = typename B::GridView;\n-206 using Element = typename GridView::template Codim<0>::Entity;\n-207 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n-208\n-209 static_assert(Dune::Functions::Concept::isCallable(),\n-\"Function passed to interpolate does not model the Callable\n-concept\");\n-210\n-211 auto&& gridView = basis.gridView();\n-212\n-213 // Small helper functions to wrap vectors using istlVectorBackend\n-214 // if they do not already satisfy the VectorBackend interface.\n-215 auto toVectorBackend = [&](auto& v) -> decltype(auto) {\n-216 if constexpr (models, decltype(v)>()) {\n-217 return v;\n-218 } else {\n-219 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n-220 }\n-221 };\n-222\n-223 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {\n-224 if constexpr (models, decltype(v)>()) {\n-225 return v;\n-226 } else {\n-227 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n-228 }\n-229 };\n-230\n-231 auto&& bitVector = toConstVectorBackend(bv);\n-232 auto&& vector = toVectorBackend(coeff);\n-233 vector.resize(basis);\n-234\n-235 // Make a grid function supporting local evaluation out of f\n-236 auto gf = _\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(f, gridView);\n-237\n-238 // Obtain a local view of f\n-239 // To avoid costly reconstruction of the derivative on each element,\n-240 // we use the CachedDerivativeLocalFunction wrapper if the function\n-241 // is differentiable. This wrapper will handout\n-242 // a reference to a single cached derivative object.\n-243 auto localF = [&](){\n-244 if constexpr (models())\n-245 return Imp::CachedDerivativeLocalFunction(localFunction(gf));\n-246 else\n-247 return localFunction(gf);\n-248 }();\n-249\n-250 auto localView = basis.localView();\n-251\n-252 for (const auto& e : elements(gridView))\n-253 {\n-254 localView.bind(e);\n-255 localF.bind(e);\n-256 Imp::interpolateLocal(vector, bitVector, localF, localView,\n-nodeToRangeEntry);\n-257 }\n-258}\n-259\n-276template \n-_\b2_\b7_\b7void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f, const BV& bitVector)\n-278{\n-279 _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(basis, coeff, f, bitVector, _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp());\n-280}\n-281\n-296template \n-_\b2_\b9_\b7void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f)\n-298{\n-299 _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (basis, coeff, f, Imp::AllTrueBitSetVector(),\n-_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp());\n-300}\n-301\n-302} // namespace Functions\n-303} // namespace Dune\n-304\n-305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n-_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh\n-_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n-_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\b._\bh_\bh\n-_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bn_\bo_\bd_\be_\bt_\bo_\br_\ba_\bn_\bg_\be_\bm_\ba_\bp_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n-TrigonometricFunction< K, sinFactor, cosFactor > &f)\n-Obtain derivative of TrigonometricFunction function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd\n-auto istlVectorBackend(Vector &v)\n-Return a vector backend wrapping non-const ISTL like containers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn istlvectorbackend.hh:350\n+180\n+181#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n+_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh\n+_\bd_\by_\bn_\ba_\bm_\bi_\bc_\bp_\bo_\bw_\be_\br_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br\n+auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const\n+IndexMergingStrategy &)\n+Create a pre-basis factory that can build a PowerPreBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:409\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be\n+std::enable_if_t< std::is_constructible_v< T, Args... >, int >\n+enableIfConstructible\n+Helper to constrain forwarding constructors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:31\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn interpolate.hh:203\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-std::decay_t< F > makeGridViewFunction(F &&f, const GridView &gridView)\n-Construct a function modeling GridViewFunction from function and grid view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewfunction.hh:72\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be\n-auto forwardCapture(T &&t)\n-Create a capture object for perfect forwarding.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:376\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n-A simple node to range map using the nested tree indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicnodetorangemap.hh:34\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+Base class for index merging strategies to simplify detection.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+A pre-basis for dynamic power bases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl\n+auto containerDescriptorImpl(Children children) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:372\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n+size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n+FlatInterleaved) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:137\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n+SubPreBasis subPreBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:389\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n+It indicesImpl(const NodeType &node, It multiIndices, Children children,\n+BasisFactory::FlatInterleaved) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:262\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:198\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+A pre-basis for power bases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+IMS IndexMergingStrategy\n+Strategy used to merge the global indices of the child factories.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+typename Base::size_type size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:64\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+SPB SubPreBasis\n+The child pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor() const\n+Return the associated container descriptor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:117\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n+It indices(const NodeType &node, It it) const\n+Maps from subtree index set [0..size-1] to a globally unique multi index in\n+global basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:111\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+PowerPreBasis(SFArgs &&... sfArgs)\n+Constructor for given child pre-basis objects for static size of the power-\n+basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:80\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:96\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:87\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n+static constexpr std::integral_constant< std::size_t, C > children\n+Number of children provided as an integral constant.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:70\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:103\n _\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: dynamicpowerbasis.hh File Reference\n+dune-functions: nodes.hh File Reference\n \n \n \n \n \n \n \n@@ -73,54 +73,60 @@\n
    \n \n
    \n \n-
    dynamicpowerbasis.hh File Reference
    \n+
    nodes.hh File Reference
    \n
    \n
    \n-
    #include <dune/common/reservedvector.hh>
    \n-#include <dune/common/typeutilities.hh>
    \n+
    #include <cassert>
    \n+#include <memory>
    \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/containerdescriptors.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n+#include <dune/typetree/leafnode.hh>
    \n+#include <dune/typetree/powernode.hh>
    \n+#include <dune/typetree/dynamicpowernode.hh>
    \n+#include <dune/typetree/compositenode.hh>
    \n+#include <dune/typetree/traversal.hh>
    \n+#include <dune/typetree/visitor.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::DynamicPowerPreBasis< IMS, SPB >
     A pre-basis for dynamic power bases. More...
    class  Dune::Functions::BasisNodeMixin
     
    class  Dune::Functions::LeafBasisNode
     
    class  Dune::Functions::PowerBasisNode< T, n >
     
    class  Dune::Functions::DynamicPowerBasisNode< T >
     
    class  Dune::Functions::CompositeBasisNode< T >
     
    \n \n \n \n \n \n-\n-\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class ChildPreBasisFactory , class IndexMergingStrategy >
    auto Dune::Functions::BasisFactory::power (ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
     Create a pre-basis factory that can build a PowerPreBasis.
     
    template<class ChildPreBasisFactory >
    auto Dune::Functions::BasisFactory::power (ChildPreBasisFactory &&childPreBasisFactory, std::size_t k)
     Create a factory builder that can build a PowerPreBasis.
     
    template<typename Tree >
    void Dune::Functions::clearSize (Tree &tree, std::size_t offset)
     
    template<typename Tree , typename Entity >
    void Dune::Functions::bindTree (Tree &tree, const Entity &entity, std::size_t offset=0)
     
    template<typename Tree >
    void Dune::Functions::initializeTree (Tree &tree, std::size_t treeIndexOffset=0)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,42 +2,48 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-dynamicpowerbasis.hh File Reference\n-#include \n-#include \n+nodes.hh File Reference\n+#include \n+#include \n #include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bI_\bM_\bS_\b,_\b _\bS_\bP_\bB_\b _\b>\n-\u00a0 A pre-basis for dynamic power bases. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\b _\bT_\b,_\b _\bn_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\b _\bT_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\b _\bT_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br (ChildPreBasisFactory\n- &&childPreBasisFactory, std::size_t k, const _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by &)\n-\u00a0 Create a pre-basis factory that can build a _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br (ChildPreBasisFactory\n- &&childPreBasisFactory, std::size_t k)\n-\u00a0 Create a factory builder that can build a _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs.\n+template\n+void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bl_\be_\ba_\br_\bS_\bi_\bz_\be (Tree &tree, std::size_t offset)\n+\u00a0\n+template\n+void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bb_\bi_\bn_\bd_\bT_\br_\be_\be (Tree &tree, const Entity &entity, std::size_t\n+ offset=0)\n+\u00a0\n+template\n+void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be (Tree &tree, std::size_t\n+ treeIndexOffset=0)\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: dynamicpowerbasis.hh Source File\n+dune-functions: nodes.hh Source File\n \n \n \n \n \n \n \n@@ -74,513 +74,400 @@\n \n \n
    \n
    \n-
    dynamicpowerbasis.hh
    \n+
    nodes.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n
    9
    \n-
    10#include <dune/common/reservedvector.hh>
    \n-
    11#include <dune/common/typeutilities.hh>
    \n-
    12#include <dune/common/indices.hh>
    \n-
    13
    \n-\n-\n-\n-\n-\n-\n-
    20
    \n+
    10#include <cassert>
    \n+
    11#include <memory>
    \n+
    12
    \n+
    13#include <dune/common/indices.hh>
    \n+
    14
    \n+
    15#include <dune/typetree/leafnode.hh>
    \n+
    16#include <dune/typetree/powernode.hh>
    \n+
    17#include <dune/typetree/dynamicpowernode.hh>
    \n+
    18#include <dune/typetree/compositenode.hh>
    \n+
    19#include <dune/typetree/traversal.hh>
    \n+
    20#include <dune/typetree/visitor.hh>
    \n
    21
    \n-
    22
    \n-
    23namespace Dune {
    \n-
    24namespace Functions {
    \n+
    22namespace Dune {
    \n+
    23 namespace Functions {
    \n+
    24
    \n
    25
    \n-
    26
    \n-
    27// *****************************************************************************
    \n-
    28// This is the reusable part of the dynamic power bases. It contains
    \n-
    29//
    \n-
    30// DynamicPowerPreBasis
    \n-
    31//
    \n-
    32// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    33// state. These components do _not_ depend on the global basis and local view
    \n-
    34// and can be used without a global basis.
    \n-
    35// *****************************************************************************
    \n-
    36
    \n-
    46template<class IMS, class SPB>
    \n-
    \n-\n-
    48{
    \n-
    49 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;
    \n+
    26 namespace Impl {
    \n+
    27
    \n+
    28
    \n+
    29 struct ClearSizeVisitor
    \n+
    30 : public TypeTree::TreeVisitor
    \n+
    31 , public TypeTree::DynamicTraversal
    \n+
    32 {
    \n+
    33
    \n+
    34 template<typename Node, typename TreePath>
    \n+
    35 void pre(Node& node, TreePath treePath)
    \n+
    36 {
    \n+
    37 leaf(node,treePath);
    \n+
    38 node.setSize(0);
    \n+
    39 }
    \n+
    40
    \n+
    41 template<typename Node, typename TreePath>
    \n+
    42 void leaf(Node& node, TreePath treePath)
    \n+
    43 {
    \n+
    44 node.setOffset(offset_);
    \n+
    45 }
    \n+
    46
    \n+
    47 ClearSizeVisitor(std::size_t offset)
    \n+
    48 : offset_(offset)
    \n+
    49 {}
    \n
    50
    \n-
    51public:
    \n+
    51 const std::size_t offset_;
    \n
    52
    \n-
    54 using SubPreBasis = SPB;
    \n+
    53 };
    \n+
    54
    \n
    55
    \n-
    57 using GridView = typename SPB::GridView;
    \n-
    58
    \n-
    60 using size_type = std::size_t;
    \n+
    56 template<typename Entity>
    \n+
    57 struct BindVisitor
    \n+
    58 : public TypeTree::TreeVisitor
    \n+
    59 , public TypeTree::DynamicTraversal
    \n+
    60 {
    \n
    61
    \n-\n-
    64
    \n-\n+
    62 template<typename Node, typename TreePath>
    \n+
    63 void pre(Node& node, TreePath)
    \n+
    64 {
    \n+
    65 node.setOffset(offset_);
    \n+
    66 }
    \n
    67
    \n-
    68 static constexpr size_type maxMultiIndexSize = SubPreBasis::maxMultiIndexSize + isBlocked;
    \n-
    69 static constexpr size_type minMultiIndexSize = SubPreBasis::minMultiIndexSize + isBlocked;
    \n-
    70 static constexpr size_type multiIndexBufferSize = SubPreBasis::multiIndexBufferSize + isBlocked;
    \n-
    71
    \n-
    77 template<class... SFArgs,
    \n-
    78 disableCopyMove<DynamicPowerPreBasis, SFArgs...> = 0,
    \n-
    79 enableIfConstructible<SubPreBasis, SFArgs...> = 0>
    \n-
    \n-
    80 explicit DynamicPowerPreBasis(std::size_t c, SFArgs&&... sfArgs) :
    \n-
    81 children_(c),
    \n-
    82 subPreBasis_(std::forward<SFArgs>(sfArgs)...)
    \n-
    83 {
    \n-
    84 static_assert(models<Concept::PreBasis<GridView>, SubPreBasis>(), "Subprebasis passed to DynamicPowerPreBasis does not model the PreBasis concept.");
    \n-
    85 }
    \n-
    \n+
    68 template<typename Node, typename TreePath>
    \n+
    69 void post(Node& node, TreePath)
    \n+
    70 {
    \n+
    71 node.setSize(offset_ - node.offset());
    \n+
    72 }
    \n+
    73
    \n+
    74 template<typename Node, typename TreePath>
    \n+
    75 void leaf(Node& node, TreePath)
    \n+
    76 {
    \n+
    77 node.setOffset(offset_);
    \n+
    78 node.bind(entity_);
    \n+
    79 offset_ += node.size();
    \n+
    80 }
    \n+
    81
    \n+
    82 BindVisitor(const Entity& entity, std::size_t offset = 0)
    \n+
    83 : entity_(entity)
    \n+
    84 , offset_(offset)
    \n+
    85 {}
    \n
    86
    \n-
    \n-\n-
    89 {
    \n-
    90 subPreBasis_.initializeIndices();
    \n-
    91 }
    \n-
    \n+
    87 const Entity& entity_;
    \n+
    88 std::size_t offset_;
    \n+
    89
    \n+
    90 };
    \n+
    91
    \n
    92
    \n-
    \n-
    94 const GridView& gridView() const
    \n-
    95 {
    \n-
    96 return subPreBasis_.gridView();
    \n-
    97 }
    \n-
    \n-
    98
    \n-
    \n-
    100 void update(const GridView& gv)
    \n-
    101 {
    \n-
    102 subPreBasis_.update(gv);
    \n-
    103 }
    \n-
    \n-
    104
    \n-
    \n-\n-
    109 {
    \n-
    110 auto node = Node{children_};
    \n-
    111 for (std::size_t i=0; i<children_; ++i)
    \n-
    112 node.setChild(i, subPreBasis_.makeNode());
    \n-
    113 return node;
    \n-
    114 }
    \n-
    \n-
    115
    \n-
    \n-
    116 std::size_t children() const
    \n-
    117 {
    \n-
    118 return children_;
    \n-
    119 }
    \n-
    \n+
    93 struct InitializeTreeVisitor :
    \n+
    94 public TypeTree::TreeVisitor,
    \n+
    95 public TypeTree::DynamicTraversal
    \n+
    96 {
    \n+
    97 template<typename Node, typename TreePath>
    \n+
    98 void pre(Node& node, TreePath)
    \n+
    99 {
    \n+
    100 node.setTreeIndex(treeIndex_);
    \n+
    101 ++treeIndex_;
    \n+
    102 }
    \n+
    103
    \n+
    104 template<typename Node, typename TreePath>
    \n+
    105 void leaf(Node& node, TreePath)
    \n+
    106 {
    \n+
    107 node.setTreeIndex(treeIndex_);
    \n+
    108 ++treeIndex_;
    \n+
    109 }
    \n+
    110
    \n+
    111 InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :
    \n+
    112 treeIndex_(treeIndexOffset)
    \n+
    113 {}
    \n+
    114
    \n+
    115 std::size_t treeIndex_;
    \n+
    116 };
    \n+
    117
    \n+
    118 } // end namespace Impl
    \n+
    119
    \n
    120
    \n-
    \n-\n-
    123 {
    \n-
    124 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    128 template<class SizePrefix>
    \n-
    \n-
    129 size_type size(const SizePrefix& prefix) const
    \n-
    130 {
    \n-
    131 return sizeImpl(prefix, children_, IndexMergingStrategy{});
    \n-
    132 }
    \n-
    \n-
    133
    \n-
    134protected:
    \n-
    135
    \n-
    136 template<class SizePrefix, class Children>
    \n-
    \n-
    137 size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatInterleaved) const
    \n-
    138 {
    \n-
    139 // The root index size is the root index size of a single subnode
    \n-
    140 // multiplied by the number of subnodes, because we enumerate all
    \n-
    141 // child indices in a row.
    \n-
    142 if (prefix.size() == 0)
    \n-
    143 return children*subPreBasis_.size();
    \n-
    144
    \n-
    145 // The FlatInterleaved index merging strategy only changes the first
    \n-
    146 // index digit. Hence, we have to reconstruct the corresponding digit
    \n-
    147 // for the subtree and can then return the corresponding size of the subtree.
    \n-
    148 prefix[0] = prefix[0] / children;
    \n-
    149 return subPreBasis_.size(prefix);
    \n-
    150 }
    \n+
    \n+\n+
    122 {
    \n+
    123
    \n+
    124 friend struct Impl::ClearSizeVisitor;
    \n+
    125
    \n+
    126 template<typename>
    \n+
    127 friend struct Impl::BindVisitor;
    \n+
    128
    \n+
    129 friend struct Impl::InitializeTreeVisitor;
    \n+
    130
    \n+
    131 public:
    \n+
    132
    \n+
    133 using size_type = std::size_t;
    \n+
    134
    \n+
    \n+\n+
    136 offset_(0),
    \n+
    137 size_(0),
    \n+
    138 treeIndex_(0)
    \n+
    139 {}
    \n+
    \n+
    140
    \n+
    \n+\n+
    142 {
    \n+
    143 assert(i < size_);
    \n+
    144 return offset_ + i;
    \n+
    145 }
    \n+
    \n+
    146
    \n+
    \n+\n+
    148 {
    \n+
    149 return size_;
    \n+
    150 }
    \n
    \n
    151
    \n-
    152 template<class SizePrefix, class Children>
    \n-
    \n-
    153 size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatLexicographic) 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. Then 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
    \n-
    167 // The FlatLexicographic index merging strategy only changes the first
    \n-
    168 // index digit. Hence, we have to reconstruct the corresponding digit
    \n-
    169 // for the subtree and can then return the corresponding size of the subtree.
    \n-
    170 prefix[0] = prefix[0] % subPreBasis_.size();
    \n-
    171 return subPreBasis_.size(prefix);
    \n-
    172 }
    \n+
    \n+\n+
    153 {
    \n+
    154 return treeIndex_;
    \n+
    155 }
    \n+
    \n+
    156
    \n+
    157 protected:
    \n+
    158
    \n+
    \n+\n+
    160 {
    \n+
    161 return offset_;
    \n+
    162 }
    \n+
    \n+
    163
    \n+
    \n+\n+
    165 {
    \n+
    166 offset_ = offset;
    \n+
    167 }
    \n+
    \n+
    168
    \n+
    \n+\n+
    170 {
    \n+
    171 size_ = size;
    \n+
    172 }
    \n
    \n
    173
    \n-
    174 template<class MultiIndex>
    \n-
    \n-
    175 static void multiIndexPopFront(MultiIndex& M)
    \n-
    176 {
    \n-
    177 for(std::size_t i=0; i<M.size()-1; ++i)
    \n-
    178 M[i] = M[i+1];
    \n-
    179 M.resize(M.size()-1);
    \n-
    180 }
    \n-
    \n-
    181
    \n-
    182 template<class SizePrefix, class Children>
    \n-
    \n-\n-
    184 {
    \n-
    185 if (prefix.size() == 0)
    \n-
    186 return children;
    \n-
    187 multiIndexPopFront(prefix);
    \n-
    188 return subPreBasis_.size(prefix);
    \n-
    189 }
    \n-
    \n-
    190
    \n-
    191 template<class SizePrefix, class Children>
    \n-
    \n-\n-
    193 {
    \n-
    194 if (prefix.size() == 0)
    \n-
    195 return subPreBasis_.size();
    \n-
    196
    \n-
    197 // Remember last index, remove it and check if the remaining
    \n-
    198 // prefix refers to a leaf in the subPreBasis index tree.
    \n-
    199 // If yes, then the full prefix must also refer to a
    \n-
    200 // leaf in the merged index tree. If not, then restore the full
    \n-
    201 // prefix and proceed.
    \n-
    202 auto tail = prefix.back();
    \n-
    203 prefix.pop_back();
    \n-
    204 if (subPreBasis_.size(prefix) == 0)
    \n-
    205 return 0;
    \n-
    206 prefix.push_back(tail);
    \n+
    \n+\n+
    175 {
    \n+
    176 treeIndex_ = treeIndex;
    \n+
    177 }
    \n+
    \n+
    178
    \n+
    179 private:
    \n+
    180
    \n+
    181 size_type offset_;
    \n+
    182 size_type size_;
    \n+
    183 size_type treeIndex_;
    \n+
    184
    \n+
    185 };
    \n+
    \n+
    186
    \n+
    187
    \n+
    \n+\n+
    189 public BasisNodeMixin,
    \n+
    190 public TypeTree::LeafNode
    \n+
    191 {};
    \n+
    \n+
    192
    \n+
    193
    \n+
    194 template<typename T, std::size_t n>
    \n+
    \n+\n+
    196 public BasisNodeMixin,
    \n+
    197 public TypeTree::PowerNode<T,n>
    \n+
    198 {
    \n+
    199
    \n+
    200 using Node = TypeTree::PowerNode<T,n>;
    \n+
    201
    \n+
    202 public:
    \n+
    203
    \n+
    204 using Element = typename T::Element;
    \n+
    205
    \n+
    206 PowerBasisNode() = default;
    \n
    207
    \n-
    208 // Now check if the full prefix refers to a leaf in the subPreBasis
    \n-
    209 // index tree.
    \n-
    210 // If yes, then it has exactly 'children' appended children in the subtree.
    \n-
    211 // If not, then the index tree looks the same in the merged subtree and we
    \n-
    212 // can forward the result.
    \n-
    213 auto subSize = subPreBasis_.size(prefix);
    \n-
    214 if (subSize == 0)
    \n-
    215 return children;
    \n-
    216 return subSize;
    \n-
    217 }
    \n+
    \n+
    208 PowerBasisNode(const typename Node::NodeStorage& children) :
    \n+
    209 Node(children)
    \n+
    210 {}
    \n+
    \n+
    211
    \n+
    \n+
    212 const Element& element() const
    \n+
    213 {
    \n+
    214 return this->child(Dune::Indices::_0).element();
    \n+
    215 }
    \n+
    \n+
    216
    \n+
    217 };
    \n
    \n
    218
    \n-
    219public:
    \n-
    220
    \n-
    \n-\n-
    223 {
    \n-
    224 return subPreBasis_.dimension() * children_;
    \n-
    225 }
    \n-
    \n-
    226
    \n-
    \n-\n-
    229 {
    \n-
    230 return subPreBasis_.maxNodeSize() * children_;
    \n-
    231 }
    \n-
    \n-
    232
    \n-
    \n-\n-
    235 {
    \n-
    236 return subPreBasis_;
    \n-
    237 }
    \n+
    219
    \n+
    220 template<typename T>
    \n+
    \n+\n+
    222 public BasisNodeMixin,
    \n+
    223 public TypeTree::DynamicPowerNode<T>
    \n+
    224 {
    \n+
    225
    \n+
    226 using Node = TypeTree::DynamicPowerNode<T>;
    \n+
    227
    \n+
    228 public:
    \n+
    229
    \n+
    230 using Element = typename T::Element;
    \n+
    231
    \n+
    \n+
    232 DynamicPowerBasisNode (std::size_t children)
    \n+
    233 : Node(children)
    \n+
    234 {}
    \n+
    \n+
    235
    \n+
    \n+
    236 DynamicPowerBasisNode (typename Node::NodeStorage children)
    \n+
    237 : Node(std::move(children))
    \n+
    238 {}
    \n
    \n-
    238
    \n+
    239
    \n
    \n-\n-
    241 {
    \n-
    242 return subPreBasis_;
    \n-
    243 }
    \n+
    240 const Element& element() const
    \n+
    241 {
    \n+
    242 return this->child(0).element();
    \n+
    243 }
    \n
    \n
    244
    \n-
    246 template<class NodeType, typename It,
    \n-
    247 std::enable_if_t<NodeType::isPower, int> = 0>
    \n-
    \n-
    248 It indices(const NodeType& node, It it) const
    \n-
    249 {
    \n-
    250 return indicesImpl(node, it, children_, IndexMergingStrategy{});
    \n-
    251 }
    \n-
    \n-
    252
    \n-
    \n-\n-
    255 {
    \n-\n-
    257 }
    \n-
    \n-
    258
    \n-
    259protected:
    \n-
    260
    \n-
    261 template<class NodeType, typename It, class Children>
    \n+
    245 };
    \n+
    \n+
    246
    \n+
    247
    \n+
    248 template<typename... T>
    \n+
    \n+\n+
    250 public BasisNodeMixin,
    \n+
    251 public TypeTree::CompositeNode<T...>
    \n+
    252 {
    \n+
    253
    \n+
    254 using Node = TypeTree::CompositeNode<T...>;
    \n+
    255
    \n+
    256 public:
    \n+
    257
    \n+
    258 using Element = typename Node::template Child<0>::Type::Element;
    \n+
    259
    \n+\n+
    261
    \n
    \n-
    262 It indicesImpl(const NodeType& node, It multiIndices, Children children, BasisFactory::FlatInterleaved) const
    \n-
    263 {
    \n-
    264 using namespace Dune::Indices;
    \n-
    265 size_type subTreeSize = node.child(_0).size();
    \n-
    266 // Fill indices for first child at the beginning.
    \n-
    267 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n-
    268 // Multiply first component of all indices for first child by
    \n-
    269 // number of children to stretch the index range for interleaving.
    \n-
    270 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    271 multiIndices[i][0] *= children;
    \n-
    272 for (std::size_t child = 1; child<children; ++child)
    \n-
    273 {
    \n-
    274 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    275 {
    \n-
    276 // Copy indices from first child for all other children
    \n-
    277 // and shift them by child index to interleave indices.
    \n-
    278 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n-
    279 // multiIndices[child*subTreeSize+i][0] = multiIndices[i][0]+child;
    \n-
    280 (*next) = multiIndices[i];
    \n-
    281 (*next)[0] = multiIndices[i][0]+child;
    \n-
    282 ++next;
    \n-
    283 }
    \n-
    284 }
    \n-
    285 return next;
    \n-
    286 }
    \n-
    \n-
    287
    \n-
    288 template<class NodeType, typename It, class Children>
    \n-
    \n-
    289 It indicesImpl(const NodeType& node, It multiIndices, Children children, BasisFactory::FlatLexicographic) const
    \n-
    290 {
    \n-
    291 using namespace Dune::Indices;
    \n-
    292 size_type subTreeSize = node.child(_0).size();
    \n-
    293 size_type firstIndexEntrySize = subPreBasis().size();
    \n-
    294 // Fill indices for first child at the beginning.
    \n-
    295 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n-
    296 for (std::size_t child = 1; child<children_; ++child)
    \n-
    297 {
    \n-
    298 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    299 {
    \n-
    300 // Copy indices from first child for all other children
    \n-
    301 // and shift them by suitable offset to get lexicographic indices.
    \n-
    302 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n-
    303 // multiIndices[child*subTreeSize+i][0] += child*firstIndexEntrySize;
    \n-
    304 (*next) = multiIndices[i];
    \n-
    305 (*next)[0] += child*firstIndexEntrySize;
    \n-
    306 ++next;
    \n-
    307 }
    \n-
    308 }
    \n-
    309 return next;
    \n-
    310 }
    \n-
    \n-
    311
    \n-
    312 template<class MultiIndex>
    \n-
    \n-
    313 static void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n-
    314 {
    \n-
    315 M.resize(M.size()+1);
    \n-
    316 for(std::size_t i=M.size()-1; i>0; --i)
    \n-
    317 M[i] = M[i-1];
    \n-
    318 M[0] = M0;
    \n-
    319 }
    \n-
    \n-
    320
    \n-
    321 template<class NodeType, typename It, class Children>
    \n-
    \n-
    322 It indicesImpl(const NodeType& node, It multiIndices, Children children, BasisFactory::BlockedLexicographic) const
    \n-
    323 {
    \n-
    324 using namespace Dune::Indices;
    \n-
    325 size_type subTreeSize = node.child(_0).size();
    \n-
    326 // Fill indices for first child at the beginning.
    \n-
    327 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n-
    328 // Insert 0 before first component of all indices for first child.
    \n-
    329 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    330 multiIndexPushFront(multiIndices[i], 0);
    \n-
    331 for (std::size_t child = 1; child<children_; ++child)
    \n-
    332 {
    \n-
    333 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    334 {
    \n-
    335 // Copy indices from first child for all other children and overwrite
    \n-
    336 // zero in first component as inserted above by child index.
    \n-
    337 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n-
    338 // multiIndices[child*subTreeSize+i][0] = child;
    \n-
    339 (*next) = multiIndices[i];
    \n-
    340 (*next)[0] = child;
    \n-
    341 ++next;
    \n-
    342 }
    \n-
    343 }
    \n-
    344 return next;
    \n-
    345 }
    \n-
    \n-
    346
    \n-
    347 template<class NodeType, typename It, class Children>
    \n-
    \n-
    348 It indicesImpl(const NodeType& node, It multiIndices, Children children, BasisFactory::BlockedInterleaved) const
    \n-
    349 {
    \n-
    350 using namespace Dune::Indices;
    \n-
    351 size_type subTreeSize = node.child(_0).size();
    \n-
    352 // Fill indices for first child at the beginning.
    \n-
    353 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n-
    354 // Append 0 after last component of all indices for first child.
    \n-
    355 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    356 multiIndices[i].push_back(0);
    \n-
    357 for (std::size_t child = 1; child<children_; ++child)
    \n-
    358 {
    \n-
    359 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    360 {
    \n-
    361 // Copy indices from first child for all other children and overwrite
    \n-
    362 // zero in last component as appended above by child index.
    \n-
    363 (*next) = multiIndices[i];
    \n-
    364 (*next).back() = child;
    \n-
    365 ++next;
    \n-
    366 }
    \n-
    367 }
    \n-
    368 return next;
    \n-
    369 }
    \n-
    \n-
    370
    \n-
    371 template<class Children>
    \n-
    \n-\n-
    373 {
    \n-\n-
    375 if constexpr(std::is_same_v<IMS, BasisFactory::FlatInterleaved>)
    \n-
    376 return ContainerDescriptors::Unknown{}; // Not yet implemented
    \n-
    377 else if constexpr(std::is_same_v<IMS, BasisFactory::FlatLexicographic>)
    \n-
    378 return ContainerDescriptors::Unknown{}; // Not yet implemented
    \n-
    379 else if constexpr(std::is_same_v<IMS, BasisFactory::BlockedLexicographic>)
    \n-
    380 return ContainerDescriptors::makeUniformDescriptor(children,std::move(subTree));
    \n-
    381 else if constexpr(std::is_same_v<IMS, BasisFactory::BlockedInterleaved>)
    \n-
    382 return ContainerDescriptors::Impl::appendToTree(children,std::move(subTree));
    \n-
    383 else
    \n-\n-
    385 }
    \n-
    \n-
    386
    \n-
    387protected:
    \n-
    388 std::size_t children_;
    \n-\n-
    390};
    \n-
    \n-
    391
    \n-
    392
    \n-
    393
    \n-
    394namespace BasisFactory {
    \n-
    395
    \n-
    408template<class ChildPreBasisFactory, class IndexMergingStrategy>
    \n-
    \n-
    409auto power(ChildPreBasisFactory&& childPreBasisFactory, std::size_t k, const IndexMergingStrategy&)
    \n-
    410{
    \n-
    411 return [childPreBasisFactory,k](const auto& gridView) {
    \n-
    412 auto childPreBasis = childPreBasisFactory(gridView);
    \n-\n-
    414 };
    \n-
    415}
    \n-
    \n-
    416
    \n-
    427template<class ChildPreBasisFactory>
    \n-
    \n-
    428auto power(ChildPreBasisFactory&& childPreBasisFactory, std::size_t k)
    \n-
    429{
    \n-
    430 return [childPreBasisFactory,k](const auto& gridView) {
    \n-
    431 auto childPreBasis = childPreBasisFactory(gridView);
    \n-\n-
    433 };
    \n-
    434}
    \n-
    \n-
    435
    \n-
    436} // end namespace BasisFactory
    \n-
    437
    \n-
    438} // end namespace Functions
    \n-
    439} // end namespace Dune
    \n-
    440
    \n-
    441
    \n-
    442#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH
    \n-\n-\n-\n-\n-\n-
    auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
    Create a pre-basis factory that can build a PowerPreBasis.
    Definition dynamicpowerbasis.hh:409
    \n-
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n+
    262 CompositeBasisNode(const typename Node::NodeStorage& children) :
    \n+
    263 Node(children)
    \n+
    264 {}
    \n+
    \n+
    265
    \n+
    266 template<typename... Children>
    \n+
    \n+
    267 CompositeBasisNode(const std::shared_ptr<Children>&... children) :
    \n+
    268 Node(children...)
    \n+
    269 {}
    \n+
    \n+
    270
    \n+
    \n+
    271 const Element& element() const
    \n+
    272 {
    \n+
    273 return this->child(Dune::Indices::_0).element();
    \n+
    274 }
    \n+
    \n+
    275
    \n+
    276 };
    \n+
    \n+
    277
    \n+
    278
    \n+
    279 template<typename Tree>
    \n+
    \n+
    280 void clearSize(Tree& tree, std::size_t offset)
    \n+
    281 {
    \n+
    282 TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));
    \n+
    283 }
    \n+
    \n+
    284
    \n+
    285 template<typename Tree, typename Entity>
    \n+
    \n+
    286 void bindTree(Tree& tree, const Entity& entity, std::size_t offset = 0)
    \n+
    287 {
    \n+
    288 Impl::BindVisitor<Entity> visitor(entity,offset);
    \n+
    289 TypeTree::applyToTree(tree,visitor);
    \n+
    290 }
    \n+
    \n+
    291
    \n+
    292 template<typename Tree>
    \n+
    \n+
    293 void initializeTree(Tree& tree, std::size_t treeIndexOffset = 0)
    \n+
    294 {
    \n+
    295 Impl::InitializeTreeVisitor visitor(treeIndexOffset);
    \n+
    296 TypeTree::applyToTree(tree,visitor);
    \n+
    297 }
    \n+
    \n+
    298
    \n+
    299
    \n+
    300 } // namespace Functions
    \n+
    301
    \n+
    302} // namespace Dune
    \n+
    303
    \n+
    304#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n
    Definition polynomial.hh:17
    \n-
    auto containerDescriptor(const PreBasis &preBasis)
    Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
    Definition containerdescriptors.hh:73
    \n-
    auto makeUniformDescriptor(std::integral_constant< std::size_t, n >, Child child)
    Generate a uniform descriptor in case the size is a static constant.
    Definition containerdescriptors.hh:159
    \n-
    Base class for index merging strategies to simplify detection.
    Definition basistags.hh:48
    \n-
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:84
    \n-
    Interleaved merging of direct children without blocking.
    Definition basistags.hh:118
    \n-
    Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
    Definition basistags.hh:152
    \n-
    Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...
    Definition basistags.hh:184
    \n-
    Fallback container descriptor if nothing else fits.
    Definition containerdescriptors.hh:50
    \n-
    A pre-basis for dynamic power bases.
    Definition dynamicpowerbasis.hh:48
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition dynamicpowerbasis.hh:60
    \n-
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child factories.
    Definition dynamicpowerbasis.hh:63
    \n-
    DynamicPowerPreBasis(std::size_t c, SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects.
    Definition dynamicpowerbasis.hh:80
    \n-
    static void multiIndexPopFront(MultiIndex &M)
    Definition dynamicpowerbasis.hh:175
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition dynamicpowerbasis.hh:222
    \n-
    auto containerDescriptorImpl(Children children) const
    Definition dynamicpowerbasis.hh:372
    \n-
    It indices(const NodeType &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition dynamicpowerbasis.hh:248
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition dynamicpowerbasis.hh:88
    \n-
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatInterleaved) const
    Definition dynamicpowerbasis.hh:137
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition dynamicpowerbasis.hh:68
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition dynamicpowerbasis.hh:100
    \n-
    auto containerDescriptor() const
    Return the associated container descriptor.
    Definition dynamicpowerbasis.hh:254
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition dynamicpowerbasis.hh:122
    \n-
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::BlockedInterleaved) const
    Definition dynamicpowerbasis.hh:348
    \n-
    SubPreBasis & subPreBasis()
    Mutable access to the stored prebasis of the factor in the power space.
    Definition dynamicpowerbasis.hh:240
    \n-
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatLexicographic) const
    Definition dynamicpowerbasis.hh:153
    \n-
    static void multiIndexPushFront(MultiIndex &M, size_type M0)
    Definition dynamicpowerbasis.hh:313
    \n-
    SubPreBasis subPreBasis_
    Definition dynamicpowerbasis.hh:389
    \n-
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::BlockedLexicographic) const
    Definition dynamicpowerbasis.hh:183
    \n-
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::BlockedInterleaved) const
    Definition dynamicpowerbasis.hh:192
    \n-
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::BlockedLexicographic) const
    Definition dynamicpowerbasis.hh:322
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition dynamicpowerbasis.hh:70
    \n-
    SPB SubPreBasis
    The child pre-basis.
    Definition dynamicpowerbasis.hh:54
    \n-
    Node makeNode() const
    Create tree node.
    Definition dynamicpowerbasis.hh:108
    \n-
    const SubPreBasis & subPreBasis() const
    Const access to the stored prebasis of the factor in the power space.
    Definition dynamicpowerbasis.hh:234
    \n-
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::FlatInterleaved) const
    Definition dynamicpowerbasis.hh:262
    \n-
    std::size_t children() const
    Definition dynamicpowerbasis.hh:116
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition dynamicpowerbasis.hh:228
    \n-
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::FlatLexicographic) const
    Definition dynamicpowerbasis.hh:289
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition dynamicpowerbasis.hh:129
    \n-
    typename SPB::GridView GridView
    The grid view that the FE basis is defined on.
    Definition dynamicpowerbasis.hh:57
    \n-
    std::size_t children_
    Definition dynamicpowerbasis.hh:388
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition dynamicpowerbasis.hh:94
    \n-
    static constexpr size_type minMultiIndexSize
    Definition dynamicpowerbasis.hh:69
    \n+
    void clearSize(Tree &tree, std::size_t offset)
    Definition nodes.hh:280
    \n+
    void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)
    Definition nodes.hh:286
    \n+
    void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)
    Definition nodes.hh:293
    \n+
    Definition nodes.hh:122
    \n+
    size_type treeIndex() const
    Definition nodes.hh:152
    \n+
    size_type localIndex(size_type i) const
    Definition nodes.hh:141
    \n+
    size_type offset() const
    Definition nodes.hh:159
    \n+
    size_type size() const
    Definition nodes.hh:147
    \n+
    void setOffset(const size_type offset)
    Definition nodes.hh:164
    \n+
    std::size_t size_type
    Definition nodes.hh:133
    \n+
    BasisNodeMixin()
    Definition nodes.hh:135
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n+
    void setTreeIndex(size_type treeIndex)
    Definition nodes.hh:174
    \n+
    Definition nodes.hh:191
    \n+
    Definition nodes.hh:198
    \n+
    const Element & element() const
    Definition nodes.hh:212
    \n+
    typename T::Element Element
    Definition nodes.hh:204
    \n+
    PowerBasisNode(const typename Node::NodeStorage &children)
    Definition nodes.hh:208
    \n+\n \n-\n+
    const Element & element() const
    Definition nodes.hh:240
    \n+
    DynamicPowerBasisNode(typename Node::NodeStorage children)
    Definition nodes.hh:236
    \n+
    DynamicPowerBasisNode(std::size_t children)
    Definition nodes.hh:232
    \n+
    typename T::Element Element
    Definition nodes.hh:230
    \n+\n+\n+
    CompositeBasisNode(const typename Node::NodeStorage &children)
    Definition nodes.hh:262
    \n+
    const Element & element() const
    Definition nodes.hh:271
    \n+
    typename Node::template Child< 0 >::Type::Element Element
    Definition nodes.hh:258
    \n+
    CompositeBasisNode(const std::shared_ptr< Children > &... children)
    Definition nodes.hh:267
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,605 +1,402 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-dynamicpowerbasis.hh\n+nodes.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n 9\n-10#include \n-11#include \n-12#include \n-13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-20\n+10#include \n+11#include \n+12\n+13#include \n+14\n+15#include \n+16#include \n+17#include \n+18#include \n+19#include \n+20#include \n 21\n-22\n-23namespace _\bD_\bu_\bn_\be {\n-24namespace Functions {\n+22namespace _\bD_\bu_\bn_\be {\n+23 namespace Functions {\n+24\n 25\n-26\n-27/\n-/ *****************************************************************************\n-28// This is the reusable part of the dynamic power bases. It contains\n-29//\n-30// DynamicPowerPreBasis\n-31//\n-32// The pre-basis allows to create the others and is the owner of possible\n-shared\n-33// state. These components do _not_ depend on the global basis and local view\n-34// and can be used without a global basis.\n-35/\n-/ *****************************************************************************\n-36\n-46template\n-_\b4_\b7class _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-48{\n-49 static const bool isBlocked = std::is_same_v or std::is_same_v;\n+26 namespace Impl {\n+27\n+28\n+29 struct ClearSizeVisitor\n+30 : public TypeTree::TreeVisitor\n+31 , public TypeTree::DynamicTraversal\n+32 {\n+33\n+34 template\n+35 void pre(Node& node, TreePath treePath)\n+36 {\n+37 leaf(node,treePath);\n+38 node.setSize(0);\n+39 }\n+40\n+41 template\n+42 void leaf(Node& node, TreePath treePath)\n+43 {\n+44 node.setOffset(offset_);\n+45 }\n+46\n+47 ClearSizeVisitor(std::size_t offset)\n+48 : offset_(offset)\n+49 {}\n 50\n-51public:\n+51 const std::size_t offset_;\n 52\n-_\b5_\b4 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = SPB;\n+53 };\n+54\n 55\n-_\b5_\b7 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename SPB::GridView;\n-58\n-_\b6_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+56 template\n+57 struct BindVisitor\n+58 : public TypeTree::TreeVisitor\n+59 , public TypeTree::DynamicTraversal\n+60 {\n 61\n-_\b6_\b3 using _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n-64\n-_\b6_\b6 using _\bN_\bo_\bd_\be = _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\bo_\bd_\be_\b>;\n+62 template\n+63 void pre(Node& node, TreePath)\n+64 {\n+65 node.setOffset(offset_);\n+66 }\n 67\n-_\b6_\b8 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = SubPreBasis::\n-maxMultiIndexSize + isBlocked;\n-_\b6_\b9 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = SubPreBasis::\n-minMultiIndexSize + isBlocked;\n-_\b7_\b0 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be = SubPreBasis::\n-multiIndexBufferSize + isBlocked;\n-71\n-77 template = 0,\n-79 _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be<_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, SFArgs...> = 0>\n-_\b8_\b0 explicit _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(std::size_t c, SFArgs&&... sfArgs) :\n-81 _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_(c),\n-82 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(std::forward(sfArgs)...)\n-83 {\n-84 static_assert(models, _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(),\n-\"Subprebasis passed to DynamicPowerPreBasis does not model the PreBasis\n-concept.\");\n-85 }\n+68 template\n+69 void post(Node& node, TreePath)\n+70 {\n+71 node.setSize(offset_ - node.offset());\n+72 }\n+73\n+74 template\n+75 void leaf(Node& node, TreePath)\n+76 {\n+77 node.setOffset(offset_);\n+78 node.bind(entity_);\n+79 offset_ += node.size();\n+80 }\n+81\n+82 BindVisitor(const Entity& entity, std::size_t offset = 0)\n+83 : entity_(entity)\n+84 , offset_(offset)\n+85 {}\n 86\n-_\b8_\b8 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-89 {\n-90 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n-91 }\n+87 const Entity& entity_;\n+88 std::size_t offset_;\n+89\n+90 };\n+91\n 92\n-_\b9_\b4 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-95 {\n-96 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.gridView();\n-97 }\n-98\n-_\b1_\b0_\b0 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-101 {\n-102 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.update(gv);\n-103 }\n-104\n-_\b1_\b0_\b8 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-109 {\n-110 auto node = _\bN_\bo_\bd_\be{_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_};\n-111 for (std::size_t i=0; i<_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_; ++i)\n-112 node.setChild(i, _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.makeNode());\n-113 return node;\n-114 }\n-115\n-_\b1_\b1_\b6 std::size_t _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn() const\n-117 {\n-118 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n-119 }\n+93 struct InitializeTreeVisitor :\n+94 public TypeTree::TreeVisitor,\n+95 public TypeTree::DynamicTraversal\n+96 {\n+97 template\n+98 void pre(Node& node, TreePath)\n+99 {\n+100 node.setTreeIndex(treeIndex_);\n+101 ++treeIndex_;\n+102 }\n+103\n+104 template\n+105 void leaf(Node& node, TreePath)\n+106 {\n+107 node.setTreeIndex(treeIndex_);\n+108 ++treeIndex_;\n+109 }\n+110\n+111 InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :\n+112 treeIndex_(treeIndexOffset)\n+113 {}\n+114\n+115 std::size_t treeIndex_;\n+116 };\n+117\n+118 } // end namespace Impl\n+119\n 120\n-_\b1_\b2_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-123 {\n-124 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n-125 }\n-126\n-128 template\n-_\b1_\b2_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-130 {\n-131 return _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(prefix, _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n-132 }\n-133\n-134protected:\n-135\n-136 template\n-_\b1_\b3_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(SizePrefix prefix, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n-138 {\n-139 // The root index size is the root index size of a single subnode\n-140 // multiplied by the number of subnodes, because we enumerate all\n-141 // child indices in a row.\n-142 if (prefix.size() == 0)\n-143 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn*_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size();\n-144\n-145 // The FlatInterleaved index merging strategy only changes the first\n-146 // index digit. Hence, we have to reconstruct the corresponding digit\n-147 // for the subtree and can then return the corresponding size of the\n-subtree.\n-148 prefix[0] = prefix[0] / _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n-149 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n+_\b1_\b2_\b1 class _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n+122 {\n+123\n+124 friend struct Impl::ClearSizeVisitor;\n+125\n+126 template\n+127 friend struct Impl::BindVisitor;\n+128\n+129 friend struct Impl::InitializeTreeVisitor;\n+130\n+131 public:\n+132\n+_\b1_\b3_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+134\n+_\b1_\b3_\b5 _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn() :\n+136 offset_(0),\n+137 size_(0),\n+138 treeIndex_(0)\n+139 {}\n+140\n+_\b1_\b4_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n+142 {\n+143 assert(i < size_);\n+144 return offset_ + i;\n+145 }\n+146\n+_\b1_\b4_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+148 {\n+149 return size_;\n 150 }\n 151\n-152 template\n-_\b1_\b5_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(SizePrefix prefix, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) 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 _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn*_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.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. Then 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\n-167 // The FlatLexicographic index merging strategy only changes the first\n-168 // index digit. Hence, we have to reconstruct the corresponding digit\n-169 // for the subtree and can then return the corresponding size of the\n-subtree.\n-170 prefix[0] = prefix[0] % _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size();\n-171 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n+_\b1_\b5_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx() const\n+153 {\n+154 return treeIndex_;\n+155 }\n+156\n+157 protected:\n+158\n+_\b1_\b5_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bo_\bf_\bf_\bs_\be_\bt() const\n+160 {\n+161 return offset_;\n+162 }\n+163\n+_\b1_\b6_\b4 void _\bs_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt(const _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bo_\bf_\bf_\bs_\be_\bt)\n+165 {\n+166 offset_ = _\bo_\bf_\bf_\bs_\be_\bt;\n+167 }\n+168\n+_\b1_\b6_\b9 void _\bs_\be_\bt_\bS_\bi_\bz_\be(const _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be)\n+170 {\n+171 size_ = _\bs_\bi_\bz_\be;\n 172 }\n 173\n-174 template\n-_\b1_\b7_\b5 static void _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bo_\bp_\bF_\br_\bo_\bn_\bt(MultiIndex& M)\n-176 {\n-177 for(std::size_t i=0; i\n-_\b1_\b8_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(SizePrefix prefix, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) const\n-184 {\n-185 if (prefix.size() == 0)\n-186 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n-187 _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bo_\bp_\bF_\br_\bo_\bn_\bt(prefix);\n-188 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n-189 }\n-190\n-191 template\n-_\b1_\b9_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(SizePrefix prefix, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n-193 {\n-194 if (prefix.size() == 0)\n-195 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size();\n-196\n-197 // Remember last index, remove it and check if the remaining\n-198 // prefix refers to a leaf in the subPreBasis index tree.\n-199 // If yes, then the full prefix must also refer to a\n-200 // leaf in the merged index tree. If not, then restore the full\n-201 // prefix and proceed.\n-202 auto tail = prefix.back();\n-203 prefix.pop_back();\n-204 if (_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix) == 0)\n-205 return 0;\n-206 prefix.push_back(tail);\n+_\b1_\b7_\b4 void _\bs_\be_\bt_\bT_\br_\be_\be_\bI_\bn_\bd_\be_\bx(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx)\n+175 {\n+176 treeIndex_ = _\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx;\n+177 }\n+178\n+179 private:\n+180\n+181 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be offset_;\n+182 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be size_;\n+183 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be treeIndex_;\n+184\n+185 };\n+186\n+187\n+_\b1_\b8_\b8 class _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n+189 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n+190 public TypeTree::LeafNode\n+191 {};\n+192\n+193\n+194 template\n+_\b1_\b9_\b5 class _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n+196 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n+197 public TypeTree::PowerNode\n+198 {\n+199\n+200 using Node = TypeTree::PowerNode;\n+201\n+202 public:\n+203\n+_\b2_\b0_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename T::Element;\n+205\n+_\b2_\b0_\b6 _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be() = default;\n 207\n-208 // Now check if the full prefix refers to a leaf in the subPreBasis\n-209 // index tree.\n-210 // If yes, then it has exactly 'children' appended children in the subtree.\n-211 // If not, then the index tree looks the same in the merged subtree and we\n-212 // can forward the result.\n-213 auto subSize = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n-214 if (subSize == 0)\n-215 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n-216 return subSize;\n-217 }\n+_\b2_\b0_\b8 _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be(const typename Node::NodeStorage& children) :\n+209 Node(children)\n+210 {}\n+211\n+_\b2_\b1_\b2 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+213 {\n+214 return this->child(Dune::Indices::_0).element();\n+215 }\n+216\n+217 };\n 218\n-219public:\n-220\n-_\b2_\b2_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-223 {\n-224 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.dimension() * _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n-225 }\n-226\n-_\b2_\b2_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-229 {\n-230 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.maxNodeSize() * _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n-231 }\n-232\n-_\b2_\b3_\b4 const _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs() const\n-235 {\n-236 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-237 }\n-238\n-_\b2_\b4_\b0 _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs()\n+219\n+220 template\n+_\b2_\b2_\b1 class _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n+222 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n+223 public TypeTree::DynamicPowerNode\n+224 {\n+225\n+226 using Node = TypeTree::DynamicPowerNode;\n+227\n+228 public:\n+229\n+_\b2_\b3_\b0 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename T::Element;\n+231\n+_\b2_\b3_\b2 _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be (std::size_t children)\n+233 : Node(children)\n+234 {}\n+235\n+_\b2_\b3_\b6 _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be (typename Node::NodeStorage children)\n+237 : Node(std::move(children))\n+238 {}\n+239\n+_\b2_\b4_\b0 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n 241 {\n-242 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+242 return this->child(0).element();\n 243 }\n 244\n-246 template = 0>\n-_\b2_\b4_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const NodeType& node, It it) const\n-249 {\n-250 return _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(node, it, _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n-251 }\n-252\n-_\b2_\b5_\b4 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n-255 {\n-256 return _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_);\n-257 }\n-258\n-259protected:\n-260\n-261 template\n-_\b2_\b6_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(const NodeType& node, It multiIndices, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,\n-_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n-263 {\n-264 using namespace Dune::Indices;\n-265 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n-266 // Fill indices for first child at the beginning.\n-267 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n-268 // Multiply first component of all indices for first child by\n-269 // number of children to stretch the index range for interleaving.\n-270 for (std::size_t i = 0; i\n+_\b2_\b4_\b9 class _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n+250 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n+251 public TypeTree::CompositeNode\n+252 {\n+253\n+254 using Node = TypeTree::CompositeNode;\n+255\n+256 public:\n+257\n+_\b2_\b5_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename Node::template Child<0>::Type::Element;\n+259\n+_\b2_\b6_\b0 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be() = default;\n+261\n+_\b2_\b6_\b2 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be(const typename Node::NodeStorage& children) :\n+263 Node(children)\n+264 {}\n+265\n+266 template\n+_\b2_\b6_\b7 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be(const std::shared_ptr&... children) :\n+268 Node(children...)\n+269 {}\n+270\n+_\b2_\b7_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+272 {\n+273 return this->child(Dune::Indices::_0).element();\n+274 }\n+275\n+276 };\n+277\n+278\n+279 template\n+_\b2_\b8_\b0 void _\bc_\bl_\be_\ba_\br_\bS_\bi_\bz_\be(Tree& tree, std::size_t offset)\n+281 {\n+282 TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));\n 283 }\n-284 }\n-285 return next;\n-286 }\n-287\n-288 template\n-_\b2_\b8_\b9 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(const NodeType& node, It multiIndices, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,\n-_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) const\n-290 {\n-291 using namespace Dune::Indices;\n-292 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n-293 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be firstIndexEntrySize = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().size();\n-294 // Fill indices for first child at the beginning.\n-295 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n-296 for (std::size_t child = 1; child<_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_; ++child)\n-297 {\n-298 for (std::size_t i = 0; i\n-_\b3_\b1_\b3 static void _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bu_\bs_\bh_\bF_\br_\bo_\bn_\bt(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n-314 {\n-315 M.resize(M.size()+1);\n-316 for(std::size_t i=M.size()-1; i>0; --i)\n-317 M[i] = M[i-1];\n-318 M[0] = M0;\n-319 }\n-320\n-321 template\n-_\b3_\b2_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(const NodeType& node, It multiIndices, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,\n-_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) const\n-323 {\n-324 using namespace Dune::Indices;\n-325 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n-326 // Fill indices for first child at the beginning.\n-327 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n-328 // Insert 0 before first component of all indices for first child.\n-329 for (std::size_t i = 0; i\n-_\b3_\b4_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(const NodeType& node, It multiIndices, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,\n-_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n-349 {\n-350 using namespace Dune::Indices;\n-351 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n-352 // Fill indices for first child at the beginning.\n-353 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n-354 // Append 0 after last component of all indices for first child.\n-355 for (std::size_t i = 0; i\n-_\b3_\b7_\b2 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl(Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn) const\n-373 {\n-374 auto subTree = _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n-375 if constexpr(std::is_same_v)\n-376 return _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn{}; // Not yet implemented\n-377 else if constexpr(std::is_same_v)\n-378 return _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn{}; // Not yet implemented\n-379 else if constexpr(std::is_same_v)\n-380 return _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,std::move\n-(subTree));\n-381 else if constexpr(std::is_same_v)\n-382 return ContainerDescriptors::Impl::appendToTree(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,std::move\n-(subTree));\n-383 else\n-384 return _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn{};\n-385 }\n-386\n-387protected:\n-_\b3_\b8_\b8 std::size_t _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n-_\b3_\b8_\b9 _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-390};\n-391\n-392\n-393\n-394namespace BasisFactory {\n-395\n-408template\n-_\b4_\b0_\b9auto _\bp_\bo_\bw_\be_\br(ChildPreBasisFactory&& childPreBasisFactory, std::size_t k, const\n-_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by&)\n-410{\n-411 return [childPreBasisFactory,k](const auto& gridView) {\n-412 auto childPreBasis = childPreBasisFactory(gridView);\n-413 return _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by_\b,_\b _\bd_\be_\bc_\bl_\bt_\by_\bp_\be_\b(_\bc_\bh_\bi_\bl_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b)_\b>\n-(k,std::move(childPreBasis));\n-414 };\n-415}\n-416\n-427template\n-_\b4_\b2_\b8auto _\bp_\bo_\bw_\be_\br(ChildPreBasisFactory&& childPreBasisFactory, std::size_t k)\n-429{\n-430 return [childPreBasisFactory,k](const auto& gridView) {\n-431 auto childPreBasis = childPreBasisFactory(gridView);\n-432 return _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd_\b,_\b _\bd_\be_\bc_\bl_\bt_\by_\bp_\be_\b(_\bc_\bh_\bi_\bl_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b)_\b>\n-(k,std::move(childPreBasis));\n-433 };\n-434}\n-435\n-436} // end namespace BasisFactory\n-437\n-438} // end namespace Functions\n-439} // end namespace Dune\n-440\n-441\n-442#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n-_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br\n-auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const\n-IndexMergingStrategy &)\n-Create a pre-basis factory that can build a PowerPreBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:409\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be\n-std::enable_if_t< std::is_constructible_v< T, Args... >, int >\n-enableIfConstructible\n-Helper to constrain forwarding constructors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:31\n+284\n+285 template\n+_\b2_\b8_\b6 void _\bb_\bi_\bn_\bd_\bT_\br_\be_\be(Tree& tree, const Entity& entity, std::size_t offset = 0)\n+287 {\n+288 Impl::BindVisitor visitor(entity,offset);\n+289 TypeTree::applyToTree(tree,visitor);\n+290 }\n+291\n+292 template\n+_\b2_\b9_\b3 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be(Tree& tree, std::size_t treeIndexOffset = 0)\n+294 {\n+295 Impl::InitializeTreeVisitor visitor(treeIndexOffset);\n+296 TypeTree::applyToTree(tree,visitor);\n+297 }\n+298\n+299\n+300 } // namespace Functions\n+301\n+302} // namespace Dune\n+303\n+304#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor(const PreBasis &preBasis)\n-Return the container descriptor of the pre-basis, if defined, otherwise\n-ContainerDescriptor::Unknown.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto makeUniformDescriptor(std::integral_constant< std::size_t, n >, Child\n-child)\n-Generate a uniform descriptor in case the size is a static constant.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:159\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-Base class for index merging strategies to simplify detection.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:48\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-Lexicographic merging of direct children without blocking.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:84\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-Interleaved merging of direct children without blocking.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:118\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-Lexicographic merging of direct children with blocking (i.e. creating one block\n-per direct child).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-Interleaved merging of direct children with blocking (i.e. creating blocks at\n-the leaves containing o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:184\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn\n-Fallback container descriptor if nothing else fits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-A pre-basis for dynamic power bases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:48\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-IMS IndexMergingStrategy\n-Strategy used to merge the global indices of the child factories.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:63\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-DynamicPowerPreBasis(std::size_t c, SFArgs &&... sfArgs)\n-Constructor for given child pre-basis objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:80\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bo_\bp_\bF_\br_\bo_\bn_\bt\n-static void multiIndexPopFront(MultiIndex &M)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:175\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:222\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl\n-auto containerDescriptorImpl(Children children) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:372\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n-It indices(const NodeType &node, It it) const\n-Maps from subtree index set [0..size-1] to a globally unique multi index in\n-global basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:248\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void initializeIndices()\n-Initialize the global indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:88\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n-size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n-FlatInterleaved) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:137\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr size_type maxMultiIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor() const\n-Return the associated container descriptor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:254\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bl_\be_\ba_\br_\bS_\bi_\bz_\be\n+void clearSize(Tree &tree, std::size_t offset)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:280\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bb_\bi_\bn_\bd_\bT_\br_\be_\be\n+void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:286\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be\n+void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:293\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx\n+size_type treeIndex() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx\n+size_type localIndex(size_type i) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:141\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bo_\bf_\bf_\bs_\be_\bt\n+size_type offset() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:159\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n size_type size() const\n-Same as size(prefix) with empty prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n-It indicesImpl(const NodeType &node, It multiIndices, Children children,\n-BasisFactory::BlockedInterleaved) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:348\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-SubPreBasis & subPreBasis()\n-Mutable access to the stored prebasis of the factor in the power space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:240\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n-size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n-FlatLexicographic) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:153\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bu_\bs_\bh_\bF_\br_\bo_\bn_\bt\n-static void multiIndexPushFront(MultiIndex &M, size_type M0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:313\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n-SubPreBasis subPreBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:389\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n-size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n-BlockedLexicographic) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:183\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n-size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n-BlockedInterleaved) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:192\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n-It indicesImpl(const NodeType &node, It multiIndices, Children children,\n-BasisFactory::BlockedLexicographic) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:322\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n-static constexpr size_type multiIndexBufferSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:70\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-SPB SubPreBasis\n-The child pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:54\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:108\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-const SubPreBasis & subPreBasis() const\n-Const access to the stored prebasis of the factor in the power space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:234\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n-It indicesImpl(const NodeType &node, It multiIndices, Children children,\n-BasisFactory::FlatInterleaved) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:262\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n-std::size_t children() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:116\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:228\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n-It indicesImpl(const NodeType &node, It multiIndices, Children children,\n-BasisFactory::FlatLexicographic) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:289\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-typename SPB::GridView GridView\n-The grid view that the FE basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_\n-std::size_t children_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:388\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:94\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr size_type minMultiIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:69\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt\n+void setOffset(const size_type offset)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:164\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:133\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n+BasisNodeMixin()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:135\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n+void setSize(const size_type size)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bT_\br_\be_\be_\bI_\bn_\bd_\be_\bx\n+void setTreeIndex(size_type treeIndex)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:174\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:198\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:212\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename T::Element Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:204\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+PowerBasisNode(const typename Node::NodeStorage &children)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:208\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+PowerBasisNode()=default\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:224\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:240\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+DynamicPowerBasisNode(typename Node::NodeStorage children)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:236\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+DynamicPowerBasisNode(std::size_t children)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:232\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename T::Element Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:230\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:252\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+CompositeBasisNode()=default\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+CompositeBasisNode(const typename Node::NodeStorage &children)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:262\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:271\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename Node::template Child< 0 >::Type::Element Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:258\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+CompositeBasisNode(const std::shared_ptr< Children > &... children)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:267\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: subspacebasis.hh File Reference\n+dune-functions: periodicbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -73,53 +73,51 @@\n
    \n
    \n
    \n \n-
    subspacebasis.hh File Reference
    \n+
    periodicbasis.hh File Reference
    \n
    \n
    \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 <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/containerdescriptors.hh>
    \n+#include <dune/functions/functionspacebases/transformedindexbasis.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::SubspaceBasis< RB, TP >
    class  Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet
     Container storing identified indices for a periodic basis. More...
     
    \n \n \n \n \n \n+\n+\n+\n+\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisFactory::Experimental
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Functions

    template<class RB , class TP >
     Dune::Functions::SubspaceBasis (const RB &, const TP) -> SubspaceBasis< RB, TP >
     
    template<class RootRootBasis , class InnerTP , class OuterTP >
     Dune::Functions::SubspaceBasis (const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath) -> SubspaceBasis< std::decay_t< decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t< InnerTP, OuterTP > >
     
    template<class RootBasis , class... PrefixTreeIndices>
    auto Dune::Functions::subspaceBasis (const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)
     Create SubspaceBasis from a root basis and a prefixPath.
     
    template<class RootBasis , class... PrefixTreeIndices>
    auto Dune::Functions::subspaceBasis (const RootBasis &rootBasis, const PrefixTreeIndices &... prefixTreeIndices)
     
    template<class RawPreBasisIndicator , class PIS >
    auto Dune::Functions::BasisFactory::Experimental::periodic (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)
     Create a pre-basis factory that can create a periodic pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,45 +2,38 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-subspacebasis.hh File Reference\n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n+periodicbasis.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bi_\bn_\bd_\be_\bx_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bR_\bB_\b,_\b _\bT_\bP_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt\n+\u00a0 Container storing identified indices for a periodic basis. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs (const RB &, const TP) -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs<\n- RB, TP >\n-\u00a0\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs (const _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs< RootRootBasis,\n- InnerTP > &rootBasis, const OuterTP &prefixPath) -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs< std::\n- decay_t< decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t< InnerTP,\n- OuterTP > >\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs (const RootBasis &rootBasis, const\n- TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)\n-\u00a0 Create _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs from a root basis and a prefixPath.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs (const RootBasis &rootBasis, const\n- PrefixTreeIndices &... prefixTreeIndices)\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bp_\be_\br_\bi_\bo_\bd_\bi_\bc\n+ (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)\n+\u00a0 Create a pre-basis factory that can create a periodic pre-basis.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: subspacebasis.hh Source File\n+dune-functions: periodicbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,210 +74,226 @@\n \n \n
    \n
    \n-
    subspacebasis.hh
    \n+
    periodicbasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_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-
    13
    \n-\n-\n+
    10#include <utility>
    \n+
    11#include <type_traits>
    \n+
    12#include <limits>
    \n+
    13#include <set>
    \n+
    14#include <vector>
    \n+
    15
    \n \n-
    17
    \n-
    18
    \n+\n+\n
    19
    \n-
    20namespace Dune {
    \n-
    21namespace Functions {
    \n+
    20
    \n+
    21namespace Dune::Functions {
    \n
    22
    \n-
    23
    \n+
    23namespace BasisFactory {
    \n
    24
    \n-
    25namespace Impl {
    \n-
    26
    \n-
    27 template<class... Inner, class... Outer>
    \n-
    28 auto joinTreePaths(const TypeTree::HybridTreePath<Inner...>& inner, const TypeTree::HybridTreePath<Outer...> outer)
    \n-
    29 {
    \n-
    30 return TypeTree::HybridTreePath<Inner..., Outer...>(std::tuple_cat(inner._data, outer._data));
    \n-
    31 }
    \n-
    32
    \n-
    33 template<class InnerTP, class OuterTP>
    \n-
    34 using JoinTreePath_t = std::decay_t<decltype(joinTreePaths(std::declval<InnerTP>(), std::declval<OuterTP>()))>;
    \n-
    35
    \n-
    36}
    \n-
    37
    \n-
    38
    \n-
    39
    \n-
    40template<class RB, class TP>
    \n-
    \n-\n-
    42{
    \n+
    25// The PeriodicBasis class is in the Experimental namespace because we are
    \n+
    26// not completely sure yet whether we like it. We reserve the right to
    \n+
    27// modify it without advance warning. Use at your own risk!
    \n+
    28
    \n+
    \n+
    29namespace Experimental {
    \n+
    30
    \n+
    31
    \n+
    \n+\n+
    41{
    \n+
    42 using IndexPairSet = std::set<std::pair<std::size_t,std::size_t>>;
    \n
    43public:
    \n
    44
    \n-
    45 using RootBasis = RB;
    \n-
    46
    \n-
    47 using RootLocalView = typename RootBasis::LocalView;
    \n-
    48
    \n-
    49 using PrefixPath = TP;
    \n-
    50
    \n-
    52 using GridView = typename RootBasis::GridView;
    \n-
    53
    \n-
    55 using MultiIndex = typename RootBasis::MultiIndex;
    \n-
    56
    \n-
    57 using size_type = std::size_t;
    \n-
    58
    \n-\n-
    61
    \n-
    62 using SizePrefix = typename RootBasis::SizePrefix;
    \n-
    63
    \n-
    64
    \n-
    \n-\n-\n-\n-
    69 {}
    \n+
    \n+
    52 void unifyIndexPair(std::size_t a, std::size_t b)
    \n+
    53 {
    \n+
    54 if (a>b)
    \n+
    55 std::swap(a,b);
    \n+
    56 if (a==b)
    \n+
    57 return;
    \n+
    58 indexPairSet_.insert(std::make_pair(a,b));
    \n+
    59 }
    \n+
    \n+
    60
    \n+
    \n+
    61 const auto& indexPairSet() const
    \n+
    62 {
    \n+
    63 return indexPairSet_;
    \n+
    64 }
    \n+
    \n+
    65
    \n+
    66private:
    \n+
    67 IndexPairSet indexPairSet_;
    \n+
    68};
    \n
    \n+
    69
    \n
    70
    \n-
    76 template<class RootRootBasis, class InnerTP, class OuterTP>
    \n-\n+
    71
    \n+
    72namespace Impl {
    \n+
    73
    \n+
    74// An index transformation for a TransformedIndexPreBasis
    \n+
    75// implementing periodic functions by merging indices.
    \n+
    76// Currently only flat indices are supported.
    \n+
    77class PeriodicIndexingTransformation
    \n+
    78{
    \n+
    79public:
    \n
    80
    \n-
    81
    \n-
    \n-
    84 const GridView& gridView() const
    \n-
    85 {
    \n-
    86 return rootBasis_->gridView();
    \n-
    87 }
    \n-
    \n-
    88
    \n-
    \n-\n-
    93 {
    \n-
    94 return rootBasis_->dimension();
    \n-
    95 }
    \n-
    \n-
    96
    \n-
    \n-\n-
    99 {
    \n-
    100 return rootBasis_->size();
    \n-
    101 }
    \n-
    \n-
    102
    \n-
    \n-
    104 size_type size(const SizePrefix& prefix) const
    \n-
    105 {
    \n-
    106 return rootBasis_->size(prefix);
    \n-
    107 }
    \n-
    \n-
    108
    \n-
    \n-\n-
    113 {
    \n-
    114 return LocalView(*this, prefixPath_);
    \n-
    115 }
    \n-
    \n-
    116
    \n-
    \n-
    117 const RootBasis& rootBasis() const
    \n-
    118 {
    \n-
    119 return *rootBasis_;
    \n-
    120 }
    \n-
    \n-
    121
    \n-
    \n-
    122 const PrefixPath& prefixPath() const
    \n-
    123 {
    \n-
    124 return prefixPath_;
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    127protected:
    \n-\n-\n-
    130};
    \n-
    \n-
    131
    \n-
    132
    \n-
    133// CTAD guide for a non-SubspaceBasis root basis
    \n-
    134template<class RB, class TP>
    \n-
    135SubspaceBasis(const RB&, const TP) -> SubspaceBasis<RB, TP>;
    \n+
    81 static constexpr std::size_t minIndexSize = 1;
    \n+
    82 static constexpr std::size_t maxIndexSize = 1;
    \n+
    83
    \n+
    84 template<class RawPreBasis, class IndexPairSet>
    \n+
    85 PeriodicIndexingTransformation(const RawPreBasis& rawPreBasis, const IndexPairSet& indexPairSet)
    \n+
    86 {
    \n+
    87 static_assert(RawPreBasis::maxMultiIndexSize==1, "PeriodicIndexingTransformation is only implemented for flat multi-indices");
    \n+
    88 std::size_t invalid = {std::numeric_limits<std::size_t>::max()};
    \n+
    89 mappedIdx_.resize(rawPreBasis.size(), invalid);
    \n+
    90 numIndices_ = 0;
    \n+
    91 std::size_t i = 0;
    \n+
    92 for(const auto& [a, b] : indexPairSet)
    \n+
    93 {
    \n+
    94 for(; i<=a; ++i)
    \n+
    95 if (mappedIdx_[i] == invalid)
    \n+
    96 mappedIdx_[i] = numIndices_++;
    \n+
    97 mappedIdx_[b] = mappedIdx_[a];
    \n+
    98 }
    \n+
    99 for(; i<rawPreBasis.size(); ++i)
    \n+
    100 if (mappedIdx_[i] == invalid)
    \n+
    101 mappedIdx_[i] = numIndices_++;
    \n+
    102 }
    \n+
    103
    \n+
    104 template<class MultiIndex, class PreBasis>
    \n+
    105 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const
    \n+
    106 {
    \n+
    107 multiIndex = {{ mappedIdx_[multiIndex[0]] }};
    \n+
    108 }
    \n+
    109
    \n+
    110 template<class Prefix, class PreBasis>
    \n+
    111 std::size_t size(const Prefix& prefix, const PreBasis& preBasis) const
    \n+
    112 {
    \n+
    113 if (prefix.size() == 1)
    \n+
    114 return 0;
    \n+
    115 return numIndices_;
    \n+
    116 }
    \n+
    117
    \n+
    118 template<class PreBasis>
    \n+
    119 auto dimension(const PreBasis& preBasis) const
    \n+
    120 {
    \n+
    121 return numIndices_;
    \n+
    122 }
    \n+
    123
    \n+
    125 template<class PreBasis>
    \n+
    126 auto containerDescriptor(const PreBasis& preBasis) const
    \n+
    127 {
    \n+\n+
    129 }
    \n+
    130
    \n+
    131private:
    \n+
    132 std::vector<std::size_t> mappedIdx_;
    \n+
    133 std::size_t numIndices_;
    \n+
    134};
    \n+
    135
    \n
    136
    \n-
    137// CTAD guide for a SubspaceBasis root basis
    \n-
    138template<class RootRootBasis, class InnerTP, class OuterTP>
    \n-
    139SubspaceBasis(const SubspaceBasis<RootRootBasis, InnerTP>& rootBasis, const OuterTP& prefixPath)
    \n-
    140 -> SubspaceBasis<std::decay_t<decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t<InnerTP, OuterTP>>;
    \n-
    141
    \n-
    142
    \n-
    143
    \n-
    154template<class RootBasis, class... PrefixTreeIndices>
    \n-
    \n-
    155auto subspaceBasis(const RootBasis& rootBasis, const TypeTree::HybridTreePath<PrefixTreeIndices...>& prefixPath)
    \n-
    156{
    \n-
    157 return SubspaceBasis(rootBasis, prefixPath);
    \n-
    158}
    \n-
    \n+
    137
    \n+
    138template<class RawPreBasisIndicator>
    \n+
    139class PeriodicPreBasisFactory
    \n+
    140{
    \n+
    141public:
    \n+
    142 PeriodicPreBasisFactory()
    \n+
    143 {}
    \n+
    144
    \n+
    145 template<class RPBI, class PIS>
    \n+
    146 PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&& periodicIndexSet) :
    \n+
    147 rawPreBasisIndicator_(std::forward<RPBI>(rawPreBasisIndicator)),
    \n+
    148 periodicIndexSet_(std::forward<PIS>(periodicIndexSet))
    \n+
    149 {}
    \n+
    150
    \n+
    151 template<class GridView,
    \n+
    152 std::enable_if_t<models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n+
    153 auto operator()(const GridView& gridView) const
    \n+
    154 {
    \n+
    155 const auto& rawPreBasis = rawPreBasisIndicator_.preBasis();
    \n+
    156 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n+
    157 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n+
    158 }
    \n
    159
    \n-
    160template<class RootBasis, class... PrefixTreeIndices>
    \n-
    \n-
    161auto subspaceBasis(const RootBasis& rootBasis, const PrefixTreeIndices&... prefixTreeIndices)
    \n-
    162{
    \n-
    163 return subspaceBasis(rootBasis, TypeTree::hybridTreePath(prefixTreeIndices...));
    \n-
    164}
    \n-
    \n-
    165
    \n-
    166
    \n-
    167
    \n-
    168} // end namespace Functions
    \n-
    169} // end namespace Dune
    \n-
    170
    \n-
    171
    \n-
    172
    \n-
    173#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n-\n-\n-
    Definition polynomial.hh:17
    \n-
    auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)
    Create SubspaceBasis from a root basis and a prefixPath.
    Definition subspacebasis.hh:155
    \n-
    Definition subspacebasis.hh:42
    \n-
    typename RootBasis::LocalView RootLocalView
    Definition subspacebasis.hh:47
    \n-
    LocalView localView() const
    Return local view for basis.
    Definition subspacebasis.hh:112
    \n-
    const RootBasis * rootBasis_
    Definition subspacebasis.hh:128
    \n-
    typename RootBasis::SizePrefix SizePrefix
    Definition subspacebasis.hh:62
    \n-
    TP PrefixPath
    Definition subspacebasis.hh:49
    \n-
    SubspaceLocalView< RootLocalView, PrefixPath > LocalView
    Type of the local view on the restriction of the basis to a single element.
    Definition subspacebasis.hh:60
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition subspacebasis.hh:104
    \n-
    typename RootBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition subspacebasis.hh:52
    \n-
    const PrefixPath & prefixPath() const
    Definition subspacebasis.hh:122
    \n-
    SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath)
    Constructor from another SubspaceBasis.
    Definition subspacebasis.hh:77
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition subspacebasis.hh:84
    \n-
    RB RootBasis
    Definition subspacebasis.hh:45
    \n-
    PrefixPath prefixPath_
    Definition subspacebasis.hh:129
    \n-
    size_type size() const
    Return number of possible values for next position in empty multi index.
    Definition subspacebasis.hh:98
    \n-
    const RootBasis & rootBasis() const
    Definition subspacebasis.hh:117
    \n-
    typename RootBasis::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition subspacebasis.hh:55
    \n-
    size_type dimension() const
    Definition subspacebasis.hh:92
    \n-
    std::size_t size_type
    Definition subspacebasis.hh:57
    \n-
    SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)
    Constructor for a given grid view object.
    Definition subspacebasis.hh:66
    \n-
    The restriction of a finite element basis to a single element.
    Definition subspacelocalview.hh:34
    \n+
    160 template<class GridView,
    \n+
    161 std::enable_if_t<models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n+
    162 auto operator()(const GridView& gridView) const
    \n+
    163 {
    \n+
    164 const auto& rawPreBasis = rawPreBasisIndicator_;
    \n+
    165 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n+
    166 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n+
    167 }
    \n+
    168
    \n+
    169 template<class GridView,
    \n+
    170 std::enable_if_t<not models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0,
    \n+
    171 std::enable_if_t<not models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n+
    172 auto operator()(const GridView& gridView) const
    \n+
    173 {
    \n+
    174 auto rawPreBasis = rawPreBasisIndicator_(gridView);
    \n+
    175 rawPreBasis.initializeIndices();
    \n+
    176 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n+
    177 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n+
    178 }
    \n+
    179
    \n+
    180private:
    \n+
    181 RawPreBasisIndicator rawPreBasisIndicator_;
    \n+
    182 PeriodicIndexSet periodicIndexSet_;
    \n+
    183};
    \n+
    184
    \n+
    185} // end namespace BasisFactory::Impl
    \n+
    186
    \n+
    187
    \n+
    188
    \n+
    202template<class RawPreBasisIndicator, class PIS>
    \n+
    \n+\n+
    204 RawPreBasisIndicator&& rawPreBasisIndicator,
    \n+
    205 PIS&& periodicIndexSet
    \n+
    206 )
    \n+
    207{
    \n+
    208 return Impl::PeriodicPreBasisFactory<std::decay_t<RawPreBasisIndicator>>(
    \n+
    209 std::forward<RawPreBasisIndicator>(rawPreBasisIndicator),
    \n+
    210 std::forward<PIS>(periodicIndexSet));
    \n+
    211}
    \n+
    \n+
    212
    \n+
    213} // end namespace Experimental
    \n+
    \n+
    214
    \n+
    215} // end namespace BasisFactory
    \n+
    216
    \n+
    217} // end namespace Dune::Functions
    \n+
    218
    \n+
    219#endif // DUNE_FUFEM_PERIODICBASIS_HH
    \n+\n+\n+
    auto periodic(RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)
    Create a pre-basis factory that can create a periodic pre-basis.
    Definition periodicbasis.hh:203
    \n+
    Definition polynomial.hh:18
    \n+
    auto containerDescriptor(const PreBasis &preBasis)
    Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
    Definition containerdescriptors.hh:73
    \n+
    Container storing identified indices for a periodic basis.
    Definition periodicbasis.hh:41
    \n+
    void unifyIndexPair(std::size_t a, std::size_t b)
    Insert a pair of indices.
    Definition periodicbasis.hh:52
    \n+
    const auto & indexPairSet() const
    Definition periodicbasis.hh:61
    \n+
    A pre-basis transforming multi-indices.
    Definition transformedindexbasis.hh:55
    \n \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,249 +1,244 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-subspacebasis.hh\n+periodicbasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n 9\n-10#include \n-11#include \n-12#include \n-13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n+10#include \n+11#include \n+12#include \n+13#include \n+14#include \n+15\n 16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-17\n-18\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bi_\bn_\bd_\be_\bx_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n 19\n-20namespace _\bD_\bu_\bn_\be {\n-21namespace Functions {\n+20\n+21namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n 22\n-23\n+23namespace BasisFactory {\n 24\n-25namespace Impl {\n-26\n-27 template\n-28 auto joinTreePaths(const TypeTree::HybridTreePath& inner, const\n-TypeTree::HybridTreePath outer)\n-29 {\n-30 return TypeTree::HybridTreePath(std::tuple_cat\n-(inner._data, outer._data));\n-31 }\n-32\n-33 template\n-34 using JoinTreePath_t = std::decay_t(), std::declval()))>;\n-35\n-36}\n-37\n-38\n-39\n-40template\n-_\b4_\b1class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n-42{\n+25// The PeriodicBasis class is in the Experimental namespace because we are\n+26// not completely sure yet whether we like it. We reserve the right to\n+27// modify it without advance warning. Use at your own risk!\n+28\n+_\b2_\b9namespace Experimental {\n+30\n+31\n+_\b4_\b0class _\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt\n+41{\n+42 using IndexPairSet = std::set>;\n 43public:\n 44\n-_\b4_\b5 using _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs = RB;\n-46\n-_\b4_\b7 using _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = typename RootBasis::LocalView;\n-48\n-_\b4_\b9 using _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh = TP;\n-50\n-_\b5_\b2 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename RootBasis::GridView;\n-53\n-_\b5_\b5 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename RootBasis::MultiIndex;\n-56\n-_\b5_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-58\n-_\b6_\b0 using _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b<_\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b,_\b _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b>;\n-61\n-_\b6_\b2 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = typename RootBasis::SizePrefix;\n-63\n-64\n-_\b6_\b6 _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs, const _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh) :\n-67 _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_(&_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs),\n-68 _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_(_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh)\n-69 {}\n+_\b5_\b2 void _\bu_\bn_\bi_\bf_\by_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br(std::size_t a, std::size_t b)\n+53 {\n+54 if (a>b)\n+55 std::swap(a,b);\n+56 if (a==b)\n+57 return;\n+58 indexPairSet_.insert(std::make_pair(a,b));\n+59 }\n+60\n+_\b6_\b1 const auto& _\bi_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bS_\be_\bt() const\n+62 {\n+63 return indexPairSet_;\n+64 }\n+65\n+66private:\n+67 IndexPairSet indexPairSet_;\n+68};\n+69\n 70\n-76 template\n-_\b7_\b7 _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\bo_\bo_\bt_\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b,_\b _\bI_\bn_\bn_\be_\br_\bT_\bP_\b>& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs, const\n-OuterTP& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh) :\n-78 _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs._\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs(), Impl::joinTreePaths\n-(_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs._\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh(), _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh))\n-79 {}\n+71\n+72namespace Impl {\n+73\n+74// An index transformation for a TransformedIndexPreBasis\n+75// implementing periodic functions by merging indices.\n+76// Currently only flat indices are supported.\n+77class PeriodicIndexingTransformation\n+78{\n+79public:\n 80\n-81\n-_\b8_\b4 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-85 {\n-86 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->gridView();\n-87 }\n-88\n-_\b9_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+81 static constexpr std::size_t minIndexSize = 1;\n+82 static constexpr std::size_t maxIndexSize = 1;\n+83\n+84 template\n+85 PeriodicIndexingTransformation(const RawPreBasis& rawPreBasis, const\n+IndexPairSet& indexPairSet)\n+86 {\n+87 static_assert(RawPreBasis::maxMultiIndexSize==1,\n+\"PeriodicIndexingTransformation is only implemented for flat multi-indices\");\n+88 std::size_t invalid = {std::numeric_limits::max()};\n+89 mappedIdx_.resize(rawPreBasis.size(), invalid);\n+90 numIndices_ = 0;\n+91 std::size_t i = 0;\n+92 for(const auto& [a, b] : indexPairSet)\n 93 {\n-94 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->dimension();\n-95 }\n-96\n-_\b9_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-99 {\n-100 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->size();\n-101 }\n-102\n-_\b1_\b0_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx& prefix) const\n-105 {\n-106 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->size(prefix);\n-107 }\n-108\n-_\b1_\b1_\b2 _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n-113 {\n-114 return _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(*this, _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_);\n-115 }\n-116\n-_\b1_\b1_\b7 const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs() const\n-118 {\n-119 return *_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_;\n-120 }\n-121\n-_\b1_\b2_\b2 const _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh() const\n-123 {\n-124 return _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n-125 }\n-126\n-127protected:\n-_\b1_\b2_\b8 const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs* _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_;\n-_\b1_\b2_\b9 _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n-130};\n-131\n-132\n-133// CTAD guide for a non-SubspaceBasis root basis\n-134template\n-_\b1_\b3_\b5_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RB&, const TP) -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\bB_\b,_\b _\bT_\bP_\b>;\n+94 for(; i<=a; ++i)\n+95 if (mappedIdx_[i] == invalid)\n+96 mappedIdx_[i] = numIndices_++;\n+97 mappedIdx_[b] = mappedIdx_[a];\n+98 }\n+99 for(; i\n+105 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const\n+106 {\n+107 multiIndex = {{ mappedIdx_[multiIndex[0]] }};\n+108 }\n+109\n+110 template\n+111 std::size_t size(const Prefix& prefix, const PreBasis& preBasis) const\n+112 {\n+113 if (prefix.size() == 1)\n+114 return 0;\n+115 return numIndices_;\n+116 }\n+117\n+118 template\n+119 auto dimension(const PreBasis& preBasis) const\n+120 {\n+121 return numIndices_;\n+122 }\n+123\n+125 template\n+126 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(const PreBasis& preBasis) const\n+127 {\n+128 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(preBasis);\n+129 }\n+130\n+131private:\n+132 std::vector mappedIdx_;\n+133 std::size_t numIndices_;\n+134};\n+135\n 136\n-137// CTAD guide for a SubspaceBasis root basis\n-138template\n-_\b1_\b3_\b9_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\bo_\bo_\bt_\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b,_\b _\bI_\bn_\bn_\be_\br_\bT_\bP_\b>& rootBasis, const\n-OuterTP& prefixPath)\n-140 -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs, Impl::\n-JoinTreePath_t>;\n-141\n-142\n-143\n-154template\n-_\b1_\b5_\b5auto _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RootBasis& rootBasis, const TypeTree::\n-HybridTreePath& prefixPath)\n-156{\n-157 return _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(rootBasis, prefixPath);\n-158}\n+137\n+138template\n+139class PeriodicPreBasisFactory\n+140{\n+141public:\n+142 PeriodicPreBasisFactory()\n+143 {}\n+144\n+145 template\n+146 PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&&\n+periodicIndexSet) :\n+147 rawPreBasisIndicator_(std::forward(rawPreBasisIndicator)),\n+148 periodicIndexSet_(std::forward(periodicIndexSet))\n+149 {}\n+150\n+151 template,RawPreBasisIndicator>(), int> = 0>\n+153 auto operator()(const GridView& gridView) const\n+154 {\n+155 const auto& rawPreBasis = rawPreBasisIndicator_.preBasis();\n+156 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n+periodicIndexSet_.indexPairSet());\n+157 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(std::move\n+(rawPreBasis), std::move(transformation));\n+158 }\n 159\n-160template\n-_\b1_\b6_\b1auto _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RootBasis& rootBasis, const PrefixTreeIndices&...\n-prefixTreeIndices)\n-162{\n-163 return _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(rootBasis, TypeTree::hybridTreePath\n-(prefixTreeIndices...));\n-164}\n-165\n-166\n-167\n-168} // end namespace Functions\n-169} // end namespace Dune\n-170\n-171\n-172\n-173#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh\n-_\bD_\bu_\bn_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n-auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath<\n-PrefixTreeIndices... > &prefixPath)\n-Create SubspaceBasis from a root basis and a prefixPath.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:155\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:42\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-typename RootBasis::LocalView RootLocalView\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:47\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-LocalView localView() const\n-Return local view for basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:112\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_\n-const RootBasis * rootBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx\n-typename RootBasis::SizePrefix SizePrefix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n-TP PrefixPath\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:49\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-SubspaceLocalView< RootLocalView, PrefixPath > LocalView\n-Type of the local view on the restriction of the basis to a single element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size(const SizePrefix &prefix) const\n-Return number possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:104\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-typename RootBasis::GridView GridView\n-The grid view that the FE space is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n-const PrefixPath & prefixPath() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n-SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const\n-OuterTP &prefixPath)\n-Constructor from another SubspaceBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:77\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:84\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs\n-RB RootBasis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:45\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_\n-PrefixPath prefixPath_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Return number of possible values for next position in empty multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:98\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs\n-const RootBasis & rootBasis() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:117\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-typename RootBasis::MultiIndex MultiIndex\n-Type used for global numbering of the basis vectors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:55\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:92\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n-SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)\n-Constructor for a given grid view object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:66\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-The restriction of a finite element basis to a single element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:34\n+160 template,RawPreBasisIndicator>\n+(), int> = 0>\n+162 auto operator()(const GridView& gridView) const\n+163 {\n+164 const auto& rawPreBasis = rawPreBasisIndicator_;\n+165 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n+periodicIndexSet_.indexPairSet());\n+166 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(std::move\n+(rawPreBasis), std::move(transformation));\n+167 }\n+168\n+169 template,RawPreBasisIndicator>(), int> = 0,\n+171 std::enable_if_t,RawPreBasisIndicator>(), int> = 0>\n+172 auto operator()(const GridView& gridView) const\n+173 {\n+174 auto rawPreBasis = rawPreBasisIndicator_(gridView);\n+175 rawPreBasis.initializeIndices();\n+176 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n+periodicIndexSet_.indexPairSet());\n+177 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(std::move\n+(rawPreBasis), std::move(transformation));\n+178 }\n+179\n+180private:\n+181 RawPreBasisIndicator rawPreBasisIndicator_;\n+182 PeriodicIndexSet periodicIndexSet_;\n+183};\n+184\n+185} // end namespace BasisFactory::Impl\n+186\n+187\n+188\n+202template\n+_\b2_\b0_\b3auto _\bp_\be_\br_\bi_\bo_\bd_\bi_\bc(\n+204 RawPreBasisIndicator&& rawPreBasisIndicator,\n+205 PIS&& periodicIndexSet\n+206 )\n+207{\n+208 return Impl::PeriodicPreBasisFactory>(\n+209 std::forward(rawPreBasisIndicator),\n+210 std::forward(periodicIndexSet));\n+211}\n+212\n+213} // end namespace Experimental\n+214\n+215} // end namespace BasisFactory\n+216\n+217} // end namespace Dune::Functions\n+218\n+219#endif // DUNE_FUFEM_PERIODICBASIS_HH\n+_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh\n+_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bi_\bn_\bd_\be_\bx_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bp_\be_\br_\bi_\bo_\bd_\bi_\bc\n+auto periodic(RawPreBasisIndicator &&rawPreBasisIndicator, PIS\n+&&periodicIndexSet)\n+Create a pre-basis factory that can create a periodic pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn periodicbasis.hh:203\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor(const PreBasis &preBasis)\n+Return the container descriptor of the pre-basis, if defined, otherwise\n+ContainerDescriptor::Unknown.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt\n+Container storing identified indices for a periodic basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn periodicbasis.hh:41\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt_\b:_\b:_\bu_\bn_\bi_\bf_\by_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br\n+void unifyIndexPair(std::size_t a, std::size_t b)\n+Insert a pair of indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn periodicbasis.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bS_\be_\bt\n+const auto & indexPairSet() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn periodicbasis.hh:61\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+A pre-basis transforming multi-indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:55\n _\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: basistags.hh File Reference\n+dune-functions: defaultnodetorangemap.hh File Reference\n \n \n \n \n \n \n \n@@ -73,77 +73,47 @@\n
    \n
    \n
    \n \n-
    basistags.hh File Reference
    \n+
    defaultnodetorangemap.hh File Reference
    \n
    \n
    \n-
    #include <type_traits>
    \n-#include <dune/common/concept.hh>
    \n+
    #include <dune/common/concept.hh>
    \n+#include <dune/functions/functionspacebases/concepts.hh>
    \n+#include <dune/typetree/traversal.hh>
    \n+#include <dune/typetree/visitor.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n+\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n \n

    \n Classes

    struct  Dune::Functions::Concept::IndexMergingStrategy
    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >
     A simple node to range map using lexicographic ordering. More...
     
    struct  Dune::Functions::BasisFactory::IndexMergingStrategy
     Base class for index merging strategies to simplify detection. More...
     
    struct  Dune::Functions::BasisFactory::FlatLexicographic
     Lexicographic merging of direct children without blocking. More...
     
    struct  Dune::Functions::BasisFactory::FlatInterleaved
     Interleaved merging of direct children without blocking. More...
     
    struct  Dune::Functions::BasisFactory::BlockedLexicographic
     Lexicographic merging of direct children with blocking (i.e. creating one block per direct child). More...
     
    struct  Dune::Functions::BasisFactory::BlockedInterleaved
     Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each). More...
    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor
     
    \n \n \n \n \n \n-\n-\n-\n-\n-\n-\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::Concept
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<typename T >
    static constexpr bool Dune::Functions::Concept::isIndexMergingStrategy ()
     
    template<typename T >
    static constexpr bool Dune::Functions::Concept::isIndexMergingStrategy (T &&t)
     
    void Dune::Functions::BasisFactory::registerIndexMergingStrategy (IndexMergingStrategy)
     
    constexpr FlatLexicographic Dune::Functions::BasisFactory::flatLexicographic ()
     Creates a lexicographic merging of direct children without blocking.
     
    constexpr FlatInterleaved Dune::Functions::BasisFactory::flatInterleaved ()
     Creates an interleaved merging of direct children without blocking.
     
    constexpr BlockedLexicographic Dune::Functions::BasisFactory::blockedLexicographic ()
     Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
     
    constexpr BlockedInterleaved Dune::Functions::BasisFactory::blockedInterleaved ()
     Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each).
     
    template<class Tree >
    DefaultNodeToRangeMap< Tree > Dune::Functions::makeDefaultNodeToRangeMap (const Tree &tree)
     
    template<class Basis , class TreePath >
    auto Dune::Functions::makeDefaultNodeToRangeMap (const Basis &basis, TreePath &&treePath) -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView().tree(), treePath)))
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,79 +2,37 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-basistags.hh File Reference\n-#include \n+defaultnodetorangemap.hh File Reference\n #include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\b _\bT_\br_\be_\be_\b _\b>\n+\u00a0 A simple node to range map using lexicographic ordering. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-\u00a0 Base class for index merging strategies to simplify detection. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-\u00a0 Lexicographic merging of direct children without blocking. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-\u00a0 Interleaved merging of direct children without blocking. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-\u00a0 Lexicographic merging of direct children with blocking (i.e. creating\n- one block per direct child). _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-\u00a0 Interleaved merging of direct children with blocking (i.e. creating\n- blocks at the leaves containing one leaf per child each). _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\b _\bT_\br_\be_\be_\b _\b>_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:\n- _\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by ()\n-\u00a0\n-template\n- static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:\n- _\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by (T &&t)\n-\u00a0\n- void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n- _\br_\be_\bg_\bi_\bs_\bt_\be_\br_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n- (_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by)\n-\u00a0\n- constexpr _\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n- _\bf_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc ()\n-\u00a0 Creates a lexicographic merging of direct\n- children without blocking.\n-\u00a0\n- constexpr _\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bf_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n- ()\n-\u00a0 Creates an interleaved merging of direct\n- children without blocking.\n-\u00a0\n-constexpr _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n- _\bb_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc ()\n- Creates a lexicographic merging of direct\n-\u00a0 children with blocking (i.e. creating one block\n- per direct child).\n-\u00a0\n- constexpr _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n- _\bb_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd ()\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+template\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp< Tree >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+ (const Tree &tree)\n+\u00a0\n+template\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+ (const Basis &basis, TreePath &&treePath) -\n+ > decltype(makeDefaultNodeToRangeMap(TypeTree::\n+ child(basis.localView().tree(), treePath)))\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: basistags.hh Source File\n+dune-functions: defaultnodetorangemap.hh Source File\n \n \n \n \n \n \n \n@@ -74,150 +74,152 @@\n \n \n
    \n
    \n-
    basistags.hh
    \n+
    defaultnodetorangemap.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n-
    11#include <dune/common/concept.hh>
    \n-
    12
    \n-
    13namespace Dune {
    \n-
    14namespace Functions {
    \n+
    10#warning The header dune/functions/common/defaultnodetorangemap.hh is deprecated and will be removed after release 2.10.
    \n+
    11
    \n+
    12#include <dune/common/concept.hh>
    \n+
    13
    \n+\n
    15
    \n-
    16 namespace Concept {
    \n-
    17
    \n-
    \n-\n-
    19 {
    \n-
    20 template<typename T>
    \n-
    21 auto require(T&& t) -> decltype(
    \n-
    22 registerIndexMergingStrategy(t)
    \n-
    23 );
    \n-
    24 };
    \n-
    \n-
    25
    \n-
    26 template<typename T>
    \n-
    \n-
    27 static constexpr bool isIndexMergingStrategy()
    \n-
    28 {
    \n-
    29 return models<Concept::IndexMergingStrategy,T>();
    \n-
    30 }
    \n-
    \n-
    31
    \n-
    32 template<typename T>
    \n-
    \n-
    33 static constexpr bool isIndexMergingStrategy(T&& t)
    \n-
    34 {
    \n-
    35 return models<Concept::IndexMergingStrategy,std::decay_t<T>>();
    \n-
    36 }
    \n-
    \n-
    37
    \n-
    38 } // namespace Concept
    \n-
    39
    \n-
    40
    \n-
    \n-
    41namespace BasisFactory {
    \n-
    42
    \n-\n+
    16#include <dune/typetree/traversal.hh>
    \n+
    17#include <dune/typetree/visitor.hh>
    \n+
    18
    \n+
    19
    \n+
    20namespace Dune {
    \n+
    21namespace Functions {
    \n+
    22
    \n+
    23
    \n+
    24
    \n+
    44template<class Tree>
    \n+
    \n+
    45struct
    \n+
    46[[deprecated("DefaultNodeToRangeMap is deprecated and will be removed after release 2.10.")]]
    \n+\n+
    48{
    \n
    49
    \n-\n-
    51
    \n-
    \n-\n-\n-
    84 {};
    \n-
    \n-
    85
    \n-
    \n-\n-
    117 : public IndexMergingStrategy
    \n-
    118 {};
    \n-
    \n-
    119
    \n-
    \n-\n-
    151 : public IndexMergingStrategy
    \n-
    152 {};
    \n-
    \n-
    153
    \n-\n-
    185
    \n-
    186
    \n-
    \n-\n-
    193 {
    \n-
    194 return {};
    \n-
    195 }
    \n-
    \n-
    196
    \n-
    \n-\n-
    203 {
    \n-
    204 return {};
    \n-
    205 }
    \n-
    \n-
    206
    \n-
    \n-\n-
    213 {
    \n-
    214 return {};
    \n-
    215 }
    \n-
    \n-
    216
    \n-
    \n-\n-
    223 {
    \n-
    224 return {};
    \n-
    225 }
    \n-
    \n-
    226
    \n-
    227} // end namespace BasisFactory
    \n-
    \n-
    228
    \n-
    229// Backward compatibility
    \n-
    \n-
    230namespace [[deprecated("Will be removed after Dune 2.10")]] BasisBuilder {
    \n-
    231
    \n-
    232 using namespace BasisFactory;
    \n-
    233
    \n-
    234}
    \n-
    \n-
    235
    \n-
    236} // end namespace Functions
    \n-
    237} // end namespace Dune
    \n-
    238
    \n-
    239
    \n-
    240#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n-
    constexpr FlatLexicographic flatLexicographic()
    Creates a lexicographic merging of direct children without blocking.
    Definition basistags.hh:192
    \n-
    constexpr BlockedInterleaved blockedInterleaved()
    Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves c...
    Definition basistags.hh:222
    \n-
    constexpr FlatInterleaved flatInterleaved()
    Creates an interleaved merging of direct children without blocking.
    Definition basistags.hh:202
    \n-
    constexpr BlockedLexicographic blockedLexicographic()
    Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct ...
    Definition basistags.hh:212
    \n+
    50 // A simple visitor for computing lexicographic
    \n+
    51 // subtree indices. To identify a leaf node
    \n+
    52 // we use its treeIndex() which is unique
    \n+
    53 // wrt the whole tree and store the computed
    \n+
    54 // index in a vector indexed by the tree indices.
    \n+
    \n+
    55 struct Visitor
    \n+
    56 : public TypeTree::TreeVisitor
    \n+
    57 , public TypeTree::DynamicTraversal
    \n+
    58 {
    \n+
    \n+
    59 Visitor(std::vector<std::size_t>& indices) :
    \n+
    60 indices_(indices),
    \n+
    61 counter_(0)
    \n+
    62 {}
    \n+
    \n+
    63
    \n+
    64 template<typename Node, typename TreePath>
    \n+
    \n+
    65 void leaf(Node& node, TreePath treePath)
    \n+
    66 {
    \n+
    67 if (indices_.size() < node.treeIndex()+1)
    \n+
    68 indices_.resize(node.treeIndex()+1);
    \n+
    69 indices_[node.treeIndex()] = counter_;
    \n+
    70 ++counter_;
    \n+
    71 }
    \n+
    \n+
    72
    \n+
    73 std::vector<std::size_t>& indices_;
    \n+
    74 std::size_t counter_;
    \n+
    75 };
    \n+
    \n+
    76
    \n+
    \n+
    87 DefaultNodeToRangeMap(const Tree& tree)
    \n+
    88 {
    \n+
    89 TypeTree::applyToTree(tree, Visitor(indices_));
    \n+
    90 }
    \n+
    \n+
    91
    \n+
    92 template<class Node, class TreePath, class Range,
    \n+
    93 std::enable_if_t<models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() and not Tree::isLeaf, int> = 0>
    \n+
    \n+
    94 decltype(auto) operator()(const Node& node, const TreePath& treePath, Range&& y) const
    \n+
    95 {
    \n+
    96 return y[indices_[node.treeIndex()]];
    \n+
    97 }
    \n+
    \n+
    98
    \n+
    99 template<class Node, class TreePath, class Range,
    \n+
    100 std::enable_if_t< not models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() or Tree::isLeaf, int> = 0>
    \n+
    \n+
    101 decltype(auto) operator()(const Node& node, const TreePath& treePath, Range&& y) const
    \n+
    102 {
    \n+
    103 return std::forward<Range>(y);
    \n+
    104 }
    \n+
    \n+
    105
    \n+
    106 std::vector<std::size_t> indices_;
    \n+
    107};
    \n+
    \n+
    108
    \n+
    109
    \n+
    110
    \n+
    111template<class Tree>
    \n+
    \n+\n+
    113{
    \n+
    114 return DefaultNodeToRangeMap<Tree>(tree);
    \n+
    115}
    \n+
    \n+
    116
    \n+
    117
    \n+
    118
    \n+
    119template<class Basis, class TreePath>
    \n+
    \n+
    120auto makeDefaultNodeToRangeMap(const Basis& basis, TreePath&& treePath)
    \n+
    121 -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView().tree(),treePath)))
    \n+
    122{
    \n+
    123 auto&& localView = basis.localView();
    \n+
    124 localView.bind(*basis.gridView().template begin<0>());
    \n+
    125 auto&& tree = TypeTree::child(localView.tree(),treePath);
    \n+
    126 return makeDefaultNodeToRangeMap(tree);
    \n+
    127}
    \n+
    \n+
    128
    \n+
    129
    \n+
    130
    \n+
    131} // namespace Dune::Functions
    \n+
    132} // namespace Dune
    \n+
    133
    \n+
    134
    \n+
    135#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n
    Definition polynomial.hh:17
    \n-
    static constexpr bool isIndexMergingStrategy()
    Definition basistags.hh:27
    \n-
    void registerIndexMergingStrategy(IndexMergingStrategy)
    \n-\n-
    auto require(T &&t) -> decltype(registerIndexMergingStrategy(t))
    \n-
    Base class for index merging strategies to simplify detection.
    Definition basistags.hh:48
    \n-
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:84
    \n-
    Interleaved merging of direct children without blocking.
    Definition basistags.hh:118
    \n-
    Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
    Definition basistags.hh:152
    \n-
    Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...
    Definition basistags.hh:184
    \n+
    DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)
    Definition defaultnodetorangemap.hh:112
    \n+
    A simple node to range map using lexicographic ordering.
    Definition defaultnodetorangemap.hh:48
    \n+
    std::vector< std::size_t > indices_
    Definition defaultnodetorangemap.hh:106
    \n+
    DefaultNodeToRangeMap(const Tree &tree)
    Construct DefaultNodeToRangeMap.
    Definition defaultnodetorangemap.hh:87
    \n+
    Definition defaultnodetorangemap.hh:58
    \n+
    Visitor(std::vector< std::size_t > &indices)
    Definition defaultnodetorangemap.hh:59
    \n+
    void leaf(Node &node, TreePath treePath)
    Definition defaultnodetorangemap.hh:65
    \n+
    std::size_t counter_
    Definition defaultnodetorangemap.hh:74
    \n+
    std::vector< std::size_t > & indices_
    Definition defaultnodetorangemap.hh:73
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,154 +1,156 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-basistags.hh\n+defaultnodetorangemap.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n 9\n-10#include \n-11#include \n-12\n-13namespace _\bD_\bu_\bn_\be {\n-14namespace Functions {\n+10#warning The header dune/functions/common/defaultnodetorangemap.hh is\n+deprecated and will be removed after release 2.10.\n+11\n+12#include \n+13\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n 15\n-16 namespace Concept {\n-17\n-_\b1_\b8 struct _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-19 {\n-20 template\n-_\b2_\b1 auto _\br_\be_\bq_\bu_\bi_\br_\be(T&& t) -> decltype(\n-22 registerIndexMergingStrategy(t)\n-23 );\n-24 };\n-25\n-26 template\n-_\b2_\b7 static constexpr bool _\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by()\n-28 {\n-29 return models();\n-30 }\n-31\n-32 template\n-_\b3_\b3 static constexpr bool _\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by(T&& t)\n-34 {\n-35 return models>();\n-36 }\n-37\n-38 } // namespace Concept\n-39\n-40\n-_\b4_\b1namespace BasisFactory {\n-42\n-_\b4_\b8 struct _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by {};\n+16#include \n+17#include \n+18\n+19\n+20namespace _\bD_\bu_\bn_\be {\n+21namespace Functions {\n+22\n+23\n+24\n+44template\n+_\b4_\b5struct\n+46[[deprecated(\"DefaultNodeToRangeMap is deprecated and will be removed after\n+release 2.10.\")]]\n+47_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+48{\n 49\n-_\b5_\b0 void _\br_\be_\bg_\bi_\bs_\bt_\be_\br_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by(_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by);\n-51\n-_\b8_\b2 struct _\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-83 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-84 {};\n-85\n-_\b1_\b1_\b6 struct _\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-117 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-118 {};\n-119\n-_\b1_\b5_\b0 struct _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-151 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-152 {};\n-153\n-_\b1_\b8_\b4 struct _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by {};\n-185\n-186\n-_\b1_\b9_\b2 constexpr _\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc _\bf_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc()\n-193 {\n-194 return {};\n-195 }\n-196\n-_\b2_\b0_\b2 constexpr _\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd _\bf_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd()\n-203 {\n-204 return {};\n-205 }\n-206\n-_\b2_\b1_\b2 constexpr _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc _\bb_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc()\n-213 {\n-214 return {};\n-215 }\n-216\n-_\b2_\b2_\b2 constexpr _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd _\bb_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd()\n-223 {\n-224 return {};\n-225 }\n-226\n-227} // end namespace BasisFactory\n-228\n-229// Backward compatibility\n-_\b2_\b3_\b0namespace [[deprecated(\"Will be removed after Dune 2.10\")]] BasisBuilder {\n-231\n-232 using namespace BasisFactory;\n-233\n-234}\n-235\n-236} // end namespace Functions\n-237} // end namespace Dune\n-238\n-239\n-240#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bf_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-constexpr FlatLexicographic flatLexicographic()\n-Creates a lexicographic merging of direct children without blocking.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:192\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-constexpr BlockedInterleaved blockedInterleaved()\n-Creates an interleaved merging of direct children with blocking (i.e. creating\n-blocks at the leaves c...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:222\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bf_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-constexpr FlatInterleaved flatInterleaved()\n-Creates an interleaved merging of direct children without blocking.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:202\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-constexpr BlockedLexicographic blockedLexicographic()\n-Creates a lexicographic merging of direct children with blocking (i.e. creating\n-one block per direct ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:212\n+50 // A simple visitor for computing lexicographic\n+51 // subtree indices. To identify a leaf node\n+52 // we use its treeIndex() which is unique\n+53 // wrt the whole tree and store the computed\n+54 // index in a vector indexed by the tree indices.\n+_\b5_\b5 struct _\bV_\bi_\bs_\bi_\bt_\bo_\br\n+56 : public TypeTree::TreeVisitor\n+57 , public TypeTree::DynamicTraversal\n+58 {\n+_\b5_\b9 _\bV_\bi_\bs_\bi_\bt_\bo_\br(std::vector& indices) :\n+60 indices_(indices),\n+61 counter_(0)\n+62 {}\n+63\n+64 template\n+_\b6_\b5 void _\bl_\be_\ba_\bf(Node& node, TreePath treePath)\n+66 {\n+67 if (indices_.size() < node.treeIndex()+1)\n+68 indices_.resize(node.treeIndex()+1);\n+69 indices_[node.treeIndex()] = counter_;\n+70 ++counter_;\n+71 }\n+72\n+_\b7_\b3 std::vector& _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n+_\b7_\b4 std::size_t _\bc_\bo_\bu_\bn_\bt_\be_\br_\b_;\n+75 };\n+76\n+_\b8_\b7 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(const Tree& tree)\n+88 {\n+89 TypeTree::applyToTree(tree, _\bV_\bi_\bs_\bi_\bt_\bo_\br(indices_));\n+90 }\n+91\n+92 template().treeIndex())>() and not Tree::isLeaf, int> = 0>\n+_\b9_\b4 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n+Range&& y) const\n+95 {\n+96 return y[indices_[node.treeIndex()]];\n+97 }\n+98\n+99 template().treeIndex())>() or Tree::isLeaf, int> = 0>\n+_\b1_\b0_\b1 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n+Range&& y) const\n+102 {\n+103 return std::forward(y);\n+104 }\n+105\n+_\b1_\b0_\b6 std::vector _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n+107};\n+108\n+109\n+110\n+111template\n+_\b1_\b1_\b2_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\bT_\br_\be_\be_\b> _\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(const Tree& tree)\n+113{\n+114 return _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\bT_\br_\be_\be_\b>(tree);\n+115}\n+116\n+117\n+118\n+119template\n+_\b1_\b2_\b0auto _\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(const Basis& basis, TreePath&& treePath)\n+121 -> decltype(_\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(TypeTree::child(basis.localView\n+().tree(),treePath)))\n+122{\n+123 auto&& localView = basis.localView();\n+124 localView.bind(*basis.gridView().template begin<0>());\n+125 auto&& tree = TypeTree::child(localView.tree(),treePath);\n+126 return _\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(tree);\n+127}\n+128\n+129\n+130\n+131} // namespace Dune::Functions\n+132} // namespace Dune\n+133\n+134\n+135#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-static constexpr bool isIndexMergingStrategy()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bg_\bi_\bs_\bt_\be_\br_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-void registerIndexMergingStrategy(IndexMergingStrategy)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:19\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n-auto require(T &&t) -> decltype(registerIndexMergingStrategy(t))\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-Base class for index merging strategies to simplify detection.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:48\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-Lexicographic merging of direct children without blocking.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:84\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-Interleaved merging of direct children without blocking.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:118\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-Lexicographic merging of direct children with blocking (i.e. creating one block\n-per direct child).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-Interleaved merging of direct children with blocking (i.e. creating blocks at\n-the leaves containing o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:184\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:112\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+A simple node to range map using lexicographic ordering.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_\n+std::vector< std::size_t > indices_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:106\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+DefaultNodeToRangeMap(const Tree &tree)\n+Construct DefaultNodeToRangeMap.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:87\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+Visitor(std::vector< std::size_t > &indices)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:59\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bl_\be_\ba_\bf\n+void leaf(Node &node, TreePath treePath)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:65\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bu_\bn_\bt_\be_\br_\b_\n+std::size_t counter_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_\n+std::vector< std::size_t > & indices_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:73\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00116.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00116.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: bsplinebasis.hh File Reference\n+dune-functions: nedelecbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -74,78 +74,60 @@\n \n
    \n \n-
    bsplinebasis.hh File Reference
    \n+
    nedelecbasis.hh File Reference
    \n
    \n
    \n-\n-

    The B-spline global function space basis. \n-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+#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/leafprebasismixin.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n \n-\n+\n \n

    \n Classes

    class  Dune::Functions::BSplineLocalBasis< GV, R >
     LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch to a knot span. More...
     
    class  Dune::Functions::BSplineLocalCoefficients< dim >
     Attaches a shape function to an entity. More...
     
    class  Dune::Functions::BSplineLocalInterpolation< dim, LB >
     Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. More...
     
    class  Dune::Functions::BSplineLocalFiniteElement< GV, R >
     LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. More...
     
    class  Dune::Functions::BSplinePreBasis< GV >
     Pre-basis for B-spline basis. More...
    class  Dune::Functions::NedelecPreBasis< GV, Range, kind, order >
     
    class  Dune::Functions::BSplineNode< GV >
    class  Dune::Functions::NedelecNode< GV, Range, kind, order >
     
    \n \n \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Typedefs

    template<typename GV >
    using Dune::Functions::BSplineBasis = DefaultGlobalBasis< BSplinePreBasis< GV > >
     A global B-spline basis.
     
    template<typename GV , std::size_t kind, std::size_t order, typename Range = double>
    using Dune::Functions::NedelecBasis = DefaultGlobalBasis< NedelecPreBasis< GV, Range, kind, order > >
     Basis of a k-th-order N\u00e9d\u00e9lec finite element space.
     
    \n \n-\n-\n-\n+\n+\n+\n+\n

    \n Functions

    auto Dune::Functions::BasisFactory::bSpline (const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)
     Create a pre-basis factory that can create a B-spline pre-basis.
     
    template<std::size_t kind, std::size_t order, typename Range = double>
    auto Dune::Functions::BasisFactory::nedelec ()
     Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.
     
    \n-

    Detailed Description

    \n-

    The B-spline global function space basis.

    \n-
    \n+\n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,64 +2,45 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-bsplinebasis.hh File Reference\n-The B-spline global function space basis. _\bM_\bo_\br_\be_\b._\b._\b.\n+nedelecbasis.hh File Reference\n #include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include \n+#include \n+#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bR_\b _\b>\n-\u00a0 LocalBasis class in the sense of dune-localfunctions, presenting the\n- restriction of a B-spline patch to a knot span. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b<_\b _\bd_\bi_\bm_\b _\b>\n-\u00a0 Attaches a shape function to an entity. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b<_\b _\bd_\bi_\bm_\b,_\b _\bL_\bB_\b _\b>\n-\u00a0 Local interpolation in the sense of dune-localfunctions, for the B-\n- spline basis on tensor-product grids. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bG_\bV_\b,_\b _\bR_\b _\b>\n-\u00a0 LocalFiniteElement in the sense of dune-localfunctions, for the B-\n- spline basis on tensor-product grids. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b _\b>\n-\u00a0 Pre-basis for B-spline basis. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bR_\ba_\bn_\bg_\be_\b,_\b _\bk_\bi_\bn_\bd_\b,_\b _\bo_\br_\bd_\be_\br_\b _\b>\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bR_\ba_\bn_\bg_\be_\b,_\b _\bk_\bi_\bn_\bd_\b,_\b _\bo_\br_\bd_\be_\br_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV\n- > >\n-\u00a0 A global B-spline basis.\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV,\n+ Range, kind, order > >\n+\u00a0 Basis of a k-th-order N\u00c3\u00a9d\u00c3\u00a9lec finite element space.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\bS_\bp_\bl_\bi_\bn_\be (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.\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bn_\be_\bd_\be_\bl_\be_\bc ()\n+\u00a0 Create a pre-basis factory that can create a N\u00c3\u00a9d\u00c3\u00a9lec pre-basis.\n \u00a0\n-*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The B-spline global function space basis.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00116_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00116_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: bsplinebasis.hh Source File\n+dune-functions: nedelecbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,1281 +74,395 @@\n \n \n \n
    \n-
    bsplinebasis.hh
    \n+
    nedelecbasis.hh
    \n
    \n
    \n-Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n+Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n
    9
    \n-
    14#include <array>
    \n-
    15#include <numeric>
    \n-
    16
    \n-
    18#include <dune/common/dynmatrix.hh>
    \n-
    19
    \n-
    20#include <dune/localfunctions/common/localbasis.hh>
    \n-
    21#include <dune/common/diagonalmatrix.hh>
    \n-
    22#include <dune/localfunctions/common/localkey.hh>
    \n-
    23#include <dune/localfunctions/common/localfiniteelementtraits.hh>
    \n-
    24#include <dune/geometry/type.hh>
    \n-\n-\n-\n-
    28
    \n-
    29namespace Dune
    \n-
    30{
    \n-
    31namespace Functions {
    \n-
    32
    \n-
    33// A maze of dependencies between the different parts of this. We need a few forward declarations
    \n-
    34template<typename GV, typename R>
    \n-\n-
    36
    \n-
    37template<typename GV>
    \n-
    38class BSplinePreBasis;
    \n+
    10#include <array>
    \n+
    11#include <dune/common/exceptions.hh>
    \n+
    12
    \n+
    13#include <dune/grid/common/capabilities.hh>
    \n+
    14#include <dune/grid/common/mcmgmapper.hh>
    \n+
    15
    \n+
    16#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n+
    17#include <dune/localfunctions/nedelec.hh>
    \n+
    18
    \n+\n+\n+\n+\n+
    23
    \n+
    24namespace Dune::Functions
    \n+
    25{
    \n+
    26
    \n+
    27namespace Impl
    \n+
    28{
    \n+
    29 template<typename GV, int dim, typename R, std::size_t order>
    \n+
    30 class Nedelec1stKindLocalFiniteElementMap
    \n+
    31 {
    \n+
    32 using D = typename GV::ctype;
    \n+
    33 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n+
    34
    \n+
    35 using CubeFiniteElement = Nedelec1stKindCubeLocalFiniteElement<D,R,dim,order>;
    \n+
    36 using SimplexFiniteElement = Nedelec1stKindSimplexLocalFiniteElement<D,R,dim,order>;
    \n+
    37
    \n+
    38 public:
    \n
    39
    \n-
    40
    \n-
    49template<class GV, class R>
    \n-
    \n-\n-
    51{
    \n-
    52 friend class BSplineLocalFiniteElement<GV,R>;
    \n+
    40 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n+
    41
    \n+
    42 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n+
    43 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n+
    44
    \n+
    45 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n+
    46 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n+
    47 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n+
    48
    \n+
    49 static std::size_t numVariants(GeometryType type)
    \n+
    50 {
    \n+
    51 if (order!=1) // I am not sure whether the formula below is correct for all orders.
    \n+
    52 DUNE_THROW(NotImplemented, "Only Nedelec elements of order 1 are implemented!");
    \n
    53
    \n-
    54 typedef typename GV::ctype D;
    \n-
    55 enum {dim = GV::dimension};
    \n-
    56public:
    \n+
    54 auto numEdges = referenceElement<D,dim>(type).size(dim-1);
    \n+
    55 return power(2,numEdges);
    \n+
    56 }
    \n
    57
    \n-
    59 typedef LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,
    \n-
    60 FieldMatrix<R,1,dim> > Traits;
    \n-
    61
    \n-
    \n-\n-\n-
    68 : preBasis_(preBasis),
    \n-
    69 lFE_(lFE)
    \n-
    70 {}
    \n-
    \n-
    71
    \n-
    \n-
    75 void evaluateFunction (const FieldVector<D,dim>& in,
    \n-
    76 std::vector<FieldVector<R,1> >& out) const
    \n-
    77 {
    \n-
    78 FieldVector<D,dim> globalIn = offset_;
    \n-
    79 scaling_.umv(in,globalIn);
    \n-
    80
    \n-
    81 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);
    \n-
    82 }
    \n-
    \n-
    83
    \n-
    \n-
    87 void evaluateJacobian (const FieldVector<D,dim>& in,
    \n-
    88 std::vector<FieldMatrix<D,1,dim> >& out) const
    \n-
    89 {
    \n-
    90 FieldVector<D,dim> globalIn = offset_;
    \n-
    91 scaling_.umv(in,globalIn);
    \n-
    92
    \n-
    93 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);
    \n+
    58 Nedelec1stKindLocalFiniteElementMap(const GV& gv)
    \n+
    59 : elementMapper_(gv, mcmgElementLayout()),
    \n+
    60 orientation_(gv.size(0))
    \n+
    61 {
    \n+
    62 // create all variants
    \n+
    63 if constexpr (hasFixedElementType)
    \n+
    64 {
    \n+
    65 variants_.resize(numVariants(type));
    \n+
    66 for (size_t i = 0; i < numVariants(type); i++)
    \n+
    67 variants_[i] = FiniteElement(i);
    \n+
    68 }
    \n+
    69 else
    \n+
    70 {
    \n+
    71 // for mixed grids add offset for cubes
    \n+
    72 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));
    \n+
    73 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)
    \n+
    74 variants_[i] = SimplexFiniteElement(i);
    \n+
    75 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)
    \n+
    76 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);
    \n+
    77 }
    \n+
    78
    \n+
    79
    \n+
    80 // compute orientation for all elements
    \n+
    81 const auto& indexSet = gv.indexSet();
    \n+
    82
    \n+
    83 for(const auto& element : elements(gv))
    \n+
    84 {
    \n+
    85 const auto& refElement = referenceElement(element);
    \n+
    86 auto elementIndex = elementMapper_.index(element);
    \n+
    87 orientation_[elementIndex] = 0;
    \n+
    88
    \n+
    89 for (std::size_t i=0; i<element.subEntities(dim-1); i++)
    \n+
    90 {
    \n+
    91 // Local vertex indices within the element
    \n+
    92 auto localV0 = refElement.subEntity(i,dim-1, 0,dim);
    \n+
    93 auto localV1 = refElement.subEntity(i,dim-1, 1,dim);
    \n
    94
    \n-
    95 for (size_t i=0; i<out.size(); i++)
    \n-
    96 for (int j=0; j<dim; j++)
    \n-
    97 out[i][0][j] *= scaling_[j][j];
    \n-
    98 }
    \n-
    \n-
    99
    \n-
    101 template<size_t k>
    \n-
    \n-
    102 inline void evaluate (const typename std::array<int,k>& directions,
    \n-
    103 const typename Traits::DomainType& in,
    \n-
    104 std::vector<typename Traits::RangeType>& out) const
    \n-
    105 {
    \n-
    106 switch(k)
    \n-
    107 {
    \n-
    108 case 0:
    \n-
    109 evaluateFunction(in, out);
    \n-
    110 break;
    \n-
    111 case 1:
    \n-
    112 {
    \n-
    113 FieldVector<D,dim> globalIn = offset_;
    \n-
    114 scaling_.umv(in,globalIn);
    \n-
    115
    \n-
    116 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);
    \n-
    117
    \n-
    118 for (size_t i=0; i<out.size(); i++)
    \n-
    119 out[i][0] *= scaling_[directions[0]][directions[0]];
    \n-
    120 break;
    \n-
    121 }
    \n-
    122 case 2:
    \n-
    123 {
    \n-
    124 FieldVector<D,dim> globalIn = offset_;
    \n-
    125 scaling_.umv(in,globalIn);
    \n-
    126
    \n-
    127 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);
    \n-
    128
    \n-
    129 for (size_t i=0; i<out.size(); i++)
    \n-
    130 out[i][0] *= scaling_[directions[0]][directions[0]]*scaling_[directions[1]][directions[1]];
    \n-
    131 break;
    \n-
    132 }
    \n-
    133 default:
    \n-
    134 DUNE_THROW(NotImplemented, "B-Spline derivatives of order " << k << " not implemented yet!");
    \n-
    135 }
    \n-
    136 }
    \n-
    \n-
    137
    \n-
    \n-
    145 unsigned int order () const
    \n-
    146 {
    \n-
    147 return *std::max_element(preBasis_.order_.begin(), preBasis_.order_.end());
    \n-
    148 }
    \n-
    \n+
    95 // Global vertex indices within the grid
    \n+
    96 auto globalV0 = indexSet.subIndex(element,localV0,dim);
    \n+
    97 auto globalV1 = indexSet.subIndex(element,localV1,dim);
    \n+
    98
    \n+
    99 if ( (localV0<localV1 && globalV0>globalV1) || (localV0>localV1 && globalV0<globalV1) )
    \n+
    100 orientation_[elementIndex] |= (1 << i);
    \n+
    101 }
    \n+
    102 // for mixed grids add offset for cubes
    \n+
    103 if constexpr (!hasFixedElementType)
    \n+
    104 if (element.type().isCube())
    \n+
    105 orientation_[elementIndex] += numVariants(GeometryTypes::simplex(dim));
    \n+
    106 }
    \n+
    107 }
    \n+
    108
    \n+
    109 template<class Element>
    \n+
    110 const auto& find(const Element& element) const
    \n+
    111 {
    \n+
    112 return variants_[orientation_[elementMapper_.index(element)]];
    \n+
    113 }
    \n+
    114
    \n+
    115 private:
    \n+
    116 std::vector<FiniteElement> variants_;
    \n+
    117 Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;
    \n+
    118 std::vector<unsigned short> orientation_;
    \n+
    119 };
    \n+
    120
    \n+
    121
    \n+
    122} // namespace Impl
    \n+
    123
    \n+
    124
    \n+
    125// *****************************************************************************
    \n+
    126// This is the reusable part of the basis. It contains
    \n+
    127//
    \n+
    128// NedelecPreBasis
    \n+
    129// NedelecNode
    \n+
    130//
    \n+
    131// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    132// state. These components do _not_ depend on the global basis and local view
    \n+
    133// and can be used without a global basis.
    \n+
    134// *****************************************************************************
    \n+
    135
    \n+
    136template<typename GV, typename Range, std::size_t kind, int order>
    \n+
    137class NedelecNode;
    \n+
    138
    \n+
    139template<typename GV, typename Range, std::size_t kind, int order>
    \n+
    \n+\n+
    141 public LeafPreBasisMixin< NedelecPreBasis<GV,Range,kind,order> >
    \n+
    142{
    \n+
    143 static const int dim = GV::dimension;
    \n+
    144 static_assert(kind==1, "Only the Nedelec basis of the first kind is currently implemented!");
    \n+
    145 using FiniteElementMap = typename Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;
    \n+
    146
    \n+
    147 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper<GV>;
    \n+
    148public:
    \n
    149
    \n-
    \n-
    152 std::size_t size() const
    \n-
    153 {
    \n-
    154 return lFE_.size();
    \n-
    155 }
    \n-
    \n-
    156
    \n-
    157private:
    \n-
    158 const BSplinePreBasis<GV>& preBasis_;
    \n-
    159
    \n-\n-
    161
    \n-
    162 // Coordinates in a single knot span differ from coordinates on the B-spline patch
    \n-
    163 // by an affine transformation. This transformation is stored in offset_ and scaling_.
    \n-
    164 FieldVector<D,dim> offset_;
    \n-
    165 DiagonalMatrix<D,dim> scaling_;
    \n-
    166};
    \n-
    \n-
    167
    \n-
    181template<int dim>
    \n-
    \n-\n-
    183{
    \n-
    184 // Return i as a d-digit number in the (k+1)-nary system
    \n-
    185 std::array<unsigned int,dim> multiindex (unsigned int i) const
    \n-
    186 {
    \n-
    187 std::array<unsigned int,dim> alpha;
    \n-
    188 for (int j=0; j<dim; j++)
    \n-
    189 {
    \n-
    190 alpha[j] = i % sizes_[j];
    \n-
    191 i = i/sizes_[j];
    \n-
    192 }
    \n-
    193 return alpha;
    \n-
    194 }
    \n-
    195
    \n-
    197 void setup1d(std::vector<unsigned int>& subEntity)
    \n-
    198 {
    \n-
    199 if (sizes_[0]==1)
    \n-
    200 {
    \n-
    201 subEntity[0] = 0;
    \n-
    202 return;
    \n-
    203 }
    \n-
    204
    \n-
    205 /* edge and vertex numbering
    \n-
    206 0----0----1
    \n-
    207 */
    \n-
    208 unsigned lastIndex=0;
    \n-
    209 subEntity[lastIndex++] = 0; // corner 0
    \n-
    210 for (unsigned i = 0; i < sizes_[0] - 2; ++i)
    \n-
    211 subEntity[lastIndex++] = 0; // inner dofs of element (0)
    \n-
    212
    \n-
    213 subEntity[lastIndex++] = 1; // corner 1
    \n-
    214
    \n-
    215 assert(size()==lastIndex);
    \n-
    216 }
    \n-
    217
    \n-
    218 void setup2d(std::vector<unsigned int>& subEntity)
    \n-
    219 {
    \n-
    220 unsigned lastIndex=0;
    \n-
    221
    \n-
    222 // LocalKey: entity number , entity codim, dof indices within each entity
    \n-
    223 /* edge and vertex numbering
    \n-
    224 2----3----3
    \n-
    225 | |
    \n-
    226 | |
    \n-
    227 0 1
    \n-
    228 | |
    \n-
    229 | |
    \n-
    230 0----2----1
    \n-
    231 */
    \n-
    232
    \n-
    233 // lower edge (2)
    \n-
    234 subEntity[lastIndex++] = 0; // corner 0
    \n-
    235 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n-
    236 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)
    \n-
    237
    \n-
    238 subEntity[lastIndex++] = 1; // corner 1
    \n-
    239
    \n-
    240 // iterate from bottom to top over inner edge dofs
    \n-
    241 for (unsigned e = 0; e < sizes_[1]-2; ++e)
    \n-
    242 {
    \n-
    243 subEntity[lastIndex++] = 0; // left edge (0)
    \n-
    244 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n-
    245 subEntity[lastIndex++] = 0; // face dofs
    \n-
    246 subEntity[lastIndex++] = 1; // right edge (1)
    \n-
    247 }
    \n-
    248
    \n-
    249 // upper edge (3)
    \n-
    250 subEntity[lastIndex++] = 2; // corner 2
    \n-
    251 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n-
    252 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)
    \n-
    253
    \n-
    254 subEntity[lastIndex++] = 3; // corner 3
    \n-
    255
    \n-
    256 assert(size()==lastIndex);
    \n-
    257 }
    \n-
    258
    \n+
    151 using GridView = GV;
    \n+
    152 using size_type = std::size_t;
    \n+
    153
    \n+\n+
    155
    \n+
    \n+\n+
    158 gridView_(gv),
    \n+\n+
    160 mapper_(gridView_, mcmgLayout(Dim<1>{}))
    \n+
    161 {
    \n+
    162 if (kind!=1)
    \n+
    163 DUNE_THROW(NotImplemented, "Only Nedelec elements of the first kind are implemented!");
    \n+
    164
    \n+
    165 // There is no inherent reason why the basis shouldn't work for grids with more than two
    \n+
    166 // element types. Somebody simply has to sit down and implement the missing bits.
    \n+
    167 if (gv.indexSet().types(0).size() > 2)
    \n+
    168 DUNE_THROW(NotImplemented, "N\u00e9d\u00e9lec basis is only implemented for grids with simplex and cube elements");
    \n+
    169
    \n+
    170 for(auto type : gv.indexSet().types(0))
    \n+
    171 if (!type.isSimplex() && !type.isCube())
    \n+
    172 DUNE_THROW(NotImplemented, "N\u00e9d\u00e9lec basis is only implemented for grids with simplex or cube elements.");
    \n+
    173
    \n+
    174 if (order>1)
    \n+
    175 DUNE_THROW(NotImplemented, "Only first-order elements are implemented");
    \n+
    176
    \n+
    177 if (dim!=2 && dim!=3)
    \n+
    178 DUNE_THROW(NotImplemented, "Only 2d and 3d N\u00e9d\u00e9lec elements are implemented");
    \n+
    179 }
    \n+
    \n+
    180
    \n+
    \n+\n+
    182 {}
    \n+
    \n+
    183
    \n+
    \n+
    186 const GridView& gridView() const
    \n+
    187 {
    \n+
    188 return gridView_;
    \n+
    189 }
    \n+
    \n+
    190
    \n+
    191 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n+
    \n+
    192 void update (const GridView& gv)
    \n+
    193 {
    \n+
    194 gridView_ = gv;
    \n+
    195 mapper_.update(gridView_);
    \n+
    196 }
    \n+
    \n+
    197
    \n+
    \n+\n+
    202 {
    \n+
    203 return Node{&finiteElementMap_};
    \n+
    204 }
    \n+
    \n+
    205
    \n+
    \n+\n+
    207 {
    \n+
    208 return mapper_.size();
    \n+
    209 }
    \n+
    \n+
    210
    \n+
    \n+\n+
    212 {
    \n+
    213 size_type result = 0;
    \n+
    214 for (auto&& type : gridView_.indexSet().types(0))
    \n+
    215 {
    \n+
    216 size_type numEdges = referenceElement<typename GV::ctype,dim>(type).size(dim-1);
    \n+
    217 result = std::max(result, numEdges);
    \n+
    218 }
    \n+
    219
    \n+
    220 return result;
    \n+
    221 }
    \n+
    \n+
    222
    \n+
    226 template<typename It>
    \n+
    \n+
    227 It indices(const Node& node, It it) const
    \n+
    228 {
    \n+
    229 const auto& element = node.element();
    \n+
    230
    \n+
    231 // throw if Element is not of predefined type
    \n+
    232 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n+
    233 DUNE_THROW(NotImplemented, "NedelecBasis only implemented for cube and simplex elements.");
    \n+
    234
    \n+
    235 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n+
    236 {
    \n+
    237 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    238 *it = { mapper_.subIndex(element, localKey.subEntity(), localKey.codim()) + localKey.index() };
    \n+
    239 }
    \n+
    240
    \n+
    241 return it;
    \n+
    242 }
    \n+
    \n+
    243
    \n+
    244protected:
    \n+\n+
    246 FiniteElementMap finiteElementMap_;
    \n+
    247 Mapper mapper_;
    \n+
    248};
    \n+
    \n+
    249
    \n+
    250
    \n+
    251
    \n+
    252template<typename GV, typename Range, size_t kind, int order>
    \n+
    \n+\n+
    254 public LeafBasisNode
    \n+
    255{
    \n+
    256 static const int dim = GV::dimension;
    \n+
    257
    \n+
    258public:
    \n
    259
    \n-
    260public:
    \n-
    \n-
    261 void init(const std::array<unsigned,dim>& sizes)
    \n-
    262 {
    \n-
    263 sizes_ = sizes;
    \n-
    264
    \n-
    265 li_.resize(size());
    \n-
    266
    \n-
    267 // Set up array of codimension-per-dof-number
    \n-
    268 std::vector<unsigned int> codim(li_.size());
    \n-
    269
    \n-
    270 for (std::size_t i=0; i<codim.size(); i++)
    \n-
    271 {
    \n-
    272 codim[i] = 0;
    \n-
    273 // Codimension gets increased by 1 for each coordinate direction
    \n-
    274 // where dof is on boundary
    \n-
    275 std::array<unsigned int,dim> mIdx = multiindex(i);
    \n-
    276 for (int j=0; j<dim; j++)
    \n-
    277 if (mIdx[j]==0 or mIdx[j]==sizes[j]-1)
    \n-
    278 codim[i]++;
    \n-
    279 }
    \n-
    280
    \n-
    281 // Set up index vector (the index of the dof in the set of dofs of a given subentity)
    \n-
    282 // Algorithm: the 'index' has the same ordering as the dof number 'i'.
    \n-
    283 // To make it consecutive we interpret 'i' in the (k+1)-adic system, omit all digits
    \n-
    284 // that correspond to axes where the dof is on the element boundary, and transform the
    \n-
    285 // rest to the (k-1)-adic system.
    \n-
    286 std::vector<unsigned int> index(size());
    \n+
    260 using size_type = std::size_t;
    \n+
    261 using Element = typename GV::template Codim<0>::Entity;
    \n+
    262 static_assert(kind==1, "Only Nedelec elements of the first kind are implemented!");
    \n+
    263 using FiniteElementMap = typename Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;
    \n+
    264 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::CovariantPiolaTransformator,
    \n+
    265 typename FiniteElementMap::FiniteElement,
    \n+
    266 Element>;
    \n+
    267
    \n+
    \n+
    268 NedelecNode(const FiniteElementMap* finiteElementMap) :
    \n+
    269 element_(nullptr),
    \n+
    270 finiteElementMap_(finiteElementMap)
    \n+
    271 { }
    \n+
    \n+
    272
    \n+
    \n+
    274 const Element& element() const
    \n+
    275 {
    \n+
    276 return *element_;
    \n+
    277 }
    \n+
    \n+
    278
    \n+
    \n+\n+
    284 {
    \n+
    285 return finiteElement_;
    \n+
    286 }
    \n+
    \n
    287
    \n-
    288 for (std::size_t i=0; i<index.size(); i++)
    \n-
    289 {
    \n-
    290 index[i] = 0;
    \n-
    291
    \n-
    292 std::array<unsigned int,dim> mIdx = multiindex(i);
    \n-
    293
    \n-
    294 for (int j=dim-1; j>=0; j--)
    \n-
    295 if (mIdx[j]>0 and mIdx[j]<sizes[j]-1)
    \n-
    296 index[i] = (sizes[j]-1)*index[i] + (mIdx[j]-1);
    \n-
    297 }
    \n-
    298
    \n-
    299 // Set up entity and dof numbers for each (supported) dimension separately
    \n-
    300 std::vector<unsigned int> subEntity(li_.size());
    \n-
    301
    \n-
    302 if (subEntity.size() > 0)
    \n-
    303 {
    \n-
    304 if (dim==1) {
    \n-
    305
    \n-
    306 setup1d(subEntity);
    \n-
    307
    \n-
    308 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {
    \n-
    309
    \n-
    310 setup2d(subEntity);
    \n-
    311
    \n-
    312 }
    \n-
    313 }
    \n-
    314
    \n-
    315 for (size_t i=0; i<li_.size(); i++)
    \n-
    316 li_[i] = LocalKey(subEntity[i], codim[i], index[i]);
    \n-
    317 }
    \n-
    \n-
    318
    \n-
    \n-
    320 std::size_t size () const
    \n-
    321 {
    \n-
    322 return std::accumulate(sizes_.begin(), sizes_.end(), 1, std::multiplies<unsigned int>());
    \n-
    323 }
    \n-
    \n-
    324
    \n-
    \n-
    326 const LocalKey& localKey (std::size_t i) const
    \n-
    327 {
    \n-
    328 return li_[i];
    \n-
    329 }
    \n-
    \n-
    330
    \n-
    331private:
    \n-
    332
    \n-
    333 // Number of shape functions on this element per coordinate direction
    \n-
    334 std::array<unsigned, dim> sizes_;
    \n-
    335
    \n-
    336 std::vector<LocalKey> li_;
    \n-
    337};
    \n-
    \n-
    338
    \n-
    343template<int dim, class LB>
    \n-
    \n-\n-
    345{
    \n-
    346public:
    \n-
    348 template<typename F, typename C>
    \n-
    \n-
    349 void interpolate (const F& f, std::vector<C>& out) const
    \n-
    350 {
    \n-
    351 DUNE_THROW(NotImplemented, "BSplineLocalInterpolation::interpolate");
    \n-
    352 }
    \n-
    \n-
    353
    \n-
    354};
    \n-
    \n-
    355
    \n-
    365template<class GV, class R>
    \n-
    \n-\n-
    367{
    \n-
    368 typedef typename GV::ctype D;
    \n-
    369 enum {dim = GV::dimension};
    \n-
    370 friend class BSplineLocalBasis<GV,R>;
    \n-
    371public:
    \n-
    372
    \n-
    375 typedef LocalFiniteElementTraits<BSplineLocalBasis<GV,R>,
    \n-\n-\n-
    378
    \n-
    \n-\n-
    382 : preBasis_(preBasis),
    \n-
    383 localBasis_(preBasis,*this)
    \n-
    384 {}
    \n-
    \n-
    385
    \n-
    \n-\n-
    389 : preBasis_(other.preBasis_),
    \n-\n-
    391 {}
    \n-
    \n-
    392
    \n-
    \n-
    399 void bind(const std::array<unsigned,dim>& elementIdx)
    \n-
    400 {
    \n-
    401 /* \\todo In the long run we need to precompute a table for this */
    \n-
    402 for (size_t i=0; i<elementIdx.size(); i++)
    \n-
    403 {
    \n-
    404 currentKnotSpan_[i] = 0;
    \n-
    405
    \n-
    406 // Skip over degenerate knot spans
    \n-
    407 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] < preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)
    \n-
    408 currentKnotSpan_[i]++;
    \n-
    409
    \n-
    410 for (size_t j=0; j<elementIdx[i]; j++)
    \n-
    411 {
    \n-
    412 currentKnotSpan_[i]++;
    \n-
    413
    \n-
    414 // Skip over degenerate knot spans
    \n-
    415 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] < preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)
    \n-
    416 currentKnotSpan_[i]++;
    \n-
    417 }
    \n-
    418
    \n-
    419 // Compute the geometric transformation from knotspan-local to global coordinates
    \n-
    420 localBasis_.offset_[i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]];
    \n-
    421 localBasis_.scaling_[i][i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] - preBasis_.knotVectors_[i][currentKnotSpan_[i]];
    \n-
    422 }
    \n-
    423
    \n-
    424 // Set up the LocalCoefficients object
    \n-
    425 std::array<unsigned int, dim> sizes;
    \n-
    426 for (size_t i=0; i<dim; i++)
    \n-
    427 sizes[i] = size(i);
    \n-
    428 localCoefficients_.init(sizes);
    \n-
    429 }
    \n-
    \n-
    430
    \n-
    \n-\n-
    433 {
    \n-
    434 return localBasis_;
    \n-
    435 }
    \n-
    \n-
    436
    \n-
    \n-\n-
    439 {
    \n-
    440 return localCoefficients_;
    \n-
    441 }
    \n-
    \n-
    442
    \n-\n-
    448
    \n-
    \n-
    450 unsigned size () const
    \n-
    451 {
    \n-
    452 std::size_t r = 1;
    \n-
    453 for (int i=0; i<dim; i++)
    \n-
    454 r *= size(i);
    \n-
    455 return r;
    \n-
    456 }
    \n-
    \n-
    457
    \n-
    \n-
    460 GeometryType type () const
    \n-
    461 {
    \n-
    462 return GeometryTypes::cube(dim);
    \n-
    463 }
    \n-
    \n-
    464
    \n-
    465//private:
    \n-
    466
    \n-
    \n-
    468 unsigned int size(int i) const
    \n-
    469 {
    \n-
    470 const auto& order = preBasis_.order_;
    \n-
    471 unsigned int r = order[i]+1; // The 'normal' value
    \n-
    472 if (currentKnotSpan_[i]<order[i]) // Less near the left end of the knot vector
    \n-
    473 r -= (order[i] - currentKnotSpan_[i]);
    \n-
    474 if ( order[i] > (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] - 2) )
    \n-
    475 r -= order[i] - (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] - 2);
    \n-
    476 return r;
    \n-
    477 }
    \n-
    \n-
    478
    \n-\n-
    480
    \n-\n-\n-\n-
    484
    \n-
    485 // The knot span we are bound to
    \n-
    486 std::array<unsigned,dim> currentKnotSpan_;
    \n-
    487};
    \n-
    \n-
    488
    \n-
    489
    \n-
    490template<typename GV>
    \n-
    491class BSplineNode;
    \n-
    492
    \n-
    502template<typename GV>
    \n-
    \n-\n-
    504 public LeafPreBasisMixin< BSplinePreBasis<GV> >
    \n-
    505{
    \n-\n-
    507
    \n-
    508 static const int dim = GV::dimension;
    \n-
    509
    \n-
    511 class MultiDigitCounter
    \n-
    512 {
    \n-
    513 public:
    \n-
    514
    \n-
    518 MultiDigitCounter(const std::array<unsigned int,dim>& limits)
    \n-
    519 : limits_(limits)
    \n-
    520 {
    \n-
    521 std::fill(counter_.begin(), counter_.end(), 0);
    \n-
    522 }
    \n-
    523
    \n-
    525 MultiDigitCounter& operator++()
    \n-
    526 {
    \n-
    527 for (int i=0; i<dim; i++)
    \n-
    528 {
    \n-
    529 ++counter_[i];
    \n-
    530
    \n-
    531 // no overflow?
    \n-
    532 if (counter_[i] < limits_[i])
    \n-
    533 break;
    \n-
    534
    \n-
    535 counter_[i] = 0;
    \n-
    536 }
    \n-
    537 return *this;
    \n-
    538 }
    \n-
    539
    \n-
    541 const unsigned int& operator[](int i) const
    \n-
    542 {
    \n-
    543 return counter_[i];
    \n-
    544 }
    \n-
    545
    \n-
    547 unsigned int cycle() const
    \n-
    548 {
    \n-
    549 unsigned int r = 1;
    \n-
    550 for (int i=0; i<dim; i++)
    \n-
    551 r *= limits_[i];
    \n-
    552 return r;
    \n-
    553 }
    \n-
    554
    \n-
    555 private:
    \n-
    556
    \n-
    558 const std::array<unsigned int,dim> limits_;
    \n-
    559
    \n-
    561 std::array<unsigned int,dim> counter_;
    \n-
    562
    \n-
    563 };
    \n-
    564
    \n-
    565public:
    \n-
    566
    \n-
    568 using GridView = GV;
    \n-
    569 using size_type = std::size_t;
    \n-
    570
    \n-\n-
    572
    \n-
    573 // Type used for function values
    \n-
    574 using R = double;
    \n-
    575
    \n-
    \n-\n-
    595 const std::vector<double>& knotVector,
    \n-
    596 unsigned int order,
    \n-
    597 bool makeOpen = true)
    \n-\n-
    599 {
    \n-
    600 // \\todo Detection of duplicate knots
    \n-
    601 std::fill(elements_.begin(), elements_.end(), knotVector.size()-1);
    \n-
    602
    \n-
    603 // Mediocre sanity check: we don't know the number of grid elements in each direction.
    \n-
    604 // but at least we know the total number of elements.
    \n-
    605 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::multiplies<unsigned>()) == gridView_.size(0) );
    \n-
    606
    \n-
    607 for (int i=0; i<dim; i++)
    \n-
    608 {
    \n-
    609 // Prepend the correct number of additional knots to open the knot vector
    \n-
    611 if (makeOpen)
    \n-
    612 for (unsigned int j=0; j<order; j++)
    \n-
    613 knotVectors_[i].push_back(knotVector[0]);
    \n-
    614
    \n-
    615 knotVectors_[i].insert(knotVectors_[i].end(), knotVector.begin(), knotVector.end());
    \n-
    616
    \n-
    617 if (makeOpen)
    \n-
    618 for (unsigned int j=0; j<order; j++)
    \n-
    619 knotVectors_[i].push_back(knotVector.back());
    \n-
    620 }
    \n-
    621
    \n-
    622 std::fill(order_.begin(), order_.end(), order);
    \n-
    623 }
    \n-
    \n-
    624
    \n-
    \n-\n-
    647 const FieldVector<double,dim>& lowerLeft,
    \n-
    648 const FieldVector<double,dim>& upperRight,
    \n-
    649 const std::array<unsigned int,dim>& elements,
    \n-
    650 unsigned int order,
    \n-
    651 bool makeOpen = true)
    \n-
    652 : elements_(elements),
    \n-\n-
    654 {
    \n-
    655 // Mediocre sanity check: we don't know the number of grid elements in each direction.
    \n-
    656 // but at least we know the total number of elements.
    \n-
    657 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::multiplies<unsigned>()) == gridView_.size(0) );
    \n-
    658
    \n-
    659 for (int i=0; i<dim; i++)
    \n-
    660 {
    \n-
    661 // Prepend the correct number of additional knots to open the knot vector
    \n-
    663 if (makeOpen)
    \n-
    664 for (unsigned int j=0; j<order; j++)
    \n-
    665 knotVectors_[i].push_back(lowerLeft[i]);
    \n-
    666
    \n-
    667 // Construct the actual knot vector
    \n-
    668 for (size_t j=0; j<elements[i]+1; j++)
    \n-
    669 knotVectors_[i].push_back(lowerLeft[i] + j*(upperRight[i]-lowerLeft[i]) / elements[i]);
    \n-
    670
    \n-
    671 if (makeOpen)
    \n-
    672 for (unsigned int j=0; j<order; j++)
    \n-
    673 knotVectors_[i].push_back(upperRight[i]);
    \n-
    674 }
    \n-
    675
    \n-
    676 std::fill(order_.begin(), order_.end(), order);
    \n-
    677 }
    \n-
    \n-
    678
    \n-
    \n-\n-
    681 {}
    \n-
    \n-
    682
    \n-
    \n-
    684 const GridView& gridView() const
    \n-
    685 {
    \n-
    686 return gridView_;
    \n-
    687 }
    \n-
    \n-
    688
    \n-
    \n-
    690 void update(const GridView& gv)
    \n-
    691 {
    \n-
    692 gridView_ = gv;
    \n-
    693 }
    \n-
    \n-
    694
    \n-
    \n-\n-
    699 {
    \n-
    700 return Node{this};
    \n-
    701 }
    \n-
    \n-
    702
    \n-
    \n-\n-
    705 {
    \n-
    706 size_type result = 1;
    \n-
    707 for (int i=0; i<dim; i++)
    \n-
    708 result *= order_[i]+1;
    \n-
    709 return result;
    \n-
    710 }
    \n-
    \n-
    711
    \n-
    713 template<typename It>
    \n-
    \n-
    714 It indices(const Node& node, It it) const
    \n-
    715 {
    \n-
    716 // Local degrees of freedom are arranged in a lattice.
    \n-
    717 // We need the lattice dimensions to be able to compute lattice coordinates from a local index
    \n-
    718 std::array<unsigned int, dim> localSizes;
    \n-
    719 for (int i=0; i<dim; i++)
    \n-
    720 localSizes[i] = node.finiteElement().size(i);
    \n-
    721 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n-
    722 {
    \n-
    723 std::array<unsigned int,dim> localIJK = getIJK(i, localSizes);
    \n-
    724
    \n-
    725 const auto currentKnotSpan = node.finiteElement().currentKnotSpan_;
    \n-
    726 const auto order = order_;
    \n-
    727
    \n-
    728 std::array<unsigned int,dim> globalIJK;
    \n-
    729 for (int i=0; i<dim; i++)
    \n-
    730 globalIJK[i] = std::max((int)currentKnotSpan[i] - (int)order[i], 0) + localIJK[i]; // needs to be a signed type!
    \n-
    731
    \n-
    732 // Make one global flat index from the globalIJK tuple
    \n-
    733 size_type globalIdx = globalIJK[dim-1];
    \n-
    734
    \n-
    735 for (int i=dim-2; i>=0; i--)
    \n-
    736 globalIdx = globalIdx * size(i) + globalIJK[i];
    \n-
    737
    \n-
    738 *it = {{globalIdx}};
    \n-
    739 }
    \n-
    740 return it;
    \n-
    741 }
    \n-
    \n-
    742
    \n-
    \n-
    744 unsigned int dimension () const
    \n-
    745 {
    \n-
    746 unsigned int result = 1;
    \n-
    747 for (size_t i=0; i<dim; i++)
    \n-
    748 result *= size(i);
    \n-
    749 return result;
    \n-
    750 }
    \n-
    \n-
    751
    \n-
    \n-
    753 unsigned int size (size_t d) const
    \n-
    754 {
    \n-
    755 return knotVectors_[d].size() - order_[d] - 1;
    \n-
    756 }
    \n-
    \n-
    757
    \n-
    758 using Base::size;
    \n-
    759
    \n-
    \n-
    762 void evaluateFunction (const FieldVector<typename GV::ctype,dim>& in,
    \n-
    763 std::vector<FieldVector<R,1> >& out,
    \n-
    764 const std::array<unsigned,dim>& currentKnotSpan) const
    \n-
    765 {
    \n-
    766 // Evaluate
    \n-
    767 std::array<std::vector<R>, dim> oneDValues;
    \n-
    768
    \n-
    769 for (size_t i=0; i<dim; i++)
    \n-
    770 evaluateFunction(in[i], oneDValues[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n-
    771
    \n-
    772 std::array<unsigned int, dim> limits;
    \n-
    773 for (int i=0; i<dim; i++)
    \n-
    774 limits[i] = oneDValues[i].size();
    \n-
    775
    \n-
    776 MultiDigitCounter ijkCounter(limits);
    \n-
    777
    \n-
    778 out.resize(ijkCounter.cycle());
    \n-
    779
    \n-
    780 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n-
    781 {
    \n-
    782 out[i] = R(1.0);
    \n-
    783 for (size_t j=0; j<dim; j++)
    \n-
    784 out[i] *= oneDValues[j][ijkCounter[j]];
    \n-
    785 }
    \n-
    786 }
    \n-
    \n-
    787
    \n-
    \n-
    793 void evaluateJacobian (const FieldVector<typename GV::ctype,dim>& in,
    \n-
    794 std::vector<FieldMatrix<R,1,dim> >& out,
    \n-
    795 const std::array<unsigned,dim>& currentKnotSpan) const
    \n-
    796 {
    \n-
    797 // How many shape functions to we have in each coordinate direction?
    \n-
    798 std::array<unsigned int, dim> limits;
    \n-
    799 for (int i=0; i<dim; i++)
    \n-
    800 {
    \n-
    801 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries of the knot vector
    \n-
    802 if (currentKnotSpan[i]<order_[i])
    \n-
    803 limits[i] -= (order_[i] - currentKnotSpan[i]);
    \n-
    804 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )
    \n-
    805 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] - 2);
    \n-
    806 }
    \n-
    807
    \n-
    808 // The lowest knot spans that we need values from
    \n-
    809 std::array<unsigned int, dim> offset;
    \n-
    810 for (int i=0; i<dim; i++)
    \n-
    811 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);
    \n-
    812
    \n-
    813 // Evaluate 1d function values (needed for the product rule)
    \n-
    814 std::array<std::vector<R>, dim> oneDValues;
    \n-
    815
    \n-
    816 // Evaluate 1d function values of one order lower (needed for the derivative formula)
    \n-
    817 std::array<std::vector<R>, dim> lowOrderOneDValues;
    \n-
    818
    \n-
    819 std::array<DynamicMatrix<R>, dim> values;
    \n-
    820
    \n-
    821 for (size_t i=0; i<dim; i++)
    \n-
    822 {
    \n-
    823 evaluateFunctionFull(in[i], values[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n-
    824 oneDValues[i].resize(knotVectors_[i].size()-order_[i]-1);
    \n-
    825 for (size_t j=0; j<oneDValues[i].size(); j++)
    \n-
    826 oneDValues[i][j] = values[i][order_[i]][j];
    \n-
    827
    \n-
    828 if (order_[i]!=0)
    \n-
    829 {
    \n-
    830 lowOrderOneDValues[i].resize(knotVectors_[i].size()-(order_[i]-1)-1);
    \n-
    831 for (size_t j=0; j<lowOrderOneDValues[i].size(); j++)
    \n-
    832 lowOrderOneDValues[i][j] = values[i][order_[i]-1][j];
    \n-
    833 }
    \n-
    834 }
    \n-
    835
    \n-
    836
    \n-
    837 // Evaluate 1d function derivatives
    \n-
    838 std::array<std::vector<R>, dim> oneDDerivatives;
    \n-
    839 for (size_t i=0; i<dim; i++)
    \n-
    840 {
    \n-
    841 oneDDerivatives[i].resize(limits[i]);
    \n-
    842
    \n-
    843 if (order_[i]==0) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n-
    844 std::fill(oneDDerivatives[i].begin(), oneDDerivatives[i].end(), R(0.0));
    \n-
    845 else
    \n-
    846 {
    \n-
    847 for (size_t j=offset[i]; j<offset[i]+limits[i]; j++)
    \n-
    848 {
    \n-
    849 R derivativeAddend1 = lowOrderOneDValues[i][j] / (knotVectors_[i][j+order_[i]]-knotVectors_[i][j]);
    \n-
    850 R derivativeAddend2 = lowOrderOneDValues[i][j+1] / (knotVectors_[i][j+order_[i]+1]-knotVectors_[i][j+1]);
    \n-
    851 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n-
    852 if (std::isnan(derivativeAddend1))
    \n-
    853 derivativeAddend1 = 0;
    \n-
    854 if (std::isnan(derivativeAddend2))
    \n-
    855 derivativeAddend2 = 0;
    \n-
    856 oneDDerivatives[i][j-offset[i]] = order_[i] * ( derivativeAddend1 - derivativeAddend2 );
    \n-
    857 }
    \n-
    858 }
    \n-
    859 }
    \n-
    860
    \n-
    861 // Working towards computing only the parts that we really need:
    \n-
    862 // Let's copy them out into a separate array
    \n-
    863 std::array<std::vector<R>, dim> oneDValuesShort;
    \n-
    864
    \n-
    865 for (int i=0; i<dim; i++)
    \n-
    866 {
    \n-
    867 oneDValuesShort[i].resize(limits[i]);
    \n-
    868
    \n-
    869 for (size_t j=0; j<limits[i]; j++)
    \n-
    870 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];
    \n-
    871 }
    \n-
    872
    \n-
    873
    \n-
    874
    \n-
    875 // Set up a multi-index to go from consecutive indices to integer coordinates
    \n-
    876 MultiDigitCounter ijkCounter(limits);
    \n-
    877
    \n-
    878 out.resize(ijkCounter.cycle());
    \n-
    879
    \n-
    880 // Complete Jacobian is given by the product rule
    \n-
    881 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n-
    882 for (int j=0; j<dim; j++)
    \n-
    883 {
    \n-
    884 out[i][0][j] = 1.0;
    \n-
    885 for (int k=0; k<dim; k++)
    \n-
    886 out[i][0][j] *= (j==k) ? oneDDerivatives[k][ijkCounter[k]]
    \n-
    887 : oneDValuesShort[k][ijkCounter[k]];
    \n-
    888 }
    \n-
    889
    \n-
    890 }
    \n-
    \n-
    891
    \n-
    893 template <size_type k>
    \n-
    \n-
    894 void evaluate(const typename std::array<int,k>& directions,
    \n-
    895 const FieldVector<typename GV::ctype,dim>& in,
    \n-
    896 std::vector<FieldVector<R,1> >& out,
    \n-
    897 const std::array<unsigned,dim>& currentKnotSpan) const
    \n-
    898 {
    \n-
    899 if (k != 1 && k != 2)
    \n-
    900 DUNE_THROW(RangeError, "Differentiation order greater than 2 is not supported!");
    \n-
    901
    \n-
    902 // Evaluate 1d function values (needed for the product rule)
    \n-
    903 std::array<std::vector<R>, dim> oneDValues;
    \n-
    904 std::array<std::vector<R>, dim> oneDDerivatives;
    \n-
    905 std::array<std::vector<R>, dim> oneDSecondDerivatives;
    \n-
    906
    \n-
    907 // Evaluate 1d function derivatives
    \n-
    908 if (k==1)
    \n-
    909 for (size_t i=0; i<dim; i++)
    \n-
    910 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], false, oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n-
    911 else
    \n-
    912 for (size_t i=0; i<dim; i++)
    \n-
    913 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], true, oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n-
    914
    \n-
    915 // The lowest knot spans that we need values from
    \n-
    916 std::array<unsigned int, dim> offset;
    \n-
    917 for (int i=0; i<dim; i++)
    \n-
    918 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);
    \n-
    919
    \n-
    920 // Set up a multi-index to go from consecutive indices to integer coordinates
    \n-
    921 std::array<unsigned int, dim> limits;
    \n-
    922 for (int i=0; i<dim; i++)
    \n-
    923 {
    \n-
    924 // In a proper implementation, the following line would do
    \n-
    925 //limits[i] = oneDValues[i].size();
    \n-
    926 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries of the knot vector
    \n-
    927 if (currentKnotSpan[i]<order_[i])
    \n-
    928 limits[i] -= (order_[i] - currentKnotSpan[i]);
    \n-
    929 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )
    \n-
    930 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] - 2);
    \n-
    931 }
    \n-
    932
    \n-
    933 // Working towards computing only the parts that we really need:
    \n-
    934 // Let's copy them out into a separate array
    \n-
    935 std::array<std::vector<R>, dim> oneDValuesShort;
    \n-
    936
    \n-
    937 for (int i=0; i<dim; i++)
    \n-
    938 {
    \n-
    939 oneDValuesShort[i].resize(limits[i]);
    \n-
    940
    \n-
    941 for (size_t j=0; j<limits[i]; j++)
    \n-
    942 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];
    \n-
    943 }
    \n-
    944
    \n-
    945
    \n-
    946 MultiDigitCounter ijkCounter(limits);
    \n-
    947
    \n-
    948 out.resize(ijkCounter.cycle());
    \n-
    949
    \n-
    950 if (k == 1)
    \n-
    951 {
    \n-
    952 // Complete Jacobian is given by the product rule
    \n-
    953 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n-
    954 {
    \n-
    955 out[i][0] = 1.0;
    \n-
    956 for (int l=0; l<dim; l++)
    \n-
    957 out[i][0] *= (directions[0]==l) ? oneDDerivatives[l][ijkCounter[l]]
    \n-
    958 : oneDValuesShort[l][ijkCounter[l]];
    \n-
    959 }
    \n-
    960 }
    \n-
    961
    \n-
    962 if (k == 2)
    \n-
    963 {
    \n-
    964 // Complete derivation by deriving the tensor product
    \n-
    965 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n-
    966 {
    \n-
    967 out[i][0] = 1.0;
    \n-
    968 for (int j=0; j<dim; j++)
    \n-
    969 {
    \n-
    970 if (directions[0] != directions[1]) //derivation in two different variables
    \n-
    971 if (directions[0] == j || directions[1] == j) //the spline has to be derived (once) in this direction
    \n-
    972 out[i][0] *= oneDDerivatives[j][ijkCounter[j]];
    \n-
    973 else //no derivation in this direction
    \n-
    974 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];
    \n-
    975 else //spline is derived two times in the same direction
    \n-
    976 if (directions[0] == j) //the spline is derived two times in this direction
    \n-
    977 out[i][0] *= oneDSecondDerivatives[j][ijkCounter[j]];
    \n-
    978 else //no derivation in this direction
    \n-
    979 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];
    \n-
    980 }
    \n-
    981 }
    \n-
    982 }
    \n-
    983 }
    \n-
    \n-
    984
    \n-
    985
    \n-
    \n-
    990 static std::array<unsigned int,dim> getIJK(typename GridView::IndexSet::IndexType idx, std::array<unsigned int,dim> elements)
    \n-
    991 {
    \n-
    992 std::array<unsigned,dim> result;
    \n-
    993 for (int i=0; i<dim; i++)
    \n-
    994 {
    \n-
    995 result[i] = idx%elements[i];
    \n-
    996 idx /= elements[i];
    \n-
    997 }
    \n-
    998 return result;
    \n-
    999 }
    \n-
    \n-
    1000
    \n-
    \n-
    1009 static void evaluateFunction (const typename GV::ctype& in, std::vector<R>& out,
    \n-
    1010 const std::vector<R>& knotVector,
    \n-
    1011 unsigned int order,
    \n-
    1012 unsigned int currentKnotSpan)
    \n-
    1013 {
    \n-
    1014 std::size_t outSize = order+1; // The 'standard' value away from the boundaries of the knot vector
    \n-
    1015 if (currentKnotSpan<order) // Less near the left end of the knot vector
    \n-
    1016 outSize -= (order - currentKnotSpan);
    \n-
    1017 if ( order > (knotVector.size() - currentKnotSpan - 2) )
    \n-
    1018 outSize -= order - (knotVector.size() - currentKnotSpan - 2);
    \n-
    1019 out.resize(outSize);
    \n-
    1020
    \n-
    1021 // It's not really a matrix that is needed here, a plain 2d array would do
    \n-
    1022 DynamicMatrix<R> N(order+1, knotVector.size()-1);
    \n-
    1023
    \n-
    1024 // The text books on splines use the following geometric condition here to fill the array N
    \n-
    1025 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition
    \n-
    1026 // only works if splines are never evaluated exactly on the knots.
    \n-
    1027 //
    \n-
    1028 // for (size_t i=0; i<knotVector.size()-1; i++)
    \n-
    1029 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);
    \n-
    1030 for (size_t i=0; i<knotVector.size()-1; i++)
    \n-
    1031 N[0][i] = (i == currentKnotSpan);
    \n-
    1032
    \n-
    1033 for (size_t r=1; r<=order; r++)
    \n-
    1034 for (size_t i=0; i<knotVector.size()-r-1; i++)
    \n-
    1035 {
    \n-
    1036 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)
    \n-
    1037 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])
    \n-
    1038 : 0;
    \n-
    1039 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)
    \n-
    1040 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])
    \n-
    1041 : 0;
    \n-
    1042 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];
    \n-
    1043 }
    \n-
    1044
    \n-
    1049 for (size_t i=0; i<out.size(); i++) {
    \n-
    1050 out[i] = N[order][std::max((int)(currentKnotSpan - order),0) + i];
    \n-
    1051 }
    \n-
    1052 }
    \n-
    \n-
    1053
    \n-
    \n-
    1066 static void evaluateFunctionFull(const typename GV::ctype& in,
    \n-
    1067 DynamicMatrix<R>& out,
    \n-
    1068 const std::vector<R>& knotVector,
    \n-
    1069 unsigned int order,
    \n-
    1070 unsigned int currentKnotSpan)
    \n-
    1071 {
    \n-
    1072 // It's not really a matrix that is needed here, a plain 2d array would do
    \n-
    1073 DynamicMatrix<R>& N = out;
    \n-
    1074
    \n-
    1075 N.resize(order+1, knotVector.size()-1);
    \n-
    1076
    \n-
    1077 // The text books on splines use the following geometric condition here to fill the array N
    \n-
    1078 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition
    \n-
    1079 // only works if splines are never evaluated exactly on the knots.
    \n-
    1080 //
    \n-
    1081 // for (size_t i=0; i<knotVector.size()-1; i++)
    \n-
    1082 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);
    \n-
    1083 for (size_t i=0; i<knotVector.size()-1; i++)
    \n-
    1084 N[0][i] = (i == currentKnotSpan);
    \n-
    1085
    \n-
    1086 for (size_t r=1; r<=order; r++)
    \n-
    1087 for (size_t i=0; i<knotVector.size()-r-1; i++)
    \n-
    1088 {
    \n-
    1089 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)
    \n-
    1090 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])
    \n-
    1091 : 0;
    \n-
    1092 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)
    \n-
    1093 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])
    \n-
    1094 : 0;
    \n-
    1095 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];
    \n-
    1096 }
    \n-
    1097 }
    \n-
    \n-
    1098
    \n-
    1099
    \n-
    \n-
    1109 static void evaluateAll(const typename GV::ctype& in,
    \n-
    1110 std::vector<R>& out,
    \n-
    1111 bool evaluateJacobian, std::vector<R>& outJac,
    \n-
    1112 bool evaluateHessian, std::vector<R>& outHess,
    \n-
    1113 const std::vector<R>& knotVector,
    \n-
    1114 unsigned int order,
    \n-
    1115 unsigned int currentKnotSpan)
    \n-
    1116 {
    \n-
    1117 // How many shape functions to we have in each coordinate direction?
    \n-
    1118 unsigned int limit;
    \n-
    1119 limit = order+1; // The 'standard' value away from the boundaries of the knot vector
    \n-
    1120 if (currentKnotSpan<order)
    \n-
    1121 limit -= (order - currentKnotSpan);
    \n-
    1122 if ( order > (knotVector.size() - currentKnotSpan - 2) )
    \n-
    1123 limit -= order - (knotVector.size() - currentKnotSpan - 2);
    \n-
    1124
    \n-
    1125 // The lowest knot spans that we need values from
    \n-
    1126 unsigned int offset;
    \n-
    1127 offset = std::max((int)(currentKnotSpan - order),0);
    \n-
    1128
    \n-
    1129 // Evaluate 1d function values (needed for the product rule)
    \n-
    1130 DynamicMatrix<R> values;
    \n-
    1131
    \n-
    1132 evaluateFunctionFull(in, values, knotVector, order, currentKnotSpan);
    \n-
    1133
    \n-
    1134 out.resize(knotVector.size()-order-1);
    \n-
    1135 for (size_t j=0; j<out.size(); j++)
    \n-
    1136 out[j] = values[order][j];
    \n-
    1137
    \n-
    1138 // Evaluate 1d function values of one order lower (needed for the derivative formula)
    \n-
    1139 std::vector<R> lowOrderOneDValues;
    \n-
    1140
    \n-
    1141 if (order!=0)
    \n-
    1142 {
    \n-
    1143 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);
    \n-
    1144 for (size_t j=0; j<lowOrderOneDValues.size(); j++)
    \n-
    1145 lowOrderOneDValues[j] = values[order-1][j];
    \n-
    1146 }
    \n-
    1147
    \n-
    1148 // Evaluate 1d function values of two order lower (needed for the (second) derivative formula)
    \n-
    1149 std::vector<R> lowOrderTwoDValues;
    \n-
    1150
    \n-
    1151 if (order>1 && evaluateHessian)
    \n-
    1152 {
    \n-
    1153 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);
    \n-
    1154 for (size_t j=0; j<lowOrderTwoDValues.size(); j++)
    \n-
    1155 lowOrderTwoDValues[j] = values[order-2][j];
    \n-
    1156 }
    \n-
    1157
    \n-
    1158 // Evaluate 1d function derivatives
    \n-
    1159 if (evaluateJacobian)
    \n-
    1160 {
    \n-
    1161 outJac.resize(limit);
    \n-
    1162
    \n-
    1163 if (order==0) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n-
    1164 std::fill(outJac.begin(), outJac.end(), R(0.0));
    \n-
    1165 else
    \n-
    1166 {
    \n-
    1167 for (size_t j=offset; j<offset+limit; j++)
    \n-
    1168 {
    \n-
    1169 R derivativeAddend1 = lowOrderOneDValues[j] / (knotVector[j+order]-knotVector[j]);
    \n-
    1170 R derivativeAddend2 = lowOrderOneDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]);
    \n-
    1171 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n-
    1172 if (std::isnan(derivativeAddend1))
    \n-
    1173 derivativeAddend1 = 0;
    \n-
    1174 if (std::isnan(derivativeAddend2))
    \n-
    1175 derivativeAddend2 = 0;
    \n-
    1176 outJac[j-offset] = order * ( derivativeAddend1 - derivativeAddend2 );
    \n-
    1177 }
    \n-
    1178 }
    \n-
    1179 }
    \n-
    1180
    \n-
    1181 // Evaluate 1d function second derivatives
    \n-
    1182 if (evaluateHessian)
    \n-
    1183 {
    \n-
    1184 outHess.resize(limit);
    \n-
    1185
    \n-
    1186 if (order<2) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n-
    1187 std::fill(outHess.begin(), outHess.end(), R(0.0));
    \n-
    1188 else
    \n-
    1189 {
    \n-
    1190 for (size_t j=offset; j<offset+limit; j++)
    \n-
    1191 {
    \n-
    1192 assert(j+2 < lowOrderTwoDValues.size());
    \n-
    1193 R derivativeAddend1 = lowOrderTwoDValues[j] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order-1]-knotVector[j]);
    \n-
    1194 R derivativeAddend2 = lowOrderTwoDValues[j+1] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order]-knotVector[j+1]);
    \n-
    1195 R derivativeAddend3 = lowOrderTwoDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+order]-knotVector[j+1]);
    \n-
    1196 R derivativeAddend4 = lowOrderTwoDValues[j+2] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+1+order]-knotVector[j+2]);
    \n-
    1197 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n-
    1198
    \n-
    1199 if (std::isnan(derivativeAddend1))
    \n-
    1200 derivativeAddend1 = 0;
    \n-
    1201 if (std::isnan(derivativeAddend2))
    \n-
    1202 derivativeAddend2 = 0;
    \n-
    1203 if (std::isnan(derivativeAddend3))
    \n-
    1204 derivativeAddend3 = 0;
    \n-
    1205 if (std::isnan(derivativeAddend4))
    \n-
    1206 derivativeAddend4 = 0;
    \n-
    1207 outHess[j-offset] = order * (order-1) * ( derivativeAddend1 - derivativeAddend2 -derivativeAddend3 + derivativeAddend4 );
    \n-
    1208 }
    \n-
    1209 }
    \n-
    1210 }
    \n-
    1211 }
    \n-
    \n-
    1212
    \n-
    1213
    \n-
    1215 std::array<unsigned int, dim> order_;
    \n-
    1216
    \n-
    1218 std::array<std::vector<double>, dim> knotVectors_;
    \n-
    1219
    \n-
    1221 std::array<unsigned,dim> elements_;
    \n-
    1222
    \n-\n-
    1224};
    \n-
    \n-
    1225
    \n-
    1226
    \n-
    1227
    \n-
    1228template<typename GV>
    \n-
    \n-\n-
    1230 public LeafBasisNode
    \n-
    1231{
    \n-
    1232 static const int dim = GV::dimension;
    \n-
    1233
    \n-
    1234public:
    \n-
    1235
    \n-
    1236 using size_type = std::size_t;
    \n-
    1237 using Element = typename GV::template Codim<0>::Entity;
    \n-\n-
    1239
    \n-
    \n-\n-
    1241 preBasis_(preBasis),
    \n-
    1242 finiteElement_(*preBasis)
    \n-
    1243 {}
    \n-
    \n-
    1244
    \n-
    \n-
    1246 const Element& element() const
    \n-
    1247 {
    \n-
    1248 return element_;
    \n-
    1249 }
    \n-
    \n-
    1250
    \n-
    \n-\n-
    1256 {
    \n-
    1257 return finiteElement_;
    \n-
    1258 }
    \n-
    \n-
    1259
    \n-
    \n-
    1261 void bind(const Element& e)
    \n-
    1262 {
    \n-
    1263 element_ = e;
    \n-
    1264 auto elementIndex = preBasis_->gridView().indexSet().index(e);
    \n-
    1265 finiteElement_.bind(preBasis_->getIJK(elementIndex,preBasis_->elements_));
    \n-
    1266 this->setSize(finiteElement_.size());
    \n-
    1267 }
    \n-
    \n-
    1268
    \n-
    1269protected:
    \n-
    1270
    \n-\n-
    1272
    \n-\n-\n-
    1275};
    \n-
    \n-
    1276
    \n-
    1277
    \n-
    1278
    \n-
    1279namespace BasisFactory {
    \n-
    1280
    \n-
    \n-
    1287inline auto bSpline(const std::vector<double>& knotVector,
    \n-
    1288 unsigned int order,
    \n-
    1289 bool makeOpen = true)
    \n-
    1290{
    \n-
    1291 return [&knotVector, order, makeOpen](const auto& gridView) {
    \n-
    1292 return BSplinePreBasis<std::decay_t<decltype(gridView)>>(gridView, knotVector, order, makeOpen);
    \n-
    1293 };
    \n-
    1294}
    \n-
    \n-
    1295
    \n-
    1296} // end namespace BasisFactory
    \n-
    1297
    \n-
    1298// *****************************************************************************
    \n-
    1299// This is the actual global basis implementation based on the reusable parts.
    \n-
    1300// *****************************************************************************
    \n-
    1301
    \n-
    1308template<typename GV>
    \n-\n-
    1310
    \n-
    1311
    \n-
    1312} // namespace Functions
    \n-
    1313
    \n-
    1314} // namespace Dune
    \n-
    1315
    \n-
    1316#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n-\n-\n+
    \n+
    289 void bind(const Element& e)
    \n+
    290 {
    \n+
    291 element_ = &e;
    \n+
    292 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n+
    293 this->setSize(finiteElement_.size());
    \n+
    294 }
    \n+
    \n+
    295
    \n+
    296protected:
    \n+
    297
    \n+\n+\n+\n+
    301};
    \n+
    \n+
    302
    \n+
    303
    \n+
    304
    \n+
    305namespace BasisFactory {
    \n+
    306
    \n+
    316template<std::size_t kind, std::size_t order, typename Range=double>
    \n+
    \n+\n+
    318{
    \n+
    319 return [](const auto& gridView) {
    \n+
    320 return NedelecPreBasis<std::decay_t<decltype(gridView)>, Range, kind, order>(gridView);
    \n+
    321 };
    \n+
    322}
    \n+
    \n+
    323
    \n+
    324} // end namespace BasisFactory
    \n+
    325
    \n+
    326
    \n+
    327
    \n+
    328// *****************************************************************************
    \n+
    329// This is the actual global basis implementation based on the reusable parts.
    \n+
    330// *****************************************************************************
    \n+
    331
    \n+
    339template<typename GV, std::size_t kind, std::size_t order, typename Range=double>
    \n+\n+
    341
    \n+
    342} // end namespace Dune::Functions
    \n+
    343
    \n+
    344
    \n+
    345#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n+\n+\n \n-
    auto bSpline(const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)
    Create a pre-basis factory that can create a B-spline pre-basis.
    Definition bsplinebasis.hh:1287
    \n-
    Definition polynomial.hh:17
    \n-
    LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grid...
    Definition bsplinebasis.hh:367
    \n-
    BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)
    Copy constructor.
    Definition bsplinebasis.hh:388
    \n-
    const BSplinePreBasis< GV > & preBasis_
    Definition bsplinebasis.hh:479
    \n-
    const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > & localInterpolation() const
    Hand out a LocalInterpolation object.
    Definition bsplinebasis.hh:444
    \n-
    LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients< dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits
    Export various types related to this LocalFiniteElement.
    Definition bsplinebasis.hh:377
    \n-
    std::array< unsigned, dim > currentKnotSpan_
    Definition bsplinebasis.hh:486
    \n-
    BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)
    Constructor with a given B-spline basis.
    Definition bsplinebasis.hh:381
    \n-
    const BSplineLocalCoefficients< dim > & localCoefficients() const
    Hand out a LocalCoefficients object.
    Definition bsplinebasis.hh:438
    \n-
    void bind(const std::array< unsigned, dim > &elementIdx)
    Bind LocalFiniteElement to a specific knot span of the spline patch.
    Definition bsplinebasis.hh:399
    \n-
    BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > localInterpolation_
    Definition bsplinebasis.hh:483
    \n-
    GeometryType type() const
    Return the reference element that the local finite element is defined on (here, a hypercube)
    Definition bsplinebasis.hh:460
    \n-
    unsigned size() const
    Number of shape functions in this finite element.
    Definition bsplinebasis.hh:450
    \n-
    BSplineLocalCoefficients< dim > localCoefficients_
    Definition bsplinebasis.hh:482
    \n-
    unsigned int size(int i) const
    Number of degrees of freedom for one coordinate direction.
    Definition bsplinebasis.hh:468
    \n-
    BSplineLocalBasis< GV, R > localBasis_
    Definition bsplinebasis.hh:481
    \n-
    const BSplineLocalBasis< GV, R > & localBasis() const
    Hand out a LocalBasis object.
    Definition bsplinebasis.hh:432
    \n-
    Pre-basis for B-spline basis.
    Definition bsplinebasis.hh:505
    \n-
    std::array< unsigned, dim > elements_
    Number of grid elements in the different coordinate directions.
    Definition bsplinebasis.hh:1221
    \n-
    GridView gridView_
    Definition bsplinebasis.hh:1223
    \n-
    double R
    Definition bsplinebasis.hh:574
    \n-
    static void evaluateFunctionFull(const typename GV::ctype &in, DynamicMatrix< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)
    Evaluate all one-dimensional B-spline functions for a given coordinate direction.
    Definition bsplinebasis.hh:1066
    \n-
    void evaluateFunction(const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim > &currentKnotSpan) const
    Evaluate all B-spline basis functions at a given point.
    Definition bsplinebasis.hh:762
    \n-
    std::array< unsigned int, dim > order_
    Order of the B-spline for each space dimension.
    Definition bsplinebasis.hh:1215
    \n-
    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)
    Evaluate the second derivatives of all one-dimensional B-spline functions for a given coordinate dire...
    Definition bsplinebasis.hh:1109
    \n-
    static void evaluateFunction(const typename GV::ctype &in, std::vector< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)
    Evaluate all one-dimensional B-spline functions for a given coordinate direction.
    Definition bsplinebasis.hh:1009
    \n-
    unsigned int size(size_t d) const
    Number of shape functions in one direction.
    Definition bsplinebasis.hh:753
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition bsplinebasis.hh:568
    \n-
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition bsplinebasis.hh:714
    \n-
    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
    Evaluate Derivatives of all B-spline basis functions.
    Definition bsplinebasis.hh:894
    \n-
    std::size_t size_type
    Definition bsplinebasis.hh:569
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition bsplinebasis.hh:690
    \n-
    unsigned int dimension() const
    Total number of B-spline basis functions.
    Definition bsplinebasis.hh:744
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition bsplinebasis.hh:680
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition bsplinebasis.hh:684
    \n-
    static std::array< unsigned int, dim > getIJK(typename GridView::IndexSet::IndexType idx, std::array< unsigned int, dim > elements)
    Compute integer element coordinates from the element index.
    Definition bsplinebasis.hh:990
    \n-
    Node makeNode() const
    Create tree node.
    Definition bsplinebasis.hh:698
    \n-
    BSplinePreBasis(const GridView &gridView, const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)
    Construct a B-spline basis for a given grid view and set of knot vectors.
    Definition bsplinebasis.hh:594
    \n-
    void evaluateJacobian(const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldMatrix< R, 1, dim > > &out, const std::array< unsigned, dim > &currentKnotSpan) const
    Evaluate Jacobian of all B-spline basis functions.
    Definition bsplinebasis.hh:793
    \n-
    std::array< std::vector< double >, dim > knotVectors_
    The knot vectors, one for each space dimension.
    Definition bsplinebasis.hh:1218
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition bsplinebasis.hh:704
    \n-
    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)
    Construct a B-spline basis for a given grid view with uniform knot vectors.
    Definition bsplinebasis.hh:646
    \n-
    LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch ...
    Definition bsplinebasis.hh:51
    \n-
    LocalBasisTraits< D, dim, FieldVector< D, dim >, R, 1, FieldVector< R, 1 >, FieldMatrix< R, 1, dim > > Traits
    export type traits for function signature
    Definition bsplinebasis.hh:60
    \n-
    unsigned int order() const
    Polynomial order of the shape functions.
    Definition bsplinebasis.hh:145
    \n-
    std::size_t size() const
    Return the number of basis functions on the current knot span.
    Definition bsplinebasis.hh:152
    \n-
    void evaluate(const typename std::array< int, k > &directions, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
    Evaluate all shape functions and derivatives of any order.
    Definition bsplinebasis.hh:102
    \n-
    void evaluateFunction(const FieldVector< D, dim > &in, std::vector< FieldVector< R, 1 > > &out) const
    Evaluate all shape functions.
    Definition bsplinebasis.hh:75
    \n-
    void evaluateJacobian(const FieldVector< D, dim > &in, std::vector< FieldMatrix< D, 1, dim > > &out) const
    Evaluate Jacobian of all shape functions.
    Definition bsplinebasis.hh:87
    \n-
    BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const BSplineLocalFiniteElement< GV, R > &lFE)
    Constructor with a given B-spline patch.
    Definition bsplinebasis.hh:66
    \n-
    Attaches a shape function to an entity.
    Definition bsplinebasis.hh:183
    \n-
    const LocalKey & localKey(std::size_t i) const
    get i'th index
    Definition bsplinebasis.hh:326
    \n-
    void init(const std::array< unsigned, dim > &sizes)
    Definition bsplinebasis.hh:261
    \n-
    std::size_t size() const
    number of coefficients
    Definition bsplinebasis.hh:320
    \n-
    Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product gri...
    Definition bsplinebasis.hh:345
    \n-
    void interpolate(const F &f, std::vector< C > &out) const
    Local interpolation of a function.
    Definition bsplinebasis.hh:349
    \n-
    Definition bsplinebasis.hh:1231
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition bsplinebasis.hh:1255
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition bsplinebasis.hh:1237
    \n-
    const BSplinePreBasis< GV > * preBasis_
    Definition bsplinebasis.hh:1271
    \n-
    Element element_
    Definition bsplinebasis.hh:1274
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition bsplinebasis.hh:1261
    \n-
    BSplineNode(const BSplinePreBasis< GV > *preBasis)
    Definition bsplinebasis.hh:1240
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition bsplinebasis.hh:1246
    \n-
    FiniteElement finiteElement_
    Definition bsplinebasis.hh:1273
    \n-
    std::size_t size_type
    Definition bsplinebasis.hh:1236
    \n+\n+
    auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
    Create a pre-basis factory that can build a PowerPreBasis.
    Definition dynamicpowerbasis.hh:409
    \n+
    auto nedelec()
    Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.
    Definition nedelecbasis.hh:317
    \n+
    Definition polynomial.hh:18
    \n
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n-
    size_type size() const
    Get the total dimension of the space spanned by this basis.
    Definition leafprebasismixin.hh:60
    \n+
    Definition nedelecbasis.hh:255
    \n+
    const FiniteElementMap * finiteElementMap_
    Definition nedelecbasis.hh:300
    \n+
    FiniteElement finiteElement_
    Definition nedelecbasis.hh:298
    \n+
    Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition nedelecbasis.hh:266
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition nedelecbasis.hh:289
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition nedelecbasis.hh:274
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition nedelecbasis.hh:261
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition nedelecbasis.hh:283
    \n+
    NedelecNode(const FiniteElementMap *finiteElementMap)
    Definition nedelecbasis.hh:268
    \n+
    typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order > FiniteElementMap
    Definition nedelecbasis.hh:263
    \n+
    const Element * element_
    Definition nedelecbasis.hh:299
    \n+
    std::size_t size_type
    Definition nedelecbasis.hh:260
    \n+
    Definition nedelecbasis.hh:142
    \n+
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition nedelecbasis.hh:227
    \n+
    std::size_t size_type
    Definition nedelecbasis.hh:152
    \n+
    NedelecPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition nedelecbasis.hh:157
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition nedelecbasis.hh:151
    \n+
    size_type dimension() const
    Definition nedelecbasis.hh:206
    \n+
    GridView gridView_
    Definition nedelecbasis.hh:245
    \n+
    FiniteElementMap finiteElementMap_
    Definition nedelecbasis.hh:246
    \n+
    void initializeIndices()
    Definition nedelecbasis.hh:181
    \n+
    void update(const GridView &gv)
    Definition nedelecbasis.hh:192
    \n+
    size_type maxNodeSize() const
    Definition nedelecbasis.hh:211
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition nedelecbasis.hh:186
    \n+
    Node makeNode() const
    Create tree node.
    Definition nedelecbasis.hh:201
    \n+
    Mapper mapper_
    Definition nedelecbasis.hh:247
    \n
    size_type size() const
    Definition nodes.hh:147
    \n
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n
    Definition nodes.hh:191
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,1473 +1,478 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-bsplinebasis.hh\n+nedelecbasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-_\b1// -*- 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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n 9\n-14#include \n-15#include \n-16\n-18#include \n-19\n-20#include \n-21#include \n-22#include \n-23#include \n-24#include \n-25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-26#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-27#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-28\n-29namespace _\bD_\bu_\bn_\be\n-30{\n-31namespace Functions {\n-32\n-33// A maze of dependencies between the different parts of this. We need a few\n-forward declarations\n-34template\n-35class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n-36\n-37template\n-38class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs;\n+10#include \n+11#include \n+12\n+13#include \n+14#include \n+15\n+16#include \n+17#include \n+18\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/\n+_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+22#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+23\n+24namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+25{\n+26\n+27namespace Impl\n+28{\n+29 template\n+30 class Nedelec1stKindLocalFiniteElementMap\n+31 {\n+32 using D = typename GV::ctype;\n+33 constexpr static bool hasFixedElementType = Capabilities::\n+hasSingleGeometryType::v;\n+34\n+35 using CubeFiniteElement =\n+Nedelec1stKindCubeLocalFiniteElement;\n+36 using SimplexFiniteElement =\n+Nedelec1stKindSimplexLocalFiniteElement;\n+37\n+38 public:\n 39\n-40\n-49template\n-_\b5_\b0class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-51{\n-52 friend class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n+40 using T = LocalBasisTraits, R, dim,\n+FieldVector, FieldMatrix >;\n+41\n+42 constexpr static unsigned int topologyId = Capabilities::\n+hasSingleGeometryType::topologyId; // meaningless if\n+hasFixedElementType is false\n+43 constexpr static GeometryType type = GeometryType(topologyId, GV::\n+dimension);\n+44\n+45 using FiniteElement = std::conditional_t,\n+47 LocalFiniteElementVariant >;\n+48\n+49 static std::size_t numVariants(GeometryType type)\n+50 {\n+51 if (order!=1) // I am not sure whether the formula below is correct for all\n+orders.\n+52 DUNE_THROW(NotImplemented, \"Only Nedelec elements of order 1 are\n+implemented!\");\n 53\n-54 typedef typename GV::ctype D;\n-55 enum {dim = GV::dimension};\n-56public:\n+54 auto numEdges = referenceElement(type).size(dim-1);\n+55 return _\bp_\bo_\bw_\be_\br(2,numEdges);\n+56 }\n 57\n-59 typedef LocalBasisTraits,R,1,FieldVector,\n-_\b6_\b0 FieldMatrix > _\bT_\br_\ba_\bi_\bt_\bs;\n-61\n-_\b6_\b6 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs(const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>& preBasis,\n-67 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bG_\bV_\b,_\bR_\b>& lFE)\n-68 : preBasis_(preBasis),\n-69 lFE_(lFE)\n-70 {}\n-71\n-_\b7_\b5 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (const FieldVector& in,\n-76 std::vector >& out) const\n-77 {\n-78 FieldVector globalIn = offset_;\n-79 scaling_.umv(in,globalIn);\n-80\n-81 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);\n-82 }\n-83\n-_\b8_\b7 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn (const FieldVector& in,\n-88 std::vector >& out) const\n-89 {\n-90 FieldVector globalIn = offset_;\n-91 scaling_.umv(in,globalIn);\n-92\n-93 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);\n+58 Nedelec1stKindLocalFiniteElementMap(const GV& gv)\n+59 : elementMapper_(gv, mcmgElementLayout()),\n+60 orientation_(gv.size(0))\n+61 {\n+62 // create all variants\n+63 if constexpr (hasFixedElementType)\n+64 {\n+65 variants_.resize(numVariants(type));\n+66 for (size_t i = 0; i < numVariants(type); i++)\n+67 variants_[i] = FiniteElement(i);\n+68 }\n+69 else\n+70 {\n+71 // for mixed grids add offset for cubes\n+72 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n+(GeometryTypes::cube(dim)));\n+73 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n+74 variants_[i] = SimplexFiniteElement(i);\n+75 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n+76 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n+(i);\n+77 }\n+78\n+79\n+80 // compute orientation for all elements\n+81 const auto& indexSet = gv.indexSet();\n+82\n+83 for(const auto& element : elements(gv))\n+84 {\n+85 const auto& refElement = referenceElement(element);\n+86 auto elementIndex = elementMapper_.index(element);\n+87 orientation_[elementIndex] = 0;\n+88\n+89 for (std::size_t i=0; i\n-_\b1_\b0_\b2 inline void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be (const typename std::array& directions,\n-103 const typename Traits::DomainType& in,\n-104 std::vector& out) const\n-105 {\n-106 switch(k)\n-107 {\n-108 case 0:\n-109 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(in, out);\n-110 break;\n-111 case 1:\n-112 {\n-113 FieldVector globalIn = offset_;\n-114 scaling_.umv(in,globalIn);\n-115\n-116 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n-117\n-118 for (size_t i=0; i globalIn = offset_;\n-125 scaling_.umv(in,globalIn);\n-126\n-127 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n-128\n-129 for (size_t i=0; iglobalV1) || (localV0>localV1 &&\n+globalV0\n+110 const auto& find(const Element& element) const\n+111 {\n+112 return variants_[orientation_[elementMapper_.index(element)]];\n+113 }\n+114\n+115 private:\n+116 std::vector variants_;\n+117 Dune::MultipleCodimMultipleGeomTypeMapper elementMapper_;\n+118 std::vector orientation_;\n+119 };\n+120\n+121\n+122} // namespace Impl\n+123\n+124\n+125/\n+/ *****************************************************************************\n+126// This is the reusable part of the basis. It contains\n+127//\n+128// NedelecPreBasis\n+129// NedelecNode\n+130//\n+131// The pre-basis allows to create the others and is the owner of possible\n+shared\n+132// state. These components do _not_ depend on the global basis and local\n+view\n+133// and can be used without a global basis.\n+134/\n+/ *****************************************************************************\n+135\n+136template\n+137class NedelecNode;\n+138\n+139template\n+_\b1_\b4_\b0class _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n+141 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< NedelecPreBasis >\n+142{\n+143 static const int dim = GV::dimension;\n+144 static_assert(kind==1, \"Only the Nedelec basis of the first kind is\n+currently implemented!\");\n+145 using FiniteElementMap = typename Impl::\n+Nedelec1stKindLocalFiniteElementMap;\n+146\n+147 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper;\n+148public:\n 149\n-_\b1_\b5_\b2 std::size_t _\bs_\bi_\bz_\be() const\n-153 {\n-154 return lFE_.size();\n-155 }\n-156\n-157private:\n-158 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>& preBasis_;\n-159\n-160 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bG_\bV_\b,_\bR_\b>& lFE_;\n-161\n-162 // Coordinates in a single knot span differ from coordinates on the B-\n-spline patch\n-163 // by an affine transformation. This transformation is stored in offset_\n-and scaling_.\n-164 FieldVector offset_;\n-165 DiagonalMatrix scaling_;\n-166};\n-167\n-181template\n-_\b1_\b8_\b2class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n-183{\n-184 // Return i as a d-digit number in the (k+1)-nary system\n-185 std::array multiindex (unsigned int i) const\n-186 {\n-187 std::array alpha;\n-188 for (int j=0; j& subEntity)\n-198 {\n-199 if (sizes_[0]==1)\n-200 {\n-201 subEntity[0] = 0;\n-202 return;\n-203 }\n-204\n-205 /* edge and vertex numbering\n-206 0----0----1\n-207 */\n-208 unsigned lastIndex=0;\n-209 subEntity[lastIndex++] = 0; // corner 0\n-210 for (unsigned i = 0; i < sizes_[0] - 2; ++i)\n-211 subEntity[lastIndex++] = 0; // inner dofs of element (0)\n-212\n-213 subEntity[lastIndex++] = 1; // corner 1\n-214\n-215 assert(_\bs_\bi_\bz_\be()==lastIndex);\n-216 }\n-217\n-218 void setup2d(std::vector& subEntity)\n-219 {\n-220 unsigned lastIndex=0;\n-221\n-222 // LocalKey: entity number , entity codim, dof indices within each entity\n-223 /* edge and vertex numbering\n-224 2----3----3\n-225 | |\n-226 | |\n-227 0 1\n-228 | |\n-229 | |\n-230 0----2----1\n-231 */\n-232\n-233 // lower edge (2)\n-234 subEntity[lastIndex++] = 0; // corner 0\n-235 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n-236 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)\n-237\n-238 subEntity[lastIndex++] = 1; // corner 1\n-239\n-240 // iterate from bottom to top over inner edge dofs\n-241 for (unsigned e = 0; e < sizes_[1]-2; ++e)\n-242 {\n-243 subEntity[lastIndex++] = 0; // left edge (0)\n-244 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n-245 subEntity[lastIndex++] = 0; // face dofs\n-246 subEntity[lastIndex++] = 1; // right edge (1)\n-247 }\n-248\n-249 // upper edge (3)\n-250 subEntity[lastIndex++] = 2; // corner 2\n-251 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n-252 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)\n-253\n-254 subEntity[lastIndex++] = 3; // corner 3\n-255\n-256 assert(_\bs_\bi_\bz_\be()==lastIndex);\n-257 }\n-258\n+_\b1_\b5_\b1 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b1_\b5_\b2 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+153\n+_\b1_\b5_\b4 using _\bN_\bo_\bd_\be = _\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bR_\ba_\bn_\bg_\be_\b,_\b _\bk_\bi_\bn_\bd_\b,_\b _\bo_\br_\bd_\be_\br_\b>;\n+155\n+_\b1_\b5_\b7 _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n+158 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n+159 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv),\n+160 _\bm_\ba_\bp_\bp_\be_\br_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_, mcmgLayout(Dim<1>{}))\n+161 {\n+162 if (kind!=1)\n+163 DUNE_THROW(NotImplemented, \"Only Nedelec elements of the first kind are\n+implemented!\");\n+164\n+165 // There is no inherent reason why the basis shouldn't work for grids with\n+more than two\n+166 // element types. Somebody simply has to sit down and implement the missing\n+bits.\n+167 if (gv.indexSet().types(0).size() > 2)\n+168 DUNE_THROW(NotImplemented, \"N\u00c3\u00a9d\u00c3\u00a9lec basis is only implemented for grids\n+with simplex and cube elements\");\n+169\n+170 for(auto type : gv.indexSet().types(0))\n+171 if (!type.isSimplex() && !type.isCube())\n+172 DUNE_THROW(NotImplemented, \"N\u00c3\u00a9d\u00c3\u00a9lec basis is only implemented for grids\n+with simplex or cube elements.\");\n+173\n+174 if (order>1)\n+175 DUNE_THROW(NotImplemented, \"Only first-order elements are implemented\");\n+176\n+177 if (dim!=2 && dim!=3)\n+178 DUNE_THROW(NotImplemented, \"Only 2d and 3d N\u00c3\u00a9d\u00c3\u00a9lec elements are\n+implemented\");\n+179 }\n+180\n+_\b1_\b8_\b1 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+182 {}\n+183\n+_\b1_\b8_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+187 {\n+188 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+189 }\n+190\n+191 /* \\brief Update the stored grid view, to be called if the grid has changed\n+*/\n+_\b1_\b9_\b2 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+193 {\n+194 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+195 _\bm_\ba_\bp_\bp_\be_\br_\b_.update(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_);\n+196 }\n+197\n+_\b2_\b0_\b1 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+202 {\n+203 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n+204 }\n+205\n+_\b2_\b0_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+207 {\n+208 return _\bm_\ba_\bp_\bp_\be_\br_\b_.size();\n+209 }\n+210\n+_\b2_\b1_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+212 {\n+213 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n+214 for (auto&& type : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0))\n+215 {\n+216 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be numEdges = referenceElement(type).size\n+(dim-1);\n+217 result = std::max(result, numEdges);\n+218 }\n+219\n+220 return result;\n+221 }\n+222\n+226 template\n+_\b2_\b2_\b7 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+228 {\n+229 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+230\n+231 // throw if Element is not of predefined type\n+232 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n+233 DUNE_THROW(NotImplemented, \"NedelecBasis only implemented for cube and\n+simplex elements.\");\n+234\n+235 for(std::size_t i=0, end=node._\bs_\bi_\bz_\be(); i\n+_\b2_\b5_\b3class _\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be :\n+254 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+255{\n+256 static const int dim = GV::dimension;\n+257\n+258public:\n 259\n-260public:\n-_\b2_\b6_\b1 void _\bi_\bn_\bi_\bt(const std::array& sizes)\n-262 {\n-263 sizes_ = sizes;\n-264\n-265 li_.resize(_\bs_\bi_\bz_\be());\n-266\n-267 // Set up array of codimension-per-dof-number\n-268 std::vector codim(li_.size());\n-269\n-270 for (std::size_t i=0; i mIdx = multiindex(i);\n-276 for (int j=0; j index(_\bs_\bi_\bz_\be());\n+_\b2_\b6_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b2_\b6_\b1 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+262 static_assert(kind==1, \"Only Nedelec elements of the first kind are\n+implemented!\");\n+_\b2_\b6_\b3 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::\n+Nedelec1stKindLocalFiniteElementMap;\n+_\b2_\b6_\b4 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n+267\n+_\b2_\b6_\b8 _\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be(const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* finiteElementMap) :\n+269 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+270 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n+271 { }\n+272\n+_\b2_\b7_\b4 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+275 {\n+276 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+277 }\n+278\n+_\b2_\b8_\b3 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n+284 {\n+285 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+286 }\n 287\n-288 for (std::size_t i=0; i mIdx = multiindex(i);\n-293\n-294 for (int j=dim-1; j>=0; j--)\n-295 if (mIdx[j]>0 and mIdx[j] subEntity(li_.size());\n-301\n-302 if (subEntity.size() > 0)\n-303 {\n-304 if (dim==1) {\n-305\n-306 setup1d(subEntity);\n-307\n-308 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {\n-309\n-310 setup2d(subEntity);\n-311\n-312 }\n-313 }\n-314\n-315 for (size_t i=0; i());\n-323 }\n-324\n-_\b3_\b2_\b6 const LocalKey& _\bl_\bo_\bc_\ba_\bl_\bK_\be_\by (std::size_t i) const\n-327 {\n-328 return li_[i];\n-329 }\n-330\n-331private:\n-332\n-333 // Number of shape functions on this element per coordinate direction\n-334 std::array sizes_;\n-335\n-336 std::vector li_;\n-337};\n-338\n-343template\n-_\b3_\b4_\b4class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-345{\n-346public:\n-348 template\n-_\b3_\b4_\b9 void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const F& f, std::vector& out) const\n-350 {\n-351 DUNE_THROW(NotImplemented, \"BSplineLocalInterpolation::interpolate\");\n-352 }\n-353\n-354};\n-355\n-365template\n-_\b3_\b6_\b6class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-367{\n-_\b3_\b6_\b8 typedef typename GV::ctype D;\n-369 enum {dim = GV::dimension};\n-370 friend class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs;\n-371public:\n-372\n-375 typedef LocalFiniteElementTraits,\n-376 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b<_\bd_\bi_\bm_\b>,\n-_\b3_\b7_\b7 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b<_\bd_\bi_\bm_\b,_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bR_\b> > > _\bT_\br_\ba_\bi_\bt_\bs;\n-378\n-_\b3_\b8_\b1 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>& preBasis)\n-382 : _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(preBasis),\n-383 _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(preBasis,*this)\n-384 {}\n-385\n-_\b3_\b8_\b8 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& other)\n-389 : _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(other._\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_),\n-390 _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_,*this)\n-391 {}\n-392\n-_\b3_\b9_\b9 void _\bb_\bi_\bn_\bd(const std::array& elementIdx)\n-400 {\n-401 /* \\todo In the long run we need to precompute a table for this */\n-402 for (size_t i=0; i sizes;\n-426 for (size_t i=0; i& _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs() const\n-433 {\n-434 return _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n-435 }\n-436\n-_\b4_\b3_\b8 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b<_\bd_\bi_\bm_\b>& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs() const\n-439 {\n-440 return _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b_;\n-441 }\n-442\n-_\b4_\b4_\b4 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b<_\bd_\bi_\bm_\b,_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bR_\b> >&\n-_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn() const\n-445 {\n-446 return _\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b_;\n-447 }\n-448\n-_\b4_\b5_\b0 unsigned _\bs_\bi_\bz_\be () const\n-451 {\n-452 std::size_t r = 1;\n-453 for (int i=0; i (_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.knotVectors_[i].size() - _\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_[i] -\n-2) )\n-475 r -= order[i] - (_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.knotVectors_[i].size() - _\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_[i] -\n-2);\n-476 return r;\n-477 }\n-478\n-_\b4_\b7_\b9 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>& _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-480\n-_\b4_\b8_\b1 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bR_\b> _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n-_\b4_\b8_\b2 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b<_\bd_\bi_\bm_\b> _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b_;\n-_\b4_\b8_\b3 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b<_\bd_\bi_\bm_\b,_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bR_\b> >\n-_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b_;\n-484\n-485 // The knot span we are bound to\n-_\b4_\b8_\b6 std::array _\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_;\n-487};\n-488\n-489\n-490template\n-491class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be;\n-492\n-502template\n-_\b5_\b0_\b3class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n-504 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< BSplinePreBasis >\n-505{\n-506 using _\bB_\ba_\bs_\be = _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b> >;\n-507\n-508 static const int dim = GV::dimension;\n-509\n-511 class MultiDigitCounter\n-512 {\n-513 public:\n-514\n-518 MultiDigitCounter(const std::array& limits)\n-519 : limits_(limits)\n-520 {\n-521 std::fill(counter_.begin(), counter_.end(), 0);\n-522 }\n-523\n-525 MultiDigitCounter& operator++()\n-526 {\n-527 for (int i=0; i limits_;\n-559\n-561 std::array counter_;\n-562\n-563 };\n-564\n-565public:\n-566\n-_\b5_\b6_\b8 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b5_\b6_\b9 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-570\n-_\b5_\b7_\b1 using _\bN_\bo_\bd_\be = _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b>;\n-572\n-573 // Type used for function values\n-_\b5_\b7_\b4 using _\bR = double;\n-575\n-_\b5_\b9_\b4 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw,\n-595 const std::vector& knotVector,\n-596 unsigned int order,\n-597 bool makeOpen = true)\n-598 : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)\n-599 {\n-600 // \\todo Detection of duplicate knots\n-601 std::fill(_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.begin(), _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.end(), knotVector.size()-1);\n-602\n-603 // Mediocre sanity check: we don't know the number of grid elements in each\n-direction.\n-604 // but at least we know the total number of elements.\n-605 assert( std::accumulate(_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.begin(), _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.end(), 1, std::\n-multiplies()) == _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0) );\n-606\n-607 for (int i=0; i& lowerLeft,\n-648 const FieldVector& upperRight,\n-649 const std::array& elements,\n-650 unsigned int order,\n-651 bool makeOpen = true)\n-652 : _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_(elements),\n-653 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)\n-654 {\n-655 // Mediocre sanity check: we don't know the number of grid elements in each\n-direction.\n-656 // but at least we know the total number of elements.\n-657 assert( std::accumulate(_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.begin(), _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_.end(), 1, std::\n-multiplies()) == _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0) );\n-658\n-659 for (int i=0; i\n-_\b7_\b1_\b4 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-715 {\n-716 // Local degrees of freedom are arranged in a lattice.\n-717 // We need the lattice dimensions to be able to compute lattice coordinates\n-from a local index\n-718 std::array localSizes;\n-719 for (int i=0; i localIJK = _\bg_\be_\bt_\bI_\bJ_\bK(i, localSizes);\n-724\n-725 const auto currentKnotSpan = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt()._\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_;\n-726 const auto order = _\bo_\br_\bd_\be_\br_\b_;\n-727\n-728 std::array globalIJK;\n-729 for (int i=0; i=0; i--)\n-736 globalIdx = globalIdx * _\bs_\bi_\bz_\be(i) + globalIJK[i];\n-737\n-738 *it = {{globalIdx}};\n-739 }\n-740 return it;\n-741 }\n-742\n-_\b7_\b4_\b4 unsigned int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn () const\n-745 {\n-746 unsigned int result = 1;\n-747 for (size_t i=0; i& in,\n-763 std::vector >& out,\n-764 const std::array& currentKnotSpan) const\n-765 {\n-766 // Evaluate\n-767 std::array, dim> oneDValues;\n-768\n-769 for (size_t i=0; i limits;\n-773 for (int i=0; i& in,\n-794 std::vector >& out,\n-795 const std::array& currentKnotSpan) const\n-796 {\n-797 // How many shape functions to we have in each coordinate direction?\n-798 std::array limits;\n-799 for (int i=0; i (_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_[i]._\bs_\bi_\bz_\be() - currentKnotSpan[i] - 2) )\n-805 limits[i] -= _\bo_\br_\bd_\be_\br_\b_[i] - (_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_[i]._\bs_\bi_\bz_\be() - currentKnotSpan[i] - 2);\n-806 }\n-807\n-808 // The lowest knot spans that we need values from\n-809 std::array offset;\n-810 for (int i=0; i, dim> oneDValues;\n-815\n-816 // Evaluate 1d function values of one order lower (needed for the\n-derivative formula)\n-817 std::array, dim> lowOrderOneDValues;\n-818\n-819 std::array, dim> values;\n-820\n-821 for (size_t i=0; i, dim> oneDDerivatives;\n-839 for (size_t i=0; i, dim> oneDValuesShort;\n-864\n-865 for (int i=0; i\n-_\b8_\b9_\b4 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const typename std::array& directions,\n-895 const FieldVector& in,\n-896 std::vector >& out,\n-897 const std::array& currentKnotSpan) const\n-898 {\n-899 if (k != 1 && k != 2)\n-900 DUNE_THROW(RangeError, \"Differentiation order greater than 2 is not\n-supported!\");\n-901\n-902 // Evaluate 1d function values (needed for the product rule)\n-903 std::array, dim> oneDValues;\n-904 std::array, dim> oneDDerivatives;\n-905 std::array, dim> oneDSecondDerivatives;\n-906\n-907 // Evaluate 1d function derivatives\n-908 if (k==1)\n-909 for (size_t i=0; i offset;\n-917 for (int i=0; i limits;\n-922 for (int i=0; i (_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_[i]._\bs_\bi_\bz_\be() - currentKnotSpan[i] - 2) )\n-930 limits[i] -= _\bo_\br_\bd_\be_\br_\b_[i] - (_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_[i]._\bs_\bi_\bz_\be() - currentKnotSpan[i] - 2);\n-931 }\n-932\n-933 // Working towards computing only the parts that we really need:\n-934 // Let's copy them out into a separate array\n-935 std::array, dim> oneDValuesShort;\n-936\n-937 for (int i=0; i _\bg_\be_\bt_\bI_\bJ_\bK(typename GridView::IndexSet::\n-IndexType idx, std::array elements)\n-991 {\n-992 std::array result;\n-993 for (int i=0; i& out,\n-1010 const std::vector& knotVector,\n-1011 unsigned int order,\n-1012 unsigned int currentKnotSpan)\n-1013 {\n-1014 std::size_t outSize = order+1; // The 'standard' value away from the\n-boundaries of the knot vector\n-1015 if (currentKnotSpan (knotVector.size() - currentKnotSpan - 2) )\n-1018 outSize -= order - (knotVector.size() - currentKnotSpan - 2);\n-1019 out.resize(outSize);\n-1020\n-1021 // It's not really a matrix that is needed here, a plain 2d array would do\n-1022 DynamicMatrix N(order+1, knotVector.size()-1);\n-1023\n-1024 // The text books on splines use the following geometric condition here to\n-fill the array N\n-1025 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n-this condition\n-1026 // only works if splines are never evaluated exactly on the knots.\n-1027 //\n-1028 // for (size_t i=0; i 1e-10)\n-1037 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n-1038 : 0;\n-1039 _\bR factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n-1040 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n-1041 : 0;\n-1042 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n-1043 }\n-1044\n-1049 for (size_t i=0; i& out,\n-1068 const std::vector& knotVector,\n-1069 unsigned int order,\n-1070 unsigned int currentKnotSpan)\n-1071 {\n-1072 // It's not really a matrix that is needed here, a plain 2d array would do\n-1073 DynamicMatrix& N = out;\n-1074\n-1075 N.resize(order+1, knotVector.size()-1);\n-1076\n-1077 // The text books on splines use the following geometric condition here to\n-fill the array N\n-1078 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n-this condition\n-1079 // only works if splines are never evaluated exactly on the knots.\n-1080 //\n-1081 // for (size_t i=0; i 1e-10)\n-1090 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n-1091 : 0;\n-1092 _\bR factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n-1093 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n-1094 : 0;\n-1095 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n-1096 }\n-1097 }\n-1098\n-1099\n-_\b1_\b1_\b0_\b9 static void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bA_\bl_\bl(const typename GV::ctype& in,\n-1110 std::vector& out,\n-1111 bool _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn, std::vector& outJac,\n-1112 bool evaluateHessian, std::vector& outHess,\n-1113 const std::vector& knotVector,\n-1114 unsigned int order,\n-1115 unsigned int currentKnotSpan)\n-1116 {\n-1117 // How many shape functions to we have in each coordinate direction?\n-1118 unsigned int limit;\n-1119 limit = order+1; // The 'standard' value away from the boundaries of the\n-knot vector\n-1120 if (currentKnotSpan (knotVector.size() - currentKnotSpan - 2) )\n-1123 limit -= order - (knotVector.size() - currentKnotSpan - 2);\n-1124\n-1125 // The lowest knot spans that we need values from\n-1126 unsigned int offset;\n-1127 offset = std::max((int)(currentKnotSpan - order),0);\n-1128\n-1129 // Evaluate 1d function values (needed for the product rule)\n-1130 DynamicMatrix values;\n-1131\n-1132 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\bu_\bl_\bl(in, values, knotVector, order, currentKnotSpan);\n-1133\n-1134 out.resize(knotVector.size()-order-1);\n-1135 for (size_t j=0; j lowOrderOneDValues;\n-1140\n-1141 if (order!=0)\n-1142 {\n-1143 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);\n-1144 for (size_t j=0; j lowOrderTwoDValues;\n-1150\n-1151 if (order>1 && evaluateHessian)\n-1152 {\n-1153 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);\n-1154 for (size_t j=0; j _\bo_\br_\bd_\be_\br_\b_;\n-1216\n-_\b1_\b2_\b1_\b8 std::array, dim> _\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_;\n-1219\n-_\b1_\b2_\b2_\b1 std::array _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_;\n-1222\n-_\b1_\b2_\b2_\b3 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-1224};\n-1225\n-1226\n-1227\n-1228template\n-_\b1_\b2_\b2_\b9class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be :\n-1230 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-1231{\n-1232 static const int dim = GV::dimension;\n-1233\n-1234public:\n-1235\n-_\b1_\b2_\b3_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b1_\b2_\b3_\b7 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b1_\b2_\b3_\b8 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bG_\bV_\b,_\bd_\bo_\bu_\bb_\bl_\be_\b>;\n-1239\n-_\b1_\b2_\b4_\b0 _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be(const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>* preBasis) :\n-1241 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(preBasis),\n-1242 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(*preBasis)\n-1243 {}\n-1244\n-_\b1_\b2_\b4_\b6 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-1247 {\n-1248 return _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-1249 }\n-1250\n-_\b1_\b2_\b5_\b5 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n-1256 {\n-1257 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-1258 }\n-1259\n-_\b1_\b2_\b6_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-1262 {\n-1263 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = e;\n-1264 auto elementIndex = _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_->gridView().indexSet().index(e);\n-1265 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_._\bb_\bi_\bn_\bd(_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_->getIJK(elementIndex,_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_->elements_));\n-1266 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_._\bs_\bi_\bz_\be());\n-1267 }\n-1268\n-1269protected:\n-1270\n-_\b1_\b2_\b7_\b1 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>* _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-1272\n-_\b1_\b2_\b7_\b3 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b1_\b2_\b7_\b4 _\bE_\bl_\be_\bm_\be_\bn_\bt _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-1275};\n-1276\n-1277\n-1278\n-1279namespace BasisFactory {\n-1280\n-_\b1_\b2_\b8_\b7inline auto _\bb_\bS_\bp_\bl_\bi_\bn_\be(const std::vector& knotVector,\n-1288 unsigned int order,\n-1289 bool makeOpen = true)\n-1290{\n-1291 return [&knotVector, order, makeOpen](const auto& gridView) {\n-1292 return _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(gridView,\n-knotVector, order, makeOpen);\n-1293 };\n-1294}\n-1295\n-1296} // end namespace BasisFactory\n-1297\n-1298/\n+_\b2_\b8_\b9 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+290 {\n+291 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+292 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.bind((_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_->find(*_\be_\bl_\be_\bm_\be_\bn_\bt_\b_)), e);\n+293 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n+294 }\n+295\n+296protected:\n+297\n+_\b2_\b9_\b8 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b2_\b9_\b9 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b3_\b0_\b0 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n+301};\n+302\n+303\n+304\n+305namespace BasisFactory {\n+306\n+316template\n+_\b3_\b1_\b7auto _\bn_\be_\bd_\be_\bl_\be_\bc()\n+318{\n+319 return [](const auto& gridView) {\n+320 return _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, Range, kind,\n+order>(gridView);\n+321 };\n+322}\n+323\n+324} // end namespace BasisFactory\n+325\n+326\n+327\n+328/\n / *****************************************************************************\n-1299// This is the actual global basis implementation based on the reusable\n+329// This is the actual global basis implementation based on the reusable\n parts.\n-1300/\n+330/\n / *****************************************************************************\n-1301\n-1308template\n-_\b1_\b3_\b0_\b9using _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b> >;\n-1310\n-1311\n-1312} // namespace Functions\n-1313\n-1314} // namespace Dune\n-1315\n-1316#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+331\n+339template\n+_\b3_\b4_\b0using _\bN_\be_\bd_\be_\bl_\be_\bc_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bR_\ba_\bn_\bg_\be_\b,_\b _\bk_\bi_\bn_\bd_\b,\n+_\bo_\br_\bd_\be_\br_\b _\b> >;\n+341\n+342} // end namespace Dune::Functions\n+343\n+344\n+345#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n _\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n _\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\bS_\bp_\bl_\bi_\bn_\be\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1287\n-_\bD_\bu_\bn_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis\n-on tensor-product grid...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:367\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)\n-Copy constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:388\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n-const BSplinePreBasis< GV > & preBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:479\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > &\n-localInterpolation() const\n-Hand out a LocalInterpolation object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:444\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs\n-LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients<\n-dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits\n-Export various types related to this LocalFiniteElement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:377\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_\n-std::array< unsigned, dim > currentKnotSpan_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:486\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)\n-Constructor with a given B-spline basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:381\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n-const BSplineLocalCoefficients< dim > & localCoefficients() const\n-Hand out a LocalCoefficients object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:438\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const std::array< unsigned, dim > &elementIdx)\n-Bind LocalFiniteElement to a specific knot span of the spline patch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:399\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b_\n-BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > >\n-localInterpolation_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:483\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bt_\by_\bp_\be\n-GeometryType type() const\n-Return the reference element that the local finite element is defined on (here,\n-a hypercube)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:460\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n-unsigned size() const\n-Number of shape functions in this finite element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:450\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b_\n-BSplineLocalCoefficients< dim > localCoefficients_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:482\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n-unsigned int size(int i) const\n-Number of degrees of freedom for one coordinate direction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:468\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_\n-BSplineLocalBasis< GV, R > localBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:481\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-const BSplineLocalBasis< GV, R > & localBasis() const\n-Hand out a LocalBasis object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:432\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-Pre-basis for B-spline basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:505\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_\n-std::array< unsigned, dim > elements_\n-Number of grid elements in the different coordinate directions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1221\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n-GridView gridView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1223\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR\n-double R\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:574\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\bu_\bl_\bl\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1066\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:762\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br_\b_\n-std::array< unsigned int, dim > order_\n-Order of the B-spline for each space dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1215\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bA_\bl_\bl\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1109\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1009\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-unsigned int size(size_t d) const\n-Number of shape functions in one direction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:753\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-The grid view that the FE space is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:568\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n+_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br\n+auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const\n+IndexMergingStrategy &)\n+Create a pre-basis factory that can build a PowerPreBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:409\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bn_\be_\bd_\be_\bl_\be_\bc\n+auto nedelec()\n+Create a pre-basis factory that can create a N\u00c3\u00a9d\u00c3\u00a9lec pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:317\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+Global basis for given pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+A generic MixIn class for PreBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:255\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n+const FiniteElementMap * finiteElementMap_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:300\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n+FiniteElement finiteElement_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:298\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator,\n+typename FiniteElementMap::FiniteElement, Element > FiniteElement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:266\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind to element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:289\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return current element, throw if unbound.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:274\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename GV::template Codim< 0 >::Entity Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:261\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:283\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be\n+NedelecNode(const FiniteElementMap *finiteElementMap)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:268\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp\n+typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order >\n+FiniteElementMap\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:263\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n+const Element * element_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:299\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:260\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:142\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:714\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:894\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:227\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:569\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:690\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-unsigned int dimension() const\n-Total number of B-spline basis functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:744\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+NedelecPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:157\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+The grid view that the FE space is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:151\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:206\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n+GridView gridView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:245\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n+FiniteElementMap finiteElementMap_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:246\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n void initializeIndices()\n-Initialize the global indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:680\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:192\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:211\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n const GridView & gridView() const\n Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:684\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\be_\bt_\bI_\bJ_\bK\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:990\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:186\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n Node makeNode() const\n Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:698\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:594\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:793\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_\n-std::array< std::vector< double >, dim > knotVectors_\n-The knot vectors, one for each space dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1218\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:704\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:646\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-LocalBasis class in the sense of dune-localfunctions, presenting the\n-restriction of a B-spline patch ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:51\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br\n-unsigned int order() const\n-Polynomial order of the shape functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:145\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-std::size_t size() const\n-Return the number of basis functions on the current knot span.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:102\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-void evaluateFunction(const FieldVector< D, dim > &in, std::vector<\n-FieldVector< R, 1 > > &out) const\n-Evaluate all shape functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const\n-BSplineLocalFiniteElement< GV, R > &lFE)\n-Constructor with a given B-spline patch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:66\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n-Attaches a shape function to an entity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:183\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bK_\be_\by\n-const LocalKey & localKey(std::size_t i) const\n-get i'th index\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:326\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b:_\b:_\bi_\bn_\bi_\bt\n-void init(const std::array< unsigned, dim > &sizes)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:261\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-std::size_t size() const\n-number of coefficients\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:320\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn\n-Local interpolation in the sense of dune-localfunctions, for the B-spline basis\n-on tensor-product gri...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:345\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be\n-void interpolate(const F &f, std::vector< C > &out) const\n-Local interpolation of a function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:349\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1231\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1255\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename GV::template Codim< 0 >::Entity Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1237\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n-const BSplinePreBasis< GV > * preBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1271\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n-Element element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1274\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind to element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1261\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be\n-BSplineNode(const BSplinePreBasis< GV > *preBasis)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1240\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return current element, throw if unbound.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1246\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n-FiniteElement finiteElement_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1273\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:1236\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-Global basis for given pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-A generic MixIn class for PreBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b _\b>_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Get the total dimension of the space spanned by this basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:60\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:201\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bp_\bp_\be_\br_\b_\n+Mapper mapper_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:247\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n size_type size() const\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n void setSize(const size_type size)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\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 \n \n \n \n \n \n \n-dune-functions: defaultglobalbasis.hh File Reference\n+dune-functions: lfeprebasismixin.hh File Reference\n \n \n \n \n \n \n \n@@ -73,57 +73,47 @@\n
    \n \n
    \n \n-
    defaultglobalbasis.hh File Reference
    \n+
    lfeprebasismixin.hh File Reference
    \n
    \n
    \n-
    #include <cstddef>
    \n+
    #include <cassert>
    \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+#include <dune/common/exceptions.hh>
    \n+#include <dune/functions/functionspacebases/leafprebasismappermixin.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/grid/common/mcmgmapper.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::DefaultGlobalBasis< PB >
     Global basis for given pre-basis. More...
    class  Dune::Functions::LFEPreBasisMixin< GV, LFE >
     A pre-basis mixin class parametrized with a local finite-element and a DOF layout. More...
     
    class  Dune::Functions::LFEPreBasisMixin< GV, LFE >::Node
     Leaf basis node that encapsulates a local finite-element given from the LFEPreBasisMixin of type LFE. More...
     
    \n \n \n \n \n \n-\n-\n-\n-\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n

    \n Functions

    template<class PreBasis >
     Dune::Functions::DefaultGlobalBasis (PreBasis &&) -> DefaultGlobalBasis< std::decay_t< PreBasis > >
     
    template<class GridView , class PreBasisFactory >
     Dune::Functions::DefaultGlobalBasis (const GridView &gv, PreBasisFactory &&f) -> DefaultGlobalBasis< std::decay_t< decltype(f(gv))> >
     
    template<class GridView , class PreBasisFactory >
    auto Dune::Functions::BasisFactory::makeBasis (const GridView &gridView, PreBasisFactory &&preBasisFactory)
     
    template<class GV , class LFE >
     Dune::Functions::LFEPreBasisMixin (const GV &, const LFE &, MCMGLayout) -> LFEPreBasisMixin< GV, LFE >
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,46 +2,36 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-defaultglobalbasis.hh File Reference\n-#include \n+lfeprebasismixin.hh File Reference\n+#include \n #include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bP_\bB_\b _\b>\n-\u00a0 Global basis for given pre-basis. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bG_\bV_\b,_\b _\bL_\bF_\bE_\b _\b>\n+\u00a0 A pre-basis mixin class parametrized with a local finite-element and a\n+ DOF layout. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bG_\bV_\b,_\b _\bL_\bF_\bE_\b _\b>_\b:_\b:_\bN_\bo_\bd_\be\n+\u00a0 Leaf basis node that encapsulates a local finite-element given from the\n+ _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn of type LFE. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs (PreBasis &&) -> _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- std::decay_t< PreBasis > >\n-\u00a0\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs (const GridView &gv, PreBasisFactory\n- &&f) -> _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< std::decay_t< decltype(f(gv))> >\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bm_\ba_\bk_\be_\bB_\ba_\bs_\bi_\bs (const GridView &gridView,\n- PreBasisFactory &&preBasisFactory)\n+template\n+\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn (const GV &, const LFE &, MCMGLayout) -\n+ > _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< GV, LFE >\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: defaultglobalbasis.hh Source File\n+dune-functions: lfeprebasismixin.hh Source File\n \n \n \n \n \n \n \n@@ -74,234 +74,161 @@\n \n \n
    \n
    \n-
    defaultglobalbasis.hh
    \n+
    lfeprebasismixin.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH
    \n
    9
    \n-
    10#include <cstddef>
    \n+
    10#include <cassert>
    \n
    11#include <type_traits>
    \n-
    12#include <utility>
    \n-
    13
    \n-
    14#include <dune/common/reservedvector.hh>
    \n-
    15#include <dune/common/typeutilities.hh>
    \n-
    16#include <dune/common/concept.hh>
    \n+
    12
    \n+
    13#include <dune/common/exceptions.hh>
    \n+
    14
    \n+\n+\n
    17
    \n-\n-\n-\n+
    18#include <dune/grid/common/mcmgmapper.hh>
    \n+
    19
    \n+
    20namespace Dune::Functions {
    \n
    21
    \n-
    22
    \n-
    23
    \n-
    24namespace Dune {
    \n-
    25namespace Functions {
    \n-
    26
    \n-
    27
    \n-
    28
    \n-
    48template<class PB>
    \n-
    \n-\n-
    50{
    \n-
    51
    \n-
    52public:
    \n-
    53
    \n-
    55 using PreBasis = PB;
    \n-
    56
    \n-
    58 using PrefixPath = TypeTree::HybridTreePath<>;
    \n+
    54template <class GV, class LFE>
    \n+
    \n+\n+
    56 public LeafPreBasisMapperMixin< GV >
    \n+
    57{
    \n+\n
    59
    \n-
    61 using GridView = typename PreBasis::GridView;
    \n-
    62
    \n-
    64 using size_type = std::size_t;
    \n-
    65
    \n-\n-
    68
    \n-\n-
    71
    \n-
    73 using SizePrefix = Dune::ReservedVector<std::size_t, PreBasis::multiIndexBufferSize>;
    \n-
    74
    \n-
    83 template<class... T,
    \n-
    84 disableCopyMove<DefaultGlobalBasis, T...> = 0,
    \n-\n-
    \n-\n-
    87 preBasis_(std::forward<T>(t)...),
    \n-\n-
    89 {
    \n-
    90 static_assert(models<Concept::PreBasis<GridView>, PreBasis>(), "Type passed to DefaultGlobalBasis does not model the PreBasis concept.");
    \n-
    91 preBasis_.initializeIndices();
    \n-
    92 }
    \n-
    \n-
    93
    \n-
    100 template<class PreBasisFactory,
    \n-
    101 std::enable_if_t<Dune::IsCallable<PreBasisFactory(GridView), PreBasis>::value, int> = 0>
    \n-
    \n-
    102 DefaultGlobalBasis(const GridView& gridView, PreBasisFactory&& factory) :
    \n-
    103 preBasis_(factory(gridView)),
    \n-\n-
    105 {
    \n-
    106 static_assert(models<Concept::PreBasis<GridView>, PreBasis>(), "Type passed to DefaultGlobalBasis does not model the PreBasis concept.");
    \n-
    107 preBasis_.initializeIndices();
    \n-
    108 }
    \n-
    \n-
    109
    \n-
    \n-
    111 const GridView& gridView() const
    \n-
    112 {
    \n-
    113 return preBasis_.gridView();
    \n-
    114 }
    \n-
    \n-
    115
    \n-
    \n-
    117 const PreBasis& preBasis() const
    \n-
    118 {
    \n-
    119 return preBasis_;
    \n-
    120 }
    \n-
    \n-
    121
    \n-
    \n-\n-
    124 {
    \n-
    125 return preBasis_;
    \n-
    126 }
    \n+
    60public:
    \n+
    61
    \n+
    63 using GridView = GV;
    \n+
    64
    \n+
    66 class Node;
    \n+
    67
    \n+
    73 template <class LFE_ = LFE,
    \n+
    74 std::enable_if_t<std::is_default_constructible_v<LFE_>, int> = 0>
    \n+
    \n+
    75 LFEPreBasisMixin (const GridView& gv, MCMGLayout layout)
    \n+
    76 : Base(gv, layout)
    \n+
    77 , lfe_{}
    \n+
    78 {}
    \n
    \n+
    79
    \n+
    85 template <class LFE_>
    \n+
    \n+
    86 LFEPreBasisMixin (const GridView& gv, LFE_&& lfe, MCMGLayout layout)
    \n+
    87 : Base(gv, layout)
    \n+
    88 , lfe_(std::forward<LFE_>(lfe))
    \n+
    89 {}
    \n+
    \n+
    90
    \n+
    \n+
    92 Node makeNode () const
    \n+
    93 {
    \n+
    94 return Node(lfe_);
    \n+
    95 }
    \n+
    \n+
    96
    \n+
    97private:
    \n+
    98 LFE lfe_;
    \n+
    99};
    \n+
    \n+
    100
    \n+
    101// deduction guide
    \n+
    102template <class GV, class LFE>
    \n+
    103LFEPreBasisMixin(const GV&, const LFE&, MCMGLayout)
    \n+\n+
    105
    \n+
    106
    \n+
    107
    \n+
    117template <class GV, class LFE>
    \n+
    \n+
    118class LFEPreBasisMixin<GV,LFE>::Node
    \n+
    119 : public LeafBasisNode
    \n+
    120{
    \n+
    121 static constexpr int dim = GV::dimension;
    \n+
    122
    \n+
    123public:
    \n+
    124 using size_type = std::size_t;
    \n+
    125 using Element = typename GV::template Codim<0>::Entity;
    \n+
    126 using FiniteElement = LFE;
    \n
    127
    \n-
    \n-
    134 void update(const GridView & gv)
    \n-
    135 {
    \n-
    136 preBasis_.update(gv);
    \n-
    137 preBasis_.initializeIndices();
    \n-
    138 }
    \n-
    \n-
    139
    \n-
    \n-\n-
    142 {
    \n-
    143 return preBasis_.dimension();
    \n-
    144 }
    \n-
    \n-
    145
    \n-
    \n-\n-
    148 {
    \n-
    149 return preBasis_.size();
    \n+
    \n+
    129 explicit Node (const LFE& lfe)
    \n+
    130 : lfe_{&lfe}
    \n+
    131 , element_{nullptr}
    \n+
    132 {}
    \n+
    \n+
    133
    \n+
    \n+
    135 const Element& element () const
    \n+
    136 {
    \n+
    137 assert(!!element_);
    \n+
    138 return *element_;
    \n+
    139 }
    \n+
    \n+
    140
    \n+
    \n+\n+
    147 {
    \n+
    148 assert(!!lfe_);
    \n+
    149 return *lfe_;
    \n
    150 }
    \n
    \n
    151
    \n
    \n-
    153 size_type size(const SizePrefix& prefix) const
    \n-
    154 {
    \n-
    155 return preBasis_.size(prefix);
    \n-
    156 }
    \n-
    \n-
    157
    \n-
    \n-\n-
    160 {
    \n-
    161 return LocalView(*this);
    \n-
    162 }
    \n+
    153 void bind (const Element& e)
    \n+
    154 {
    \n+
    155 element_ = &e;
    \n+
    156 this->setSize(lfe_->size());
    \n+
    157 }
    \n+
    \n+
    158
    \n+
    159protected:
    \n+\n+\n+
    162};
    \n
    \n
    163
    \n-
    \n-\n-
    166 {
    \n-
    167 return *this;
    \n-
    168 }
    \n-
    \n-
    169
    \n-
    \n-
    171 const PrefixPath& prefixPath() const
    \n-
    172 {
    \n-
    173 return prefixPath_;
    \n-
    174 }
    \n-
    \n-
    175
    \n-
    176protected:
    \n-\n-\n-
    179};
    \n-
    \n-
    180
    \n-
    181
    \n-
    182
    \n-
    183template<class PreBasis>
    \n-\n-
    185
    \n-
    186template<class GridView, class PreBasisFactory>
    \n-
    187DefaultGlobalBasis(const GridView& gv, PreBasisFactory&& f) -> DefaultGlobalBasis<std::decay_t<decltype(f(gv))>>;
    \n-
    188
    \n-
    189
    \n-
    190
    \n-
    191namespace BasisFactory {
    \n-
    192
    \n-
    193template<class GridView, class PreBasisFactory>
    \n-
    \n-
    194auto makeBasis(const GridView& gridView, PreBasisFactory&& preBasisFactory)
    \n-
    195{
    \n-
    196 return DefaultGlobalBasis(preBasisFactory(gridView));
    \n-
    197}
    \n-
    \n-
    198
    \n-
    199} // end namespace BasisFactory
    \n-
    200
    \n-
    201// Backward compatibility
    \n-
    202namespace [[deprecated("Will be removed after Dune 2.10")]] BasisBuilder {
    \n-
    203
    \n-
    204 using namespace BasisFactory;
    \n-
    205
    \n-
    206}
    \n-
    207
    \n-
    208
    \n-
    209} // end namespace Functions
    \n-
    210} // end namespace Dune
    \n-
    211
    \n-
    212
    \n-
    213
    \n-
    214#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n-\n-\n-
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n-
    Definition polynomial.hh:17
    \n-
    auto makeBasis(const GridView &gridView, PreBasisFactory &&preBasisFactory)
    Definition defaultglobalbasis.hh:194
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n-
    Dune::ReservedVector< std::size_t, PreBasis::multiIndexBufferSize > SizePrefix
    Type used for prefixes handed to the size() method.
    Definition defaultglobalbasis.hh:73
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition defaultglobalbasis.hh:64
    \n-
    typename PreBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition defaultglobalbasis.hh:61
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition defaultglobalbasis.hh:111
    \n-
    PB PreBasis
    Pre-basis providing the implementation details.
    Definition defaultglobalbasis.hh:55
    \n-
    PreBasis & preBasis()
    Obtain the pre-basis providing the implementation details.
    Definition defaultglobalbasis.hh:123
    \n-
    void update(const GridView &gv)
    Update the stored grid view.
    Definition defaultglobalbasis.hh:134
    \n-
    DefaultLocalView< DefaultGlobalBasis< PreBasis > > LocalView
    Type of the local view on the restriction of the basis to a single element.
    Definition defaultglobalbasis.hh:67
    \n-
    typename LocalView::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition defaultglobalbasis.hh:70
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition defaultglobalbasis.hh:153
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition defaultglobalbasis.hh:141
    \n-
    PreBasis preBasis_
    Definition defaultglobalbasis.hh:177
    \n-
    LocalView localView() const
    Return local view for basis.
    Definition defaultglobalbasis.hh:159
    \n-
    TypeTree::HybridTreePath<> PrefixPath
    The empty prefix path that identifies the root in the local ansatz tree.
    Definition defaultglobalbasis.hh:58
    \n-
    DefaultGlobalBasis(T &&... t)
    Constructor.
    Definition defaultglobalbasis.hh:86
    \n-
    DefaultGlobalBasis(const GridView &gridView, PreBasisFactory &&factory)
    Constructor from a PreBasis factory.
    Definition defaultglobalbasis.hh:102
    \n-
    size_type size() const
    Return number of possible values for next position in empty multi index.
    Definition defaultglobalbasis.hh:147
    \n-
    const PreBasis & preBasis() const
    Obtain the pre-basis providing the implementation details.
    Definition defaultglobalbasis.hh:117
    \n-
    PrefixPath prefixPath_
    Definition defaultglobalbasis.hh:178
    \n-
    const DefaultGlobalBasis & rootBasis() const
    Return *this because we are not embedded in a larger basis.
    Definition defaultglobalbasis.hh:165
    \n-
    const PrefixPath & prefixPath() const
    Return empty path, because this is the root in the local ansatz tree.
    Definition defaultglobalbasis.hh:171
    \n-
    The restriction of a finite element basis to a single element.
    Definition defaultlocalview.hh:32
    \n-
    std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex
    Type used for global numbering of the basis vectors.
    Definition defaultlocalview.hh:68
    \n-\n+
    164
    \n+
    165} // end namespace Dune::Functions
    \n+
    166
    \n+
    167
    \n+
    168#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH
    \n+\n+\n+
    Definition polynomial.hh:18
    \n+
    A generic MixIn class for PreBasis with flat indices computed from a mapper.
    Definition leafprebasismappermixin.hh:62
    \n+
    A pre-basis mixin class parametrized with a local finite-element and a DOF layout.
    Definition lfeprebasismixin.hh:57
    \n+
    LFEPreBasisMixin(const GridView &gv, LFE_ &&lfe, MCMGLayout layout)
    Constructor for a given grid view object, local finite-element and layout.
    Definition lfeprebasismixin.hh:86
    \n+
    LFEPreBasisMixin(const GridView &gv, MCMGLayout layout)
    Constructor for a given grid view object and layout.
    Definition lfeprebasismixin.hh:75
    \n+
    Node makeNode() const
    Create tree node.
    Definition lfeprebasismixin.hh:92
    \n+
    GV GridView
    The grid view that the FE basis is defined on.
    Definition lfeprebasismixin.hh:63
    \n+
    Leaf basis node that encapsulates a local finite-element given from the LFEPreBasisMixin of type LFE.
    Definition lfeprebasismixin.hh:120
    \n+
    LFE FiniteElement
    Definition lfeprebasismixin.hh:126
    \n+
    std::size_t size_type
    Definition lfeprebasismixin.hh:124
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to; might raise an error if unbound.
    Definition lfeprebasismixin.hh:146
    \n+
    const Element & element() const
    Return current element; might raise an error if unbound.
    Definition lfeprebasismixin.hh:135
    \n+
    const FiniteElement * lfe_
    Definition lfeprebasismixin.hh:160
    \n+
    void bind(const Element &e)
    Bind to element. Stores a pointer to the passed element reference.
    Definition lfeprebasismixin.hh:153
    \n+
    Node(const LFE &lfe)
    Constructor; stores a pointer to the passed local finite-element lfe.
    Definition lfeprebasismixin.hh:129
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition lfeprebasismixin.hh:125
    \n+
    const Element * element_
    Definition lfeprebasismixin.hh:161
    \n+
    Definition nodes.hh:191
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,285 +1,184 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-defaultglobalbasis.hh\n+lfeprebasismixin.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH\n 9\n-10#include \n+10#include \n 11#include \n-12#include \n-13\n-14#include \n-15#include \n-16#include \n+12\n+13#include \n+14\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n 17\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+18#include \n+19\n+20namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n 21\n-22\n-23\n-24namespace _\bD_\bu_\bn_\be {\n-25namespace Functions {\n-26\n-27\n-28\n-48template\n-_\b4_\b9class _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-50{\n-51\n-52public:\n-53\n-_\b5_\b5 using _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = PB;\n-56\n-_\b5_\b8 using _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh = TypeTree::HybridTreePath<>;\n+54template \n+_\b5_\b5class _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn :\n+56 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn< GV >\n+57{\n+58 using _\bB_\ba_\bs_\be = _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bG_\bV_\b _\b>;\n 59\n-_\b6_\b1 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename PreBasis::GridView;\n-62\n-_\b6_\b4 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-65\n-_\b6_\b7 using _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b<_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b>>;\n-68\n-_\b7_\b0 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx;\n-71\n-_\b7_\b3 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = Dune::ReservedVector;\n-74\n-83 template = 0,\n-85 _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be<_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, T...> = 0>\n-_\b8_\b6 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(T&&... t) :\n-87 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(std::forward(t)...),\n-88 _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_()\n-89 {\n-90 static_assert(models, _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(), \"Type passed\n-to DefaultGlobalBasis does not model the PreBasis concept.\");\n-91 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n-92 }\n-93\n-100 template::\n-value, int> = 0>\n-_\b1_\b0_\b2 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw, PreBasisFactory&& factory) :\n-103 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(factory(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)),\n-104 _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_()\n-105 {\n-106 static_assert(models, _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(), \"Type passed\n-to DefaultGlobalBasis does not model the PreBasis concept.\");\n-107 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n-108 }\n-109\n-_\b1_\b1_\b1 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-112 {\n-113 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.gridView();\n-114 }\n-115\n-_\b1_\b1_\b7 const _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs() const\n-118 {\n-119 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-120 }\n-121\n-_\b1_\b2_\b3 _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs()\n-124 {\n-125 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-126 }\n+60public:\n+61\n+_\b6_\b3 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+64\n+66 class _\bN_\bo_\bd_\be;\n+67\n+73 template , int> = 0>\n+_\b7_\b5 _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv, MCMGLayout layout)\n+76 : _\bB_\ba_\bs_\be(gv, layout)\n+77 , lfe_{}\n+78 {}\n+79\n+85 template \n+_\b8_\b6 _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv, LFE_&& lfe, MCMGLayout layout)\n+87 : _\bB_\ba_\bs_\be(gv, layout)\n+88 , lfe_(std::forward(lfe))\n+89 {}\n+90\n+_\b9_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be () const\n+93 {\n+94 return _\bN_\bo_\bd_\be(lfe_);\n+95 }\n+96\n+97private:\n+98 LFE lfe_;\n+99};\n+100\n+101// deduction guide\n+102template \n+_\b1_\b0_\b3_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn(const GV&, const LFE&, MCMGLayout)\n+104 -> _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\bG_\bV_\b,_\bL_\bF_\bE_\b>;\n+105\n+106\n+107\n+117template \n+_\b1_\b1_\b8class _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn::_\bN_\bo_\bd_\be\n+119 : public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+120{\n+121 static constexpr int dim = GV::dimension;\n+122\n+123public:\n+_\b1_\b2_\b4 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b1_\b2_\b5 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b1_\b2_\b6 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = LFE;\n 127\n-_\b1_\b3_\b4 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw & gv)\n-135 {\n-136 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.update(gv);\n-137 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n-138 }\n-139\n-_\b1_\b4_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-142 {\n-143 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.dimension();\n-144 }\n-145\n-_\b1_\b4_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-148 {\n-149 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size();\n+_\b1_\b2_\b9 explicit _\bN_\bo_\bd_\be (const LFE& lfe)\n+130 : lfe_{&lfe}\n+131 , element_{nullptr}\n+132 {}\n+133\n+_\b1_\b3_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt () const\n+136 {\n+137 assert(!!element_);\n+138 return *element_;\n+139 }\n+140\n+_\b1_\b4_\b6 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt () const\n+147 {\n+148 assert(!!lfe_);\n+149 return *lfe_;\n 150 }\n 151\n-_\b1_\b5_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx& prefix) const\n+_\b1_\b5_\b3 void _\bb_\bi_\bn_\bd (const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n 154 {\n-155 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n-156 }\n-157\n-_\b1_\b5_\b9 _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n-160 {\n-161 return _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(*this);\n-162 }\n+155 element_ = &e;\n+156 this->setSize(lfe_->size());\n+157 }\n+158\n+159protected:\n+_\b1_\b6_\b0 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt* _\bl_\bf_\be_\b_;\n+_\b1_\b6_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+162};\n 163\n-_\b1_\b6_\b5 const _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs() const\n-166 {\n-167 return *this;\n-168 }\n-169\n-_\b1_\b7_\b1 const _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh() const\n-172 {\n-173 return _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n-174 }\n-175\n-176protected:\n-_\b1_\b7_\b7 _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-_\b1_\b7_\b8 _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n-179};\n-180\n-181\n-182\n-183template\n-_\b1_\b8_\b4_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(PreBasis&&) -> _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bs_\bt_\bd_\b:_\b:\n-_\bd_\be_\bc_\ba_\by_\b__\bt_\b<_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b>>;\n-185\n-186template\n-_\b1_\b8_\b7_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(const GridView& gv, PreBasisFactory&& f) -\n-> _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs>;\n-188\n-189\n-190\n-191namespace BasisFactory {\n-192\n-193template\n-_\b1_\b9_\b4auto _\bm_\ba_\bk_\be_\bB_\ba_\bs_\bi_\bs(const GridView& gridView, PreBasisFactory&& preBasisFactory)\n-195{\n-196 return _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(preBasisFactory(gridView));\n-197}\n-198\n-199} // end namespace BasisFactory\n-200\n-201// Backward compatibility\n-202namespace [[deprecated(\"Will be removed after Dune 2.10\")]] BasisBuilder {\n-203\n-204 using namespace BasisFactory;\n-205\n-206}\n-207\n-208\n-209} // end namespace Functions\n-210} // end namespace Dune\n-211\n-212\n-213\n-214#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be\n-std::enable_if_t< std::is_constructible_v< T, Args... >, int >\n-enableIfConstructible\n-Helper to constrain forwarding constructors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:31\n-_\bD_\bu_\bn_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bm_\ba_\bk_\be_\bB_\ba_\bs_\bi_\bs\n-auto makeBasis(const GridView &gridView, PreBasisFactory &&preBasisFactory)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:194\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-Global basis for given pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx\n-Dune::ReservedVector< std::size_t, PreBasis::multiIndexBufferSize > SizePrefix\n-Type used for prefixes handed to the size() method.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+164\n+165} // end namespace Dune::Functions\n+166\n+167\n+168#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn\n+A generic MixIn class for PreBasis with flat indices computed from a mapper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismappermixin.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+A pre-basis mixin class parametrized with a local finite-element and a DOF\n+layout.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+LFEPreBasisMixin(const GridView &gv, LFE_ &&lfe, MCMGLayout layout)\n+Constructor for a given grid view object, local finite-element and layout.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:86\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+LFEPreBasisMixin(const GridView &gv, MCMGLayout layout)\n+Constructor for a given grid view object and layout.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:92\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+The grid view that the FE basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:63\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be\n+Leaf basis node that encapsulates a local finite-element given from the\n+LFEPreBasisMixin of type LFE.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:120\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+LFE FiniteElement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n std::size_t size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:64\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-typename PreBasis::GridView GridView\n-The grid view that the FE space is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:111\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-PB PreBasis\n-Pre-basis providing the implementation details.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:55\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs\n-PreBasis & preBasis()\n-Obtain the pre-basis providing the implementation details.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:123\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-Update the stored grid view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:134\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-DefaultLocalView< DefaultGlobalBasis< PreBasis > > LocalView\n-Type of the local view on the restriction of the basis to a single element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-typename LocalView::MultiIndex MultiIndex\n-Type used for global numbering of the basis vectors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:70\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:153\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:141\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n-PreBasis preBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:177\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-LocalView localView() const\n-Return local view for basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:159\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n-TypeTree::HybridTreePath<> PrefixPath\n-The empty prefix path that identifies the root in the local ansatz tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-DefaultGlobalBasis(T &&... t)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:86\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-DefaultGlobalBasis(const GridView &gridView, PreBasisFactory &&factory)\n-Constructor from a PreBasis factory.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:102\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Return number of possible values for next position in empty multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs\n-const PreBasis & preBasis() const\n-Obtain the pre-basis providing the implementation details.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:117\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_\n-PrefixPath prefixPath_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:178\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs\n-const DefaultGlobalBasis & rootBasis() const\n-Return *this because we are not embedded in a larger basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:165\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n-const PrefixPath & prefixPath() const\n-Return empty path, because this is the root in the local ansatz tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-The restriction of a finite element basis to a single element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:32\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:68\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:124\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to; might raise an\n+error if unbound.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:146\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return current element; might raise an error if unbound.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:135\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bl_\bf_\be_\b_\n+const FiniteElement * lfe_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:160\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind to element. Stores a pointer to the passed element reference.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:153\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bN_\bo_\bd_\be\n+Node(const LFE &lfe)\n+Constructor; stores a pointer to the passed local finite-element lfe.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:129\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename GV::template Codim< 0 >::Entity Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:125\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n+const Element * element_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:161\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: subentitydofs.hh File Reference\n+dune-functions: refinedlagrangebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,51 +72,61 @@\n
  • dune
  • functions
  • functionspacebases
  • \n
    \n
    \n
    \n \n-
    subentitydofs.hh File Reference
    \n+
    refinedlagrangebasis.hh File Reference
    \n
    \n
    \n-
    #include <vector>
    \n-#include <dune/geometry/referenceelements.hh>
    \n-#include <dune/typetree/traversal.hh>
    \n+
    #include <type_traits>
    \n+#include <dune/common/exceptions.hh>
    \n+#include <dune/common/math.hh>
    \n+#include <dune/localfunctions/refined.hh>
    \n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n+#include <dune/functions/functionspacebases/leafprebasismappermixin.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/geometry/type.hh>
    \n+#include <dune/grid/common/mcmgmapper.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::SubEntityDOFs< GridView >
     Range of DOFs associated to sub-entity. More...
    class  Dune::Functions::RefinedLagrangePreBasis< GV, k, R >
     A pre-basis for a refined Lagrange bases. More...
     
    class  Dune::Functions::RefinedLagrangeNode< GV, k, R >
     
    \n \n \n \n \n \n+\n+\n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n+\n+\n+\n+\n+\n

    \n+Typedefs

    template<typename GV , int k, typename R = double>
    using Dune::Functions::RefinedLagrangeBasis = DefaultGlobalBasis< RefinedLagrangePreBasis< GV, k, R > >
     Nodal basis of a continuous Lagrange finite-element space on a uniformly refined simplex element.
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Functions

    template<class T >
    auto Dune::Functions::subEntityDOFs (const T &)
     Create SubEntityDOFs object.
     
    template<class LocalView >
    auto Dune::Functions::subEntityDOFs (const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
     Create bound SubEntityDOFs object.
     
    template<class LocalView , class Intersection >
    auto Dune::Functions::subEntityDOFs (const LocalView &localView, const Intersection &intersection)
     Create bound SubEntityDOFs object.
     
    template<int k, typename R = double>
    auto Dune::Functions::BasisFactory::refinedLagrange ()
     Create a pre-basis factory that can create a RefinedLagrange pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,46 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-subentitydofs.hh File Reference\n-#include \n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+refinedlagrangebasis.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b _\b>\n-\u00a0 Range of DOFs associated to sub-entity. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b _\b>\n+\u00a0 A pre-basis for a refined Lagrange bases. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k, R > >\n+\u00a0 Nodal basis of a continuous Lagrange finite-element space on a uniformly\n+ refined simplex element.\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs (const T &)\n-\u00a0 Create _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs object.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs (const LocalView &localView, std::size_t\n- subEntityIndex, std::size_t subEntityCodim)\n-\u00a0 Create bound _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs object.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs (const LocalView &localView, const\n- Intersection &intersection)\n-\u00a0 Create bound _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs object.\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n+\u00a0 Create a pre-basis factory that can create a RefinedLagrange pre-basis.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: subentitydofs.hh Source File\n+dune-functions: refinedlagrangebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,174 +74,222 @@\n \n \n
    \n
    \n-
    subentitydofs.hh
    \n+
    refinedlagrangebasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH
    \n
    9
    \n-
    10#include <vector>
    \n+
    10#include <type_traits>
    \n
    11
    \n-
    12#include <dune/geometry/referenceelements.hh>
    \n-
    13#include <dune/typetree/traversal.hh>
    \n+
    12#include <dune/common/exceptions.hh>
    \n+
    13#include <dune/common/math.hh>
    \n
    14
    \n-
    15
    \n+
    15#include <dune/localfunctions/refined.hh>
    \n
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n-
    19
    \n+\n+\n+\n
    20
    \n-
    21
    \n-
    44template<class GridView>
    \n-
    \n-\n+
    21#include <dune/geometry/type.hh>
    \n+
    22
    \n+
    23#include <dune/grid/common/mcmgmapper.hh>
    \n+
    24
    \n+
    25
    \n+
    26namespace Dune {
    \n+
    27namespace Functions {
    \n+
    28
    \n+
    29template<typename GV, int k, typename R>
    \n+
    30class RefinedLagrangeNode;
    \n+
    31
    \n+
    43template <typename GV, int k, typename R = double>
    \n+
    \n+\n+
    45 public LeafPreBasisMapperMixin< GV >
    \n
    46{
    \n-
    47 static const int dim = GridView::dimension;
    \n+\n
    48
    \n-
    49public:
    \n+
    49 static const int dim = GV::dimension;
    \n
    50
    \n-
    67 template<class LocalView>
    \n-
    \n-
    68 SubEntityDOFs& bind(const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    \n-
    69 {
    \n-
    70 // fill vector with local indices of all DOFs contained in subentity
    \n-
    71 containedDOFs_.clear();
    \n-
    72 dofIsContained_.assign(localView.size(), false);
    \n+
    51 // refined basis only implemented for P0 and P1
    \n+
    52 static_assert(k == 0 || k == 1);
    \n+
    53
    \n+
    54 // the layout is defined in terms of a MCMGLayout specialized for k == 0 or 1
    \n+
    55 static MCMGLayout dofLayout()
    \n+
    56 {
    \n+
    57 if constexpr(k == 0)
    \n+
    58 // a refined P0 basis assigns each element 2^dim DOFs
    \n+
    59 return [](GeometryType gt, int) -> size_t {
    \n+
    60 return (gt.dim() == dim) ? (1 << dim) : 0;
    \n+
    61 };
    \n+
    62 else if constexpr(k == 1)
    \n+
    63 // a refined P1 basis has the same layout as a P2 basis
    \n+
    64 return [](GeometryType gt, int) -> size_t {
    \n+
    65 return Dune::binomial(int(k),int(gt.dim()));
    \n+
    66 };
    \n+
    67 else
    \n+
    68 DUNE_THROW(Dune::NotImplemented,
    \n+
    69 "Refined basis not implemented for higher-order Lagrange (k>=2) elements.");
    \n+
    70 }
    \n+
    71
    \n+
    72public:
    \n
    73
    \n-
    74 auto re = Dune::referenceElement<double,dim>(localView.element().type());
    \n-
    75
    \n-
    76 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /*treePath*/) {
    \n-
    77 const auto& localCoefficients = node.finiteElement().localCoefficients();
    \n-
    78 std::size_t localSize = localCoefficients.size();
    \n-
    79 for(std::size_t i=0; i<localSize; ++i)
    \n-
    80 {
    \n-
    81 auto localKey = localCoefficients.localKey(i);
    \n-
    82 if (re.subEntities(subEntityIndex, subEntityCodim, localKey.codim()).contains(localKey.subEntity()))
    \n-
    83 {
    \n-
    84 containedDOFs_.push_back(node.localIndex(i));
    \n-
    85 dofIsContained_[node.localIndex(i)] = true;
    \n-
    86 }
    \n-
    87 }
    \n-
    88 });
    \n-
    89 return *this;
    \n-
    90 }
    \n-
    \n-
    91
    \n-
    107 template<class LocalView, class Intersection>
    \n-
    \n-
    108 SubEntityDOFs& bind(const LocalView& localView, const Intersection& intersection)
    \n-
    109 {
    \n-
    110 return bind(localView, intersection.indexInInside(), 1);
    \n-
    111 }
    \n-
    \n-
    112
    \n-
    \n-
    114 auto begin() const
    \n-
    115 {
    \n-
    116 return containedDOFs_.cbegin();
    \n-
    117 }
    \n-
    \n-
    118
    \n-
    \n-
    120 auto end() const
    \n-
    121 {
    \n-
    122 return containedDOFs_.cend();
    \n-
    123 }
    \n-
    \n-
    124
    \n-
    \n-
    126 auto size() const
    \n-
    127 {
    \n-
    128 return containedDOFs_.size();
    \n-
    129 }
    \n-
    \n-
    130
    \n-
    \n-
    132 decltype(auto) operator[](std::size_t i) const
    \n-
    133 {
    \n-
    134 return containedDOFs_[i];
    \n-
    135 }
    \n-
    \n-
    136
    \n-
    \n-
    138 bool contains(std::size_t localIndex) const
    \n-
    139 {
    \n-
    140 return dofIsContained_[localIndex];
    \n-
    141 }
    \n-
    \n-
    142
    \n-
    143private:
    \n-
    144
    \n-
    145 std::vector<std::size_t> containedDOFs_;
    \n-
    146 std::vector<bool> dofIsContained_;
    \n-
    147};
    \n+
    75 using GridView = GV;
    \n+
    76
    \n+\n+
    79
    \n+
    \n+\n+
    87 : Base(gv, dofLayout())
    \n+
    88 {
    \n+
    89 for (auto gt : gv.indexSet().types(0)) {
    \n+
    90 if (!gt.isSimplex())
    \n+
    91 DUNE_THROW(Dune::NotImplemented,
    \n+
    92 "Refined Lagrange basis only implemented for simplex grids.");
    \n+
    93 }
    \n+
    94 }
    \n+
    \n+
    95
    \n+
    \n+
    97 Node makeNode () const
    \n+
    98 {
    \n+
    99 return Node{};
    \n+
    100 }
    \n+
    \n+
    101
    \n+
    \n+
    109 static constexpr unsigned int order()
    \n+
    110 {
    \n+
    111 return k;
    \n+
    112 }
    \n+
    \n+
    113};
    \n+
    \n+
    114
    \n+
    115
    \n+
    116
    \n+
    117template <typename GV, int k, typename R>
    \n+
    \n+\n+
    119 : public LeafBasisNode
    \n+
    120{
    \n+
    121 static constexpr int dim = GV::dimension;
    \n+
    122
    \n+
    123 // refined basis only implemented for P0 and P1
    \n+
    124 static_assert(k == 0 || k == 1);
    \n+
    125
    \n+
    126public:
    \n+
    128 using Element = typename GV::template Codim<0>::Entity;
    \n+
    129
    \n+
    131 using FiniteElement = std::conditional_t<(k==0),
    \n+
    132 Dune::RefinedP0LocalFiniteElement<typename GV::ctype,R,dim>,
    \n+
    133 Dune::RefinedP1LocalFiniteElement<typename GV::ctype,R,dim>>;
    \n+
    134
    \n+
    \n+\n+\n+
    146 , element_(nullptr)
    \n+
    147 {}
    \n
    \n
    148
    \n-
    149
    \n-
    150
    \n-
    163template<class T>
    \n+
    \n+
    153 const Element& element () const
    \n+
    154 {
    \n+
    155 return *element_;
    \n+
    156 }
    \n+
    \n+
    157
    \n
    \n-
    164auto subEntityDOFs(const T&)
    \n-
    165{
    \n-\n-
    167}
    \n+\n+
    165 {
    \n+
    166 return finiteElement_;
    \n+
    167 }
    \n
    \n
    168
    \n-
    169
    \n-
    170
    \n-
    190template<class LocalView>
    \n-
    \n-
    191auto subEntityDOFs(const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    \n-
    192{
    \n-
    193 using GridView = typename LocalView::GridView;
    \n-\n-
    195 subEntityDOFs.bind(localView, subEntityIndex, subEntityCodim);
    \n-
    196 return subEntityDOFs;
    \n-
    197}
    \n-
    \n-
    198
    \n-
    199
    \n-
    200
    \n-
    219template<class LocalView, class Intersection>
    \n-
    \n-
    220auto subEntityDOFs(const LocalView& localView, const Intersection& intersection)
    \n-
    221{
    \n-
    222 using GridView = typename LocalView::GridView;
    \n-\n-
    224 subEntityDOFs.bind(localView, intersection);
    \n-
    225 return subEntityDOFs;
    \n-
    226}
    \n-
    \n+
    \n+
    170 void bind (const Element& e)
    \n+
    171 {
    \n+
    172 element_ = &e;
    \n+
    173 this->setSize(finiteElement_.size());
    \n+
    174 }
    \n+
    \n+
    175
    \n+
    \n+
    180 static constexpr unsigned int order()
    \n+
    181 {
    \n+
    182 return k;
    \n+
    183 }
    \n+
    \n+
    184
    \n+
    185protected:
    \n+\n+\n+
    188};
    \n+
    \n+
    189
    \n+
    190
    \n+
    191
    \n+
    192namespace BasisFactory {
    \n+
    193
    \n+
    201template <int k, typename R=double>
    \n+
    \n+\n+
    203{
    \n+
    204 return [](const auto& gridView) {
    \n+
    205 return RefinedLagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n+
    206 };
    \n+
    207}
    \n+
    \n+
    208
    \n+
    209} // end namespace BasisFactory
    \n+
    210
    \n+
    211
    \n+
    225template <typename GV, int k, typename R=double>
    \n+\n
    227
    \n-
    228
    \n-
    229
    \n-
    230} // namespace Functions
    \n-
    231} // namespace Dune
    \n-
    232
    \n-
    233#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n-
    auto subEntityDOFs(const T &)
    Create SubEntityDOFs object.
    Definition subentitydofs.hh:164
    \n+
    228} // end namespace Functions
    \n+
    229} // end namespace Dune
    \n+
    230
    \n+
    231
    \n+
    232#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH
    \n+\n+\n+\n+
    auto refinedLagrange()
    Create a pre-basis factory that can create a RefinedLagrange pre-basis.
    Definition refinedlagrangebasis.hh:202
    \n
    Definition polynomial.hh:17
    \n-
    Range of DOFs associated to sub-entity.
    Definition subentitydofs.hh:46
    \n-
    auto begin() const
    Create begin iterator for access to range of contained local indices.
    Definition subentitydofs.hh:114
    \n-
    auto size() const
    Return number of contained DOFs.
    Definition subentitydofs.hh:126
    \n-
    SubEntityDOFs & bind(const LocalView &localView, const Intersection &intersection)
    Bind SubEntityDOFs object to LocalView and sub-entity.
    Definition subentitydofs.hh:108
    \n-
    bool contains(std::size_t localIndex) const
    Check if given local index is contained in this range of DOFs.
    Definition subentitydofs.hh:138
    \n-
    auto end() const
    Create end iterator for access to range of contained local indices.
    Definition subentitydofs.hh:120
    \n-
    SubEntityDOFs & bind(const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    Bind SubEntityDOFs object to LocalView and sub-entity.
    Definition subentitydofs.hh:68
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n+
    A generic MixIn class for PreBasis with flat indices computed from a mapper.
    Definition leafprebasismappermixin.hh:62
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n+
    Definition nodes.hh:191
    \n+
    Definition refinedlagrangebasis.hh:120
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition refinedlagrangebasis.hh:164
    \n+
    const Element * element_
    Definition refinedlagrangebasis.hh:187
    \n+
    void bind(const Element &e)
    Bind the node to the element e.
    Definition refinedlagrangebasis.hh:170
    \n+
    const FiniteElement finiteElement_
    Definition refinedlagrangebasis.hh:186
    \n+
    static constexpr unsigned int order()
    Polynomial order used in the local Lagrange finite-elements in subdomains of the element.
    Definition refinedlagrangebasis.hh:180
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Type of the element in the GridView.
    Definition refinedlagrangebasis.hh:128
    \n+
    std::conditional_t<(k==0), Dune::RefinedP0LocalFiniteElement< typename GV::ctype, R, dim >, Dune::RefinedP1LocalFiniteElement< typename GV::ctype, R, dim > > FiniteElement
    Type of the local finite-element.
    Definition refinedlagrangebasis.hh:133
    \n+
    RefinedLagrangeNode()
    The default constructor initializes all members to their default.
    Definition refinedlagrangebasis.hh:144
    \n+
    const Element & element() const
    Return current element. The behavior is undefined if the node is not bound to any element.
    Definition refinedlagrangebasis.hh:153
    \n+
    A pre-basis for a refined Lagrange bases.
    Definition refinedlagrangebasis.hh:46
    \n+
    static constexpr unsigned int order()
    Polynomial order used in the local Lagrange finite-elements.
    Definition refinedlagrangebasis.hh:109
    \n+
    Node makeNode() const
    Create tree node.
    Definition refinedlagrangebasis.hh:97
    \n+
    GV GridView
    The grid view that the FE basis is defined on.
    Definition refinedlagrangebasis.hh:75
    \n+
    RefinedLagrangePreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition refinedlagrangebasis.hh:86
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,180 +1,254 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-subentitydofs.hh\n+refinedlagrangebasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\n 9\n-10#include \n+10#include \n 11\n-12#include \n-13#include \n+12#include \n+13#include \n 14\n-15\n+15#include \n 16\n-17namespace _\bD_\bu_\bn_\be {\n-18namespace Functions {\n-19\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n 20\n-21\n-44template\n-_\b4_\b5class _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n+21#include \n+22\n+23#include \n+24\n+25\n+26namespace _\bD_\bu_\bn_\be {\n+27namespace Functions {\n+28\n+29template\n+30class RefinedLagrangeNode;\n+31\n+43template \n+_\b4_\b4class _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n+45 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn< GV >\n 46{\n-47 static const int dim = GridView::dimension;\n+47 using _\bB_\ba_\bs_\be = _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bG_\bV_\b _\b>;\n 48\n-49public:\n+49 static const int dim = GV::dimension;\n 50\n-67 template\n-_\b6_\b8 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs& _\bb_\bi_\bn_\bd(const LocalView& localView, std::size_t subEntityIndex,\n-std::size_t subEntityCodim)\n-69 {\n-70 // fill vector with local indices of all DOFs contained in subentity\n-71 containedDOFs_.clear();\n-72 dofIsContained_.assign(localView.size(), false);\n+51 // refined basis only implemented for P0 and P1\n+52 static_assert(k == 0 || k == 1);\n+53\n+54 // the layout is defined in terms of a MCMGLayout specialized for k == 0 or\n+1\n+55 static MCMGLayout dofLayout()\n+56 {\n+57 if constexpr(k == 0)\n+58 // a refined P0 basis assigns each element 2^dim DOFs\n+59 return [](GeometryType gt, int) -> size_t {\n+60 return (gt.dim() == dim) ? (1 << dim) : 0;\n+61 };\n+62 else if constexpr(k == 1)\n+63 // a refined P1 basis has the same layout as a P2 basis\n+64 return [](GeometryType gt, int) -> size_t {\n+65 return Dune::binomial(int(k),int(gt.dim()));\n+66 };\n+67 else\n+68 DUNE_THROW(Dune::NotImplemented,\n+69 \"Refined basis not implemented for higher-order Lagrange (k>=2) elements.\");\n+70 }\n+71\n+72public:\n 73\n-74 auto re = Dune::referenceElement(localView.element().type());\n-75\n-76 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /\n-*treePath*/) {\n-77 const auto& localCoefficients = node.finiteElement().localCoefficients();\n-78 std::size_t localSize = localCoefficients.size();\n-79 for(std::size_t i=0; i\n-_\b1_\b0_\b8 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs& _\bb_\bi_\bn_\bd(const LocalView& localView, const Intersection&\n-intersection)\n-109 {\n-110 return bind(localView, intersection.indexInInside(), 1);\n-111 }\n-112\n-_\b1_\b1_\b4 auto _\bb_\be_\bg_\bi_\bn() const\n-115 {\n-116 return containedDOFs_.cbegin();\n-117 }\n-118\n-_\b1_\b2_\b0 auto _\be_\bn_\bd() const\n-121 {\n-122 return containedDOFs_.cend();\n-123 }\n-124\n-_\b1_\b2_\b6 auto _\bs_\bi_\bz_\be() const\n-127 {\n-128 return containedDOFs_.size();\n-129 }\n-130\n-_\b1_\b3_\b2 decltype(auto) operator[](std::size_t i) const\n-133 {\n-134 return containedDOFs_[i];\n-135 }\n-136\n-_\b1_\b3_\b8 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(std::size_t localIndex) const\n-139 {\n-140 return dofIsContained_[localIndex];\n-141 }\n-142\n-143private:\n-144\n-145 std::vector containedDOFs_;\n-146 std::vector dofIsContained_;\n-147};\n+_\b7_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+76\n+_\b7_\b8 using _\bN_\bo_\bd_\be = _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b>;\n+79\n+_\b8_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+87 : _\bB_\ba_\bs_\be(gv, dofLayout())\n+88 {\n+89 for (auto gt : gv.indexSet().types(0)) {\n+90 if (!gt.isSimplex())\n+91 DUNE_THROW(Dune::NotImplemented,\n+92 \"Refined Lagrange basis only implemented for simplex grids.\");\n+93 }\n+94 }\n+95\n+_\b9_\b7 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be () const\n+98 {\n+99 return _\bN_\bo_\bd_\be{};\n+100 }\n+101\n+_\b1_\b0_\b9 static constexpr unsigned int _\bo_\br_\bd_\be_\br()\n+110 {\n+111 return k;\n+112 }\n+113};\n+114\n+115\n+116\n+117template \n+_\b1_\b1_\b8class _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n+119 : public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+120{\n+121 static constexpr int dim = GV::dimension;\n+122\n+123 // refined basis only implemented for P0 and P1\n+124 static_assert(k == 0 || k == 1);\n+125\n+126public:\n+_\b1_\b2_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+129\n+_\b1_\b3_\b1 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = std::conditional_t<(k==0),\n+132 Dune::RefinedP0LocalFiniteElement,\n+133 Dune::RefinedP1LocalFiniteElement>;\n+134\n+_\b1_\b4_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be ()\n+145 : _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_{}\n+146 , _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n+147 {}\n 148\n-149\n-150\n-163template\n-_\b1_\b6_\b4auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const T&)\n-165{\n-166 return _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b>{};\n-167}\n+_\b1_\b5_\b3 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt () const\n+154 {\n+155 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+156 }\n+157\n+_\b1_\b6_\b4 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt () const\n+165 {\n+166 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+167 }\n 168\n-169\n-170\n-190template\n-_\b1_\b9_\b1auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const LocalView& localView, std::size_t subEntityIndex,\n-std::size_t subEntityCodim)\n-192{\n-193 using GridView = typename LocalView::GridView;\n-194 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b<_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b> _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n-195 _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs.bind(localView, subEntityIndex, subEntityCodim);\n-196 return _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n-197}\n-198\n-199\n-200\n-219template\n-_\b2_\b2_\b0auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const LocalView& localView, const Intersection&\n-intersection)\n-221{\n-222 using GridView = typename LocalView::GridView;\n-223 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b<_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b> _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n-224 _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs.bind(localView, intersection);\n-225 return _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n-226}\n+_\b1_\b7_\b0 void _\bb_\bi_\bn_\bd (const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+171 {\n+172 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+173 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n+174 }\n+175\n+_\b1_\b8_\b0 static constexpr unsigned int _\bo_\br_\bd_\be_\br()\n+181 {\n+182 return k;\n+183 }\n+184\n+185protected:\n+_\b1_\b8_\b6 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b1_\b8_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+188};\n+189\n+190\n+191\n+192namespace BasisFactory {\n+193\n+201template \n+_\b2_\b0_\b2auto _\br_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n+203{\n+204 return [](const auto& gridView) {\n+205 return _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k, R>\n+(gridView);\n+206 };\n+207}\n+208\n+209} // end namespace BasisFactory\n+210\n+211\n+225template \n+_\b2_\b2_\b6using _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bk_\b,_\bR_\b> >;\n 227\n-228\n-229\n-230} // namespace Functions\n-231} // namespace Dune\n-232\n-233#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n-auto subEntityDOFs(const T &)\n-Create SubEntityDOFs object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:164\n+228} // end namespace Functions\n+229} // end namespace Dune\n+230\n+231\n+232#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be\n+auto refinedLagrange()\n+Create a pre-basis factory that can create a RefinedLagrange pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:202\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n-Range of DOFs associated to sub-entity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:46\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-auto begin() const\n-Create begin iterator for access to range of contained local indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:114\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-auto size() const\n-Return number of contained DOFs.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bb_\bi_\bn_\bd\n-SubEntityDOFs & bind(const LocalView &localView, const Intersection\n-&intersection)\n-Bind SubEntityDOFs object to LocalView and sub-entity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:108\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs\n-bool contains(std::size_t localIndex) const\n-Check if given local index is contained in this range of DOFs.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:138\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\be_\bn_\bd\n-auto end() const\n-Create end iterator for access to range of contained local indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:120\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bb_\bi_\bn_\bd\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+Global basis for given pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn\n+A generic MixIn class for PreBasis with flat indices computed from a mapper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismappermixin.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n+void setSize(const size_type size)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:120\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:164\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n+const Element * element_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:187\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind the node to the element e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:170\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n+const FiniteElement finiteElement_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:186\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bo_\br_\bd_\be_\br\n+static constexpr unsigned int order()\n+Polynomial order used in the local Lagrange finite-elements in subdomains of\n+the element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:180\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename GV::template Codim< 0 >::Entity Element\n+Type of the element in the GridView.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:128\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+std::conditional_t<(k==0), Dune::RefinedP0LocalFiniteElement< typename GV::\n+ctype, R, dim >, Dune::RefinedP1LocalFiniteElement< typename GV::ctype, R, dim\n+> > FiniteElement\n+Type of the local finite-element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:133\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n+RefinedLagrangeNode()\n+The default constructor initializes all members to their default.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:144\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return current element. The behavior is undefined if the node is not bound to\n+any element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:153\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+A pre-basis for a refined Lagrange bases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:46\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br\n+static constexpr unsigned int order()\n+Polynomial order used in the local Lagrange finite-elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:109\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:97\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+The grid view that the FE basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+RefinedLagrangePreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:86\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: nedelecbasis.hh File Reference\n+dune-functions: containerdescriptors.hh File Reference\n \n \n \n \n \n \n \n@@ -74,59 +74,94 @@\n
    \n
    \n \n-
    nedelecbasis.hh File Reference
    \n+
    containerdescriptors.hh File Reference
    \n
    \n
    \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/nedelec.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n-#include <dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh>
    \n-#include <dune/functions/functionspacebases/leafprebasismixin.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <cassert>
    \n+#include <functional>
    \n+#include <type_traits>
    \n+#include <vector>
    \n+#include <dune/common/filledarray.hh>
    \n+#include <dune/common/tuplevector.hh>
    \n+#include <dune/common/typeutilities.hh>
    \n+#include <dune/functions/common/type_traits.hh>
    \n+#include <dune/functions/functionspacebases/basistags.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n+\n \n-\n+\n+\n+\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::NedelecPreBasis< GV, Range, kind, order >
    struct  Dune::Functions::ContainerDescriptors::Unknown
     Fallback container descriptor if nothing else fits. More...
     
    class  Dune::Functions::NedelecNode< GV, Range, kind, order >
    struct  Dune::Functions::ContainerDescriptors::Value
     The node in the descriptor tree representing a value placeholder. More...
     
    struct  Dune::Functions::ContainerDescriptors::UniformArray< Child, n >
     Descriptor for arrays with all children identical and the number of children a static size. More...
     
    struct  Dune::Functions::ContainerDescriptors::UniformVector< Child >
     Uniform descriptor with dynamic size. More...
     
    \n \n \n \n \n \n-\n+\n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
    namespace  Dune::Functions::ContainerDescriptors
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Typedefs

    template<typename GV , std::size_t kind, std::size_t order, typename Range = double>
    using Dune::Functions::NedelecBasis = DefaultGlobalBasis< NedelecPreBasis< GV, Range, kind, order > >
     Basis of a k-th-order N\u00e9d\u00e9lec finite element space.
     
    template<class... Children>
    using Dune::Functions::ContainerDescriptors::Tuple = Dune::TupleVector< Children... >
     Descriptor with all children of possibly different type.
     
    template<class Child , std::size_t n>
    using Dune::Functions::ContainerDescriptors::Array = std::array< Child, n >
     Descriptor for arrays with all children of the same type and static size.
     
    template<class Child >
    using Dune::Functions::ContainerDescriptors::Vector = std::vector< Child >
     Descriptor for vectors with all children of the same type and dynamic size.
     
    template<std::size_t n>
    using Dune::Functions::ContainerDescriptors::FlatArray = UniformArray< Value, n >
     Alias for a uniform array storing value placeholders.
     
    using Dune::Functions::ContainerDescriptors::FlatVector = UniformVector< Value >
     Alias for a uniform vector storing value placeholders.
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<std::size_t kind, std::size_t order, typename Range = double>
    auto Dune::Functions::BasisFactory::nedelec ()
     Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.
     
    template<class PreBasis >
    auto Dune::Functions::containerDescriptor (const PreBasis &preBasis)
     Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
     
    template<class Child0 , class... Children, std::enable_if_t<(std::is_same_v< Child0, Children > &&...), int > = 0>
    auto Dune::Functions::ContainerDescriptors::makeDescriptor (Child0 child, Children... children)
     Generate a descriptor in case the children are all of the same type.
     
    template<class Child , std::size_t n>
    auto Dune::Functions::ContainerDescriptors::makeUniformDescriptor (std::integral_constant< std::size_t, n >, Child child)
     Generate a uniform descriptor in case the size is a static constant.
     
    template<class Child >
    auto Dune::Functions::ContainerDescriptors::makeUniformDescriptor (std::size_t n, Child child)
     Generate a uniform descriptor in case the size is a dynamic value.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,45 +2,90 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-nedelecbasis.hh File Reference\n+containerdescriptors.hh File Reference\n #include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bR_\ba_\bn_\bg_\be_\b,_\b _\bk_\bi_\bn_\bd_\b,_\b _\bo_\br_\bd_\be_\br_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn\n+\u00a0 Fallback container descriptor if nothing else fits. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bR_\ba_\bn_\bg_\be_\b,_\b _\bk_\bi_\bn_\bd_\b,_\b _\bo_\br_\bd_\be_\br_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be\n+\u00a0 The node in the descriptor tree representing a value placeholder.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b<_\b _\bC_\bh_\bi_\bl_\bd_\b,_\b _\bn_\b _\b>\n+\u00a0 Descriptor for arrays with all children identical and the number of\n+ children a static size. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bC_\bh_\bi_\bl_\bd_\b _\b>\n+\u00a0 Uniform descriptor with dynamic size. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV,\n- Range, kind, order > >\n-\u00a0 Basis of a k-th-order N\u00c3\u00a9d\u00c3\u00a9lec finite element space.\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bT_\bu_\bp_\bl_\be = Dune::TupleVector<\n+ Children... >\n+\u00a0 Descriptor with all children of possibly different type.\n+\u00a0\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bA_\br_\br_\ba_\by = std::array< Child, n >\n+\u00a0 Descriptor for arrays with all children of the same type and static\n+ size.\n+\u00a0\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br = std::vector< Child >\n+\u00a0 Descriptor for vectors with all children of the same type and dynamic\n+ size.\n+\u00a0\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bF_\bl_\ba_\bt_\bA_\br_\br_\ba_\by = _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by< _\bV_\ba_\bl_\bu_\be,\n+ n >\n+\u00a0 Alias for a uniform array storing value placeholders.\n+\u00a0\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bF_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br = _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br< _\bV_\ba_\bl_\bu_\be\n+ >\n+\u00a0 Alias for a uniform vector storing value placeholders.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bn_\be_\bd_\be_\bl_\be_\bc ()\n-\u00a0 Create a pre-basis factory that can create a N\u00c3\u00a9d\u00c3\u00a9lec pre-basis.\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (const PreBasis &preBasis)\n+\u00a0 Return the container descriptor of the pre-basis, if defined, otherwise\n+ ContainerDescriptor::Unknown.\n+\u00a0\n+template &&...), int > = 0>\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (Child0 child,\n+ Children... children)\n+\u00a0 Generate a descriptor in case the children are all of the same type.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (std::\n+ integral_constant< std::size_t, n >, Child child)\n+\u00a0 Generate a uniform descriptor in case the size is a static constant.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (std::size_t\n+ n, Child child)\n+\u00a0 Generate a uniform descriptor in case the size is a dynamic value.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: nedelecbasis.hh Source File\n+dune-functions: containerdescriptors.hh Source File\n \n \n \n \n \n \n \n@@ -74,398 +74,299 @@\n \n \n \n
    \n-
    nedelecbasis.hh
    \n+
    containerdescriptors.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH
    \n
    9
    \n
    10#include <array>
    \n-
    11#include <dune/common/exceptions.hh>
    \n-
    12
    \n-
    13#include <dune/grid/common/capabilities.hh>
    \n-
    14#include <dune/grid/common/mcmgmapper.hh>
    \n+
    11#include <cassert>
    \n+
    12#include <functional>
    \n+
    13#include <type_traits>
    \n+
    14#include <vector>
    \n
    15
    \n-
    16#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n-
    17#include <dune/localfunctions/nedelec.hh>
    \n-
    18
    \n-\n-\n-\n-\n-
    23
    \n-
    24namespace Dune::Functions
    \n-
    25{
    \n-
    26
    \n-
    27namespace Impl
    \n-
    28{
    \n-
    29 template<typename GV, int dim, typename R, std::size_t order>
    \n-
    30 class Nedelec1stKindLocalFiniteElementMap
    \n-
    31 {
    \n-
    32 using D = typename GV::ctype;
    \n-
    33 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n-
    34
    \n-
    35 using CubeFiniteElement = Nedelec1stKindCubeLocalFiniteElement<D,R,dim,order>;
    \n-
    36 using SimplexFiniteElement = Nedelec1stKindSimplexLocalFiniteElement<D,R,dim,order>;
    \n-
    37
    \n-
    38 public:
    \n-
    39
    \n-
    40 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n-
    41
    \n-
    42 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n-
    43 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n-
    44
    \n-
    45 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n-
    46 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n-
    47 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n+
    16#include <dune/common/filledarray.hh>
    \n+
    17#include <dune/common/tuplevector.hh>
    \n+
    18#include <dune/common/typeutilities.hh>
    \n+
    19
    \n+\n+\n+
    22
    \n+
    46namespace Dune::Functions {
    \n+
    \n+
    47namespace ContainerDescriptors {
    \n
    48
    \n-
    49 static std::size_t numVariants(GeometryType type)
    \n-
    50 {
    \n-
    51 if (order!=1) // I am not sure whether the formula below is correct for all orders.
    \n-
    52 DUNE_THROW(NotImplemented, "Only Nedelec elements of order 1 are implemented!");
    \n+
    50struct Unknown {};
    \n+
    51
    \n+
    52} // end namespace ContainerDescriptors
    \n+
    \n
    53
    \n-
    54 auto numEdges = referenceElement<D,dim>(type).size(dim-1);
    \n-
    55 return power(2,numEdges);
    \n-
    56 }
    \n-
    57
    \n-
    58 Nedelec1stKindLocalFiniteElementMap(const GV& gv)
    \n-
    59 : elementMapper_(gv, mcmgElementLayout()),
    \n-
    60 orientation_(gv.size(0))
    \n-
    61 {
    \n-
    62 // create all variants
    \n-
    63 if constexpr (hasFixedElementType)
    \n-
    64 {
    \n-
    65 variants_.resize(numVariants(type));
    \n-
    66 for (size_t i = 0; i < numVariants(type); i++)
    \n-
    67 variants_[i] = FiniteElement(i);
    \n-
    68 }
    \n-
    69 else
    \n-
    70 {
    \n-
    71 // for mixed grids add offset for cubes
    \n-
    72 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));
    \n-
    73 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)
    \n-
    74 variants_[i] = SimplexFiniteElement(i);
    \n-
    75 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)
    \n-
    76 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);
    \n-
    77 }
    \n+
    54namespace Impl {
    \n+
    55
    \n+
    56template<class PreBasis>
    \n+
    57auto containerDescriptorImpl(const PreBasis& preBasis, Dune::PriorityTag<1>)
    \n+
    58 -> decltype(preBasis.containerDescriptor())
    \n+
    59{
    \n+
    60 return preBasis.containerDescriptor();
    \n+
    61}
    \n+
    62
    \n+
    63template<class PreBasis>
    \n+
    64auto containerDescriptorImpl(const PreBasis& preBasis, Dune::PriorityTag<0>)
    \n+
    65{
    \n+
    66 return ContainerDescriptors::Unknown{};
    \n+
    67}
    \n+
    68
    \n+
    69} // end namespace Impl
    \n+
    70
    \n+
    72template<class PreBasis>
    \n+
    \n+
    73auto containerDescriptor(const PreBasis& preBasis)
    \n+
    74{
    \n+
    75 return Impl::containerDescriptorImpl(preBasis, Dune::PriorityTag<2>{});
    \n+
    76}
    \n+
    \n+
    77
    \n
    78
    \n-
    79
    \n-
    80 // compute orientation for all elements
    \n-
    81 const auto& indexSet = gv.indexSet();
    \n-
    82
    \n-
    83 for(const auto& element : elements(gv))
    \n-
    84 {
    \n-
    85 const auto& refElement = referenceElement(element);
    \n-
    86 auto elementIndex = elementMapper_.index(element);
    \n-
    87 orientation_[elementIndex] = 0;
    \n-
    88
    \n-
    89 for (std::size_t i=0; i<element.subEntities(dim-1); i++)
    \n-
    90 {
    \n-
    91 // Local vertex indices within the element
    \n-
    92 auto localV0 = refElement.subEntity(i,dim-1, 0,dim);
    \n-
    93 auto localV1 = refElement.subEntity(i,dim-1, 1,dim);
    \n-
    94
    \n-
    95 // Global vertex indices within the grid
    \n-
    96 auto globalV0 = indexSet.subIndex(element,localV0,dim);
    \n-
    97 auto globalV1 = indexSet.subIndex(element,localV1,dim);
    \n-
    98
    \n-
    99 if ( (localV0<localV1 && globalV0>globalV1) || (localV0>localV1 && globalV0<globalV1) )
    \n-
    100 orientation_[elementIndex] |= (1 << i);
    \n-
    101 }
    \n-
    102 // for mixed grids add offset for cubes
    \n-
    103 if constexpr (!hasFixedElementType)
    \n-
    104 if (element.type().isCube())
    \n-
    105 orientation_[elementIndex] += numVariants(GeometryTypes::simplex(dim));
    \n-
    106 }
    \n-
    107 }
    \n-
    108
    \n-
    109 template<class Element>
    \n-
    110 const auto& find(const Element& element) const
    \n-
    111 {
    \n-
    112 return variants_[orientation_[elementMapper_.index(element)]];
    \n-
    113 }
    \n-
    114
    \n-
    115 private:
    \n-
    116 std::vector<FiniteElement> variants_;
    \n-
    117 Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;
    \n-
    118 std::vector<unsigned short> orientation_;
    \n-
    119 };
    \n+
    79namespace ContainerDescriptors {
    \n+
    80
    \n+
    \n+
    82struct Value
    \n+
    83{
    \n+
    85 template<class Index>
    \n+
    86 Value operator[] (const Index&) const { return {}; }
    \n+
    87
    \n+
    89 static constexpr std::size_t size () { return 0; }
    \n+
    90};
    \n+
    \n+
    91
    \n+
    93template<class... Children>
    \n+
    94using Tuple = Dune::TupleVector<Children...>;
    \n+
    95
    \n+
    98template<class Child0, class... Children,
    \n+
    99 std::enable_if_t<(sizeof...(Children) > 0), int> = 0,
    \n+
    100 std::enable_if_t<(...|| (not std::is_same_v<Child0, Children>)), int> = 0>
    \n+
    101auto makeDescriptor (Child0 child0, Children... children)
    \n+
    102{
    \n+
    103 using Descriptor = Tuple<Child0,Children...>;
    \n+
    104 return Descriptor{std::move(child0),std::move(children)...};
    \n+
    105}
    \n+
    106
    \n+
    107
    \n+
    109template<class Child, std::size_t n>
    \n+
    110using Array = std::array<Child, n>;
    \n+
    111
    \n+
    113template<class Child0, class... Children,
    \n+
    114 std::enable_if_t<(std::is_same_v<Child0, Children> &&...), int> = 0>
    \n+
    \n+
    115auto makeDescriptor (Child0 child, Children... children)
    \n+
    116{
    \n+
    117 using Descriptor = Array<Child0,1+sizeof...(Children)>;
    \n+
    118 return Descriptor{std::move(child),std::move(children)...};
    \n+
    119}
    \n+
    \n
    120
    \n
    121
    \n-
    122} // namespace Impl
    \n-
    123
    \n-
    124
    \n-
    125// *****************************************************************************
    \n-
    126// This is the reusable part of the basis. It contains
    \n-
    127//
    \n-
    128// NedelecPreBasis
    \n-
    129// NedelecNode
    \n-
    130//
    \n-
    131// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    132// state. These components do _not_ depend on the global basis and local view
    \n-
    133// and can be used without a global basis.
    \n-
    134// *****************************************************************************
    \n-
    135
    \n-
    136template<typename GV, typename Range, std::size_t kind, int order>
    \n-
    137class NedelecNode;
    \n-
    138
    \n-
    139template<typename GV, typename Range, std::size_t kind, int order>
    \n-
    \n-\n-
    141 public LeafPreBasisMixin< NedelecPreBasis<GV,Range,kind,order> >
    \n-
    142{
    \n-
    143 static const int dim = GV::dimension;
    \n-
    144 static_assert(kind==1, "Only the Nedelec basis of the first kind is currently implemented!");
    \n-
    145 using FiniteElementMap = typename Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;
    \n-
    146
    \n-
    147 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper<GV>;
    \n-
    148public:
    \n-
    149
    \n-
    151 using GridView = GV;
    \n-
    152 using size_type = std::size_t;
    \n-
    153
    \n-\n-
    155
    \n-
    \n-\n-
    158 gridView_(gv),
    \n-\n-
    160 mapper_(gridView_, mcmgLayout(Dim<1>{}))
    \n-
    161 {
    \n-
    162 if (kind!=1)
    \n-
    163 DUNE_THROW(NotImplemented, "Only Nedelec elements of the first kind are implemented!");
    \n+
    123template<class Child>
    \n+
    124using Vector = std::vector<Child>;
    \n+
    125
    \n+
    127template<class Child, std::size_t n>
    \n+
    \n+\n+
    129{
    \n+
    131 template<class C = Child,
    \n+
    132 std::enable_if_t<std::is_default_constructible_v<C>, int> = 0>
    \n+
    \n+\n+
    134 : child_{}
    \n+
    135 {}
    \n+
    \n+
    136
    \n+
    \n+
    138 explicit UniformArray (Child child)
    \n+
    139 : child_{std::move(child)}
    \n+
    140 {}
    \n+
    \n+
    141
    \n+
    143 template<class Index>
    \n+
    144 const Child& operator[] (const Index& /*i*/) const { return child_; }
    \n+
    145
    \n+
    147 static constexpr std::size_t size () { return n; }
    \n+
    148
    \n+
    149private:
    \n+
    150 Child child_;
    \n+
    151};
    \n+
    \n+
    152
    \n+
    154template<std::size_t n>
    \n+\n+
    156
    \n+
    158template<class Child, std::size_t n>
    \n+
    \n+
    159auto makeUniformDescriptor (std::integral_constant<std::size_t,n>, Child child)
    \n+
    160{
    \n+
    161 return UniformArray<Child,n>{std::move(child)};
    \n+
    162}
    \n+
    \n+
    163
    \n
    164
    \n-
    165 // There is no inherent reason why the basis shouldn't work for grids with more than two
    \n-
    166 // element types. Somebody simply has to sit down and implement the missing bits.
    \n-
    167 if (gv.indexSet().types(0).size() > 2)
    \n-
    168 DUNE_THROW(NotImplemented, "N\u00e9d\u00e9lec basis is only implemented for grids with simplex and cube elements");
    \n-
    169
    \n-
    170 for(auto type : gv.indexSet().types(0))
    \n-
    171 if (!type.isSimplex() && !type.isCube())
    \n-
    172 DUNE_THROW(NotImplemented, "N\u00e9d\u00e9lec basis is only implemented for grids with simplex or cube elements.");
    \n-
    173
    \n-
    174 if (order>1)
    \n-
    175 DUNE_THROW(NotImplemented, "Only first-order elements are implemented");
    \n+
    166template<class Child>
    \n+
    \n+\n+
    168{
    \n+
    170 template<class C = Child,
    \n+
    171 std::enable_if_t<std::is_default_constructible_v<C>, int> = 0>
    \n+
    \n+
    172 explicit UniformVector (std::size_t size)
    \n+
    173 : size_{size}
    \n+
    174 , child_{}
    \n+
    175 {}
    \n+
    \n
    176
    \n-
    177 if (dim!=2 && dim!=3)
    \n-
    178 DUNE_THROW(NotImplemented, "Only 2d and 3d N\u00e9d\u00e9lec elements are implemented");
    \n-
    179 }
    \n-
    \n-
    180
    \n-
    \n-\n-
    182 {}
    \n-
    \n-
    183
    \n-
    \n-
    186 const GridView& gridView() const
    \n-
    187 {
    \n-
    188 return gridView_;
    \n-
    189 }
    \n-
    \n-
    190
    \n-
    191 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n-
    \n-
    192 void update (const GridView& gv)
    \n-
    193 {
    \n-
    194 gridView_ = gv;
    \n-
    195 mapper_.update(gridView_);
    \n-
    196 }
    \n+
    \n+
    178 UniformVector (std::size_t size, Child child)
    \n+
    179 : size_{size}
    \n+
    180 , child_{std::move(child)}
    \n+
    181 {}
    \n+
    \n+
    182
    \n+
    184 template<class Index>
    \n+
    185 const Child& operator[] (const Index& /*i*/) const { return child_; }
    \n+
    186
    \n+
    188 std::size_t size () const { return size_; }
    \n+
    189
    \n+
    190private:
    \n+
    191 std::size_t size_;
    \n+
    192 Child child_;
    \n+
    193};
    \n
    \n+
    194
    \n+\n
    197
    \n-
    \n-\n-
    202 {
    \n-
    203 return Node{&finiteElementMap_};
    \n-
    204 }
    \n-
    \n-
    205
    \n-
    \n-\n-
    207 {
    \n-
    208 return mapper_.size();
    \n-
    209 }
    \n-
    \n-
    210
    \n-
    \n-\n-
    212 {
    \n-
    213 size_type result = 0;
    \n-
    214 for (auto&& type : gridView_.indexSet().types(0))
    \n-
    215 {
    \n-
    216 size_type numEdges = referenceElement<typename GV::ctype,dim>(type).size(dim-1);
    \n-
    217 result = std::max(result, numEdges);
    \n-
    218 }
    \n+
    199template<class Child>
    \n+
    \n+
    200auto makeUniformDescriptor (std::size_t n, Child child)
    \n+
    201{
    \n+
    202 return UniformVector<Child>{n,std::move(child)};
    \n+
    203}
    \n+
    \n+
    204
    \n+
    205namespace Impl {
    \n+
    206
    \n+
    207template<class InnerFunc, class LeafFunc>
    \n+
    208struct TreeTransform
    \n+
    209{
    \n+
    210 TreeTransform (const InnerFunc& innerFunc, const LeafFunc& leafFunc)
    \n+
    211 : innerFunc_(innerFunc)
    \n+
    212 , leafFunc_(leafFunc)
    \n+
    213 {}
    \n+
    214
    \n+
    215 Unknown operator() (const Unknown& tree) const
    \n+
    216 {
    \n+
    217 return tree;
    \n+
    218 }
    \n
    219
    \n-
    220 return result;
    \n-
    221 }
    \n-
    \n-
    222
    \n-
    226 template<typename It>
    \n-
    \n-
    227 It indices(const Node& node, It it) const
    \n-
    228 {
    \n-
    229 const auto& element = node.element();
    \n-
    230
    \n-
    231 // throw if Element is not of predefined type
    \n-
    232 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n-
    233 DUNE_THROW(NotImplemented, "NedelecBasis only implemented for cube and simplex elements.");
    \n-
    234
    \n-
    235 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n-
    236 {
    \n-
    237 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    238 *it = { mapper_.subIndex(element, localKey.subEntity(), localKey.codim()) + localKey.index() };
    \n-
    239 }
    \n+
    220 auto operator() (const Value& tree) const
    \n+
    221 {
    \n+
    222 return leafFunc_(tree);
    \n+
    223 }
    \n+
    224
    \n+
    225 template<class... V>
    \n+
    226 auto operator() (const Tuple<V...>& tree) const
    \n+
    227 {
    \n+
    228 return unpackIntegerSequence([&](auto... ii) {
    \n+
    229 return makeDescriptor(innerFunc_(tree[ii])...);
    \n+
    230 }, std::make_index_sequence<sizeof...(V)>());
    \n+
    231 }
    \n+
    232
    \n+
    233 template<class V, std::size_t n>
    \n+
    234 auto operator() (const Array<V,n>& tree) const
    \n+
    235 {
    \n+
    236 return unpackIntegerSequence([&](auto... ii) {
    \n+
    237 return makeDescriptor(innerFunc_(tree[ii])...);
    \n+
    238 }, std::make_index_sequence<n>());
    \n+
    239 }
    \n
    240
    \n-
    241 return it;
    \n-
    242 }
    \n-
    \n-
    243
    \n-
    244protected:
    \n-\n-
    246 FiniteElementMap finiteElementMap_;
    \n-
    247 Mapper mapper_;
    \n-
    248};
    \n-
    \n-
    249
    \n-
    250
    \n+
    241 template<class V>
    \n+
    242 auto operator() (const Vector<V>& tree) const
    \n+
    243 {
    \n+
    244 using W = decltype(innerFunc_(tree[0]));
    \n+
    245 Vector<W> result;
    \n+
    246 result.reserve(tree.size());
    \n+
    247 for (std::size_t i = 0; i < tree.size(); ++i)
    \n+
    248 result.emplace_back(innerFunc_(tree[i]));
    \n+
    249 return result;
    \n+
    250 }
    \n
    251
    \n-
    252template<typename GV, typename Range, size_t kind, int order>
    \n-
    \n-\n-
    254 public LeafBasisNode
    \n-
    255{
    \n-
    256 static const int dim = GV::dimension;
    \n+
    252 template<class V, std::size_t n>
    \n+
    253 auto operator() (const UniformArray<V,n>& tree) const
    \n+
    254 {
    \n+
    255 return makeUniformDescriptor(Dune::index_constant<n>{}, innerFunc_(tree[0]));
    \n+
    256 }
    \n
    257
    \n-
    258public:
    \n-
    259
    \n-
    260 using size_type = std::size_t;
    \n-
    261 using Element = typename GV::template Codim<0>::Entity;
    \n-
    262 static_assert(kind==1, "Only Nedelec elements of the first kind are implemented!");
    \n-
    263 using FiniteElementMap = typename Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;
    \n-
    264 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::CovariantPiolaTransformator,
    \n-
    265 typename FiniteElementMap::FiniteElement,
    \n-
    266 Element>;
    \n-
    267
    \n-
    \n-
    268 NedelecNode(const FiniteElementMap* finiteElementMap) :
    \n-
    269 element_(nullptr),
    \n-
    270 finiteElementMap_(finiteElementMap)
    \n-
    271 { }
    \n-
    \n-
    272
    \n-
    \n-
    274 const Element& element() const
    \n-
    275 {
    \n-
    276 return *element_;
    \n-
    277 }
    \n-
    \n-
    278
    \n-
    \n-\n-
    284 {
    \n-
    285 return finiteElement_;
    \n-
    286 }
    \n-
    \n-
    287
    \n-
    \n-
    289 void bind(const Element& e)
    \n-
    290 {
    \n-
    291 element_ = &e;
    \n-
    292 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n-
    293 this->setSize(finiteElement_.size());
    \n-
    294 }
    \n-
    \n-
    295
    \n-
    296protected:
    \n-
    297
    \n-\n-\n-\n-
    301};
    \n-
    \n-
    302
    \n-
    303
    \n-
    304
    \n-
    305namespace BasisFactory {
    \n-
    306
    \n-
    316template<std::size_t kind, std::size_t order, typename Range=double>
    \n-
    \n-\n-
    318{
    \n-
    319 return [](const auto& gridView) {
    \n-
    320 return NedelecPreBasis<std::decay_t<decltype(gridView)>, Range, kind, order>(gridView);
    \n-
    321 };
    \n-
    322}
    \n-
    \n-
    323
    \n-
    324} // end namespace BasisFactory
    \n-
    325
    \n-
    326
    \n-
    327
    \n-
    328// *****************************************************************************
    \n-
    329// This is the actual global basis implementation based on the reusable parts.
    \n-
    330// *****************************************************************************
    \n-
    331
    \n-
    339template<typename GV, std::size_t kind, std::size_t order, typename Range=double>
    \n-\n-
    341
    \n-
    342} // end namespace Dune::Functions
    \n-
    343
    \n-
    344
    \n-
    345#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n-\n-\n-\n-\n-
    auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
    Create a pre-basis factory that can build a PowerPreBasis.
    Definition dynamicpowerbasis.hh:409
    \n-
    auto nedelec()
    Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.
    Definition nedelecbasis.hh:317
    \n+
    258 template<class V>
    \n+
    259 auto operator() (const UniformVector<V>& tree) const
    \n+
    260 {
    \n+
    261 return makeUniformDescriptor(tree.size(), innerFunc_(tree[0]));
    \n+
    262 }
    \n+
    263
    \n+
    264private:
    \n+
    265 InnerFunc innerFunc_;
    \n+
    266 LeafFunc leafFunc_;
    \n+
    267};
    \n+
    268
    \n+
    269
    \n+
    280template<class Size, class T>
    \n+
    281auto appendToTree (Size s, const T& tree)
    \n+
    282{
    \n+
    283 auto transform = TreeTransform(
    \n+
    284 [s](auto&& node) { return appendToTree(s, node); },
    \n+
    285 [s](auto&& node) { return makeUniformDescriptor(s, node); });
    \n+
    286 return transform(tree);
    \n+
    287}
    \n+
    288
    \n+
    289} // end namespace Impl
    \n+
    290} // end namespace ContainerDescriptors
    \n+
    291} // end namespace Dune::Functions
    \n+
    292
    \n+
    293#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH
    \n+\n+\n
    Definition polynomial.hh:18
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n-
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n-
    Definition nedelecbasis.hh:255
    \n-
    const FiniteElementMap * finiteElementMap_
    Definition nedelecbasis.hh:300
    \n-
    FiniteElement finiteElement_
    Definition nedelecbasis.hh:298
    \n-
    Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition nedelecbasis.hh:266
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition nedelecbasis.hh:289
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition nedelecbasis.hh:274
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition nedelecbasis.hh:261
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition nedelecbasis.hh:283
    \n-
    NedelecNode(const FiniteElementMap *finiteElementMap)
    Definition nedelecbasis.hh:268
    \n-
    typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order > FiniteElementMap
    Definition nedelecbasis.hh:263
    \n-
    const Element * element_
    Definition nedelecbasis.hh:299
    \n-
    std::size_t size_type
    Definition nedelecbasis.hh:260
    \n-
    Definition nedelecbasis.hh:142
    \n-
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition nedelecbasis.hh:227
    \n-
    std::size_t size_type
    Definition nedelecbasis.hh:152
    \n-
    NedelecPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition nedelecbasis.hh:157
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition nedelecbasis.hh:151
    \n-
    size_type dimension() const
    Definition nedelecbasis.hh:206
    \n-
    GridView gridView_
    Definition nedelecbasis.hh:245
    \n-
    FiniteElementMap finiteElementMap_
    Definition nedelecbasis.hh:246
    \n-
    void initializeIndices()
    Definition nedelecbasis.hh:181
    \n-
    void update(const GridView &gv)
    Definition nedelecbasis.hh:192
    \n-
    size_type maxNodeSize() const
    Definition nedelecbasis.hh:211
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition nedelecbasis.hh:186
    \n-
    Node makeNode() const
    Create tree node.
    Definition nedelecbasis.hh:201
    \n-
    Mapper mapper_
    Definition nedelecbasis.hh:247
    \n-
    size_type size() const
    Definition nodes.hh:147
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n-
    Definition nodes.hh:191
    \n+
    auto containerDescriptor(const PreBasis &preBasis)
    Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
    Definition containerdescriptors.hh:73
    \n+
    std::array< Child, n > Array
    Descriptor for arrays with all children of the same type and static size.
    Definition containerdescriptors.hh:110
    \n+
    auto makeUniformDescriptor(std::integral_constant< std::size_t, n >, Child child)
    Generate a uniform descriptor in case the size is a static constant.
    Definition containerdescriptors.hh:159
    \n+
    Dune::TupleVector< Children... > Tuple
    Descriptor with all children of possibly different type.
    Definition containerdescriptors.hh:94
    \n+
    auto makeDescriptor(Child0 child, Children... children)
    Generate a descriptor in case the children are all of the same type.
    Definition containerdescriptors.hh:115
    \n+
    std::vector< Child > Vector
    Descriptor for vectors with all children of the same type and dynamic size.
    Definition containerdescriptors.hh:124
    \n+
    Fallback container descriptor if nothing else fits.
    Definition containerdescriptors.hh:50
    \n+
    The node in the descriptor tree representing a value placeholder.
    Definition containerdescriptors.hh:83
    \n+
    static constexpr std::size_t size()
    A value placeholder does not have any sub-descriptors, thus its size is zero.
    Definition containerdescriptors.hh:89
    \n+
    Value operator[](const Index &) const
    The child access method is only available for the interface, but should not be called.
    Definition containerdescriptors.hh:86
    \n+
    Descriptor for arrays with all children identical and the number of children a static size.
    Definition containerdescriptors.hh:129
    \n+
    static constexpr std::size_t size()
    The static size information, i.e., number of children.
    Definition containerdescriptors.hh:147
    \n+
    UniformArray()
    Default constructor. Is enable if the child-type is default constructible.
    Definition containerdescriptors.hh:133
    \n+
    UniformArray(Child child)
    Constructor that stores a single child only.
    Definition containerdescriptors.hh:138
    \n+
    const Child & operator[](const Index &) const
    Access the i'th child that is always the same, i.e., child_.
    Definition containerdescriptors.hh:144
    \n+
    Uniform descriptor with dynamic size.
    Definition containerdescriptors.hh:168
    \n+
    UniformVector(std::size_t size, Child child)
    Constructor that stores the size and a single child only.
    Definition containerdescriptors.hh:178
    \n+
    std::size_t size() const
    The dynamic size information, i.e., number of children.
    Definition containerdescriptors.hh:188
    \n+
    UniformVector(std::size_t size)
    Default constructor with size. Is enable if the child-type is default constructible.
    Definition containerdescriptors.hh:172
    \n+
    const Child & operator[](const Index &) const
    Access the i'th child that is always the same, i.e., child_.
    Definition containerdescriptors.hh:185
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,481 +1,335 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-nedelecbasis.hh\n+containerdescriptors.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH\n 9\n 10#include \n-11#include \n-12\n-13#include \n-14#include \n+11#include \n+12#include \n+13#include \n+14#include \n 15\n-16#include \n-17#include \n-18\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/\n-_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n-21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-22#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-23\n-24namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-25{\n-26\n-27namespace Impl\n-28{\n-29 template\n-30 class Nedelec1stKindLocalFiniteElementMap\n-31 {\n-32 using D = typename GV::ctype;\n-33 constexpr static bool hasFixedElementType = Capabilities::\n-hasSingleGeometryType::v;\n-34\n-35 using CubeFiniteElement =\n-Nedelec1stKindCubeLocalFiniteElement;\n-36 using SimplexFiniteElement =\n-Nedelec1stKindSimplexLocalFiniteElement;\n-37\n-38 public:\n-39\n-40 using T = LocalBasisTraits, R, dim,\n-FieldVector, FieldMatrix >;\n-41\n-42 constexpr static unsigned int topologyId = Capabilities::\n-hasSingleGeometryType::topologyId; // meaningless if\n-hasFixedElementType is false\n-43 constexpr static GeometryType type = GeometryType(topologyId, GV::\n-dimension);\n-44\n-45 using FiniteElement = std::conditional_t,\n-47 LocalFiniteElementVariant >;\n+16#include \n+17#include \n+18#include \n+19\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+22\n+46namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+_\b4_\b7namespace ContainerDescriptors {\n 48\n-49 static std::size_t numVariants(GeometryType type)\n-50 {\n-51 if (order!=1) // I am not sure whether the formula below is correct for all\n-orders.\n-52 DUNE_THROW(NotImplemented, \"Only Nedelec elements of order 1 are\n-implemented!\");\n+_\b5_\b0struct _\bU_\bn_\bk_\bn_\bo_\bw_\bn {};\n+51\n+52} // end namespace ContainerDescriptors\n 53\n-54 auto numEdges = referenceElement(type).size(dim-1);\n-55 return _\bp_\bo_\bw_\be_\br(2,numEdges);\n-56 }\n-57\n-58 Nedelec1stKindLocalFiniteElementMap(const GV& gv)\n-59 : elementMapper_(gv, mcmgElementLayout()),\n-60 orientation_(gv.size(0))\n-61 {\n-62 // create all variants\n-63 if constexpr (hasFixedElementType)\n-64 {\n-65 variants_.resize(numVariants(type));\n-66 for (size_t i = 0; i < numVariants(type); i++)\n-67 variants_[i] = FiniteElement(i);\n-68 }\n-69 else\n-70 {\n-71 // for mixed grids add offset for cubes\n-72 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n-(GeometryTypes::cube(dim)));\n-73 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n-74 variants_[i] = SimplexFiniteElement(i);\n-75 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n-76 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n-(i);\n-77 }\n+54namespace Impl {\n+55\n+56template\n+57auto containerDescriptorImpl(const PreBasis& preBasis, Dune::PriorityTag<1>)\n+58 -> decltype(preBasis.containerDescriptor())\n+59{\n+60 return preBasis.containerDescriptor();\n+61}\n+62\n+63template\n+64auto containerDescriptorImpl(const PreBasis& preBasis, Dune::PriorityTag<0>)\n+65{\n+66 return ContainerDescriptors::Unknown{};\n+67}\n+68\n+69} // end namespace Impl\n+70\n+72template\n+_\b7_\b3auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(const PreBasis& preBasis)\n+74{\n+75 return Impl::containerDescriptorImpl(preBasis, Dune::PriorityTag<2>{});\n+76}\n+77\n 78\n-79\n-80 // compute orientation for all elements\n-81 const auto& indexSet = gv.indexSet();\n-82\n-83 for(const auto& element : elements(gv))\n-84 {\n-85 const auto& refElement = referenceElement(element);\n-86 auto elementIndex = elementMapper_.index(element);\n-87 orientation_[elementIndex] = 0;\n-88\n-89 for (std::size_t i=0; iglobalV1) || (localV0>localV1 &&\n-globalV0\n-110 const auto& find(const Element& element) const\n-111 {\n-112 return variants_[orientation_[elementMapper_.index(element)]];\n-113 }\n-114\n-115 private:\n-116 std::vector variants_;\n-117 Dune::MultipleCodimMultipleGeomTypeMapper elementMapper_;\n-118 std::vector orientation_;\n-119 };\n+79namespace ContainerDescriptors {\n+80\n+_\b8_\b2struct _\bV_\ba_\bl_\bu_\be\n+83{\n+85 template\n+_\b8_\b6 _\bV_\ba_\bl_\bu_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (const Index&) const { return {}; }\n+87\n+_\b8_\b9 static constexpr std::size_t _\bs_\bi_\bz_\be () { return 0; }\n+90};\n+91\n+93template\n+_\b9_\b4using _\bT_\bu_\bp_\bl_\be = Dune::TupleVector;\n+95\n+98template 0), int> = 0,\n+100 std::enable_if_t<(...|| (not std::is_same_v)), int> = 0>\n+101auto _\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (Child0 child0, Children... children)\n+102{\n+103 using Descriptor = _\bT_\bu_\bp_\bl_\be;\n+104 return Descriptor{std::move(child0),std::move(children)...};\n+105}\n+106\n+107\n+109template\n+_\b1_\b1_\b0using _\bA_\br_\br_\ba_\by = std::array;\n+111\n+113template &&...), int> = 0>\n+_\b1_\b1_\b5auto _\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (Child0 child, Children... children)\n+116{\n+117 using Descriptor = _\bA_\br_\br_\ba_\by;\n+118 return Descriptor{std::move(child),std::move(children)...};\n+119}\n 120\n 121\n-122} // namespace Impl\n-123\n-124\n-125/\n-/ *****************************************************************************\n-126// This is the reusable part of the basis. It contains\n-127//\n-128// NedelecPreBasis\n-129// NedelecNode\n-130//\n-131// The pre-basis allows to create the others and is the owner of possible\n-shared\n-132// state. These components do _not_ depend on the global basis and local\n-view\n-133// and can be used without a global basis.\n-134/\n-/ *****************************************************************************\n-135\n-136template\n-137class NedelecNode;\n-138\n-139template\n-_\b1_\b4_\b0class _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n-141 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< NedelecPreBasis >\n-142{\n-143 static const int dim = GV::dimension;\n-144 static_assert(kind==1, \"Only the Nedelec basis of the first kind is\n-currently implemented!\");\n-145 using FiniteElementMap = typename Impl::\n-Nedelec1stKindLocalFiniteElementMap;\n-146\n-147 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper;\n-148public:\n-149\n-_\b1_\b5_\b1 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b1_\b5_\b2 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-153\n-_\b1_\b5_\b4 using _\bN_\bo_\bd_\be = _\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bR_\ba_\bn_\bg_\be_\b,_\b _\bk_\bi_\bn_\bd_\b,_\b _\bo_\br_\bd_\be_\br_\b>;\n-155\n-_\b1_\b5_\b7 _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n-158 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n-159 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv),\n-160 _\bm_\ba_\bp_\bp_\be_\br_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_, mcmgLayout(Dim<1>{}))\n-161 {\n-162 if (kind!=1)\n-163 DUNE_THROW(NotImplemented, \"Only Nedelec elements of the first kind are\n-implemented!\");\n+123template\n+_\b1_\b2_\b4using _\bV_\be_\bc_\bt_\bo_\br = std::vector;\n+125\n+127template\n+_\b1_\b2_\b8struct _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by\n+129{\n+131 template, int> = 0>\n+_\b1_\b3_\b3 _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by ()\n+134 : child_{}\n+135 {}\n+136\n+_\b1_\b3_\b8 explicit _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by (Child child)\n+139 : child_{std::move(child)}\n+140 {}\n+141\n+143 template\n+_\b1_\b4_\b4 const Child& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (const Index& /*i*/) const { return child_; }\n+145\n+_\b1_\b4_\b7 static constexpr std::size_t _\bs_\bi_\bz_\be () { return n; }\n+148\n+149private:\n+150 Child child_;\n+151};\n+152\n+154template\n+_\b1_\b5_\b5using _\bF_\bl_\ba_\bt_\bA_\br_\br_\ba_\by = _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b<_\bV_\ba_\bl_\bu_\be_\b,_\bn_\b>;\n+156\n+158template\n+_\b1_\b5_\b9auto _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (std::integral_constant, Child\n+child)\n+160{\n+161 return _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b<_\bC_\bh_\bi_\bl_\bd_\b,_\bn_\b>{std::move(child)};\n+162}\n+163\n 164\n-165 // There is no inherent reason why the basis shouldn't work for grids with\n-more than two\n-166 // element types. Somebody simply has to sit down and implement the missing\n-bits.\n-167 if (gv.indexSet().types(0).size() > 2)\n-168 DUNE_THROW(NotImplemented, \"N\u00c3\u00a9d\u00c3\u00a9lec basis is only implemented for grids\n-with simplex and cube elements\");\n-169\n-170 for(auto type : gv.indexSet().types(0))\n-171 if (!type.isSimplex() && !type.isCube())\n-172 DUNE_THROW(NotImplemented, \"N\u00c3\u00a9d\u00c3\u00a9lec basis is only implemented for grids\n-with simplex or cube elements.\");\n-173\n-174 if (order>1)\n-175 DUNE_THROW(NotImplemented, \"Only first-order elements are implemented\");\n+166template\n+_\b1_\b6_\b7struct _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br\n+168{\n+170 template, int> = 0>\n+_\b1_\b7_\b2 explicit _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br (std::size_t _\bs_\bi_\bz_\be)\n+173 : size_{_\bs_\bi_\bz_\be}\n+174 , child_{}\n+175 {}\n 176\n-177 if (dim!=2 && dim!=3)\n-178 DUNE_THROW(NotImplemented, \"Only 2d and 3d N\u00c3\u00a9d\u00c3\u00a9lec elements are\n-implemented\");\n-179 }\n-180\n-_\b1_\b8_\b1 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-182 {}\n-183\n-_\b1_\b8_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-187 {\n-188 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-189 }\n-190\n-191 /* \\brief Update the stored grid view, to be called if the grid has changed\n-*/\n-_\b1_\b9_\b2 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-193 {\n-194 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-195 _\bm_\ba_\bp_\bp_\be_\br_\b_.update(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_);\n-196 }\n+_\b1_\b7_\b8 _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br (std::size_t _\bs_\bi_\bz_\be, Child child)\n+179 : size_{_\bs_\bi_\bz_\be}\n+180 , child_{std::move(child)}\n+181 {}\n+182\n+184 template\n+_\b1_\b8_\b5 const Child& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (const Index& /*i*/) const { return child_; }\n+186\n+_\b1_\b8_\b8 std::size_t _\bs_\bi_\bz_\be () const { return size_; }\n+189\n+190private:\n+191 std::size_t size_;\n+192 Child child_;\n+193};\n+194\n+_\b1_\b9_\b6using _\bF_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br = _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b<_\bV_\ba_\bl_\bu_\be_\b>;\n 197\n-_\b2_\b0_\b1 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-202 {\n-203 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n-204 }\n-205\n-_\b2_\b0_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-207 {\n-208 return _\bm_\ba_\bp_\bp_\be_\br_\b_.size();\n-209 }\n-210\n-_\b2_\b1_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-212 {\n-213 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n-214 for (auto&& type : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0))\n-215 {\n-216 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be numEdges = referenceElement(type).size\n-(dim-1);\n-217 result = std::max(result, numEdges);\n+199template\n+_\b2_\b0_\b0auto _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (std::size_t n, Child child)\n+201{\n+202 return _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b<_\bC_\bh_\bi_\bl_\bd_\b>{n,std::move(child)};\n+203}\n+204\n+205namespace Impl {\n+206\n+207template\n+208struct TreeTransform\n+209{\n+210 TreeTransform (const InnerFunc& innerFunc, const LeafFunc& leafFunc)\n+211 : innerFunc_(innerFunc)\n+212 , leafFunc_(leafFunc)\n+213 {}\n+214\n+215 Unknown operator() (const Unknown& tree) const\n+216 {\n+217 return tree;\n 218 }\n 219\n-220 return result;\n-221 }\n-222\n-226 template\n-_\b2_\b2_\b7 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-228 {\n-229 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-230\n-231 // throw if Element is not of predefined type\n-232 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n-233 DUNE_THROW(NotImplemented, \"NedelecBasis only implemented for cube and\n-simplex elements.\");\n-234\n-235 for(std::size_t i=0, end=node._\bs_\bi_\bz_\be(); i\n+226 auto operator() (const Tuple& tree) const\n+227 {\n+228 return unpackIntegerSequence([&](auto... ii) {\n+229 return _\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(innerFunc_(tree[ii])...);\n+230 }, std::make_index_sequence());\n+231 }\n+232\n+233 template\n+234 auto operator() (const Array& tree) const\n+235 {\n+236 return unpackIntegerSequence([&](auto... ii) {\n+237 return _\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(innerFunc_(tree[ii])...);\n+238 }, std::make_index_sequence());\n 239 }\n 240\n-241 return it;\n-242 }\n-243\n-244protected:\n-_\b2_\b4_\b5 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-_\b2_\b4_\b6 FiniteElementMap _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n-_\b2_\b4_\b7 Mapper _\bm_\ba_\bp_\bp_\be_\br_\b_;\n-248};\n-249\n-250\n+241 template\n+242 auto operator() (const Vector& tree) const\n+243 {\n+244 using W = decltype(innerFunc_(tree[0]));\n+245 Vector result;\n+246 result.reserve(tree.size());\n+247 for (std::size_t i = 0; i < tree.size(); ++i)\n+248 result.emplace_back(innerFunc_(tree[i]));\n+249 return result;\n+250 }\n 251\n-252template\n-_\b2_\b5_\b3class _\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be :\n-254 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-255{\n-256 static const int dim = GV::dimension;\n+252 template\n+253 auto operator() (const UniformArray& tree) const\n+254 {\n+255 return _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(Dune::index_constant{}, innerFunc_(tree\n+[0]));\n+256 }\n 257\n-258public:\n-259\n-_\b2_\b6_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b2_\b6_\b1 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-262 static_assert(kind==1, \"Only Nedelec elements of the first kind are\n-implemented!\");\n-_\b2_\b6_\b3 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::\n-Nedelec1stKindLocalFiniteElementMap;\n-_\b2_\b6_\b4 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n-267\n-_\b2_\b6_\b8 _\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be(const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* finiteElementMap) :\n-269 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-270 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n-271 { }\n-272\n-_\b2_\b7_\b4 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-275 {\n-276 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-277 }\n-278\n-_\b2_\b8_\b3 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n-284 {\n-285 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-286 }\n-287\n-_\b2_\b8_\b9 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-290 {\n-291 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-292 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.bind((_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_->find(*_\be_\bl_\be_\bm_\be_\bn_\bt_\b_)), e);\n-293 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n-294 }\n-295\n-296protected:\n-297\n-_\b2_\b9_\b8 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b2_\b9_\b9 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b3_\b0_\b0 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n-301};\n-302\n-303\n-304\n-305namespace BasisFactory {\n-306\n-316template\n-_\b3_\b1_\b7auto _\bn_\be_\bd_\be_\bl_\be_\bc()\n-318{\n-319 return [](const auto& gridView) {\n-320 return _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, Range, kind,\n-order>(gridView);\n-321 };\n-322}\n-323\n-324} // end namespace BasisFactory\n-325\n-326\n-327\n-328/\n-/ *****************************************************************************\n-329// This is the actual global basis implementation based on the reusable\n-parts.\n-330/\n-/ *****************************************************************************\n-331\n-339template\n-_\b3_\b4_\b0using _\bN_\be_\bd_\be_\bl_\be_\bc_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bR_\ba_\bn_\bg_\be_\b,_\b _\bk_\bi_\bn_\bd_\b,\n-_\bo_\br_\bd_\be_\br_\b _\b> >;\n-341\n-342} // end namespace Dune::Functions\n-343\n-344\n-345#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n-_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br\n-auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const\n-IndexMergingStrategy &)\n-Create a pre-basis factory that can build a PowerPreBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:409\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bn_\be_\bd_\be_\bl_\be_\bc\n-auto nedelec()\n-Create a pre-basis factory that can create a N\u00c3\u00a9d\u00c3\u00a9lec pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:317\n+258 template\n+259 auto operator() (const UniformVector& tree) const\n+260 {\n+261 return _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(tree.size(), innerFunc_(tree[0]));\n+262 }\n+263\n+264private:\n+265 InnerFunc innerFunc_;\n+266 LeafFunc leafFunc_;\n+267};\n+268\n+269\n+280template\n+281auto appendToTree (Size s, const T& tree)\n+282{\n+283 auto transform = TreeTransform(\n+284 [s](auto&& node) { return appendToTree(s, node); },\n+285 [s](auto&& node) { return _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(s, node); });\n+286 return transform(tree);\n+287}\n+288\n+289} // end namespace Impl\n+290} // end namespace ContainerDescriptors\n+291} // end namespace Dune::Functions\n+292\n+293#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-Global basis for given pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-A generic MixIn class for PreBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:255\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n-const FiniteElementMap * finiteElementMap_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:300\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n-FiniteElement finiteElement_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:298\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator,\n-typename FiniteElementMap::FiniteElement, Element > FiniteElement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:266\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind to element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:289\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return current element, throw if unbound.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:274\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename GV::template Codim< 0 >::Entity Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:261\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:283\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be\n-NedelecNode(const FiniteElementMap *finiteElementMap)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:268\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp\n-typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order >\n-FiniteElementMap\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:263\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n-const Element * element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:299\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:260\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:142\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:227\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-NedelecPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:157\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-The grid view that the FE space is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:151\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:206\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n-GridView gridView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:245\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n-FiniteElementMap finiteElementMap_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:246\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void initializeIndices()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:192\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:211\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:186\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:201\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bp_\bp_\be_\br_\b_\n-Mapper mapper_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:247\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n-void setSize(const size_type size)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor(const PreBasis &preBasis)\n+Return the container descriptor of the pre-basis, if defined, otherwise\n+ContainerDescriptor::Unknown.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bA_\br_\br_\ba_\by\n+std::array< Child, n > Array\n+Descriptor for arrays with all children of the same type and static size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:110\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto makeUniformDescriptor(std::integral_constant< std::size_t, n >, Child\n+child)\n+Generate a uniform descriptor in case the size is a static constant.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:159\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bT_\bu_\bp_\bl_\be\n+Dune::TupleVector< Children... > Tuple\n+Descriptor with all children of possibly different type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:94\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto makeDescriptor(Child0 child, Children... children)\n+Generate a descriptor in case the children are all of the same type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:115\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< Child > Vector\n+Descriptor for vectors with all children of the same type and dynamic size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:124\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn\n+Fallback container descriptor if nothing else fits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be\n+The node in the descriptor tree representing a value placeholder.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:83\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bs_\bi_\bz_\be\n+static constexpr std::size_t size()\n+A value placeholder does not have any sub-descriptors, thus its size is zero.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:89\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+Value operator[](const Index &) const\n+The child access method is only available for the interface, but should not be\n+called.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:86\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by\n+Descriptor for arrays with all children identical and the number of children a\n+static size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:129\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be\n+static constexpr std::size_t size()\n+The static size information, i.e., number of children.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by\n+UniformArray()\n+Default constructor. Is enable if the child-type is default constructible.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:133\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by\n+UniformArray(Child child)\n+Constructor that stores a single child only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:138\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const Child & operator[](const Index &) const\n+Access the i'th child that is always the same, i.e., child_.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:144\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br\n+Uniform descriptor with dynamic size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:168\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br\n+UniformVector(std::size_t size, Child child)\n+Constructor that stores the size and a single child only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:178\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+std::size_t size() const\n+The dynamic size information, i.e., number of children.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:188\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br\n+UniformVector(std::size_t size)\n+Default constructor with size. Is enable if the child-type is default\n+constructible.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:172\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const Child & operator[](const Index &) const\n+Access the i'th child that is always the same, i.e., child_.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:185\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: nodes.hh File Reference\n+dune-functions: hierarchicallagrangebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,61 +72,58 @@\n
  • dune
  • functions
  • functionspacebases
  • \n
    \n \n
    \n \n-
    nodes.hh File Reference
    \n+
    hierarchicallagrangebasis.hh File Reference
    \n
    \n
    \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/dynamicpowernode.hh>
    \n-#include <dune/typetree/compositenode.hh>
    \n-#include <dune/typetree/traversal.hh>
    \n-#include <dune/typetree/visitor.hh>
    \n+
    #include <type_traits>
    \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/functions/functionspacebases/lfeprebasismixin.hh>
    \n+#include <dune/geometry/type.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n \n-\n-\n-\n-\n-\n-\n-\n+\n \n

    \n Classes

    class  Dune::Functions::BasisNodeMixin
    class  Dune::Functions::HierarchicalLagrangePreBasis< GV, 1, R >
     
    class  Dune::Functions::LeafBasisNode
     
    class  Dune::Functions::PowerBasisNode< T, n >
     
    class  Dune::Functions::DynamicPowerBasisNode< T >
     
    class  Dune::Functions::CompositeBasisNode< T >
    class  Dune::Functions::HierarchicalLagrangePreBasis< GV, 2, R >
     
    \n \n \n \n \n \n+\n+\n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n+\n+\n+\n+\n+\n

    \n+Typedefs

    template<typename GV , int k, typename R = double>
    using Dune::Functions::HierarchicalLagrangeBasis = DefaultGlobalBasis< HierarchicalLagrangePreBasis< GV, k, R > >
     Basis of a scalar Hierarchical Lagrange finite element space.
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Functions

    template<typename Tree >
    void Dune::Functions::clearSize (Tree &tree, std::size_t offset)
     
    template<typename Tree , typename Entity >
    void Dune::Functions::bindTree (Tree &tree, const Entity &entity, std::size_t offset=0)
     
    template<typename Tree >
    void Dune::Functions::initializeTree (Tree &tree, std::size_t treeIndexOffset=0)
     
    template<int k, typename R = double>
    auto Dune::Functions::BasisFactory::hierarchicalLagrange ()
     A factory that can create a HierarchicalLagrange pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,49 +1,42 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-nodes.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+hierarchicallagrangebasis.hh File Reference\n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\bf_\be_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b1_\b,_\b _\bR_\b _\b>\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\b _\bT_\b,_\b _\bn_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\b _\bT_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\b _\bT_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b2_\b,_\b _\bR_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bl_\be_\ba_\br_\bS_\bi_\bz_\be (Tree &tree, std::size_t offset)\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k, R > >\n+\u00a0 Basis of a scalar Hierarchical Lagrange finite element space.\n \u00a0\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bb_\bi_\bn_\bd_\bT_\br_\be_\be (Tree &tree, const Entity &entity, std::size_t\n- offset=0)\n-\u00a0\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be (Tree &tree, std::size_t\n- treeIndexOffset=0)\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n+\u00a0 A factory that can create a HierarchicalLagrange pre-basis.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: nodes.hh Source File\n+dune-functions: hierarchicallagrangebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,400 +74,128 @@\n \n \n
    \n
    \n-
    nodes.hh
    \n+
    hierarchicallagrangebasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n
    9
    \n-
    10#include <cassert>
    \n-
    11#include <memory>
    \n-
    12
    \n-
    13#include <dune/common/indices.hh>
    \n-
    14
    \n-
    15#include <dune/typetree/leafnode.hh>
    \n-
    16#include <dune/typetree/powernode.hh>
    \n-
    17#include <dune/typetree/dynamicpowernode.hh>
    \n-
    18#include <dune/typetree/compositenode.hh>
    \n-
    19#include <dune/typetree/traversal.hh>
    \n-
    20#include <dune/typetree/visitor.hh>
    \n+
    10#include <type_traits>
    \n+
    11
    \n+
    12#include <dune/common/exceptions.hh>
    \n+
    13
    \n+
    14#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>
    \n+
    15
    \n+\n+\n+\n+
    19
    \n+
    20#include <dune/geometry/type.hh>
    \n
    21
    \n
    22namespace Dune {
    \n
    23 namespace Functions {
    \n
    24
    \n-
    25
    \n-
    26 namespace Impl {
    \n-
    27
    \n-
    28
    \n-
    29 struct ClearSizeVisitor
    \n-
    30 : public TypeTree::TreeVisitor
    \n-
    31 , public TypeTree::DynamicTraversal
    \n-
    32 {
    \n+
    25 // *****************************************************************************
    \n+
    26 // Implementation for Hierarchical Lagrange Basis
    \n+
    27 //
    \n+
    28 // - only orders k=1,2 are implemented up to now
    \n+
    29 // - order k=1 is identical to the standard Lagrange basis
    \n+
    30 // - implementation is restricted to simplex grids
    \n+
    31 //
    \n+
    32 // *****************************************************************************
    \n
    33
    \n-
    34 template<typename Node, typename TreePath>
    \n-
    35 void pre(Node& node, TreePath treePath)
    \n-
    36 {
    \n-
    37 leaf(node,treePath);
    \n-
    38 node.setSize(0);
    \n-
    39 }
    \n-
    40
    \n-
    41 template<typename Node, typename TreePath>
    \n-
    42 void leaf(Node& node, TreePath treePath)
    \n-
    43 {
    \n-
    44 node.setOffset(offset_);
    \n-
    45 }
    \n-
    46
    \n-
    47 ClearSizeVisitor(std::size_t offset)
    \n-
    48 : offset_(offset)
    \n-
    49 {}
    \n-
    50
    \n-
    51 const std::size_t offset_;
    \n-
    52
    \n-
    53 };
    \n-
    54
    \n-
    55
    \n-
    56 template<typename Entity>
    \n-
    57 struct BindVisitor
    \n-
    58 : public TypeTree::TreeVisitor
    \n-
    59 , public TypeTree::DynamicTraversal
    \n-
    60 {
    \n-
    61
    \n-
    62 template<typename Node, typename TreePath>
    \n-
    63 void pre(Node& node, TreePath)
    \n-
    64 {
    \n-
    65 node.setOffset(offset_);
    \n-
    66 }
    \n-
    67
    \n-
    68 template<typename Node, typename TreePath>
    \n-
    69 void post(Node& node, TreePath)
    \n-
    70 {
    \n-
    71 node.setSize(offset_ - node.offset());
    \n-
    72 }
    \n-
    73
    \n-
    74 template<typename Node, typename TreePath>
    \n-
    75 void leaf(Node& node, TreePath)
    \n-
    76 {
    \n-
    77 node.setOffset(offset_);
    \n-
    78 node.bind(entity_);
    \n-
    79 offset_ += node.size();
    \n-
    80 }
    \n-
    81
    \n-
    82 BindVisitor(const Entity& entity, std::size_t offset = 0)
    \n-
    83 : entity_(entity)
    \n-
    84 , offset_(offset)
    \n-
    85 {}
    \n-
    86
    \n-
    87 const Entity& entity_;
    \n-
    88 std::size_t offset_;
    \n-
    89
    \n-
    90 };
    \n-
    91
    \n-
    92
    \n-
    93 struct InitializeTreeVisitor :
    \n-
    94 public TypeTree::TreeVisitor,
    \n-
    95 public TypeTree::DynamicTraversal
    \n-
    96 {
    \n-
    97 template<typename Node, typename TreePath>
    \n-
    98 void pre(Node& node, TreePath)
    \n-
    99 {
    \n-
    100 node.setTreeIndex(treeIndex_);
    \n-
    101 ++treeIndex_;
    \n-
    102 }
    \n-
    103
    \n-
    104 template<typename Node, typename TreePath>
    \n-
    105 void leaf(Node& node, TreePath)
    \n-
    106 {
    \n-
    107 node.setTreeIndex(treeIndex_);
    \n-
    108 ++treeIndex_;
    \n-
    109 }
    \n-
    110
    \n-
    111 InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :
    \n-
    112 treeIndex_(treeIndexOffset)
    \n-
    113 {}
    \n+
    43 template<typename GV, int k, typename R = double>
    \n+\n+
    45
    \n+
    46 template<typename GV, typename R>
    \n+
    \n+\n+
    48 : public LFEPreBasisMixin<GV, LagrangeSimplexLocalFiniteElement<typename GV::ctype,R,GV::dimension,1>>
    \n+
    49 {
    \n+\n+
    51 public:
    \n+
    \n+
    52 HierarchicalLagrangePreBasis (const GV& gridView) :
    \n+
    53 Base(gridView, [](GeometryType gt, int) -> std::size_t { return gt.isVertex() ? 1 : 0; })
    \n+
    54 {
    \n+
    55 for (auto gt : gridView.indexSet().types(0)) {
    \n+
    56 if (!gt.isSimplex())
    \n+
    57 DUNE_THROW(Dune::NotImplemented,
    \n+
    58 "Hierarchical Lagrange basis only implemented for simplex grids.");
    \n+
    59 }
    \n+
    60 }
    \n+
    \n+
    61 };
    \n+
    \n+
    62
    \n+
    63 template<typename GV, typename R>
    \n+
    \n+\n+
    65 : public LFEPreBasisMixin<GV, HierarchicalP2LocalFiniteElement<typename GV::ctype,R,GV::dimension>>
    \n+
    66 {
    \n+\n+
    68 public:
    \n+
    \n+
    69 HierarchicalLagrangePreBasis (const GV& gridView) :
    \n+
    70 Base(gridView, [](GeometryType gt, int) -> std::size_t { return (gt.isVertex() || gt.isLine()) ? 1 : 0; })
    \n+
    71 {
    \n+
    72 for (auto gt : gridView.indexSet().types(0)) {
    \n+
    73 if (!gt.isSimplex())
    \n+
    74 DUNE_THROW(Dune::NotImplemented,
    \n+
    75 "Hierarchical Lagrange basis only implemented for simplex grids.");
    \n+
    76 }
    \n+
    77 }
    \n+
    \n+
    78 };
    \n+
    \n+
    79
    \n+
    80
    \n+
    81 namespace BasisFactory {
    \n+
    82
    \n+
    91 template<int k, typename R=double>
    \n+
    \n+\n+
    93 {
    \n+
    94 static_assert(0 < k && k <= 2);
    \n+
    95 return [](const auto& gridView) {
    \n+
    96 return HierarchicalLagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n+
    97 };
    \n+
    98 }
    \n+
    \n+
    99
    \n+
    100 } // end namespace BasisFactory
    \n+
    101
    \n+
    112 template<typename GV, int k, typename R=double>
    \n+\n
    114
    \n-
    115 std::size_t treeIndex_;
    \n-
    116 };
    \n+
    115 } // end namespace Functions
    \n+
    116} // end namespace Dune
    \n
    117
    \n-
    118 } // end namespace Impl
    \n-
    119
    \n-
    120
    \n-
    \n-\n-
    122 {
    \n-
    123
    \n-
    124 friend struct Impl::ClearSizeVisitor;
    \n-
    125
    \n-
    126 template<typename>
    \n-
    127 friend struct Impl::BindVisitor;
    \n-
    128
    \n-
    129 friend struct Impl::InitializeTreeVisitor;
    \n-
    130
    \n-
    131 public:
    \n-
    132
    \n-
    133 using size_type = std::size_t;
    \n-
    134
    \n-
    \n-\n-
    136 offset_(0),
    \n-
    137 size_(0),
    \n-
    138 treeIndex_(0)
    \n-
    139 {}
    \n-
    \n-
    140
    \n-
    \n-\n-
    142 {
    \n-
    143 assert(i < size_);
    \n-
    144 return offset_ + i;
    \n-
    145 }
    \n-
    \n-
    146
    \n-
    \n-\n-
    148 {
    \n-
    149 return size_;
    \n-
    150 }
    \n-
    \n-
    151
    \n-
    \n-\n-
    153 {
    \n-
    154 return treeIndex_;
    \n-
    155 }
    \n-
    \n-
    156
    \n-
    157 protected:
    \n-
    158
    \n-
    \n-\n-
    160 {
    \n-
    161 return offset_;
    \n-
    162 }
    \n-
    \n-
    163
    \n-
    \n-\n-
    165 {
    \n-
    166 offset_ = offset;
    \n-
    167 }
    \n-
    \n-
    168
    \n-
    \n-\n-
    170 {
    \n-
    171 size_ = size;
    \n-
    172 }
    \n-
    \n-
    173
    \n-
    \n-\n-
    175 {
    \n-
    176 treeIndex_ = treeIndex;
    \n-
    177 }
    \n-
    \n-
    178
    \n-
    179 private:
    \n-
    180
    \n-
    181 size_type offset_;
    \n-
    182 size_type size_;
    \n-
    183 size_type treeIndex_;
    \n-
    184
    \n-
    185 };
    \n-
    \n-
    186
    \n-
    187
    \n-
    \n-\n-
    189 public BasisNodeMixin,
    \n-
    190 public TypeTree::LeafNode
    \n-
    191 {};
    \n-
    \n-
    192
    \n-
    193
    \n-
    194 template<typename T, std::size_t n>
    \n-
    \n-\n-
    196 public BasisNodeMixin,
    \n-
    197 public TypeTree::PowerNode<T,n>
    \n-
    198 {
    \n-
    199
    \n-
    200 using Node = TypeTree::PowerNode<T,n>;
    \n-
    201
    \n-
    202 public:
    \n-
    203
    \n-
    204 using Element = typename T::Element;
    \n-
    205
    \n-
    206 PowerBasisNode() = default;
    \n-
    207
    \n-
    \n-
    208 PowerBasisNode(const typename Node::NodeStorage& children) :
    \n-
    209 Node(children)
    \n-
    210 {}
    \n-
    \n-
    211
    \n-
    \n-
    212 const Element& element() const
    \n-
    213 {
    \n-
    214 return this->child(Dune::Indices::_0).element();
    \n-
    215 }
    \n-
    \n-
    216
    \n-
    217 };
    \n-
    \n-
    218
    \n-
    219
    \n-
    220 template<typename T>
    \n-
    \n-\n-
    222 public BasisNodeMixin,
    \n-
    223 public TypeTree::DynamicPowerNode<T>
    \n-
    224 {
    \n-
    225
    \n-
    226 using Node = TypeTree::DynamicPowerNode<T>;
    \n-
    227
    \n-
    228 public:
    \n-
    229
    \n-
    230 using Element = typename T::Element;
    \n-
    231
    \n-
    \n-
    232 DynamicPowerBasisNode (std::size_t children)
    \n-
    233 : Node(children)
    \n-
    234 {}
    \n-
    \n-
    235
    \n-
    \n-
    236 DynamicPowerBasisNode (typename Node::NodeStorage children)
    \n-
    237 : Node(std::move(children))
    \n-
    238 {}
    \n-
    \n-
    239
    \n-
    \n-
    240 const Element& element() const
    \n-
    241 {
    \n-
    242 return this->child(0).element();
    \n-
    243 }
    \n-
    \n-
    244
    \n-
    245 };
    \n-
    \n-
    246
    \n-
    247
    \n-
    248 template<typename... T>
    \n-
    \n-\n-
    250 public BasisNodeMixin,
    \n-
    251 public TypeTree::CompositeNode<T...>
    \n-
    252 {
    \n-
    253
    \n-
    254 using Node = TypeTree::CompositeNode<T...>;
    \n-
    255
    \n-
    256 public:
    \n-
    257
    \n-
    258 using Element = typename Node::template Child<0>::Type::Element;
    \n-
    259
    \n-\n-
    261
    \n-
    \n-
    262 CompositeBasisNode(const typename Node::NodeStorage& children) :
    \n-
    263 Node(children)
    \n-
    264 {}
    \n-
    \n-
    265
    \n-
    266 template<typename... Children>
    \n-
    \n-
    267 CompositeBasisNode(const std::shared_ptr<Children>&... children) :
    \n-
    268 Node(children...)
    \n-
    269 {}
    \n-
    \n-
    270
    \n-
    \n-
    271 const Element& element() const
    \n-
    272 {
    \n-
    273 return this->child(Dune::Indices::_0).element();
    \n-
    274 }
    \n-
    \n-
    275
    \n-
    276 };
    \n-
    \n-
    277
    \n-
    278
    \n-
    279 template<typename Tree>
    \n-
    \n-
    280 void clearSize(Tree& tree, std::size_t offset)
    \n-
    281 {
    \n-
    282 TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));
    \n-
    283 }
    \n-
    \n-
    284
    \n-
    285 template<typename Tree, typename Entity>
    \n-
    \n-
    286 void bindTree(Tree& tree, const Entity& entity, std::size_t offset = 0)
    \n-
    287 {
    \n-
    288 Impl::BindVisitor<Entity> visitor(entity,offset);
    \n-
    289 TypeTree::applyToTree(tree,visitor);
    \n-
    290 }
    \n-
    \n-
    291
    \n-
    292 template<typename Tree>
    \n-
    \n-
    293 void initializeTree(Tree& tree, std::size_t treeIndexOffset = 0)
    \n-
    294 {
    \n-
    295 Impl::InitializeTreeVisitor visitor(treeIndexOffset);
    \n-
    296 TypeTree::applyToTree(tree,visitor);
    \n-
    297 }
    \n-
    \n-
    298
    \n-
    299
    \n-
    300 } // namespace Functions
    \n-
    301
    \n-
    302} // namespace Dune
    \n-
    303
    \n-
    304#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n+
    118#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n+\n+\n+\n+
    auto hierarchicalLagrange()
    A factory that can create a HierarchicalLagrange pre-basis.
    Definition hierarchicallagrangebasis.hh:92
    \n
    Definition polynomial.hh:17
    \n-
    void clearSize(Tree &tree, std::size_t offset)
    Definition nodes.hh:280
    \n-
    void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)
    Definition nodes.hh:286
    \n-
    void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)
    Definition nodes.hh:293
    \n-
    Definition nodes.hh:122
    \n-
    size_type treeIndex() const
    Definition nodes.hh:152
    \n-
    size_type localIndex(size_type i) const
    Definition nodes.hh:141
    \n-
    size_type offset() const
    Definition nodes.hh:159
    \n-
    size_type size() const
    Definition nodes.hh:147
    \n-
    void setOffset(const size_type offset)
    Definition nodes.hh:164
    \n-
    std::size_t size_type
    Definition nodes.hh:133
    \n-
    BasisNodeMixin()
    Definition nodes.hh:135
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n-
    void setTreeIndex(size_type treeIndex)
    Definition nodes.hh:174
    \n-
    Definition nodes.hh:191
    \n-
    Definition nodes.hh:198
    \n-
    const Element & element() const
    Definition nodes.hh:212
    \n-
    typename T::Element Element
    Definition nodes.hh:204
    \n-
    PowerBasisNode(const typename Node::NodeStorage &children)
    Definition nodes.hh:208
    \n-\n-\n-
    const Element & element() const
    Definition nodes.hh:240
    \n-
    DynamicPowerBasisNode(typename Node::NodeStorage children)
    Definition nodes.hh:236
    \n-
    DynamicPowerBasisNode(std::size_t children)
    Definition nodes.hh:232
    \n-
    typename T::Element Element
    Definition nodes.hh:230
    \n-\n-\n-
    CompositeBasisNode(const typename Node::NodeStorage &children)
    Definition nodes.hh:262
    \n-
    const Element & element() const
    Definition nodes.hh:271
    \n-
    typename Node::template Child< 0 >::Type::Element Element
    Definition nodes.hh:258
    \n-
    CompositeBasisNode(const std::shared_ptr< Children > &... children)
    Definition nodes.hh:267
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n+
    A pre-basis for a hierarchical Lagrange basis.
    Definition hierarchicallagrangebasis.hh:44
    \n+
    HierarchicalLagrangePreBasis(const GV &gridView)
    Definition hierarchicallagrangebasis.hh:52
    \n+
    HierarchicalLagrangePreBasis(const GV &gridView)
    Definition hierarchicallagrangebasis.hh:69
    \n+
    A pre-basis mixin class parametrized with a local finite-element and a DOF layout.
    Definition lfeprebasismixin.hh:57
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,402 +1,141 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-nodes.hh\n+hierarchicallagrangebasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n 9\n-10#include \n-11#include \n-12\n-13#include \n-14\n-15#include \n-16#include \n-17#include \n-18#include \n-19#include \n-20#include \n+10#include \n+11\n+12#include \n+13\n+14#include \n+15\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\bf_\be_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+19\n+20#include \n 21\n 22namespace _\bD_\bu_\bn_\be {\n 23 namespace Functions {\n 24\n-25\n-26 namespace Impl {\n-27\n-28\n-29 struct ClearSizeVisitor\n-30 : public TypeTree::TreeVisitor\n-31 , public TypeTree::DynamicTraversal\n-32 {\n+25 /\n+/ *****************************************************************************\n+26 // Implementation for Hierarchical Lagrange Basis\n+27 //\n+28 // - only orders k=1,2 are implemented up to now\n+29 // - order k=1 is identical to the standard Lagrange basis\n+30 // - implementation is restricted to simplex grids\n+31 //\n+32 /\n+/ *****************************************************************************\n 33\n-34 template\n-35 void pre(Node& node, TreePath treePath)\n-36 {\n-37 leaf(node,treePath);\n-38 node.setSize(0);\n-39 }\n-40\n-41 template\n-42 void leaf(Node& node, TreePath treePath)\n-43 {\n-44 node.setOffset(offset_);\n-45 }\n-46\n-47 ClearSizeVisitor(std::size_t offset)\n-48 : offset_(offset)\n-49 {}\n-50\n-51 const std::size_t offset_;\n-52\n-53 };\n-54\n-55\n-56 template\n-57 struct BindVisitor\n-58 : public TypeTree::TreeVisitor\n-59 , public TypeTree::DynamicTraversal\n-60 {\n-61\n-62 template\n-63 void pre(Node& node, TreePath)\n-64 {\n-65 node.setOffset(offset_);\n-66 }\n-67\n-68 template\n-69 void post(Node& node, TreePath)\n-70 {\n-71 node.setSize(offset_ - node.offset());\n-72 }\n-73\n-74 template\n-75 void leaf(Node& node, TreePath)\n-76 {\n-77 node.setOffset(offset_);\n-78 node.bind(entity_);\n-79 offset_ += node.size();\n-80 }\n-81\n-82 BindVisitor(const Entity& entity, std::size_t offset = 0)\n-83 : entity_(entity)\n-84 , offset_(offset)\n-85 {}\n-86\n-87 const Entity& entity_;\n-88 std::size_t offset_;\n-89\n-90 };\n-91\n-92\n-93 struct InitializeTreeVisitor :\n-94 public TypeTree::TreeVisitor,\n-95 public TypeTree::DynamicTraversal\n-96 {\n-97 template\n-98 void pre(Node& node, TreePath)\n-99 {\n-100 node.setTreeIndex(treeIndex_);\n-101 ++treeIndex_;\n-102 }\n-103\n-104 template\n-105 void leaf(Node& node, TreePath)\n-106 {\n-107 node.setTreeIndex(treeIndex_);\n-108 ++treeIndex_;\n-109 }\n-110\n-111 InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :\n-112 treeIndex_(treeIndexOffset)\n-113 {}\n+43 template\n+_\b4_\b4 class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs;\n+45\n+46 template\n+_\b4_\b7 class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+48 : public _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn>\n+49 {\n+50 using _\bB_\ba_\bs_\be = _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\bG_\bV_\b,_\b _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bS_\bi_\bm_\bp_\bl_\be_\bx_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be\n+_\bG_\bV_\b:_\b:_\bc_\bt_\by_\bp_\be_\b,_\bR_\b,_\bG_\bV_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b1_\b>>;\n+51 public:\n+_\b5_\b2 _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs (const GV& gridView) :\n+53 _\bB_\ba_\bs_\be(gridView, [](GeometryType gt, int) -> std::size_t { return gt.isVertex\n+() ? 1 : 0; })\n+54 {\n+55 for (auto gt : gridView.indexSet().types(0)) {\n+56 if (!gt.isSimplex())\n+57 DUNE_THROW(Dune::NotImplemented,\n+58 \"Hierarchical Lagrange basis only implemented for simplex grids.\");\n+59 }\n+60 }\n+61 };\n+62\n+63 template\n+_\b6_\b4 class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+65 : public _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn>\n+66 {\n+67 using _\bB_\ba_\bs_\be = _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\bG_\bV_\b,_\b _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bP_\b2_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be\n+_\bG_\bV_\b:_\b:_\bc_\bt_\by_\bp_\be_\b,_\bR_\b,_\bG_\bV_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>>;\n+68 public:\n+_\b6_\b9 _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs (const GV& gridView) :\n+70 _\bB_\ba_\bs_\be(gridView, [](GeometryType gt, int) -> std::size_t { return (gt.isVertex\n+() || gt.isLine()) ? 1 : 0; })\n+71 {\n+72 for (auto gt : gridView.indexSet().types(0)) {\n+73 if (!gt.isSimplex())\n+74 DUNE_THROW(Dune::NotImplemented,\n+75 \"Hierarchical Lagrange basis only implemented for simplex grids.\");\n+76 }\n+77 }\n+78 };\n+79\n+80\n+81 namespace BasisFactory {\n+82\n+91 template\n+_\b9_\b2 auto _\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be()\n+93 {\n+94 static_assert(0 < k && k <= 2);\n+95 return [](const auto& gridView) {\n+96 return _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k, R>\n+(gridView);\n+97 };\n+98 }\n+99\n+100 } // end namespace BasisFactory\n+101\n+112 template\n+_\b1_\b1_\b3 using _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b> >;\n 114\n-115 std::size_t treeIndex_;\n-116 };\n+115 } // end namespace Functions\n+116} // end namespace Dune\n 117\n-118 } // end namespace Impl\n-119\n-120\n-_\b1_\b2_\b1 class _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n-122 {\n-123\n-124 friend struct Impl::ClearSizeVisitor;\n-125\n-126 template\n-127 friend struct Impl::BindVisitor;\n-128\n-129 friend struct Impl::InitializeTreeVisitor;\n-130\n-131 public:\n-132\n-_\b1_\b3_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-134\n-_\b1_\b3_\b5 _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn() :\n-136 offset_(0),\n-137 size_(0),\n-138 treeIndex_(0)\n-139 {}\n-140\n-_\b1_\b4_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n-142 {\n-143 assert(i < size_);\n-144 return offset_ + i;\n-145 }\n-146\n-_\b1_\b4_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-148 {\n-149 return size_;\n-150 }\n-151\n-_\b1_\b5_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx() const\n-153 {\n-154 return treeIndex_;\n-155 }\n-156\n-157 protected:\n-158\n-_\b1_\b5_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bo_\bf_\bf_\bs_\be_\bt() const\n-160 {\n-161 return offset_;\n-162 }\n-163\n-_\b1_\b6_\b4 void _\bs_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt(const _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bo_\bf_\bf_\bs_\be_\bt)\n-165 {\n-166 offset_ = _\bo_\bf_\bf_\bs_\be_\bt;\n-167 }\n-168\n-_\b1_\b6_\b9 void _\bs_\be_\bt_\bS_\bi_\bz_\be(const _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be)\n-170 {\n-171 size_ = _\bs_\bi_\bz_\be;\n-172 }\n-173\n-_\b1_\b7_\b4 void _\bs_\be_\bt_\bT_\br_\be_\be_\bI_\bn_\bd_\be_\bx(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx)\n-175 {\n-176 treeIndex_ = _\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx;\n-177 }\n-178\n-179 private:\n-180\n-181 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be offset_;\n-182 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be size_;\n-183 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be treeIndex_;\n-184\n-185 };\n-186\n-187\n-_\b1_\b8_\b8 class _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n-189 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n-190 public TypeTree::LeafNode\n-191 {};\n-192\n-193\n-194 template\n-_\b1_\b9_\b5 class _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n-196 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n-197 public TypeTree::PowerNode\n-198 {\n-199\n-200 using Node = TypeTree::PowerNode;\n-201\n-202 public:\n-203\n-_\b2_\b0_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename T::Element;\n-205\n-_\b2_\b0_\b6 _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be() = default;\n-207\n-_\b2_\b0_\b8 _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be(const typename Node::NodeStorage& children) :\n-209 Node(children)\n-210 {}\n-211\n-_\b2_\b1_\b2 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-213 {\n-214 return this->child(Dune::Indices::_0).element();\n-215 }\n-216\n-217 };\n-218\n-219\n-220 template\n-_\b2_\b2_\b1 class _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n-222 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n-223 public TypeTree::DynamicPowerNode\n-224 {\n-225\n-226 using Node = TypeTree::DynamicPowerNode;\n-227\n-228 public:\n-229\n-_\b2_\b3_\b0 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename T::Element;\n-231\n-_\b2_\b3_\b2 _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be (std::size_t children)\n-233 : Node(children)\n-234 {}\n-235\n-_\b2_\b3_\b6 _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be (typename Node::NodeStorage children)\n-237 : Node(std::move(children))\n-238 {}\n-239\n-_\b2_\b4_\b0 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-241 {\n-242 return this->child(0).element();\n-243 }\n-244\n-245 };\n-246\n-247\n-248 template\n-_\b2_\b4_\b9 class _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n-250 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n-251 public TypeTree::CompositeNode\n-252 {\n-253\n-254 using Node = TypeTree::CompositeNode;\n-255\n-256 public:\n-257\n-_\b2_\b5_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename Node::template Child<0>::Type::Element;\n-259\n-_\b2_\b6_\b0 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be() = default;\n-261\n-_\b2_\b6_\b2 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be(const typename Node::NodeStorage& children) :\n-263 Node(children)\n-264 {}\n-265\n-266 template\n-_\b2_\b6_\b7 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be(const std::shared_ptr&... children) :\n-268 Node(children...)\n-269 {}\n-270\n-_\b2_\b7_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-272 {\n-273 return this->child(Dune::Indices::_0).element();\n-274 }\n-275\n-276 };\n-277\n-278\n-279 template\n-_\b2_\b8_\b0 void _\bc_\bl_\be_\ba_\br_\bS_\bi_\bz_\be(Tree& tree, std::size_t offset)\n-281 {\n-282 TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));\n-283 }\n-284\n-285 template\n-_\b2_\b8_\b6 void _\bb_\bi_\bn_\bd_\bT_\br_\be_\be(Tree& tree, const Entity& entity, std::size_t offset = 0)\n-287 {\n-288 Impl::BindVisitor visitor(entity,offset);\n-289 TypeTree::applyToTree(tree,visitor);\n-290 }\n-291\n-292 template\n-_\b2_\b9_\b3 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be(Tree& tree, std::size_t treeIndexOffset = 0)\n-294 {\n-295 Impl::InitializeTreeVisitor visitor(treeIndexOffset);\n-296 TypeTree::applyToTree(tree,visitor);\n-297 }\n-298\n-299\n-300 } // namespace Functions\n-301\n-302} // namespace Dune\n-303\n-304#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n+118#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bl_\bf_\be_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be\n+auto hierarchicalLagrange()\n+A factory that can create a HierarchicalLagrange pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:92\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bl_\be_\ba_\br_\bS_\bi_\bz_\be\n-void clearSize(Tree &tree, std::size_t offset)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:280\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bb_\bi_\bn_\bd_\bT_\br_\be_\be\n-void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:286\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be\n-void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:293\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx\n-size_type treeIndex() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx\n-size_type localIndex(size_type i) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:141\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bo_\bf_\bf_\bs_\be_\bt\n-size_type offset() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:159\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bO_\bf_\bf_\bs_\be_\bt\n-void setOffset(const size_type offset)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:164\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:133\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n-BasisNodeMixin()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:135\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n-void setSize(const size_type size)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bT_\br_\be_\be_\bI_\bn_\bd_\be_\bx\n-void setTreeIndex(size_type treeIndex)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:174\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:198\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:212\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename T::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:204\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-PowerBasisNode(const typename Node::NodeStorage &children)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:208\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-PowerBasisNode()=default\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:224\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:240\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-DynamicPowerBasisNode(typename Node::NodeStorage children)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:236\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-DynamicPowerBasisNode(std::size_t children)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:232\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename T::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:230\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:252\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-CompositeBasisNode()=default\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-CompositeBasisNode(const typename Node::NodeStorage &children)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:262\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:271\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename Node::template Child< 0 >::Type::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:258\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-CompositeBasisNode(const std::shared_ptr< Children > &... children)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:267\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+Global basis for given pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+A pre-basis for a hierarchical Lagrange basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:44\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b1_\b,_\b _\bR_\b _\b>_\b:_\b:\n+_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+HierarchicalLagrangePreBasis(const GV &gridView)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b2_\b,_\b _\bR_\b _\b>_\b:_\b:\n+_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+HierarchicalLagrangePreBasis(const GV &gridView)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:69\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+A pre-basis mixin class parametrized with a local finite-element and a DOF\n+layout.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:57\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: powerbasis.hh File Reference\n+dune-functions: hierarchicvectorwrapper.hh File Reference\n \n \n \n \n \n \n \n@@ -73,58 +73,51 @@\n \n \n
    \n \n-
    powerbasis.hh File Reference
    \n+
    hierarchicvectorwrapper.hh File Reference
    \n
    \n
    \n-
    #include <dune/common/reservedvector.hh>
    \n-#include <dune/common/typeutilities.hh>
    \n+\n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::PowerPreBasis< IMS, SPB, C >
     A pre-basis for power bases. More...
    class  Dune::Functions::HierarchicVectorWrapper< V, CO >
     A wrapper providing multiindex access to vector entries. More...
     
    \n \n \n \n \n \n-\n-\n-\n-\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<std::size_t k, class ChildPreBasisFactory , class IndexMergingStrategy >
    auto Dune::Functions::BasisFactory::power (ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)
     Create a pre-basis factory that can build a PowerPreBasis.
     
    template<std::size_t k, class ChildPreBasisFactory >
    auto Dune::Functions::BasisFactory::power (ChildPreBasisFactory &&childPreBasisFactory)
     Create a factory builder that can build a PowerPreBasis.
     
    template<class V >
    HierarchicVectorWrapper< V > Dune::Functions::hierarchicVector (V &v)
     
    template<class MultiIndex , class V , std::enable_if_t< models< Concept::HasIndexAccess, V, MultiIndex >(), int > = 0>
    V & Dune::Functions::makeHierarchicVectorForMultiIndex (V &v)
     
    template<class MultiIndex , class V , std::enable_if_t< not models< Concept::HasIndexAccess, V, MultiIndex >(), int > = 0>
    HierarchicVectorWrapper< V > Dune::Functions::makeHierarchicVectorForMultiIndex (V &v)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,47 +2,41 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-powerbasis.hh File Reference\n-#include \n-#include \n+hierarchicvectorwrapper.hh File Reference\n+#include \n+#include \n #include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\by_\bn_\ba_\bm_\bi_\bc_\bp_\bo_\bw_\be_\br_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bI_\bM_\bS_\b,_\b _\bS_\bP_\bB_\b,_\b _\bC_\b _\b>\n-\u00a0 A pre-basis for power bases. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bV_\b,_\b _\bC_\bO_\b _\b>\n+\u00a0 A wrapper providing multiindex access to vector entries. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br (ChildPreBasisFactory\n- &&childPreBasisFactory, const _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by &)\n-\u00a0 Create a pre-basis factory that can build a _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br (ChildPreBasisFactory\n- &&childPreBasisFactory)\n-\u00a0 Create a factory builder that can build a _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs.\n+template\n+_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br< V >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br (V &v)\n+\u00a0\n+template(), int > = 0>\n+ V &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+ _\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (V &v)\n+\u00a0\n+template(), int > = 0>\n+_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br< V >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+ _\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx (V &v)\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: powerbasis.hh Source File\n+dune-functions: hierarchicvectorwrapper.hh Source File\n \n \n \n \n \n \n \n@@ -74,196 +74,293 @@\n \n \n
    \n
    \n-
    powerbasis.hh
    \n+
    hierarchicvectorwrapper.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n
    9
    \n-
    10#include <dune/common/reservedvector.hh>
    \n-
    11#include <dune/common/typeutilities.hh>
    \n-
    12#include <dune/common/indices.hh>
    \n+
    10#ifndef DUNE_FUNCTIONS_HIERARCHICVECTORWRAPPER_TEST_NO_DEPRECATION
    \n+
    11#warning The header dune/functions/functionspacebases/hierarchicvectorwrapper.hh is deprecated and will be removed after release 2.10.
    \n+
    12#endif
    \n
    13
    \n-\n-\n-\n-\n-\n-\n-\n-\n+
    14#include <dune/common/concept.hh>
    \n+
    15#include <dune/common/hybridutilities.hh>
    \n+
    16#include <dune/common/indices.hh>
    \n+
    17
    \n+\n+\n+\n+\n
    22
    \n
    23
    \n-
    24
    \n-
    25namespace Dune {
    \n-
    26namespace Functions {
    \n+
    24namespace Dune {
    \n+
    25namespace Functions {
    \n+
    26
    \n
    27
    \n
    28
    \n-
    29// *****************************************************************************
    \n-
    30// This is the reusable part of the power bases. It contains
    \n-
    31//
    \n-
    32// PowerPreBasis
    \n-
    33//
    \n-
    34// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    35// state. These components do _not_ depend on the global basis and local view
    \n-
    36// and can be used without a global basis.
    \n-
    37// *****************************************************************************
    \n-
    38
    \n-
    49template<class IMS, class SPB, std::size_t C>
    \n-
    \n-\n-
    51 public DynamicPowerPreBasis<IMS,SPB>
    \n-
    52{
    \n-\n+
    29namespace Imp {
    \n+
    30
    \n+
    31 // Construct default coefficient type from vector and multiindex type
    \n+
    32 // This requires that MultiIndex has a static size. Otherwise the
    \n+
    33 // vector type itself is returned.
    \n+
    34 template<class V, class MultiIndex>
    \n+
    35 struct CoefficientType
    \n+
    36 {
    \n+
    37 template<class E, std::size_t size>
    \n+
    38 struct DefaultCoefficientTypeHelper
    \n+
    39 {
    \n+
    40 using E0 = decltype(std::declval<E>()[Dune::Indices::_0]);
    \n+
    41 using type = typename DefaultCoefficientTypeHelper<E0, size-1>::type;
    \n+
    42 };
    \n+
    43
    \n+
    44 template<class E>
    \n+
    45 struct DefaultCoefficientTypeHelper<E, 0>
    \n+
    46 {
    \n+
    47 using type = E;
    \n+
    48 };
    \n+
    49
    \n+
    50 using type = typename DefaultCoefficientTypeHelper<V, StaticSizeOrZero<MultiIndex>::value>::type;
    \n+
    51 };
    \n+
    52
    \n+
    53
    \n
    54
    \n-
    55public:
    \n-
    56
    \n-
    58 using SubPreBasis = SPB;
    \n+
    55 // This tag class is used as Coefficient template parameter
    \n+
    56 // for HierarchicVectorWrapper if the coefficient type should
    \n+
    57 // be deduced.
    \n+
    58 struct DeducedCoefficientTag {};
    \n
    59
    \n-\n+
    60} // namespace Imp
    \n+
    61
    \n
    62
    \n-
    64 using size_type = typename Base::size_type;
    \n-
    65
    \n-\n-
    68
    \n-
    70 inline static constexpr std::integral_constant<std::size_t,C> children = {};
    \n-
    71
    \n-
    77 template<class... SFArgs,
    \n-
    78 disableCopyMove<PowerPreBasis, SFArgs...> = 0,
    \n-
    79 enableIfConstructible<SubPreBasis, SFArgs...> = 0>
    \n-
    \n-
    80 explicit PowerPreBasis(SFArgs&&... sfArgs) :
    \n-
    81 Base(std::size_t(C), std::forward<SFArgs>(sfArgs)...)
    \n-
    82 {}
    \n-
    \n-
    83
    \n-
    \n-
    87 Node makeNode() const
    \n-
    88 {
    \n-
    89 Node node{};
    \n-
    90 for (std::size_t i=0; i<children(); ++i)
    \n-
    91 node.setChild(i, Base::subPreBasis_.makeNode());
    \n-
    92 return node;
    \n-
    93 }
    \n-
    \n-
    94
    \n-
    \n-\n-
    97 {
    \n-
    98 return size(Dune::ReservedVector<size_type, Base::multiIndexBufferSize>{});
    \n-
    99 }
    \n-
    \n-
    100
    \n-
    102 template<class SizePrefix>
    \n-
    \n-
    103 size_type size(const SizePrefix& prefix) const
    \n-
    104 {
    \n-\n-
    106 }
    \n-
    \n-
    107
    \n-
    109 template<class NodeType, typename It,
    \n-
    110 std::enable_if_t<NodeType::isPower, int> = 0>
    \n-
    \n-
    111 It indices(const NodeType& node, It it) const
    \n-
    112 {
    \n-\n-
    114 }
    \n-
    \n-
    115
    \n-
    \n-\n-
    118 {
    \n-\n-
    120 }
    \n-
    \n-
    121};
    \n-
    \n-
    122
    \n-
    123
    \n-
    124
    \n-
    125namespace BasisFactory {
    \n-
    126
    \n-
    139template<std::size_t k, class ChildPreBasisFactory, class IndexMergingStrategy>
    \n-
    \n-
    140auto power(ChildPreBasisFactory&& childPreBasisFactory, const IndexMergingStrategy&)
    \n-
    141{
    \n-
    142 return [childPreBasisFactory](const auto& gridView) {
    \n-
    143 auto childPreBasis = childPreBasisFactory(gridView);
    \n-\n-
    145 };
    \n-
    146}
    \n-
    \n-
    147
    \n-
    158template<std::size_t k, class ChildPreBasisFactory>
    \n-
    \n-
    159auto power(ChildPreBasisFactory&& childPreBasisFactory)
    \n-
    160{
    \n-
    161 return [childPreBasisFactory](const auto& gridView) {
    \n-
    162 auto childPreBasis = childPreBasisFactory(gridView);
    \n-\n-
    164 };
    \n-
    165}
    \n-
    \n+
    63
    \n+
    86template<class V, class CO=Imp::DeducedCoefficientTag>
    \n+
    \n+
    87class
    \n+
    88[[deprecated("HierarchicVectorWrapper is deprecated and will be removed after release 2.10.")]]
    \n+\n+
    90{
    \n+
    91 template<class MultiIndex>
    \n+
    92 using Coefficient = std::conditional_t< std::is_same_v<Imp::DeducedCoefficientTag,CO> and HasStaticSize_v<MultiIndex>,
    \n+
    93 typename Imp::CoefficientType<V, MultiIndex>::type,
    \n+
    94 CO
    \n+
    95 >;
    \n+
    96
    \n+
    97
    \n+
    98 using size_type = std::size_t;
    \n+
    99
    \n+
    100 template<class C, class SizeProvider,
    \n+
    101 std::enable_if_t< not models<Concept::HasResize, C>(), int> = 0,
    \n+
    102 std::enable_if_t< not models<Concept::HasSizeMethod, C>(), int> = 0>
    \n+
    103 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    104 {
    \n+
    105 auto size = sizeProvider.size(prefix);
    \n+
    106 if (size != 0)
    \n+
    107 DUNE_THROW(RangeError, "Can't resize scalar vector entry v[" << prefix << "] to size(" << prefix << ")=" << size);
    \n+
    108 }
    \n+
    109
    \n+
    110 struct StaticResizeHelper
    \n+
    111 {
    \n+
    112 template<class I, class C, class SizeProvider>
    \n+
    113 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    114 {
    \n+
    115 prefix.back() = i;
    \n+
    116 resizeHelper(c[i], sizeProvider, prefix);
    \n+
    117 }
    \n+
    118 };
    \n+
    119
    \n+
    120 template<class C, class SizeProvider,
    \n+
    121 std::enable_if_t< not models<Concept::HasResize, C>(), int> = 0,
    \n+
    122 std::enable_if_t< models<Concept::HasSizeMethod, C>(), int> = 0>
    \n+
    123 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    124 {
    \n+
    125 auto size = sizeProvider.size(prefix);
    \n+
    126 if (size == 0)
    \n+
    127 return;
    \n+
    128
    \n+
    129 if (c.size() != size)
    \n+
    130 DUNE_THROW(RangeError, "Can't resize statically sized vector entry v[" << prefix << "] of size " << c.size() << " to size(" << prefix << ")=" << size);
    \n+
    131
    \n+
    132 using namespace Dune::Hybrid;
    \n+
    133 prefix.push_back(0);
    \n+
    134 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {
    \n+
    135 StaticResizeHelper::apply(i, c, sizeProvider, prefix);
    \n+
    136 });
    \n+
    137 }
    \n+
    138
    \n+
    139 template<class C, class SizeProvider,
    \n+
    140 std::enable_if_t< models<Concept::HasResize, C>(), int> = 0>
    \n+
    141 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    142 {
    \n+
    143 auto size = sizeProvider.size(prefix);
    \n+
    144 if (size==0)
    \n+
    145 {
    \n+
    146 if (c.size()==0)
    \n+
    147 DUNE_THROW(RangeError, "Can't resize dynamically sized vector entry v[" << prefix << "]. Its size is 0 but the target size is unknown due to size(" << prefix << ")=0.");
    \n+
    148 else
    \n+
    149 return;
    \n+
    150 }
    \n+
    151
    \n+
    152 c.resize(size);
    \n+
    153 prefix.push_back(0);
    \n+
    154 for(std::size_t i=0; i<size; ++i)
    \n+
    155 {
    \n+
    156 prefix.back() = i;
    \n+
    157 resizeHelper(c[i], sizeProvider, prefix);
    \n+
    158 }
    \n+
    159 }
    \n+
    160
    \n+
    161
    \n+
    162
    \n+
    163public:
    \n+
    164
    \n+
    165 using Vector = V;
    \n
    166
    \n-
    167} // end namespace BasisFactory
    \n-
    168
    \n-
    169// Backward compatibility
    \n-
    170namespace [[deprecated("Will be removed after Dune 2.10")]] BasisBuilder {
    \n-
    171
    \n-
    172 using namespace BasisFactory;
    \n+
    167 template<class MultiIndex>
    \n+
    168 using Entry = Coefficient<MultiIndex>;
    \n+
    169
    \n+
    \n+\n+
    171 vector_(&vector)
    \n+
    172 {}
    \n+
    \n
    173
    \n-
    174}
    \n-
    175
    \n-
    176
    \n-
    177} // end namespace Functions
    \n-
    178} // end namespace Dune
    \n-
    179
    \n-
    180
    \n-
    181#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n+
    174 template<class SizeProvider>
    \n+
    \n+
    175 void resize(const SizeProvider& sizeProvider)
    \n+
    176 {
    \n+
    177 typename SizeProvider::SizePrefix prefix;
    \n+
    178 prefix.resize(0);
    \n+
    179 resizeHelper(*vector_, sizeProvider, prefix);
    \n+
    180 }
    \n+
    \n+
    181
    \n+
    182 template<class MultiIndex>
    \n+
    \n+
    183 const Entry<MultiIndex>& operator[](const MultiIndex& index) const
    \n+
    184 {
    \n+
    185 static_assert(not std::is_same_v<Imp::DeducedCoefficientTag,Entry<MultiIndex>>, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n+
    186 return hybridMultiIndexAccess<const Entry<MultiIndex>&>(*vector_, index);
    \n+
    187 }
    \n+
    \n+
    188
    \n+
    189 template<class MultiIndex>
    \n+
    \n+
    190 Entry<MultiIndex>& operator[](const MultiIndex& index)
    \n+
    191 {
    \n+
    192 static_assert(not std::is_same_v<Imp::DeducedCoefficientTag,Entry<MultiIndex>>, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n+
    193 return hybridMultiIndexAccess<Entry<MultiIndex>&>(*vector_, index);
    \n+
    194 }
    \n+
    \n+
    195
    \n+
    196 template<class MultiIndex>
    \n+
    \n+
    197 const Entry<MultiIndex>& operator()(const MultiIndex& index) const
    \n+
    198 {
    \n+
    199 static_assert(not std::is_same_v<Imp::DeducedCoefficientTag,Entry<MultiIndex>>, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n+
    200 return (*this)[index];
    \n+
    201 }
    \n+
    \n+
    202
    \n+
    203 template<class MultiIndex>
    \n+
    \n+
    204 Entry<MultiIndex>& operator()(const MultiIndex& index)
    \n+
    205 {
    \n+
    206 static_assert(not std::is_same_v<Imp::DeducedCoefficientTag,Entry<MultiIndex>>, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n+
    207 return (*this)[index];
    \n+
    208 }
    \n+
    \n+
    209
    \n+
    \n+
    210 const Vector& vector() const
    \n+
    211 {
    \n+
    212 return *vector_;
    \n+
    213 }
    \n+
    \n+
    214
    \n+
    \n+\n+
    216 {
    \n+
    217 return *vector_;
    \n+
    218 }
    \n+
    \n+
    219
    \n+
    220private:
    \n+
    221
    \n+
    222 Vector* vector_;
    \n+
    223};
    \n+
    \n+
    224
    \n+
    225
    \n+
    226
    \n+
    230template<class V>
    \n+\n+
    235
    \n+
    236
    \n+
    237
    \n+
    241template<class MultiIndex, class V,
    \n+
    242 std::enable_if_t< models<Concept::HasIndexAccess, V, MultiIndex>(), int> = 0>
    \n+
    \n+\n+
    244{
    \n+
    245 return v;
    \n+
    246}
    \n+
    \n+
    247
    \n+
    248
    \n+
    249
    \n+
    253template<class MultiIndex, class V,
    \n+
    254 std::enable_if_t< not models<Concept::HasIndexAccess, V, MultiIndex>(), int> = 0>
    \n+\n+
    259
    \n+
    260
    \n+
    261
    \n+
    262} // namespace Dune::Functions
    \n+
    263} // namespace Dune
    \n+
    264
    \n+
    265
    \n+
    266#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n+\n+\n \n-\n-\n-\n-\n-\n-\n-
    auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
    Create a pre-basis factory that can build a PowerPreBasis.
    Definition dynamicpowerbasis.hh:409
    \n-
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n
    Definition polynomial.hh:17
    \n-
    Base class for index merging strategies to simplify detection.
    Definition basistags.hh:48
    \n-
    A pre-basis for dynamic power bases.
    Definition dynamicpowerbasis.hh:48
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition dynamicpowerbasis.hh:60
    \n-
    auto containerDescriptorImpl(Children children) const
    Definition dynamicpowerbasis.hh:372
    \n-
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatInterleaved) const
    Definition dynamicpowerbasis.hh:137
    \n-
    SubPreBasis subPreBasis_
    Definition dynamicpowerbasis.hh:389
    \n-
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::FlatInterleaved) const
    Definition dynamicpowerbasis.hh:262
    \n-
    Definition nodes.hh:198
    \n-
    A pre-basis for power bases.
    Definition powerbasis.hh:52
    \n-
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child factories.
    Definition powerbasis.hh:67
    \n-
    typename Base::size_type size_type
    Type used for indices and size information.
    Definition powerbasis.hh:64
    \n-
    SPB SubPreBasis
    The child pre-basis.
    Definition powerbasis.hh:58
    \n-
    auto containerDescriptor() const
    Return the associated container descriptor.
    Definition powerbasis.hh:117
    \n-
    It indices(const NodeType &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition powerbasis.hh:111
    \n-
    PowerPreBasis(SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects for static size of the power-basis.
    Definition powerbasis.hh:80
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition powerbasis.hh:96
    \n-
    Node makeNode() const
    Create tree node.
    Definition powerbasis.hh:87
    \n-
    static constexpr std::integral_constant< std::size_t, C > children
    Number of children provided as an integral constant.
    Definition powerbasis.hh:70
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition powerbasis.hh:103
    \n+
    V & makeHierarchicVectorForMultiIndex(V &v)
    Definition hierarchicvectorwrapper.hh:243
    \n+
    HierarchicVectorWrapper< V > hierarchicVector(V &v)
    Definition hierarchicvectorwrapper.hh:231
    \n+
    A wrapper providing multiindex access to vector entries.
    Definition hierarchicvectorwrapper.hh:90
    \n+
    Entry< MultiIndex > & operator()(const MultiIndex &index)
    Definition hierarchicvectorwrapper.hh:204
    \n+
    Entry< MultiIndex > & operator[](const MultiIndex &index)
    Definition hierarchicvectorwrapper.hh:190
    \n+
    const Entry< MultiIndex > & operator[](const MultiIndex &index) const
    Definition hierarchicvectorwrapper.hh:183
    \n+
    Vector & vector()
    Definition hierarchicvectorwrapper.hh:215
    \n+
    V Vector
    Definition hierarchicvectorwrapper.hh:165
    \n+
    Coefficient< MultiIndex > Entry
    Definition hierarchicvectorwrapper.hh:168
    \n+
    const Vector & vector() const
    Definition hierarchicvectorwrapper.hh:210
    \n+
    HierarchicVectorWrapper(Vector &vector)
    Definition hierarchicvectorwrapper.hh:170
    \n+
    const Entry< MultiIndex > & operator()(const MultiIndex &index) const
    Definition hierarchicvectorwrapper.hh:197
    \n+
    void resize(const SizeProvider &sizeProvider)
    Definition hierarchicvectorwrapper.hh:175
    \n \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,243 +1,320 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-powerbasis.hh\n+hierarchicvectorwrapper.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n 9\n-10#include \n-11#include \n-12#include \n+10#ifndef DUNE_FUNCTIONS_HIERARCHICVECTORWRAPPER_TEST_NO_DEPRECATION\n+11#warning The header dune/functions/functionspacebases/\n+hierarchicvectorwrapper.hh is deprecated and will be removed after release\n+2.10.\n+12#endif\n 13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\by_\bn_\ba_\bm_\bi_\bc_\bp_\bo_\bw_\be_\br_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n-21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+14#include \n+15#include \n+16#include \n+17\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n 22\n 23\n-24\n-25namespace _\bD_\bu_\bn_\be {\n-26namespace Functions {\n+24namespace _\bD_\bu_\bn_\be {\n+25namespace Functions {\n+26\n 27\n 28\n-29/\n-/ *****************************************************************************\n-30// This is the reusable part of the power bases. It contains\n-31//\n-32// PowerPreBasis\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 view\n-36// and can be used without a global basis.\n-37/\n-/ *****************************************************************************\n-38\n-49template\n-_\b5_\b0class _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n-51 public _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-52{\n-53 using _\bB_\ba_\bs_\be = _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bI_\bM_\bS_\b,_\bS_\bP_\bB_\b>;\n+29namespace Imp {\n+30\n+31 // Construct default coefficient type from vector and multiindex type\n+32 // This requires that MultiIndex has a static size. Otherwise the\n+33 // vector type itself is returned.\n+34 template\n+35 struct CoefficientType\n+36 {\n+37 template\n+38 struct DefaultCoefficientTypeHelper\n+39 {\n+40 using E0 = decltype(std::declval()[Dune::Indices::_0]);\n+41 using type = typename DefaultCoefficientTypeHelper::type;\n+42 };\n+43\n+44 template\n+45 struct DefaultCoefficientTypeHelper\n+46 {\n+47 using type = E;\n+48 };\n+49\n+50 using type = typename DefaultCoefficientTypeHelper::value>::type;\n+51 };\n+52\n+53\n 54\n-55public:\n-56\n-_\b5_\b8 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = SPB;\n+55 // This tag class is used as Coefficient template parameter\n+56 // for HierarchicVectorWrapper if the coefficient type should\n+57 // be deduced.\n+58 struct DeducedCoefficientTag {};\n 59\n-_\b6_\b1 using _\bN_\bo_\bd_\be = _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\bo_\bd_\be_\b,_\b _\bC_\b>;\n+60} // namespace Imp\n+61\n 62\n-_\b6_\b4 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = typename _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-65\n-_\b6_\b7 using _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n-68\n-_\b7_\b0 inline static constexpr std::integral_constant _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn = {};\n-71\n-77 template = 0,\n-79 _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be<_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, SFArgs...> = 0>\n-_\b8_\b0 explicit _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(SFArgs&&... sfArgs) :\n-81 _\bB_\ba_\bs_\be(std::size_t(C), std::forward(sfArgs)...)\n-82 {}\n-83\n-_\b8_\b7 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-88 {\n-89 _\bN_\bo_\bd_\be node{};\n-90 for (std::size_t i=0; i<_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn(); ++i)\n-91 node.setChild(i, _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.makeNode());\n-92 return node;\n-93 }\n-94\n-_\b9_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-97 {\n-98 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n-99 }\n-100\n-102 template\n-_\b1_\b0_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+63\n+86template\n+_\b8_\b7class\n+88[[deprecated(\"HierarchicVectorWrapper is deprecated and will be removed after\n+release 2.10.\")]]\n+89_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br\n+90{\n+91 template\n+92 using Coefficient = std::conditional_t< std::is_same_v and HasStaticSize_v,\n+93 typename Imp::CoefficientType::type,\n+94 CO\n+95 >;\n+96\n+97\n+98 using size_type = std::size_t;\n+99\n+100 template(), int> = 0,\n+102 std::enable_if_t< not models(), int> = 0>\n+103 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n 104 {\n-105 return _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(prefix, _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n-106 }\n-107\n-109 template = 0>\n-_\b1_\b1_\b1 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const NodeType& node, It it) const\n-112 {\n-113 return _\bB_\ba_\bs_\be_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(node, it, _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n-114 }\n-115\n-_\b1_\b1_\b7 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n-118 {\n-119 return _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn);\n-120 }\n-121};\n-122\n-123\n-124\n-125namespace BasisFactory {\n-126\n-139template\n-_\b1_\b4_\b0auto _\bp_\bo_\bw_\be_\br(ChildPreBasisFactory&& childPreBasisFactory, const\n-_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by&)\n-141{\n-142 return [childPreBasisFactory](const auto& gridView) {\n-143 auto childPreBasis = childPreBasisFactory(gridView);\n-144 return _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by_\b,_\b _\bd_\be_\bc_\bl_\bt_\by_\bp_\be_\b(_\bc_\bh_\bi_\bl_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b)_\b,_\b _\bk_\b>\n-(std::move(childPreBasis));\n-145 };\n-146}\n-147\n-158template\n-_\b1_\b5_\b9auto _\bp_\bo_\bw_\be_\br(ChildPreBasisFactory&& childPreBasisFactory)\n-160{\n-161 return [childPreBasisFactory](const auto& gridView) {\n-162 auto childPreBasis = childPreBasisFactory(gridView);\n-163 return _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd_\b,_\b _\bd_\be_\bc_\bl_\bt_\by_\bp_\be_\b(_\bc_\bh_\bi_\bl_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b)_\b,_\b _\bk_\b>(std::\n-move(childPreBasis));\n-164 };\n-165}\n+105 auto size = sizeProvider.size(prefix);\n+106 if (size != 0)\n+107 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n+\"] to size(\" << prefix << \")=\" << size);\n+108 }\n+109\n+110 struct StaticResizeHelper\n+111 {\n+112 template\n+113 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+114 {\n+115 prefix.back() = i;\n+116 resizeHelper(c[i], sizeProvider, prefix);\n+117 }\n+118 };\n+119\n+120 template(), int> = 0,\n+122 std::enable_if_t< models(), int> = 0>\n+123 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+124 {\n+125 auto size = sizeProvider.size(prefix);\n+126 if (size == 0)\n+127 return;\n+128\n+129 if (c.size() != size)\n+130 DUNE_THROW(RangeError, \"Can't resize statically sized vector entry v[\" <<\n+prefix << \"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n+131\n+132 using namespace Dune::Hybrid;\n+133 prefix.push_back(0);\n+134 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n+135 StaticResizeHelper::apply(i, c, sizeProvider, prefix);\n+136 });\n+137 }\n+138\n+139 template(), int> = 0>\n+141 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+142 {\n+143 auto size = sizeProvider.size(prefix);\n+144 if (size==0)\n+145 {\n+146 if (c.size()==0)\n+147 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+148 else\n+149 return;\n+150 }\n+151\n+152 c.resize(size);\n+153 prefix.push_back(0);\n+154 for(std::size_t i=0; i\n+_\b1_\b6_\b8 using _\bE_\bn_\bt_\br_\by = Coefficient;\n+169\n+_\b1_\b7_\b0 _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br(_\bV_\be_\bc_\bt_\bo_\br& vector) :\n+171 vector_(&vector)\n+172 {}\n 173\n-174}\n-175\n-176\n-177} // end namespace Functions\n-178} // end namespace Dune\n-179\n-180\n-181#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+174 template\n+_\b1_\b7_\b5 void _\br_\be_\bs_\bi_\bz_\be(const SizeProvider& sizeProvider)\n+176 {\n+177 typename SizeProvider::SizePrefix prefix;\n+178 prefix.resize(0);\n+179 resizeHelper(*vector_, sizeProvider, prefix);\n+180 }\n+181\n+182 template\n+_\b1_\b8_\b3 const _\bE_\bn_\bt_\br_\by_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](const MultiIndex& index) const\n+184 {\n+185 static_assert(not std::is_same_v>, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+186 return hybridMultiIndexAccess&>(*vector_, index);\n+187 }\n+188\n+189 template\n+_\b1_\b9_\b0 _\bE_\bn_\bt_\br_\by_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](const MultiIndex& index)\n+191 {\n+192 static_assert(not std::is_same_v>, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+193 return hybridMultiIndexAccess&>(*vector_, index);\n+194 }\n+195\n+196 template\n+_\b1_\b9_\b7 const _\bE_\bn_\bt_\br_\by_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const MultiIndex& index) const\n+198 {\n+199 static_assert(not std::is_same_v>, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+200 return (*this)[index];\n+201 }\n+202\n+203 template\n+_\b2_\b0_\b4 _\bE_\bn_\bt_\br_\by_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const MultiIndex& index)\n+205 {\n+206 static_assert(not std::is_same_v>, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+207 return (*this)[index];\n+208 }\n+209\n+_\b2_\b1_\b0 const _\bV_\be_\bc_\bt_\bo_\br& _\bv_\be_\bc_\bt_\bo_\br() const\n+211 {\n+212 return *vector_;\n+213 }\n+214\n+_\b2_\b1_\b5 _\bV_\be_\bc_\bt_\bo_\br& _\bv_\be_\bc_\bt_\bo_\br()\n+216 {\n+217 return *vector_;\n+218 }\n+219\n+220private:\n+221\n+222 Vector* vector_;\n+223};\n+224\n+225\n+226\n+230template\n+_\b2_\b3_\b1_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bV_\b _\b> _\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br(V& v)\n+232{\n+233 return _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bV_\b>(v);\n+234}\n+235\n+236\n+237\n+241template(), int> =\n+0>\n+_\b2_\b4_\b3V& _\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(V& v)\n+244{\n+245 return v;\n+246}\n+247\n+248\n+249\n+253template(),\n+int> = 0>\n+_\b2_\b5_\b5_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bV_\b _\b> _\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(V& v)\n+256{\n+257 return _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bV_\b>(v);\n+258}\n+259\n+260\n+261\n+262} // namespace Dune::Functions\n+263} // namespace Dune\n+264\n+265\n+266#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh\n _\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n-_\bd_\by_\bn_\ba_\bm_\bi_\bc_\bp_\bo_\bw_\be_\br_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br\n-auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const\n-IndexMergingStrategy &)\n-Create a pre-basis factory that can build a PowerPreBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:409\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be\n-std::enable_if_t< std::is_constructible_v< T, Args... >, int >\n-enableIfConstructible\n-Helper to constrain forwarding constructors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:31\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-Base class for index merging strategies to simplify detection.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:48\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-A pre-basis for dynamic power bases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:48\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl\n-auto containerDescriptorImpl(Children children) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:372\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n-size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n-FlatInterleaved) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:137\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n-SubPreBasis subPreBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:389\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n-It indicesImpl(const NodeType &node, It multiIndices, Children children,\n-BasisFactory::FlatInterleaved) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:262\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:198\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-A pre-basis for power bases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-IMS IndexMergingStrategy\n-Strategy used to merge the global indices of the child factories.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-typename Base::size_type size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:64\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-SPB SubPreBasis\n-The child pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor() const\n-Return the associated container descriptor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:117\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n-It indices(const NodeType &node, It it) const\n-Maps from subtree index set [0..size-1] to a globally unique multi index in\n-global basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:111\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-PowerPreBasis(SFArgs &&... sfArgs)\n-Constructor for given child pre-basis objects for static size of the power-\n-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:80\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:96\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n-static constexpr std::integral_constant< std::size_t, C > children\n-Number of children provided as an integral constant.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:70\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:103\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bF_\bo_\br_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+V & makeHierarchicVectorForMultiIndex(V &v)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:243\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br\n+HierarchicVectorWrapper< V > hierarchicVector(V &v)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:231\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br\n+A wrapper providing multiindex access to vector entries.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:90\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+Entry< MultiIndex > & operator()(const MultiIndex &index)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:204\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+Entry< MultiIndex > & operator[](const MultiIndex &index)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:190\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const Entry< MultiIndex > & operator[](const MultiIndex &index) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:183\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector & vector()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:215\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n+V Vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bE_\bn_\bt_\br_\by\n+Coefficient< MultiIndex > Entry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:168\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+const Vector & vector() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:210\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br\n+HierarchicVectorWrapper(Vector &vector)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:170\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+const Entry< MultiIndex > & operator()(const MultiIndex &index) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:197\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n+void resize(const SizeProvider &sizeProvider)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicvectorwrapper.hh:175\n _\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: globalvaluedlocalfiniteelement.hh File Reference\n+dune-functions: compositebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -70,36 +70,53 @@\n \n \n
    \n \n-
    globalvaluedlocalfiniteelement.hh File Reference
    \n+
    compositebasis.hh File Reference
    \n
    \n
    \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 <tuple>
    \n+#include <utility>
    \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/containerdescriptors.hh>
    \n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+

    \n+Classes

    class  Dune::Functions::CompositePreBasis< IMS, SPB >
     A pre-basis for composite bases. More...
     
    \n \n \n \n \n \n+\n+\n+\n+\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,40 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-globalvaluedlocalfiniteelement.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+compositebasis.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bI_\bM_\bS_\b,_\b _\bS_\bP_\bB_\b _\b>\n+\u00a0 A pre-basis for composite bases. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: globalvaluedlocalfiniteelement.hh Source File\n+dune-functions: compositebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,327 +74,482 @@\n \n \n
    \n
    \n-
    globalvaluedlocalfiniteelement.hh
    \n+
    compositebasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n
    9
    \n-
    10#include <array>
    \n-
    11#include <numeric>
    \n+
    10#include <tuple>
    \n+
    11#include <utility>
    \n
    12
    \n-
    13#include <dune/common/fmatrix.hh>
    \n-
    14#include <dune/common/fvector.hh>
    \n-
    15#include <dune/common/math.hh>
    \n-
    16#include <dune/common/rangeutilities.hh>
    \n-
    17
    \n-
    18#include <dune/geometry/referenceelements.hh>
    \n+
    13#include <dune/common/hybridutilities.hh>
    \n+
    14#include <dune/common/reservedvector.hh>
    \n+
    15#include <dune/common/typeutilities.hh>
    \n+
    16#include <dune/common/hybridutilities.hh>
    \n+
    17#include <dune/common/tupleutility.hh>
    \n+
    18#include <dune/common/tuplevector.hh>
    \n
    19
    \n-
    20#include <dune/localfunctions/common/localbasis.hh>
    \n-
    21#include <dune/localfunctions/common/localfiniteelementtraits.hh>
    \n-
    22
    \n-
    23namespace Dune::Functions::Impl
    \n-
    24{
    \n-
    25
    \n-
    39 struct ContravariantPiolaTransformator
    \n-
    40 {
    \n-
    45 template<typename Values, typename LocalCoordinate, typename Geometry>
    \n-
    46 static auto apply(Values& values,
    \n-
    47 const LocalCoordinate& xi,
    \n-
    48 const Geometry& geometry)
    \n-
    49 {
    \n-
    50 auto jacobianTransposed = geometry.jacobianTransposed(xi);
    \n-
    51 auto integrationElement = geometry.integrationElement(xi);
    \n-
    52
    \n-
    53 for (auto& value : values)
    \n-
    54 {
    \n-
    55 auto tmp = value;
    \n-
    56 jacobianTransposed.mtv(tmp, value);
    \n-
    57 value /= integrationElement;
    \n-
    58 }
    \n-
    59 }
    \n+\n+\n+\n+\n+\n+\n+\n+\n+
    28
    \n+
    29
    \n+
    30namespace Dune {
    \n+
    31namespace Functions {
    \n+
    32
    \n+
    33// *****************************************************************************
    \n+
    34// This is the reusable part of the composite bases. It contains
    \n+
    35//
    \n+
    36// CompositePreBasis
    \n+
    37//
    \n+
    38// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    39// state. These components do _not_ depend on the global basis and local view
    \n+
    40// and can be used without a global basis.
    \n+
    41// *****************************************************************************
    \n+
    42
    \n+
    43
    \n+
    55template<class IMS, class... SPB>
    \n+
    \n+\n+
    57{
    \n+
    58 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;
    \n+
    59public:
    \n
    60
    \n-
    70 template<typename Gradients, typename LocalCoordinate, typename Geometry>
    \n-
    71 static auto applyJacobian(Gradients& gradients,
    \n-
    72 const LocalCoordinate& xi,
    \n-
    73 const Geometry& geometry)
    \n-
    74 {
    \n-
    75 auto jacobianTransposed = geometry.jacobianTransposed(xi);
    \n-
    76 auto integrationElement = geometry.integrationElement(xi);
    \n-
    77 for (auto& gradient : gradients)
    \n-
    78 {
    \n-
    79 auto tmp = gradient;
    \n-
    80 gradient = 0;
    \n-
    81 for (size_t k=0; k<gradient.M(); k++)
    \n-
    82 for (size_t l=0; l<tmp.N(); l++)
    \n-
    83 // Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix
    \n-
    84 for(auto&& [jacobianTransposed_l_j, j] : sparseRange(jacobianTransposed[l]))
    \n-
    85 gradient[j][k] += jacobianTransposed_l_j * tmp[l][k];
    \n-
    86 gradient /= integrationElement;
    \n-
    87 }
    \n-
    88 }
    \n-
    89
    \n-
    97 template<class Function, class LocalCoordinate, class Element>
    \n-
    98 class LocalValuedFunction
    \n-
    99 {
    \n-
    100 const Function& f_;
    \n-
    101 const Element& element_;
    \n-
    102
    \n-
    103 using LocalValue = LocalCoordinate;
    \n-
    104
    \n-
    105 public:
    \n+
    62 using SubPreBases = std::tuple<SPB...>;
    \n+
    63
    \n+
    65 template<std::size_t i>
    \n+
    66 using SubPreBasis = std::tuple_element_t<i, SubPreBases>;
    \n+
    67
    \n+
    69 using GridView = typename std::tuple_element_t<0, SubPreBases>::GridView;
    \n+
    70
    \n+
    72 using size_type = std::size_t;
    \n+
    73
    \n+\n+
    76
    \n+
    77protected:
    \n+
    78 static const std::size_t children = sizeof...(SPB);
    \n+
    79
    \n+
    80 using ChildIndices = std::make_index_sequence<children>;
    \n+
    81
    \n+
    82public:
    \n+
    83
    \n+
    85 using Node = CompositeBasisNode<typename SPB::Node...>;
    \n+
    86
    \n+
    87 static constexpr size_type maxMultiIndexSize = std::max({SPB::maxMultiIndexSize...}) + isBlocked;
    \n+
    88 static constexpr size_type minMultiIndexSize = std::min({SPB::minMultiIndexSize...}) + isBlocked;
    \n+
    89 static constexpr size_type multiIndexBufferSize = std::max({SPB::multiIndexBufferSize...}) + isBlocked;
    \n+
    90
    \n+
    96 template<class... SFArgs,
    \n+
    97 disableCopyMove<CompositePreBasis, SFArgs...> = 0,
    \n+
    98 enableIfConstructible<std::tuple<SPB...>, SFArgs...> = 0>
    \n+
    \n+
    99 CompositePreBasis(SFArgs&&... sfArgs) :
    \n+
    100 subPreBases_(std::forward<SFArgs>(sfArgs)...)
    \n+
    101 {
    \n+
    102 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){
    \n+
    103 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype(subPreBasis)>>(), "Subprebases passed to CompositePreBasis does not model the PreBasis concept.");
    \n+
    104 });
    \n+
    105 }
    \n+
    \n
    106
    \n-
    107 LocalValuedFunction(const Function& f, const Element& element)
    \n-
    108 : f_(f), element_(element)
    \n-
    109 {}
    \n-
    110
    \n-
    111 auto operator()(const LocalCoordinate& xi) const
    \n-
    112 {
    \n-
    113 auto globalValue = f_(xi);
    \n-
    114
    \n-
    115 // Apply the inverse Piola transform
    \n-
    116 auto jacobianInverseTransposed = element_.geometry().jacobianInverseTransposed(xi);
    \n-
    117 auto integrationElement = element_.geometry().integrationElement(xi);
    \n-
    118
    \n-
    119 auto localValue = LocalValue{};
    \n-
    120 jacobianInverseTransposed.mtv(globalValue, localValue);
    \n-
    121 localValue *= integrationElement;
    \n-
    122
    \n-
    123 return localValue;
    \n-
    124 }
    \n-
    125 };
    \n-
    126 };
    \n-
    127
    \n-
    141 struct CovariantPiolaTransformator
    \n-
    142 {
    \n-
    147 template<typename Values, typename LocalCoordinate, typename Geometry>
    \n-
    148 static auto apply(Values& values,
    \n-
    149 const LocalCoordinate& xi,
    \n-
    150 const Geometry& geometry)
    \n-
    151 {
    \n-
    152 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);
    \n-
    153
    \n-
    154 for (auto& value : values)
    \n-
    155 {
    \n-
    156 auto tmp = value;
    \n-
    157 jacobianInverseTransposed.mv(tmp, value);
    \n-
    158 }
    \n-
    159 }
    \n+
    113 template<class GV,
    \n+
    114 std::enable_if_t<std::conjunction_v<
    \n+
    115 std::bool_constant<(children > 1)>, // Avoid ambiguous constructor if there's only one child
    \n+
    116 std::is_same<GV, GridView>,
    \n+
    117 std::is_constructible<SPB, GridView>...
    \n+
    118 >, int> = 0>
    \n+
    \n+
    119 CompositePreBasis(const GV& gv) :
    \n+
    120 subPreBases_(SPB(gv)...)
    \n+
    121 {
    \n+
    122 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){
    \n+
    123 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype(subPreBasis)>>(), "Subprebases passed to CompositePreBasis does not model the PreBasis concept.");
    \n+
    124 });
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    \n+\n+
    129 {
    \n+
    130 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    131 this->subPreBasis(i).initializeIndices();
    \n+
    132 });
    \n+
    133 }
    \n+
    \n+
    134
    \n+
    \n+
    136 const GridView& gridView() const
    \n+
    137 {
    \n+
    138 return std::get<0>(subPreBases_).gridView();
    \n+
    139 }
    \n+
    \n+
    140
    \n+
    \n+
    142 void update(const GridView& gv)
    \n+
    143 {
    \n+
    144 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    145 this->subPreBasis(i).update(gv);
    \n+
    146 });
    \n+
    147 }
    \n+
    \n+
    148
    \n+
    \n+\n+
    153 {
    \n+
    154 auto node = Node{};
    \n+
    155 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    156 node.setChild(this->subPreBasis(i).makeNode(), i);
    \n+
    157 });
    \n+
    158 return node;
    \n+
    159 }
    \n+
    \n
    160
    \n-
    170 template<typename Gradients, typename LocalCoordinate, typename Geometry>
    \n-
    171 static auto applyJacobian(Gradients& gradients,
    \n-
    172 const LocalCoordinate& xi,
    \n-
    173 const Geometry& geometry)
    \n-
    174 {
    \n-
    175 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);
    \n-
    176
    \n-
    177 for (auto& gradient : gradients)
    \n-
    178 {
    \n-
    179 auto tmp = gradient;
    \n-
    180 gradient = 0;
    \n-
    181 for (size_t j=0; j<gradient.N(); j++)
    \n-
    182 for (size_t k=0; k<gradient.M(); k++)
    \n-
    183 // Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix
    \n-
    184 for(auto&& [jacobianInverseTransposed_j_l, l] : sparseRange(jacobianInverseTransposed[j]))
    \n-
    185 gradient[j][k] += jacobianInverseTransposed_j_l * tmp[l][k];
    \n-
    186 }
    \n-
    187 }
    \n-
    188
    \n-
    196 template<class Function, class LocalCoordinate, class Element>
    \n-
    197 class LocalValuedFunction
    \n-
    198 {
    \n-
    199 const Function& f_;
    \n-
    200 const Element& element_;
    \n-
    201
    \n-
    202 public:
    \n-
    203
    \n-
    204 LocalValuedFunction(const Function& f, const Element& element)
    \n-
    205 : f_(f), element_(element)
    \n-
    206 {}
    \n-
    207
    \n-
    208 auto operator()(const LocalCoordinate& xi) const
    \n-
    209 {
    \n-
    210 auto globalValue = f_(xi);
    \n-
    211
    \n-
    212 // Apply the inverse Piola transform
    \n-
    213 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);
    \n-
    214
    \n-
    215 auto localValue = globalValue;
    \n-
    216 jacobianTransposed.mv(globalValue, localValue);
    \n-
    217
    \n-
    218 return localValue;
    \n-
    219 }
    \n-
    220 };
    \n-
    221 };
    \n-
    222
    \n-
    229 template<class Transformator, class LocalValuedLocalBasis, class Element>
    \n-
    230 class GlobalValuedLocalBasis
    \n-
    231 {
    \n-
    232 public:
    \n-
    233 using Traits = typename LocalValuedLocalBasis::Traits;
    \n+
    \n+\n+
    163 {
    \n+
    164 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n+
    165 }
    \n+
    \n+
    166
    \n+
    168 template<class SizePrefix>
    \n+
    \n+
    169 size_type size(const SizePrefix& prefix) const
    \n+
    170 {
    \n+
    171 return size(prefix, IndexMergingStrategy{});
    \n+
    172 }
    \n+
    \n+
    173
    \n+
    174private:
    \n+
    175
    \n+
    176 template<class MultiIndex>
    \n+
    177 static void multiIndexPopFront(MultiIndex& M)
    \n+
    178 {
    \n+
    179 for(std::size_t i=0; i<M.size()-1; ++i)
    \n+
    180 M[i] = M[i+1];
    \n+
    181 M.resize(M.size()-1);
    \n+
    182 }
    \n+
    183
    \n+
    184 template<class SizePrefix>
    \n+
    185 size_type size(SizePrefix prefix, BasisFactory::BlockedLexicographic) const
    \n+
    186 {
    \n+
    187 if (prefix.size() == 0)
    \n+
    188 return children;
    \n+
    189
    \n+
    190 auto front = prefix.front();
    \n+
    191 multiIndexPopFront(prefix);
    \n+
    192 return Hybrid::switchCases(ChildIndices(), front, [&] (auto i) {
    \n+
    193 return this->subPreBasis(i).size(prefix);
    \n+
    194 }, []() {
    \n+
    195 return size_type(0);
    \n+
    196 });
    \n+
    197 }
    \n+
    198
    \n+
    199 template<class SizePrefix>
    \n+
    200 size_type size(SizePrefix prefix, BasisFactory::FlatLexicographic) const
    \n+
    201 {
    \n+
    202 size_type result = 0;
    \n+
    203 if (prefix.size() == 0)
    \n+
    204 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    205 result += this->subPreBasis(i).size();
    \n+
    206 });
    \n+
    207 else {
    \n+
    208 staticFindInRange<0, children>([&](auto i) {
    \n+
    209 auto firstDigitSize = this->subPreBasis(i).size();
    \n+
    210 if (prefix[0] < firstDigitSize)
    \n+
    211 {
    \n+
    212 result = this->subPreBasis(i).size(prefix);
    \n+
    213 return true;
    \n+
    214 }
    \n+
    215 prefix[0] -= firstDigitSize;
    \n+
    216 return false;
    \n+
    217 });
    \n+
    218 }
    \n+
    219 return result;
    \n+
    220 }
    \n+
    221
    \n+
    222public:
    \n+
    223
    \n+
    \n+\n+
    226 {
    \n+
    227 size_type r=0;
    \n+
    228 // Accumulate dimension() for all subprebases
    \n+
    229 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    230 r += this->subPreBasis(i).dimension();
    \n+
    231 });
    \n+
    232 return r;
    \n+
    233 }
    \n+
    \n
    234
    \n-
    237 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const Element& element)
    \n-
    238 {
    \n-
    239 localValuedLocalBasis_ = &localValuedLocalBasis;
    \n-
    240 element_ = &element;
    \n-
    241 }
    \n-
    242
    \n-
    245 auto size() const
    \n-
    246 {
    \n-
    247 return localValuedLocalBasis_->size();
    \n-
    248 }
    \n-
    249
    \n-
    251 void evaluateFunction(const typename Traits::DomainType& x,
    \n-
    252 std::vector<typename Traits::RangeType>& out) const
    \n-
    253 {
    \n-
    254 localValuedLocalBasis_->evaluateFunction(x,out);
    \n-
    255
    \n-
    256 Transformator::apply(out, x, element_->geometry());
    \n-
    257 }
    \n-
    258
    \n-
    264 void evaluateJacobian(const typename Traits::DomainType& x,
    \n-
    265 std::vector<typename Traits::JacobianType>& out) const
    \n-
    266 {
    \n-
    267 localValuedLocalBasis_->evaluateJacobian(x,out);
    \n-
    268
    \n-
    269 Transformator::applyJacobian(out, x, element_->geometry());
    \n-
    270 }
    \n-
    271
    \n-
    278 void partial(const std::array<unsigned int,2>& order,
    \n-
    279 const typename Traits::DomainType& x,
    \n-
    280 std::vector<typename Traits::RangeType>& out) const
    \n-
    281 {
    \n-
    282 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
    \n-
    283 if (totalOrder == 0) {
    \n-
    284 evaluateFunction(x, out);
    \n-
    285 } else if (totalOrder == 1) {
    \n-
    286 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
    \n-
    287 out.resize(size());
    \n+
    \n+\n+
    237 {
    \n+
    238 size_type r=0;
    \n+
    239 // Accumulate maxNodeSize() for all subprebases
    \n+
    240 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    241 r += this->subPreBasis(i).maxNodeSize();
    \n+
    242 });
    \n+
    243 return r;
    \n+
    244 }
    \n+
    \n+
    245
    \n+
    247 template<std::size_t i>
    \n+
    \n+
    248 const SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {}) const
    \n+
    249 {
    \n+
    250 return std::get<i>(subPreBases_);
    \n+
    251 }
    \n+
    \n+
    252
    \n+
    254 template<std::size_t i>
    \n+
    \n+
    255 SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {})
    \n+
    256 {
    \n+
    257 return std::get<i>(subPreBases_);
    \n+
    258 }
    \n+
    \n+
    259
    \n+
    \n+
    261 const auto& subPreBases() const
    \n+
    262 {
    \n+
    263 return subPreBases_;
    \n+
    264 }
    \n+
    \n+
    265
    \n+
    267 template<typename It>
    \n+
    \n+
    268 It indices(const Node& node, It it) const
    \n+
    269 {
    \n+
    270 return indices(node, it, IndexMergingStrategy{});
    \n+
    271 }
    \n+
    \n+
    272
    \n+
    \n+\n+
    275 {
    \n+\n+
    277 if constexpr(std::is_same_v<IMS, BasisFactory::BlockedLexicographic>) {
    \n+
    278 return std::apply([&](auto const&... spb) {
    \n+
    279 return CD::makeDescriptor(Dune::Functions::containerDescriptor(spb)...);
    \n+
    280 }, subPreBases_);
    \n+
    281 }
    \n+
    282 else if constexpr(std::is_same_v<IMS, BasisFactory::FlatLexicographic>) {
    \n+
    283 return CD::Unknown{}; // Not yet implemented
    \n+
    284 }
    \n+
    285 else
    \n+
    286 return CD::Unknown{};
    \n+
    287 }
    \n+
    \n
    288
    \n-
    289 // TODO: The following is wasteful: We compute the full Jacobian and then return
    \n-
    290 // only a part of it. While we need the full Jacobian of the underlying local-valued LFE,
    \n-
    291 // it should be possible to compute only a partial Piola transform for the requested
    \n-
    292 // partial derivatives.
    \n-
    293 std::vector<typename Traits::JacobianType> fullJacobian;
    \n-
    294 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);
    \n-
    295
    \n-
    296 Transformator::applyJacobian(fullJacobian, x, element_->geometry());
    \n-
    297
    \n-
    298 for (std::size_t i=0; i<out.size(); i++)
    \n-
    299 for (std::size_t j=0; j<out[i].size(); j++)
    \n-
    300 out[i][j] = fullJacobian[i][j][direction];
    \n-
    301
    \n-
    302 } else
    \n-
    303 DUNE_THROW(NotImplemented, "Partial derivatives of order 2 or higher");
    \n-
    304 }
    \n-
    305
    \n-
    307 auto order() const
    \n-
    308 {
    \n-
    309 return localValuedLocalBasis_->order();
    \n-
    310 }
    \n+
    289private:
    \n+
    290
    \n+
    291 template<typename It>
    \n+
    292 It indices(const Node& node, It multiIndices, BasisFactory::FlatLexicographic) const
    \n+
    293 {
    \n+
    294 size_type firstComponentOffset = 0;
    \n+
    295 // Loop over all children
    \n+
    296 Hybrid::forEach(ChildIndices(), [&](auto child){
    \n+
    297 size_type subTreeSize = node.child(child).size();
    \n+
    298 // Fill indices for current child into index buffer starting from current
    \n+
    299 // buffer position and shift first index component of any index for current
    \n+
    300 // child by suitable offset to get lexicographic indices.
    \n+
    301 subPreBasis(child).indices(node.child(child), multiIndices);
    \n+
    302 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    303 multiIndices[i][0] += firstComponentOffset;
    \n+
    304 // Increment offset by the size for first index component of the current child
    \n+
    305 firstComponentOffset += subPreBasis(child).size();
    \n+
    306 // Increment buffer iterator by the number of indices processed for current child
    \n+
    307 multiIndices += subTreeSize;
    \n+
    308 });
    \n+
    309 return multiIndices;
    \n+
    310 }
    \n
    311
    \n-
    312 const LocalValuedLocalBasis* localValuedLocalBasis_;
    \n-
    313 const Element* element_;
    \n-
    314 };
    \n-
    315
    \n-
    324 template<class Transformator, class LocalValuedLocalInterpolation, class Element>
    \n-
    325 class GlobalValuedLocalInterpolation
    \n-
    326 {
    \n-
    327 public:
    \n-
    330 void bind(const LocalValuedLocalInterpolation& localValuedLocalInterpolation, const Element& element)
    \n-
    331 {
    \n-
    332 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;
    \n-
    333 element_ = &element;
    \n-
    334 }
    \n-
    335
    \n-
    336 template<typename F, typename C>
    \n-
    337 void interpolate (const F& f, std::vector<C>& out) const
    \n-
    338 {
    \n-
    339 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;
    \n-
    340 typename Transformator::template LocalValuedFunction<F,LocalCoordinate,Element> localValuedFunction(f, *element_);
    \n-
    341 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);
    \n-
    342 }
    \n-
    343
    \n-
    344 private:
    \n-
    345 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;
    \n-
    346 const Element* element_;
    \n-
    347 };
    \n-
    348
    \n-
    349
    \n-
    356 template<class Transformator, class LocalValuedLFE, class Element>
    \n-
    357 class GlobalValuedLocalFiniteElement
    \n-
    358 {
    \n-
    359 using LocalBasis = GlobalValuedLocalBasis<Transformator,
    \n-
    360 typename LocalValuedLFE::Traits::LocalBasisType,
    \n-
    361 Element>;
    \n-
    362 using LocalInterpolation = GlobalValuedLocalInterpolation<Transformator,
    \n-
    363 typename LocalValuedLFE::Traits::LocalInterpolationType,
    \n-
    364 Element>;
    \n-
    365
    \n-
    366 public:
    \n-
    369 using Traits = LocalFiniteElementTraits<LocalBasis,
    \n-
    370 typename LocalValuedLFE::Traits::LocalCoefficientsType,
    \n-
    371 LocalInterpolation>;
    \n-
    372
    \n-
    373 GlobalValuedLocalFiniteElement() {}
    \n-
    374
    \n-
    375 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)
    \n-
    376 {
    \n-
    377 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);
    \n-
    378 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(), element);
    \n-
    379 localValuedLFE_ = &localValuedLFE;
    \n-
    380 }
    \n+
    312 template<class MultiIndex>
    \n+
    313 static void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n+
    314 {
    \n+
    315 M.resize(M.size()+1);
    \n+
    316 for(std::size_t i=M.size()-1; i>0; --i)
    \n+
    317 M[i] = M[i-1];
    \n+
    318 M[0] = M0;
    \n+
    319 }
    \n+
    320
    \n+
    321 template<typename It>
    \n+
    322 It indices(const Node& node, It multiIndices, BasisFactory::BlockedLexicographic) const
    \n+
    323 {
    \n+
    324 // Loop over all children
    \n+
    325 Hybrid::forEach(ChildIndices(), [&](auto child){
    \n+
    326 size_type subTreeSize = node.child(child).size();
    \n+
    327 // Fill indices for current child into index buffer starting from current position
    \n+
    328 subPreBasis(child).indices(node.child(child), multiIndices);
    \n+
    329 // Insert child index before first component of all indices of current child.
    \n+
    330 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    331 this->multiIndexPushFront(multiIndices[i], child);
    \n+
    332 // Increment buffer iterator by the number of indices processed for current child
    \n+
    333 multiIndices += subTreeSize;
    \n+
    334 });
    \n+
    335 return multiIndices;
    \n+
    336 }
    \n+
    337
    \n+
    338 std::tuple<SPB...> subPreBases_;
    \n+
    339};
    \n+
    \n+
    340
    \n+
    341
    \n+
    342
    \n+
    343namespace BasisFactory {
    \n+
    344
    \n+
    345namespace Imp {
    \n+
    346
    \n+
    347template<class IndexMergingStrategy, class... ChildPreBasisFactory>
    \n+
    348class CompositePreBasisFactory
    \n+
    349{
    \n+
    350
    \n+
    351 template<class GridView, class... ChildPreBasis>
    \n+
    352 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&... childPreBasis) const
    \n+
    353 {
    \n+
    354 return CompositePreBasis<IndexMergingStrategy, std::decay_t<ChildPreBasis>...>(std::forward<ChildPreBasis>(childPreBasis)...);
    \n+
    355 }
    \n+
    356
    \n+
    357public:
    \n+
    358
    \n+
    359 CompositePreBasisFactory(const ChildPreBasisFactory&... childPreBasisFactory) :
    \n+
    360 childPreBasisFactories_(childPreBasisFactory...)
    \n+
    361 {}
    \n+
    362
    \n+
    363 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :
    \n+
    364 childPreBasisFactories_(std::move(childPreBasisFactory)...)
    \n+
    365 {}
    \n+
    366
    \n+
    367 template<class GridView>
    \n+
    368 auto operator()(const GridView& gridView) const
    \n+
    369 {
    \n+
    370 // Use std::apply to unpack the tuple childPreBasisFactories_
    \n+
    371 return std::apply([&](const auto&... childPreBasisFactory) {
    \n+
    372 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory(gridView)...);
    \n+
    373 }, childPreBasisFactories_);
    \n+
    374 }
    \n+
    375
    \n+
    376private:
    \n+
    377 std::tuple<ChildPreBasisFactory...> childPreBasisFactories_;
    \n+
    378};
    \n+
    379
    \n+
    380} // end namespace BasisFactory::Imp
    \n
    381
    \n-
    384 const typename Traits::LocalBasisType& localBasis() const
    \n-
    385 {
    \n-
    386 return globalValuedLocalBasis_;
    \n-
    387 }
    \n-
    388
    \n-
    391 const typename Traits::LocalCoefficientsType& localCoefficients() const
    \n-
    392 {
    \n-
    393 return localValuedLFE_->localCoefficients();
    \n-
    394 }
    \n-
    395
    \n-
    398 const typename Traits::LocalInterpolationType& localInterpolation() const
    \n-
    399 {
    \n-
    400 return globalValuedLocalInterpolation_;
    \n-
    401 }
    \n-
    402
    \n-
    404 std::size_t size() const
    \n-
    405 {
    \n-
    406 return localValuedLFE_->size();
    \n-
    407 }
    \n-
    408
    \n-
    411 GeometryType type() const
    \n-
    412 {
    \n-
    413 return localValuedLFE_->type();
    \n-
    414 }
    \n-
    415
    \n-
    416 private:
    \n-
    417
    \n-
    418 typename Traits::LocalBasisType globalValuedLocalBasis_;
    \n-
    419 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;
    \n-
    420 const LocalValuedLFE* localValuedLFE_;
    \n-
    421 };
    \n-
    422
    \n-
    423} // namespace Dune::Functions::Impl
    \n-
    424
    \n-
    425#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n-
    void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)
    Interpolate given function in discrete function space.
    Definition interpolate.hh:203
    \n+
    382
    \n+
    383
    \n+
    394template<
    \n+
    395 typename... Args,
    \n+
    396 std::enable_if_t<Concept::isIndexMergingStrategy<typename LastType<Args...>::type>(),int> = 0>
    \n+
    397auto composite(Args&&... args)
    \n+
    398{
    \n+
    399 // We have to separate the last entry which is the IndexMergingStrategy
    \n+
    400 // and the preceding ones, which are the ChildPreBasisFactories
    \n+
    401
    \n+
    402 using ArgTuple = std::tuple<std::decay_t<Args>...>;
    \n+
    403
    \n+
    404 // Compute number of children and index of the IndexMergingStrategy argument
    \n+
    405 constexpr std::size_t children = sizeof...(Args) - 1;
    \n+
    406
    \n+
    407 // Use last type as IndexMergingStrategy
    \n+
    408 using IndexMergingStrategy = std::tuple_element_t<children, ArgTuple>;
    \n+
    409
    \n+
    410 // Index sequence for all but the last entry for partial tuple unpacking
    \n+
    411 auto childIndices = std::make_index_sequence<children>{};
    \n+
    412
    \n+
    413 // Unpack tuple only for those entries related to children
    \n+
    414 return applyPartial([](auto&&... childPreBasisFactory){
    \n+
    415 return Imp::CompositePreBasisFactory<IndexMergingStrategy, std::decay_t<decltype(childPreBasisFactory)>...>(std::forward<decltype(childPreBasisFactory)>(childPreBasisFactory)...);
    \n+
    416 },
    \n+
    417 std::forward_as_tuple(std::forward<Args>(args)...),
    \n+
    418 childIndices);
    \n+
    419}
    \n+
    420
    \n+
    432template<
    \n+
    433 typename... Args,
    \n+
    434 std::enable_if_t<not Concept::isIndexMergingStrategy<typename LastType<Args...>::type>(),int> = 0>
    \n+
    435auto composite(Args&&... args)
    \n+
    436{
    \n+
    437 return Imp::CompositePreBasisFactory<BasisFactory::BlockedLexicographic, std::decay_t<Args>...>(std::forward<Args>(args)...);
    \n+
    438}
    \n+
    439
    \n+
    440} // end namespace BasisFactory
    \n+
    441
    \n+
    442// Backward compatibility
    \n+
    443namespace [[deprecated("Will be removed after Dune 2.10")]] BasisBuilder {
    \n+
    444
    \n+
    445 using namespace BasisFactory;
    \n+
    446
    \n+
    447}
    \n+
    448
    \n+
    449
    \n+
    450
    \n+
    451} // end namespace Functions
    \n+
    452} // end namespace Dune
    \n+
    453
    \n+
    454
    \n+
    455#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n+\n+\n+\n+\n+\n+\n+\n+
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n+
    Definition polynomial.hh:17
    \n+
    auto containerDescriptor(const PreBasis &preBasis)
    Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
    Definition containerdescriptors.hh:73
    \n+
    static constexpr bool isIndexMergingStrategy()
    Definition basistags.hh:27
    \n+
    Definition containerdescriptors.hh:47
    \n+
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:84
    \n+
    A pre-basis for composite bases.
    Definition compositebasis.hh:57
    \n+
    SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})
    Mutable access to the stored prebasis of the factor in the power space.
    Definition compositebasis.hh:255
    \n+
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child pre-bases.
    Definition compositebasis.hh:75
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition compositebasis.hh:236
    \n+
    const SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={}) const
    Const access to the stored prebasis of the factor in the power space.
    Definition compositebasis.hh:248
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition compositebasis.hh:72
    \n+
    CompositeBasisNode< typename SPB::Node... > Node
    Template mapping root tree path to type of created tree node.
    Definition compositebasis.hh:85
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition compositebasis.hh:169
    \n+
    CompositePreBasis(SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects.
    Definition compositebasis.hh:99
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition compositebasis.hh:225
    \n+
    CompositePreBasis(const GV &gv)
    Constructor for given GridView.
    Definition compositebasis.hh:119
    \n+
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition compositebasis.hh:268
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition compositebasis.hh:162
    \n+
    typename std::tuple_element_t< 0, SubPreBases >::GridView GridView
    The grid view that the FE basis is defined on.
    Definition compositebasis.hh:69
    \n+
    static const std::size_t children
    Definition compositebasis.hh:78
    \n+
    std::tuple< SPB... > SubPreBases
    Tuple of child pre-bases.
    Definition compositebasis.hh:62
    \n+
    Node makeNode() const
    Create tree node.
    Definition compositebasis.hh:152
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition compositebasis.hh:128
    \n+
    std::tuple_element_t< i, SubPreBases > SubPreBasis
    Export individual child pre-bases by index.
    Definition compositebasis.hh:66
    \n+
    std::make_index_sequence< children > ChildIndices
    Definition compositebasis.hh:80
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition compositebasis.hh:142
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition compositebasis.hh:89
    \n+
    const auto & subPreBases() const
    Const access to the stored prebases tuple.
    Definition compositebasis.hh:261
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition compositebasis.hh:136
    \n+
    static constexpr size_type minMultiIndexSize
    Definition compositebasis.hh:88
    \n+
    auto containerDescriptor() const
    Return the associated container descriptor.
    Definition compositebasis.hh:274
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition compositebasis.hh:87
    \n+\n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,341 +1,566 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-globalvaluedlocalfiniteelement.hh\n+compositebasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n 9\n-10#include \n-11#include \n+10#include \n+11#include \n 12\n-13#include \n-14#include \n-15#include \n-16#include \n-17\n-18#include \n+13#include \n+14#include \n+15#include \n+16#include \n+17#include \n+18#include \n 19\n-20#include \n-21#include \n-22\n-23namespace Dune::Functions::Impl\n-24{\n-25\n-39 struct ContravariantPiolaTransformator\n-40 {\n-45 template\n-46 static auto apply(Values& values,\n-47 const LocalCoordinate& xi,\n-48 const Geometry& geometry)\n-49 {\n-50 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n-51 auto integrationElement = geometry.integrationElement(xi);\n-52\n-53 for (auto& value : values)\n-54 {\n-55 auto tmp = value;\n-56 jacobianTransposed.mtv(tmp, value);\n-57 value /= integrationElement;\n-58 }\n-59 }\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+22#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+24#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+26#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n+27#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+28\n+29\n+30namespace _\bD_\bu_\bn_\be {\n+31namespace Functions {\n+32\n+33/\n+/ *****************************************************************************\n+34// This is the reusable part of the composite bases. It contains\n+35//\n+36// CompositePreBasis\n+37//\n+38// The pre-basis allows to create the others and is the owner of possible\n+shared\n+39// state. These components do _not_ depend on the global basis and local view\n+40// and can be used without a global basis.\n+41/\n+/ *****************************************************************************\n+42\n+43\n+55template\n+_\b5_\b6class _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+57{\n+58 static const bool isBlocked = std::is_same_v or std::is_same_v;\n+59public:\n 60\n-70 template\n-71 static auto applyJacobian(Gradients& gradients,\n-72 const LocalCoordinate& xi,\n-73 const Geometry& geometry)\n-74 {\n-75 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n-76 auto integrationElement = geometry.integrationElement(xi);\n-77 for (auto& gradient : gradients)\n-78 {\n-79 auto tmp = gradient;\n-80 gradient = 0;\n-81 for (size_t k=0; k\n-98 class LocalValuedFunction\n-99 {\n-100 const Function& f_;\n-101 const Element& element_;\n-102\n-103 using LocalValue = LocalCoordinate;\n-104\n-105 public:\n+_\b6_\b2 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs = std::tuple;\n+63\n+65 template\n+_\b6_\b6 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = std::tuple_element_t;\n+67\n+_\b6_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename std::tuple_element_t<0, SubPreBases>::GridView;\n+70\n+_\b7_\b2 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+73\n+_\b7_\b5 using _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n+76\n+77protected:\n+_\b7_\b8 static const std::size_t _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn = sizeof...(SPB);\n+79\n+_\b8_\b0 using _\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs = std::make_index_sequence;\n+81\n+82public:\n+83\n+_\b8_\b5 using _\bN_\bo_\bd_\be = _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be;\n+86\n+_\b8_\b7 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = std::max({SPB::\n+maxMultiIndexSize...}) + isBlocked;\n+_\b8_\b8 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = std::min({SPB::\n+minMultiIndexSize...}) + isBlocked;\n+_\b8_\b9 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be = std::max({SPB::\n+multiIndexBufferSize...}) + isBlocked;\n+90\n+96 template = 0,\n+98 _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be, SFArgs...> = 0>\n+_\b9_\b9 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(SFArgs&&... sfArgs) :\n+100 subPreBases_(std::forward(sfArgs)...)\n+101 {\n+102 Hybrid::forEach(subPreBases_, [&](const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs){\n+103 static_assert(models, std::decay_t>(), \"Subprebases passed to CompositePreBasis does not model the\n+PreBasis concept.\");\n+104 });\n+105 }\n 106\n-107 LocalValuedFunction(const Function& f, const Element& element)\n-108 : f_(f), element_(element)\n-109 {}\n-110\n-111 auto operator()(const LocalCoordinate& xi) const\n-112 {\n-113 auto globalValue = f_(xi);\n-114\n-115 // Apply the inverse Piola transform\n-116 auto jacobianInverseTransposed = element_.geometry\n-().jacobianInverseTransposed(xi);\n-117 auto integrationElement = element_.geometry().integrationElement(xi);\n-118\n-119 auto localValue = LocalValue{};\n-120 jacobianInverseTransposed.mtv(globalValue, localValue);\n-121 localValue *= integrationElement;\n-122\n-123 return localValue;\n-124 }\n-125 };\n-126 };\n-127\n-141 struct CovariantPiolaTransformator\n-142 {\n-147 template\n-148 static auto apply(Values& values,\n-149 const LocalCoordinate& xi,\n-150 const Geometry& geometry)\n-151 {\n-152 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n-153\n-154 for (auto& value : values)\n-155 {\n-156 auto tmp = value;\n-157 jacobianInverseTransposed.mv(tmp, value);\n-158 }\n+113 template 1)>, // Avoid ambiguous constructor if\n+there's only one child\n+116 std::is_same,\n+117 std::is_constructible...\n+118 >, int> = 0>\n+_\b1_\b1_\b9 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const GV& gv) :\n+120 subPreBases_(SPB(gv)...)\n+121 {\n+122 Hybrid::forEach(subPreBases_, [&](const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs){\n+123 static_assert(models, std::decay_t>(), \"Subprebases passed to CompositePreBasis does not model the\n+PreBasis concept.\");\n+124 });\n+125 }\n+126\n+_\b1_\b2_\b8 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+129 {\n+130 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+131 this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).initializeIndices();\n+132 });\n+133 }\n+134\n+_\b1_\b3_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+137 {\n+138 return std::get<0>(subPreBases_).gridView();\n+139 }\n+140\n+_\b1_\b4_\b2 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+143 {\n+144 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+145 this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).update(gv);\n+146 });\n+147 }\n+148\n+_\b1_\b5_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+153 {\n+154 auto node = _\bN_\bo_\bd_\be{};\n+155 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+156 node.setChild(this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i)._\bm_\ba_\bk_\be_\bN_\bo_\bd_\be(), i);\n+157 });\n+158 return node;\n 159 }\n 160\n-170 template\n-171 static auto applyJacobian(Gradients& gradients,\n-172 const LocalCoordinate& xi,\n-173 const Geometry& geometry)\n-174 {\n-175 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n-176\n-177 for (auto& gradient : gradients)\n+_\b1_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+163 {\n+164 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n+165 }\n+166\n+168 template\n+_\b1_\b6_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+170 {\n+171 return _\bs_\bi_\bz_\be(prefix, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n+172 }\n+173\n+174private:\n+175\n+176 template\n+177 static void multiIndexPopFront(MultiIndex& M)\n 178 {\n-179 auto tmp = gradient;\n-180 gradient = 0;\n-181 for (size_t j=0; j\n-197 class LocalValuedFunction\n-198 {\n-199 const Function& f_;\n-200 const Element& element_;\n-201\n-202 public:\n-203\n-204 LocalValuedFunction(const Function& f, const Element& element)\n-205 : f_(f), element_(element)\n-206 {}\n-207\n-208 auto operator()(const LocalCoordinate& xi) const\n-209 {\n-210 auto globalValue = f_(xi);\n-211\n-212 // Apply the inverse Piola transform\n-213 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);\n-214\n-215 auto localValue = globalValue;\n-216 jacobianTransposed.mv(globalValue, localValue);\n-217\n-218 return localValue;\n-219 }\n-220 };\n-221 };\n-222\n-229 template\n-230 class GlobalValuedLocalBasis\n-231 {\n-232 public:\n-233 using Traits = typename LocalValuedLocalBasis::Traits;\n+179 for(std::size_t i=0; i\n+185 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(SizePrefix prefix, BasisFactory::BlockedLexicographic) const\n+186 {\n+187 if (prefix.size() == 0)\n+188 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n+189\n+190 auto front = prefix.front();\n+191 multiIndexPopFront(prefix);\n+192 return Hybrid::switchCases(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), front, [&] (auto i) {\n+193 return this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size(prefix);\n+194 }, []() {\n+195 return _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be(0);\n+196 });\n+197 }\n+198\n+199 template\n+200 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(SizePrefix prefix, BasisFactory::FlatLexicographic) const\n+201 {\n+202 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n+203 if (prefix.size() == 0)\n+204 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+205 result += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size();\n+206 });\n+207 else {\n+208 staticFindInRange<0, children>([&](auto i) {\n+209 auto firstDigitSize = this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size();\n+210 if (prefix[0] < firstDigitSize)\n+211 {\n+212 result = this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size(prefix);\n+213 return true;\n+214 }\n+215 prefix[0] -= firstDigitSize;\n+216 return false;\n+217 });\n+218 }\n+219 return result;\n+220 }\n+221\n+222public:\n+223\n+_\b2_\b2_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+226 {\n+227 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be r=0;\n+228 // Accumulate dimension() for all subprebases\n+229 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+230 r += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).dimension();\n+231 });\n+232 return r;\n+233 }\n 234\n-237 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const\n-Element& element)\n-238 {\n-239 localValuedLocalBasis_ = &localValuedLocalBasis;\n-240 element_ = &element;\n-241 }\n-242\n-245 auto size() const\n-246 {\n-247 return localValuedLocalBasis_->size();\n-248 }\n-249\n-251 void evaluateFunction(const typename Traits::DomainType& x,\n-252 std::vector& out) const\n-253 {\n-254 localValuedLocalBasis_->evaluateFunction(x,out);\n-255\n-256 Transformator::apply(out, x, element_->geometry());\n-257 }\n-258\n-264 void evaluateJacobian(const typename Traits::DomainType& x,\n-265 std::vector& out) const\n-266 {\n-267 localValuedLocalBasis_->evaluateJacobian(x,out);\n-268\n-269 Transformator::applyJacobian(out, x, element_->geometry());\n-270 }\n-271\n-278 void partial(const std::array& order,\n-279 const typename Traits::DomainType& x,\n-280 std::vector& out) const\n-281 {\n-282 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);\n-283 if (totalOrder == 0) {\n-284 evaluateFunction(x, out);\n-285 } else if (totalOrder == 1) {\n-286 auto const direction = std::distance(order.begin(), std::find(order.begin\n-(), order.end(), 1));\n-287 out.resize(size());\n+_\b2_\b3_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+237 {\n+238 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be r=0;\n+239 // Accumulate maxNodeSize() for all subprebases\n+240 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+241 r += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).maxNodeSize();\n+242 });\n+243 return r;\n+244 }\n+245\n+247 template\n+_\b2_\b4_\b8 const _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bi_\b>& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(Dune::index_constant = {}) const\n+249 {\n+250 return std::get(subPreBases_);\n+251 }\n+252\n+254 template\n+_\b2_\b5_\b5 _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bi_\b>& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(Dune::index_constant = {})\n+256 {\n+257 return std::get(subPreBases_);\n+258 }\n+259\n+_\b2_\b6_\b1 const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs() const\n+262 {\n+263 return subPreBases_;\n+264 }\n+265\n+267 template\n+_\b2_\b6_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+269 {\n+270 return _\bi_\bn_\bd_\bi_\bc_\be_\bs(node, it, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n+271 }\n+272\n+_\b2_\b7_\b4 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n+275 {\n+276 namespace CD = _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs;\n+277 if constexpr(std::is_same_v) {\n+278 return std::apply([&](auto const&... spb) {\n+279 return CD::makeDescriptor(_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(spb)...);\n+280 }, subPreBases_);\n+281 }\n+282 else if constexpr(std::is_same_v) {\n+283 return CD::Unknown{}; // Not yet implemented\n+284 }\n+285 else\n+286 return CD::Unknown{};\n+287 }\n 288\n-289 // TODO: The following is wasteful: We compute the full Jacobian and then\n-return\n-290 // only a part of it. While we need the full Jacobian of the underlying\n-local-valued LFE,\n-291 // it should be possible to compute only a partial Piola transform for the\n-requested\n-292 // partial derivatives.\n-293 std::vector fullJacobian;\n-294 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);\n-295\n-296 Transformator::applyJacobian(fullJacobian, x, element_->geometry());\n-297\n-298 for (std::size_t i=0; iorder();\n+289private:\n+290\n+291 template\n+292 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) const\n+293 {\n+294 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be firstComponentOffset = 0;\n+295 // Loop over all children\n+296 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto child){\n+297 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(child)._\bs_\bi_\bz_\be();\n+298 // Fill indices for current child into index buffer starting from current\n+299 // buffer position and shift first index component of any index for current\n+300 // child by suitable offset to get lexicographic indices.\n+301 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(child).indices(node.child(child), multiIndices);\n+302 for (std::size_t i = 0; i\n-325 class GlobalValuedLocalInterpolation\n-326 {\n-327 public:\n-330 void bind(const LocalValuedLocalInterpolation&\n-localValuedLocalInterpolation, const Element& element)\n-331 {\n-332 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;\n-333 element_ = &element;\n-334 }\n-335\n-336 template\n-337 void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const F& f, std::vector& out) const\n-338 {\n-339 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;\n-340 typename Transformator::template\n-LocalValuedFunction localValuedFunction(f,\n-*element_);\n-341 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);\n-342 }\n-343\n-344 private:\n-345 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;\n-346 const Element* element_;\n-347 };\n-348\n-349\n-356 template\n-357 class GlobalValuedLocalFiniteElement\n-358 {\n-359 using LocalBasis = GlobalValuedLocalBasis;\n-362 using LocalInterpolation = GlobalValuedLocalInterpolation;\n-365\n-366 public:\n-369 using Traits = LocalFiniteElementTraits;\n-372\n-373 GlobalValuedLocalFiniteElement() {}\n-374\n-375 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)\n-376 {\n-377 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);\n-378 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(),\n-element);\n-379 localValuedLFE_ = &localValuedLFE;\n-380 }\n+312 template\n+313 static void multiIndexPushFront(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n+314 {\n+315 M.resize(M.size()+1);\n+316 for(std::size_t i=M.size()-1; i>0; --i)\n+317 M[i] = M[i-1];\n+318 M[0] = M0;\n+319 }\n+320\n+321 template\n+322 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n+BlockedLexicographic) const\n+323 {\n+324 // Loop over all children\n+325 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto child){\n+326 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(child)._\bs_\bi_\bz_\be();\n+327 // Fill indices for current child into index buffer starting from current\n+position\n+328 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(child).indices(node.child(child), multiIndices);\n+329 // Insert child index before first component of all indices of current\n+child.\n+330 for (std::size_t i = 0; imultiIndexPushFront(multiIndices[i], child);\n+332 // Increment buffer iterator by the number of indices processed for current\n+child\n+333 multiIndices += subTreeSize;\n+334 });\n+335 return multiIndices;\n+336 }\n+337\n+338 std::tuple subPreBases_;\n+339};\n+340\n+341\n+342\n+343namespace BasisFactory {\n+344\n+345namespace Imp {\n+346\n+347template\n+348class CompositePreBasisFactory\n+349{\n+350\n+351 template\n+352 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&...\n+childPreBasis) const\n+353 {\n+354 return CompositePreBasis...>(std::forward(childPreBasis)...);\n+355 }\n+356\n+357public:\n+358\n+359 CompositePreBasisFactory(const ChildPreBasisFactory&...\n+childPreBasisFactory) :\n+360 childPreBasisFactories_(childPreBasisFactory...)\n+361 {}\n+362\n+363 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :\n+364 childPreBasisFactories_(std::move(childPreBasisFactory)...)\n+365 {}\n+366\n+367 template\n+368 auto operator()(const GridView& gridView) const\n+369 {\n+370 // Use std::apply to unpack the tuple childPreBasisFactories_\n+371 return std::apply([&](const auto&... childPreBasisFactory) {\n+372 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory\n+(gridView)...);\n+373 }, childPreBasisFactories_);\n+374 }\n+375\n+376private:\n+377 std::tuple childPreBasisFactories_;\n+378};\n+379\n+380} // end namespace BasisFactory::Imp\n 381\n-384 const typename Traits::LocalBasisType& localBasis() const\n-385 {\n-386 return globalValuedLocalBasis_;\n-387 }\n-388\n-391 const typename Traits::LocalCoefficientsType& localCoefficients() const\n-392 {\n-393 return localValuedLFE_->localCoefficients();\n-394 }\n-395\n-398 const typename Traits::LocalInterpolationType& localInterpolation() const\n-399 {\n-400 return globalValuedLocalInterpolation_;\n-401 }\n-402\n-404 std::size_t size() const\n-405 {\n-406 return localValuedLFE_->size();\n-407 }\n-408\n-411 GeometryType type() const\n-412 {\n-413 return localValuedLFE_->type();\n-414 }\n-415\n-416 private:\n-417\n-418 typename Traits::LocalBasisType globalValuedLocalBasis_;\n-419 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;\n-420 const LocalValuedLFE* localValuedLFE_;\n-421 };\n-422\n-423} // namespace Dune::Functions::Impl\n-424\n-425#endif /\n-/ DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn interpolate.hh:203\n+382\n+383\n+394template<\n+395 typename... Args,\n+396 std::enable_if_t<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by::type>(),int> = 0>\n+397auto composite(Args&&... args)\n+398{\n+399 // We have to separate the last entry which is the IndexMergingStrategy\n+400 // and the preceding ones, which are the ChildPreBasisFactories\n+401\n+402 using ArgTuple = std::tuple...>;\n+403\n+404 // Compute number of children and index of the IndexMergingStrategy\n+argument\n+405 constexpr std::size_t children = sizeof...(Args) - 1;\n+406\n+407 // Use last type as IndexMergingStrategy\n+408 using IndexMergingStrategy = std::tuple_element_t;\n+409\n+410 // Index sequence for all but the last entry for partial tuple unpacking\n+411 auto childIndices = std::make_index_sequence{};\n+412\n+413 // Unpack tuple only for those entries related to children\n+414 return applyPartial([](auto&&... childPreBasisFactory){\n+415 return Imp::CompositePreBasisFactory...>(std::forward(childPreBasisFactory)...);\n+416 },\n+417 std::forward_as_tuple(std::forward(args)...),\n+418 childIndices);\n+419}\n+420\n+432template<\n+433 typename... Args,\n+434 std::enable_if_t::type>(),int> = 0>\n+435auto composite(Args&&... args)\n+436{\n+437 return Imp::CompositePreBasisFactory...>(std::forward(args)...);\n+438}\n+439\n+440} // end namespace BasisFactory\n+441\n+442// Backward compatibility\n+443namespace [[deprecated(\"Will be removed after Dune 2.10\")]] BasisBuilder {\n+444\n+445 using namespace BasisFactory;\n+446\n+447}\n+448\n+449\n+450\n+451} // end namespace Functions\n+452} // end namespace Dune\n+453\n+454\n+455#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh\n+_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh\n+_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be\n+std::enable_if_t< std::is_constructible_v< T, Args... >, int >\n+enableIfConstructible\n+Helper to constrain forwarding constructors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:31\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor(const PreBasis &preBasis)\n+Return the container descriptor of the pre-basis, if defined, otherwise\n+ContainerDescriptor::Unknown.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+static constexpr bool isIndexMergingStrategy()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:27\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:47\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+Lexicographic merging of direct children without blocking.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:84\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+A pre-basis for composite bases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})\n+Mutable access to the stored prebasis of the factor in the power space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:255\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+IMS IndexMergingStrategy\n+Strategy used to merge the global indices of the child pre-bases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:236\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:248\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:72\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\bo_\bd_\be\n+CompositeBasisNode< typename SPB::Node... > Node\n+Template mapping root tree path to type of created tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:85\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+CompositePreBasis(SFArgs &&... sfArgs)\n+Constructor for given child pre-basis objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:99\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:225\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+CompositePreBasis(const GV &gv)\n+Constructor for given GridView.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:119\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:268\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:162\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+typename std::tuple_element_t< 0, SubPreBases >::GridView GridView\n+The grid view that the FE basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:69\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n+static const std::size_t children\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs\n+std::tuple< SPB... > SubPreBases\n+Tuple of child pre-bases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void initializeIndices()\n+Initialize the global indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:128\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+std::tuple_element_t< i, SubPreBases > SubPreBasis\n+Export individual child pre-bases by index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:66\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+std::make_index_sequence< children > ChildIndices\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:80\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:142\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+static constexpr size_type multiIndexBufferSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:89\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs\n+const auto & subPreBases() const\n+Const access to the stored prebases tuple.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:261\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:136\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr size_type minMultiIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:88\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor() const\n+Return the associated container descriptor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:274\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr size_type maxMultiIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:87\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:252\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: hierarchicallagrangebasis.hh File Reference\n+dune-functions: dynamicpowerbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,58 +72,55 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    hierarchicallagrangebasis.hh File Reference
    \n+
    dynamicpowerbasis.hh File Reference
    \n
    \n
    \n-
    #include <type_traits>
    \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/functions/functionspacebases/lfeprebasismixin.hh>
    \n-#include <dune/geometry/type.hh>
    \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/containerdescriptors.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/functions/functionspacebases/concepts.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::HierarchicalLagrangePreBasis< GV, 1, R >
     
    class  Dune::Functions::HierarchicalLagrangePreBasis< GV, 2, R >
    class  Dune::Functions::DynamicPowerPreBasis< IMS, SPB >
     A pre-basis for dynamic power bases. More...
     
    \n \n \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n-\n-\n-\n-\n-\n-

    \n-Typedefs

    template<typename GV , int k, typename R = double>
    using Dune::Functions::HierarchicalLagrangeBasis = DefaultGlobalBasis< HierarchicalLagrangePreBasis< GV, k, R > >
     Basis of a scalar Hierarchical Lagrange finite element space.
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<int k, typename R = double>
    auto Dune::Functions::BasisFactory::hierarchicalLagrange ()
     A factory that can create a HierarchicalLagrange pre-basis.
     
    template<class ChildPreBasisFactory , class IndexMergingStrategy >
    auto Dune::Functions::BasisFactory::power (ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
     Create a pre-basis factory that can build a PowerPreBasis.
     
    template<class ChildPreBasisFactory >
    auto Dune::Functions::BasisFactory::power (ChildPreBasisFactory &&childPreBasisFactory, std::size_t k)
     Create a factory builder that can build a PowerPreBasis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,42 +1,43 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-hierarchicallagrangebasis.hh File Reference\n-#include \n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+dynamicpowerbasis.hh File Reference\n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\bf_\be_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b1_\b,_\b _\bR_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b2_\b,_\b _\bR_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bI_\bM_\bS_\b,_\b _\bS_\bP_\bB_\b _\b>\n+\u00a0 A pre-basis for dynamic power bases. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k, R > >\n-\u00a0 Basis of a scalar Hierarchical Lagrange finite element space.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n-\u00a0 A factory that can create a HierarchicalLagrange pre-basis.\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br (ChildPreBasisFactory\n+ &&childPreBasisFactory, std::size_t k, const _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by &)\n+\u00a0 Create a pre-basis factory that can build a _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br (ChildPreBasisFactory\n+ &&childPreBasisFactory, std::size_t k)\n+\u00a0 Create a factory builder that can build a _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: hierarchicallagrangebasis.hh Source File\n+dune-functions: dynamicpowerbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,128 +74,513 @@\n \n \n
    \n
    \n-
    hierarchicallagrangebasis.hh
    \n+
    dynamicpowerbasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n-
    11
    \n-
    12#include <dune/common/exceptions.hh>
    \n+
    10#include <dune/common/reservedvector.hh>
    \n+
    11#include <dune/common/typeutilities.hh>
    \n+
    12#include <dune/common/indices.hh>
    \n
    13
    \n-
    14#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>
    \n-
    15
    \n-\n-\n-\n-
    19
    \n-
    20#include <dune/geometry/type.hh>
    \n+\n+\n+\n+\n+\n+\n+
    20
    \n
    21
    \n-
    22namespace Dune {
    \n-
    23 namespace Functions {
    \n-
    24
    \n-
    25 // *****************************************************************************
    \n-
    26 // Implementation for Hierarchical Lagrange Basis
    \n-
    27 //
    \n-
    28 // - only orders k=1,2 are implemented up to now
    \n-
    29 // - order k=1 is identical to the standard Lagrange basis
    \n-
    30 // - implementation is restricted to simplex grids
    \n-
    31 //
    \n-
    32 // *****************************************************************************
    \n-
    33
    \n-
    43 template<typename GV, int k, typename R = double>
    \n-\n-
    45
    \n-
    46 template<typename GV, typename R>
    \n+
    22
    \n+
    23namespace Dune {
    \n+
    24namespace Functions {
    \n+
    25
    \n+
    26
    \n+
    27// *****************************************************************************
    \n+
    28// This is the reusable part of the dynamic power bases. It contains
    \n+
    29//
    \n+
    30// DynamicPowerPreBasis
    \n+
    31//
    \n+
    32// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    33// state. These components do _not_ depend on the global basis and local view
    \n+
    34// and can be used without a global basis.
    \n+
    35// *****************************************************************************
    \n+
    36
    \n+
    46template<class IMS, class SPB>
    \n
    \n-\n-
    48 : public LFEPreBasisMixin<GV, LagrangeSimplexLocalFiniteElement<typename GV::ctype,R,GV::dimension,1>>
    \n-
    49 {
    \n-\n-
    51 public:
    \n-
    \n-
    52 HierarchicalLagrangePreBasis (const GV& gridView) :
    \n-
    53 Base(gridView, [](GeometryType gt, int) -> std::size_t { return gt.isVertex() ? 1 : 0; })
    \n-
    54 {
    \n-
    55 for (auto gt : gridView.indexSet().types(0)) {
    \n-
    56 if (!gt.isSimplex())
    \n-
    57 DUNE_THROW(Dune::NotImplemented,
    \n-
    58 "Hierarchical Lagrange basis only implemented for simplex grids.");
    \n-
    59 }
    \n-
    60 }
    \n-
    \n-
    61 };
    \n-
    \n-
    62
    \n-
    63 template<typename GV, typename R>
    \n-
    \n-\n-
    65 : public LFEPreBasisMixin<GV, HierarchicalP2LocalFiniteElement<typename GV::ctype,R,GV::dimension>>
    \n-
    66 {
    \n-\n-
    68 public:
    \n-
    \n-
    69 HierarchicalLagrangePreBasis (const GV& gridView) :
    \n-
    70 Base(gridView, [](GeometryType gt, int) -> std::size_t { return (gt.isVertex() || gt.isLine()) ? 1 : 0; })
    \n-
    71 {
    \n-
    72 for (auto gt : gridView.indexSet().types(0)) {
    \n-
    73 if (!gt.isSimplex())
    \n-
    74 DUNE_THROW(Dune::NotImplemented,
    \n-
    75 "Hierarchical Lagrange basis only implemented for simplex grids.");
    \n-
    76 }
    \n-
    77 }
    \n-
    \n-
    78 };
    \n-
    \n-
    79
    \n-
    80
    \n-
    81 namespace BasisFactory {
    \n-
    82
    \n-
    91 template<int k, typename R=double>
    \n-
    \n-\n-
    93 {
    \n-
    94 static_assert(0 < k && k <= 2);
    \n-
    95 return [](const auto& gridView) {
    \n-
    96 return HierarchicalLagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n-
    97 };
    \n-
    98 }
    \n-
    \n-
    99
    \n-
    100 } // end namespace BasisFactory
    \n-
    101
    \n-
    112 template<typename GV, int k, typename R=double>
    \n-\n-
    114
    \n-
    115 } // end namespace Functions
    \n-
    116} // end namespace Dune
    \n-
    117
    \n-
    118#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n-\n-\n-\n-
    auto hierarchicalLagrange()
    A factory that can create a HierarchicalLagrange pre-basis.
    Definition hierarchicallagrangebasis.hh:92
    \n+\n+
    48{
    \n+
    49 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;
    \n+
    50
    \n+
    51public:
    \n+
    52
    \n+
    54 using SubPreBasis = SPB;
    \n+
    55
    \n+
    57 using GridView = typename SPB::GridView;
    \n+
    58
    \n+
    60 using size_type = std::size_t;
    \n+
    61
    \n+\n+
    64
    \n+\n+
    67
    \n+
    68 static constexpr size_type maxMultiIndexSize = SubPreBasis::maxMultiIndexSize + isBlocked;
    \n+
    69 static constexpr size_type minMultiIndexSize = SubPreBasis::minMultiIndexSize + isBlocked;
    \n+
    70 static constexpr size_type multiIndexBufferSize = SubPreBasis::multiIndexBufferSize + isBlocked;
    \n+
    71
    \n+
    77 template<class... SFArgs,
    \n+
    78 disableCopyMove<DynamicPowerPreBasis, SFArgs...> = 0,
    \n+
    79 enableIfConstructible<SubPreBasis, SFArgs...> = 0>
    \n+
    \n+
    80 explicit DynamicPowerPreBasis(std::size_t c, SFArgs&&... sfArgs) :
    \n+
    81 children_(c),
    \n+
    82 subPreBasis_(std::forward<SFArgs>(sfArgs)...)
    \n+
    83 {
    \n+
    84 static_assert(models<Concept::PreBasis<GridView>, SubPreBasis>(), "Subprebasis passed to DynamicPowerPreBasis does not model the PreBasis concept.");
    \n+
    85 }
    \n+
    \n+
    86
    \n+
    \n+\n+
    89 {
    \n+
    90 subPreBasis_.initializeIndices();
    \n+
    91 }
    \n+
    \n+
    92
    \n+
    \n+
    94 const GridView& gridView() const
    \n+
    95 {
    \n+
    96 return subPreBasis_.gridView();
    \n+
    97 }
    \n+
    \n+
    98
    \n+
    \n+
    100 void update(const GridView& gv)
    \n+
    101 {
    \n+
    102 subPreBasis_.update(gv);
    \n+
    103 }
    \n+
    \n+
    104
    \n+
    \n+\n+
    109 {
    \n+
    110 auto node = Node{children_};
    \n+
    111 for (std::size_t i=0; i<children_; ++i)
    \n+
    112 node.setChild(i, subPreBasis_.makeNode());
    \n+
    113 return node;
    \n+
    114 }
    \n+
    \n+
    115
    \n+
    \n+
    116 std::size_t children() const
    \n+
    117 {
    \n+
    118 return children_;
    \n+
    119 }
    \n+
    \n+
    120
    \n+
    \n+\n+
    123 {
    \n+
    124 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    128 template<class SizePrefix>
    \n+
    \n+
    129 size_type size(const SizePrefix& prefix) const
    \n+
    130 {
    \n+
    131 return sizeImpl(prefix, children_, IndexMergingStrategy{});
    \n+
    132 }
    \n+
    \n+
    133
    \n+
    134protected:
    \n+
    135
    \n+
    136 template<class SizePrefix, class Children>
    \n+
    \n+
    137 size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatInterleaved) const
    \n+
    138 {
    \n+
    139 // The root index size is the root index size of a single subnode
    \n+
    140 // multiplied by the number of subnodes, because we enumerate all
    \n+
    141 // child indices in a row.
    \n+
    142 if (prefix.size() == 0)
    \n+
    143 return children*subPreBasis_.size();
    \n+
    144
    \n+
    145 // The FlatInterleaved index merging strategy only changes the first
    \n+
    146 // index digit. Hence, we have to reconstruct the corresponding digit
    \n+
    147 // for the subtree and can then return the corresponding size of the subtree.
    \n+
    148 prefix[0] = prefix[0] / children;
    \n+
    149 return subPreBasis_.size(prefix);
    \n+
    150 }
    \n+
    \n+
    151
    \n+
    152 template<class SizePrefix, class Children>
    \n+
    \n+
    153 size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatLexicographic) 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. Then 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
    \n+
    167 // The FlatLexicographic index merging strategy only changes the first
    \n+
    168 // index digit. Hence, we have to reconstruct the corresponding digit
    \n+
    169 // for the subtree and can then return the corresponding size of the subtree.
    \n+
    170 prefix[0] = prefix[0] % subPreBasis_.size();
    \n+
    171 return subPreBasis_.size(prefix);
    \n+
    172 }
    \n+
    \n+
    173
    \n+
    174 template<class MultiIndex>
    \n+
    \n+
    175 static void multiIndexPopFront(MultiIndex& M)
    \n+
    176 {
    \n+
    177 for(std::size_t i=0; i<M.size()-1; ++i)
    \n+
    178 M[i] = M[i+1];
    \n+
    179 M.resize(M.size()-1);
    \n+
    180 }
    \n+
    \n+
    181
    \n+
    182 template<class SizePrefix, class Children>
    \n+
    \n+\n+
    184 {
    \n+
    185 if (prefix.size() == 0)
    \n+
    186 return children;
    \n+
    187 multiIndexPopFront(prefix);
    \n+
    188 return subPreBasis_.size(prefix);
    \n+
    189 }
    \n+
    \n+
    190
    \n+
    191 template<class SizePrefix, class Children>
    \n+
    \n+\n+
    193 {
    \n+
    194 if (prefix.size() == 0)
    \n+
    195 return subPreBasis_.size();
    \n+
    196
    \n+
    197 // Remember last index, remove it and check if the remaining
    \n+
    198 // prefix refers to a leaf in the subPreBasis index tree.
    \n+
    199 // If yes, then the full prefix must also refer to a
    \n+
    200 // leaf in the merged index tree. If not, then restore the full
    \n+
    201 // prefix and proceed.
    \n+
    202 auto tail = prefix.back();
    \n+
    203 prefix.pop_back();
    \n+
    204 if (subPreBasis_.size(prefix) == 0)
    \n+
    205 return 0;
    \n+
    206 prefix.push_back(tail);
    \n+
    207
    \n+
    208 // Now check if the full prefix refers to a leaf in the subPreBasis
    \n+
    209 // index tree.
    \n+
    210 // If yes, then it has exactly 'children' appended children in the subtree.
    \n+
    211 // If not, then the index tree looks the same in the merged subtree and we
    \n+
    212 // can forward the result.
    \n+
    213 auto subSize = subPreBasis_.size(prefix);
    \n+
    214 if (subSize == 0)
    \n+
    215 return children;
    \n+
    216 return subSize;
    \n+
    217 }
    \n+
    \n+
    218
    \n+
    219public:
    \n+
    220
    \n+
    \n+\n+
    223 {
    \n+
    224 return subPreBasis_.dimension() * children_;
    \n+
    225 }
    \n+
    \n+
    226
    \n+
    \n+\n+
    229 {
    \n+
    230 return subPreBasis_.maxNodeSize() * children_;
    \n+
    231 }
    \n+
    \n+
    232
    \n+
    \n+\n+
    235 {
    \n+
    236 return subPreBasis_;
    \n+
    237 }
    \n+
    \n+
    238
    \n+
    \n+\n+
    241 {
    \n+
    242 return subPreBasis_;
    \n+
    243 }
    \n+
    \n+
    244
    \n+
    246 template<class NodeType, typename It,
    \n+
    247 std::enable_if_t<NodeType::isPower, int> = 0>
    \n+
    \n+
    248 It indices(const NodeType& node, It it) const
    \n+
    249 {
    \n+
    250 return indicesImpl(node, it, children_, IndexMergingStrategy{});
    \n+
    251 }
    \n+
    \n+
    252
    \n+
    \n+\n+
    255 {
    \n+\n+
    257 }
    \n+
    \n+
    258
    \n+
    259protected:
    \n+
    260
    \n+
    261 template<class NodeType, typename It, class Children>
    \n+
    \n+
    262 It indicesImpl(const NodeType& node, It multiIndices, Children children, BasisFactory::FlatInterleaved) const
    \n+
    263 {
    \n+
    264 using namespace Dune::Indices;
    \n+
    265 size_type subTreeSize = node.child(_0).size();
    \n+
    266 // Fill indices for first child at the beginning.
    \n+
    267 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n+
    268 // Multiply first component of all indices for first child by
    \n+
    269 // number of children to stretch the index range for interleaving.
    \n+
    270 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    271 multiIndices[i][0] *= children;
    \n+
    272 for (std::size_t child = 1; child<children; ++child)
    \n+
    273 {
    \n+
    274 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    275 {
    \n+
    276 // Copy indices from first child for all other children
    \n+
    277 // and shift them by child index to interleave indices.
    \n+
    278 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n+
    279 // multiIndices[child*subTreeSize+i][0] = multiIndices[i][0]+child;
    \n+
    280 (*next) = multiIndices[i];
    \n+
    281 (*next)[0] = multiIndices[i][0]+child;
    \n+
    282 ++next;
    \n+
    283 }
    \n+
    284 }
    \n+
    285 return next;
    \n+
    286 }
    \n+
    \n+
    287
    \n+
    288 template<class NodeType, typename It, class Children>
    \n+
    \n+
    289 It indicesImpl(const NodeType& node, It multiIndices, Children children, BasisFactory::FlatLexicographic) const
    \n+
    290 {
    \n+
    291 using namespace Dune::Indices;
    \n+
    292 size_type subTreeSize = node.child(_0).size();
    \n+
    293 size_type firstIndexEntrySize = subPreBasis().size();
    \n+
    294 // Fill indices for first child at the beginning.
    \n+
    295 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n+
    296 for (std::size_t child = 1; child<children_; ++child)
    \n+
    297 {
    \n+
    298 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    299 {
    \n+
    300 // Copy indices from first child for all other children
    \n+
    301 // and shift them by suitable offset to get lexicographic indices.
    \n+
    302 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n+
    303 // multiIndices[child*subTreeSize+i][0] += child*firstIndexEntrySize;
    \n+
    304 (*next) = multiIndices[i];
    \n+
    305 (*next)[0] += child*firstIndexEntrySize;
    \n+
    306 ++next;
    \n+
    307 }
    \n+
    308 }
    \n+
    309 return next;
    \n+
    310 }
    \n+
    \n+
    311
    \n+
    312 template<class MultiIndex>
    \n+
    \n+
    313 static void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n+
    314 {
    \n+
    315 M.resize(M.size()+1);
    \n+
    316 for(std::size_t i=M.size()-1; i>0; --i)
    \n+
    317 M[i] = M[i-1];
    \n+
    318 M[0] = M0;
    \n+
    319 }
    \n+
    \n+
    320
    \n+
    321 template<class NodeType, typename It, class Children>
    \n+
    \n+
    322 It indicesImpl(const NodeType& node, It multiIndices, Children children, BasisFactory::BlockedLexicographic) const
    \n+
    323 {
    \n+
    324 using namespace Dune::Indices;
    \n+
    325 size_type subTreeSize = node.child(_0).size();
    \n+
    326 // Fill indices for first child at the beginning.
    \n+
    327 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n+
    328 // Insert 0 before first component of all indices for first child.
    \n+
    329 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    330 multiIndexPushFront(multiIndices[i], 0);
    \n+
    331 for (std::size_t child = 1; child<children_; ++child)
    \n+
    332 {
    \n+
    333 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    334 {
    \n+
    335 // Copy indices from first child for all other children and overwrite
    \n+
    336 // zero in first component as inserted above by child index.
    \n+
    337 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n+
    338 // multiIndices[child*subTreeSize+i][0] = child;
    \n+
    339 (*next) = multiIndices[i];
    \n+
    340 (*next)[0] = child;
    \n+
    341 ++next;
    \n+
    342 }
    \n+
    343 }
    \n+
    344 return next;
    \n+
    345 }
    \n+
    \n+
    346
    \n+
    347 template<class NodeType, typename It, class Children>
    \n+
    \n+
    348 It indicesImpl(const NodeType& node, It multiIndices, Children children, BasisFactory::BlockedInterleaved) const
    \n+
    349 {
    \n+
    350 using namespace Dune::Indices;
    \n+
    351 size_type subTreeSize = node.child(_0).size();
    \n+
    352 // Fill indices for first child at the beginning.
    \n+
    353 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n+
    354 // Append 0 after last component of all indices for first child.
    \n+
    355 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    356 multiIndices[i].push_back(0);
    \n+
    357 for (std::size_t child = 1; child<children_; ++child)
    \n+
    358 {
    \n+
    359 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    360 {
    \n+
    361 // Copy indices from first child for all other children and overwrite
    \n+
    362 // zero in last component as appended above by child index.
    \n+
    363 (*next) = multiIndices[i];
    \n+
    364 (*next).back() = child;
    \n+
    365 ++next;
    \n+
    366 }
    \n+
    367 }
    \n+
    368 return next;
    \n+
    369 }
    \n+
    \n+
    370
    \n+
    371 template<class Children>
    \n+
    \n+\n+
    373 {
    \n+\n+
    375 if constexpr(std::is_same_v<IMS, BasisFactory::FlatInterleaved>)
    \n+
    376 return ContainerDescriptors::Unknown{}; // Not yet implemented
    \n+
    377 else if constexpr(std::is_same_v<IMS, BasisFactory::FlatLexicographic>)
    \n+
    378 return ContainerDescriptors::Unknown{}; // Not yet implemented
    \n+
    379 else if constexpr(std::is_same_v<IMS, BasisFactory::BlockedLexicographic>)
    \n+
    380 return ContainerDescriptors::makeUniformDescriptor(children,std::move(subTree));
    \n+
    381 else if constexpr(std::is_same_v<IMS, BasisFactory::BlockedInterleaved>)
    \n+
    382 return ContainerDescriptors::Impl::appendToTree(children,std::move(subTree));
    \n+
    383 else
    \n+\n+
    385 }
    \n+
    \n+
    386
    \n+
    387protected:
    \n+
    388 std::size_t children_;
    \n+\n+
    390};
    \n+
    \n+
    391
    \n+
    392
    \n+
    393
    \n+
    394namespace BasisFactory {
    \n+
    395
    \n+
    408template<class ChildPreBasisFactory, class IndexMergingStrategy>
    \n+
    \n+
    409auto power(ChildPreBasisFactory&& childPreBasisFactory, std::size_t k, const IndexMergingStrategy&)
    \n+
    410{
    \n+
    411 return [childPreBasisFactory,k](const auto& gridView) {
    \n+
    412 auto childPreBasis = childPreBasisFactory(gridView);
    \n+\n+
    414 };
    \n+
    415}
    \n+
    \n+
    416
    \n+
    427template<class ChildPreBasisFactory>
    \n+
    \n+
    428auto power(ChildPreBasisFactory&& childPreBasisFactory, std::size_t k)
    \n+
    429{
    \n+
    430 return [childPreBasisFactory,k](const auto& gridView) {
    \n+
    431 auto childPreBasis = childPreBasisFactory(gridView);
    \n+\n+
    433 };
    \n+
    434}
    \n+
    \n+
    435
    \n+
    436} // end namespace BasisFactory
    \n+
    437
    \n+
    438} // end namespace Functions
    \n+
    439} // end namespace Dune
    \n+
    440
    \n+
    441
    \n+
    442#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH
    \n+\n+\n+\n+\n+\n+
    auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
    Create a pre-basis factory that can build a PowerPreBasis.
    Definition dynamicpowerbasis.hh:409
    \n+
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n
    Definition polynomial.hh:17
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n-
    A pre-basis for a hierarchical Lagrange basis.
    Definition hierarchicallagrangebasis.hh:44
    \n-
    HierarchicalLagrangePreBasis(const GV &gridView)
    Definition hierarchicallagrangebasis.hh:52
    \n-
    HierarchicalLagrangePreBasis(const GV &gridView)
    Definition hierarchicallagrangebasis.hh:69
    \n-
    A pre-basis mixin class parametrized with a local finite-element and a DOF layout.
    Definition lfeprebasismixin.hh:57
    \n+
    auto containerDescriptor(const PreBasis &preBasis)
    Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
    Definition containerdescriptors.hh:73
    \n+
    auto makeUniformDescriptor(std::integral_constant< std::size_t, n >, Child child)
    Generate a uniform descriptor in case the size is a static constant.
    Definition containerdescriptors.hh:159
    \n+
    Base class for index merging strategies to simplify detection.
    Definition basistags.hh:48
    \n+
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:84
    \n+
    Interleaved merging of direct children without blocking.
    Definition basistags.hh:118
    \n+
    Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
    Definition basistags.hh:152
    \n+
    Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...
    Definition basistags.hh:184
    \n+
    Fallback container descriptor if nothing else fits.
    Definition containerdescriptors.hh:50
    \n+
    A pre-basis for dynamic power bases.
    Definition dynamicpowerbasis.hh:48
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition dynamicpowerbasis.hh:60
    \n+
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child factories.
    Definition dynamicpowerbasis.hh:63
    \n+
    DynamicPowerPreBasis(std::size_t c, SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects.
    Definition dynamicpowerbasis.hh:80
    \n+
    static void multiIndexPopFront(MultiIndex &M)
    Definition dynamicpowerbasis.hh:175
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition dynamicpowerbasis.hh:222
    \n+
    auto containerDescriptorImpl(Children children) const
    Definition dynamicpowerbasis.hh:372
    \n+
    It indices(const NodeType &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition dynamicpowerbasis.hh:248
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition dynamicpowerbasis.hh:88
    \n+
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatInterleaved) const
    Definition dynamicpowerbasis.hh:137
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition dynamicpowerbasis.hh:68
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition dynamicpowerbasis.hh:100
    \n+
    auto containerDescriptor() const
    Return the associated container descriptor.
    Definition dynamicpowerbasis.hh:254
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition dynamicpowerbasis.hh:122
    \n+
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::BlockedInterleaved) const
    Definition dynamicpowerbasis.hh:348
    \n+
    SubPreBasis & subPreBasis()
    Mutable access to the stored prebasis of the factor in the power space.
    Definition dynamicpowerbasis.hh:240
    \n+
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::FlatLexicographic) const
    Definition dynamicpowerbasis.hh:153
    \n+
    static void multiIndexPushFront(MultiIndex &M, size_type M0)
    Definition dynamicpowerbasis.hh:313
    \n+
    SubPreBasis subPreBasis_
    Definition dynamicpowerbasis.hh:389
    \n+
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::BlockedLexicographic) const
    Definition dynamicpowerbasis.hh:183
    \n+
    size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::BlockedInterleaved) const
    Definition dynamicpowerbasis.hh:192
    \n+
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::BlockedLexicographic) const
    Definition dynamicpowerbasis.hh:322
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition dynamicpowerbasis.hh:70
    \n+
    SPB SubPreBasis
    The child pre-basis.
    Definition dynamicpowerbasis.hh:54
    \n+
    Node makeNode() const
    Create tree node.
    Definition dynamicpowerbasis.hh:108
    \n+
    const SubPreBasis & subPreBasis() const
    Const access to the stored prebasis of the factor in the power space.
    Definition dynamicpowerbasis.hh:234
    \n+
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::FlatInterleaved) const
    Definition dynamicpowerbasis.hh:262
    \n+
    std::size_t children() const
    Definition dynamicpowerbasis.hh:116
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition dynamicpowerbasis.hh:228
    \n+
    It indicesImpl(const NodeType &node, It multiIndices, Children children, BasisFactory::FlatLexicographic) const
    Definition dynamicpowerbasis.hh:289
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition dynamicpowerbasis.hh:129
    \n+
    typename SPB::GridView GridView
    The grid view that the FE basis is defined on.
    Definition dynamicpowerbasis.hh:57
    \n+
    std::size_t children_
    Definition dynamicpowerbasis.hh:388
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition dynamicpowerbasis.hh:94
    \n+
    static constexpr size_type minMultiIndexSize
    Definition dynamicpowerbasis.hh:69
    \n+\n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,141 +1,605 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-hierarchicallagrangebasis.hh\n+dynamicpowerbasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH\n 9\n-10#include \n-11\n-12#include \n+10#include \n+11#include \n+12#include \n 13\n-14#include \n-15\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\bf_\be_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-19\n-20#include \n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+20\n 21\n-22namespace _\bD_\bu_\bn_\be {\n-23 namespace Functions {\n-24\n-25 /\n+22\n+23namespace _\bD_\bu_\bn_\be {\n+24namespace Functions {\n+25\n+26\n+27/\n / *****************************************************************************\n-26 // Implementation for Hierarchical Lagrange Basis\n-27 //\n-28 // - only orders k=1,2 are implemented up to now\n-29 // - order k=1 is identical to the standard Lagrange basis\n-30 // - implementation is restricted to simplex grids\n-31 //\n-32 /\n+28// This is the reusable part of the dynamic power bases. It contains\n+29//\n+30// DynamicPowerPreBasis\n+31//\n+32// The pre-basis allows to create the others and is the owner of possible\n+shared\n+33// state. These components do _not_ depend on the global basis and local view\n+34// and can be used without a global basis.\n+35/\n / *****************************************************************************\n-33\n-43 template\n-_\b4_\b4 class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs;\n-45\n-46 template\n-_\b4_\b7 class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-48 : public _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn>\n-49 {\n-50 using _\bB_\ba_\bs_\be = _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\bG_\bV_\b,_\b _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bS_\bi_\bm_\bp_\bl_\be_\bx_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be\n-_\bG_\bV_\b:_\b:_\bc_\bt_\by_\bp_\be_\b,_\bR_\b,_\bG_\bV_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b1_\b>>;\n-51 public:\n-_\b5_\b2 _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs (const GV& gridView) :\n-53 _\bB_\ba_\bs_\be(gridView, [](GeometryType gt, int) -> std::size_t { return gt.isVertex\n-() ? 1 : 0; })\n-54 {\n-55 for (auto gt : gridView.indexSet().types(0)) {\n-56 if (!gt.isSimplex())\n-57 DUNE_THROW(Dune::NotImplemented,\n-58 \"Hierarchical Lagrange basis only implemented for simplex grids.\");\n-59 }\n-60 }\n-61 };\n-62\n-63 template\n-_\b6_\b4 class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-65 : public _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn>\n-66 {\n-67 using _\bB_\ba_\bs_\be = _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\bG_\bV_\b,_\b _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bP_\b2_\bL_\bo_\bc_\ba_\bl_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be\n-_\bG_\bV_\b:_\b:_\bc_\bt_\by_\bp_\be_\b,_\bR_\b,_\bG_\bV_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>>;\n-68 public:\n-_\b6_\b9 _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs (const GV& gridView) :\n-70 _\bB_\ba_\bs_\be(gridView, [](GeometryType gt, int) -> std::size_t { return (gt.isVertex\n-() || gt.isLine()) ? 1 : 0; })\n-71 {\n-72 for (auto gt : gridView.indexSet().types(0)) {\n-73 if (!gt.isSimplex())\n-74 DUNE_THROW(Dune::NotImplemented,\n-75 \"Hierarchical Lagrange basis only implemented for simplex grids.\");\n-76 }\n-77 }\n-78 };\n-79\n-80\n-81 namespace BasisFactory {\n-82\n-91 template\n-_\b9_\b2 auto _\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be()\n-93 {\n-94 static_assert(0 < k && k <= 2);\n-95 return [](const auto& gridView) {\n-96 return _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k, R>\n-(gridView);\n-97 };\n-98 }\n-99\n-100 } // end namespace BasisFactory\n-101\n-112 template\n-_\b1_\b1_\b3 using _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b> >;\n-114\n-115 } // end namespace Functions\n-116} // end namespace Dune\n-117\n-118#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+36\n+46template\n+_\b4_\b7class _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+48{\n+49 static const bool isBlocked = std::is_same_v or std::is_same_v;\n+50\n+51public:\n+52\n+_\b5_\b4 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = SPB;\n+55\n+_\b5_\b7 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename SPB::GridView;\n+58\n+_\b6_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+61\n+_\b6_\b3 using _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n+64\n+_\b6_\b6 using _\bN_\bo_\bd_\be = _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\bo_\bd_\be_\b>;\n+67\n+_\b6_\b8 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = SubPreBasis::\n+maxMultiIndexSize + isBlocked;\n+_\b6_\b9 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = SubPreBasis::\n+minMultiIndexSize + isBlocked;\n+_\b7_\b0 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be = SubPreBasis::\n+multiIndexBufferSize + isBlocked;\n+71\n+77 template = 0,\n+79 _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be<_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, SFArgs...> = 0>\n+_\b8_\b0 explicit _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(std::size_t c, SFArgs&&... sfArgs) :\n+81 _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_(c),\n+82 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(std::forward(sfArgs)...)\n+83 {\n+84 static_assert(models, _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(),\n+\"Subprebasis passed to DynamicPowerPreBasis does not model the PreBasis\n+concept.\");\n+85 }\n+86\n+_\b8_\b8 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+89 {\n+90 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n+91 }\n+92\n+_\b9_\b4 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+95 {\n+96 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.gridView();\n+97 }\n+98\n+_\b1_\b0_\b0 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+101 {\n+102 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.update(gv);\n+103 }\n+104\n+_\b1_\b0_\b8 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+109 {\n+110 auto node = _\bN_\bo_\bd_\be{_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_};\n+111 for (std::size_t i=0; i<_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_; ++i)\n+112 node.setChild(i, _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.makeNode());\n+113 return node;\n+114 }\n+115\n+_\b1_\b1_\b6 std::size_t _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn() const\n+117 {\n+118 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n+119 }\n+120\n+_\b1_\b2_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+123 {\n+124 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n+125 }\n+126\n+128 template\n+_\b1_\b2_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+130 {\n+131 return _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(prefix, _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n+132 }\n+133\n+134protected:\n+135\n+136 template\n+_\b1_\b3_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(SizePrefix prefix, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n+138 {\n+139 // The root index size is the root index size of a single subnode\n+140 // multiplied by the number of subnodes, because we enumerate all\n+141 // child indices in a row.\n+142 if (prefix.size() == 0)\n+143 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn*_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size();\n+144\n+145 // The FlatInterleaved index merging strategy only changes the first\n+146 // index digit. Hence, we have to reconstruct the corresponding digit\n+147 // for the subtree and can then return the corresponding size of the\n+subtree.\n+148 prefix[0] = prefix[0] / _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n+149 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n+150 }\n+151\n+152 template\n+_\b1_\b5_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(SizePrefix prefix, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) 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 _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn*_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.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. Then 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\n+167 // The FlatLexicographic index merging strategy only changes the first\n+168 // index digit. Hence, we have to reconstruct the corresponding digit\n+169 // for the subtree and can then return the corresponding size of the\n+subtree.\n+170 prefix[0] = prefix[0] % _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size();\n+171 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n+172 }\n+173\n+174 template\n+_\b1_\b7_\b5 static void _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bo_\bp_\bF_\br_\bo_\bn_\bt(MultiIndex& M)\n+176 {\n+177 for(std::size_t i=0; i\n+_\b1_\b8_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(SizePrefix prefix, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) const\n+184 {\n+185 if (prefix.size() == 0)\n+186 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n+187 _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bo_\bp_\bF_\br_\bo_\bn_\bt(prefix);\n+188 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n+189 }\n+190\n+191 template\n+_\b1_\b9_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl(SizePrefix prefix, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n+193 {\n+194 if (prefix.size() == 0)\n+195 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size();\n+196\n+197 // Remember last index, remove it and check if the remaining\n+198 // prefix refers to a leaf in the subPreBasis index tree.\n+199 // If yes, then the full prefix must also refer to a\n+200 // leaf in the merged index tree. If not, then restore the full\n+201 // prefix and proceed.\n+202 auto tail = prefix.back();\n+203 prefix.pop_back();\n+204 if (_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix) == 0)\n+205 return 0;\n+206 prefix.push_back(tail);\n+207\n+208 // Now check if the full prefix refers to a leaf in the subPreBasis\n+209 // index tree.\n+210 // If yes, then it has exactly 'children' appended children in the subtree.\n+211 // If not, then the index tree looks the same in the merged subtree and we\n+212 // can forward the result.\n+213 auto subSize = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n+214 if (subSize == 0)\n+215 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n+216 return subSize;\n+217 }\n+218\n+219public:\n+220\n+_\b2_\b2_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+223 {\n+224 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.dimension() * _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n+225 }\n+226\n+_\b2_\b2_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+229 {\n+230 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.maxNodeSize() * _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n+231 }\n+232\n+_\b2_\b3_\b4 const _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs() const\n+235 {\n+236 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+237 }\n+238\n+_\b2_\b4_\b0 _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs()\n+241 {\n+242 return _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+243 }\n+244\n+246 template = 0>\n+_\b2_\b4_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const NodeType& node, It it) const\n+249 {\n+250 return _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(node, it, _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n+251 }\n+252\n+_\b2_\b5_\b4 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n+255 {\n+256 return _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_);\n+257 }\n+258\n+259protected:\n+260\n+261 template\n+_\b2_\b6_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(const NodeType& node, It multiIndices, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,\n+_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n+263 {\n+264 using namespace Dune::Indices;\n+265 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n+266 // Fill indices for first child at the beginning.\n+267 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n+268 // Multiply first component of all indices for first child by\n+269 // number of children to stretch the index range for interleaving.\n+270 for (std::size_t i = 0; i\n+_\b2_\b8_\b9 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(const NodeType& node, It multiIndices, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,\n+_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) const\n+290 {\n+291 using namespace Dune::Indices;\n+292 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n+293 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be firstIndexEntrySize = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().size();\n+294 // Fill indices for first child at the beginning.\n+295 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n+296 for (std::size_t child = 1; child<_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_; ++child)\n+297 {\n+298 for (std::size_t i = 0; i\n+_\b3_\b1_\b3 static void _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bu_\bs_\bh_\bF_\br_\bo_\bn_\bt(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n+314 {\n+315 M.resize(M.size()+1);\n+316 for(std::size_t i=M.size()-1; i>0; --i)\n+317 M[i] = M[i-1];\n+318 M[0] = M0;\n+319 }\n+320\n+321 template\n+_\b3_\b2_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(const NodeType& node, It multiIndices, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,\n+_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) const\n+323 {\n+324 using namespace Dune::Indices;\n+325 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n+326 // Fill indices for first child at the beginning.\n+327 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n+328 // Insert 0 before first component of all indices for first child.\n+329 for (std::size_t i = 0; i\n+_\b3_\b4_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl(const NodeType& node, It multiIndices, Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,\n+_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n+349 {\n+350 using namespace Dune::Indices;\n+351 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n+352 // Fill indices for first child at the beginning.\n+353 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n+354 // Append 0 after last component of all indices for first child.\n+355 for (std::size_t i = 0; i\n+_\b3_\b7_\b2 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl(Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn) const\n+373 {\n+374 auto subTree = _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n+375 if constexpr(std::is_same_v)\n+376 return _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn{}; // Not yet implemented\n+377 else if constexpr(std::is_same_v)\n+378 return _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn{}; // Not yet implemented\n+379 else if constexpr(std::is_same_v)\n+380 return _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,std::move\n+(subTree));\n+381 else if constexpr(std::is_same_v)\n+382 return ContainerDescriptors::Impl::appendToTree(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn,std::move\n+(subTree));\n+383 else\n+384 return _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn{};\n+385 }\n+386\n+387protected:\n+_\b3_\b8_\b8 std::size_t _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n+_\b3_\b8_\b9 _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+390};\n+391\n+392\n+393\n+394namespace BasisFactory {\n+395\n+408template\n+_\b4_\b0_\b9auto _\bp_\bo_\bw_\be_\br(ChildPreBasisFactory&& childPreBasisFactory, std::size_t k, const\n+_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by&)\n+410{\n+411 return [childPreBasisFactory,k](const auto& gridView) {\n+412 auto childPreBasis = childPreBasisFactory(gridView);\n+413 return _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by_\b,_\b _\bd_\be_\bc_\bl_\bt_\by_\bp_\be_\b(_\bc_\bh_\bi_\bl_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b)_\b>\n+(k,std::move(childPreBasis));\n+414 };\n+415}\n+416\n+427template\n+_\b4_\b2_\b8auto _\bp_\bo_\bw_\be_\br(ChildPreBasisFactory&& childPreBasisFactory, std::size_t k)\n+429{\n+430 return [childPreBasisFactory,k](const auto& gridView) {\n+431 auto childPreBasis = childPreBasisFactory(gridView);\n+432 return _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd_\b,_\b _\bd_\be_\bc_\bl_\bt_\by_\bp_\be_\b(_\bc_\bh_\bi_\bl_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b)_\b>\n+(k,std::move(childPreBasis));\n+433 };\n+434}\n+435\n+436} // end namespace BasisFactory\n+437\n+438} // end namespace Functions\n+439} // end namespace Dune\n+440\n+441\n+442#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH\n+_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n _\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bl_\bf_\be_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be\n-auto hierarchicalLagrange()\n-A factory that can create a HierarchicalLagrange pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:92\n+_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh\n+_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br\n+auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const\n+IndexMergingStrategy &)\n+Create a pre-basis factory that can build a PowerPreBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:409\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be\n+std::enable_if_t< std::is_constructible_v< T, Args... >, int >\n+enableIfConstructible\n+Helper to constrain forwarding constructors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:31\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-Global basis for given pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-A pre-basis for a hierarchical Lagrange basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:44\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b1_\b,_\b _\bR_\b _\b>_\b:_\b:\n-_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-HierarchicalLagrangePreBasis(const GV &gridView)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b2_\b,_\b _\bR_\b _\b>_\b:_\b:\n-_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-HierarchicalLagrangePreBasis(const GV &gridView)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:69\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-A pre-basis mixin class parametrized with a local finite-element and a DOF\n-layout.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor(const PreBasis &preBasis)\n+Return the container descriptor of the pre-basis, if defined, otherwise\n+ContainerDescriptor::Unknown.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto makeUniformDescriptor(std::integral_constant< std::size_t, n >, Child\n+child)\n+Generate a uniform descriptor in case the size is a static constant.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:159\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+Base class for index merging strategies to simplify detection.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+Lexicographic merging of direct children without blocking.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:84\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+Interleaved merging of direct children without blocking.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:118\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+Lexicographic merging of direct children with blocking (i.e. creating one block\n+per direct child).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+Interleaved merging of direct children with blocking (i.e. creating blocks at\n+the leaves containing o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:184\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn\n+Fallback container descriptor if nothing else fits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+A pre-basis for dynamic power bases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+IMS IndexMergingStrategy\n+Strategy used to merge the global indices of the child factories.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:63\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+DynamicPowerPreBasis(std::size_t c, SFArgs &&... sfArgs)\n+Constructor for given child pre-basis objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:80\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bo_\bp_\bF_\br_\bo_\bn_\bt\n+static void multiIndexPopFront(MultiIndex &M)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:175\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:222\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl\n+auto containerDescriptorImpl(Children children) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:372\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n+It indices(const NodeType &node, It it) const\n+Maps from subtree index set [0..size-1] to a globally unique multi index in\n+global basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:248\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void initializeIndices()\n+Initialize the global indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:88\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n+size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n+FlatInterleaved) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:137\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr size_type maxMultiIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:100\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor() const\n+Return the associated container descriptor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:254\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n+It indicesImpl(const NodeType &node, It multiIndices, Children children,\n+BasisFactory::BlockedInterleaved) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:348\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+SubPreBasis & subPreBasis()\n+Mutable access to the stored prebasis of the factor in the power space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:240\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n+size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n+FlatLexicographic) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:153\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bu_\bs_\bh_\bF_\br_\bo_\bn_\bt\n+static void multiIndexPushFront(MultiIndex &M, size_type M0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:313\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n+SubPreBasis subPreBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:389\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n+size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n+BlockedLexicographic) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:183\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bm_\bp_\bl\n+size_type sizeImpl(SizePrefix prefix, Children children, BasisFactory::\n+BlockedInterleaved) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:192\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n+It indicesImpl(const NodeType &node, It multiIndices, Children children,\n+BasisFactory::BlockedLexicographic) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:322\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+static constexpr size_type multiIndexBufferSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:70\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+SPB SubPreBasis\n+The child pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:54\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:108\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+const SubPreBasis & subPreBasis() const\n+Const access to the stored prebasis of the factor in the power space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:234\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n+It indicesImpl(const NodeType &node, It multiIndices, Children children,\n+BasisFactory::FlatInterleaved) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:262\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n+std::size_t children() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:116\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:228\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp_\bl\n+It indicesImpl(const NodeType &node, It multiIndices, Children children,\n+BasisFactory::FlatLexicographic) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:289\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:129\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+typename SPB::GridView GridView\n+The grid view that the FE basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_\n+std::size_t children_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:388\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:94\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr size_type minMultiIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:69\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:224\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: brezzidouglasmarinibasis.hh File Reference\n+dune-functions: raviartthomasbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -74,63 +74,67 @@\n \n
    \n \n-
    brezzidouglasmarinibasis.hh File Reference
    \n+
    raviartthomasbasis.hh File Reference
    \n
    \n
    \n
    #include <array>
    \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/brezzidouglasmarini1cube2d.hh>
    \n-#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>
    \n-#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>
    \n-#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>
    \n-#include <dune/localfunctions/brezzidouglasmarini/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/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 <dune/functions/functionspacebases/leafprebasismixin.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n \n-\n+\n \n

    \n Classes

    class  Dune::Functions::BrezziDouglasMariniPreBasis< GV, k >
    class  Dune::Functions::RaviartThomasPreBasis< GV, k >
     
    class  Dune::Functions::BrezziDouglasMariniNode< GV, k >
    class  Dune::Functions::RaviartThomasNode< GV, k >
     
    \n \n \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Typedefs

    template<typename GV , int k>
    using Dune::Functions::BrezziDouglasMariniBasis = DefaultGlobalBasis< BrezziDouglasMariniPreBasis< GV, k > >
     Basis of a scalar k-th-order BDM finite element space on simplex and cube grids.
     
    template<typename GV , int k>
    using Dune::Functions::RaviartThomasBasis = DefaultGlobalBasis< RaviartThomasPreBasis< GV, k > >
     Basis of a k-th-order Raviart Thomas finite element space.
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Functions

    template<std::size_t k>
    auto Dune::Functions::BasisFactory::brezziDouglasMarini ()
     Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.
     
    template<std::size_t k>
    auto Dune::Functions::BasisFactory::raviartThomas ()
     Create a pre-basis factory that can create a Raviart-Thomas pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,55 +2,52 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-brezzidouglasmarinibasis.hh File Reference\n+raviartthomasbasis.hh File Reference\n #include \n #include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k > >\n-\u00a0 Basis of a scalar k-th-order BDM finite element space on simplex and\n- cube grids.\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k > >\n+\u00a0 Basis of a k-th-order Raviart Thomas finite element space.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi ()\n-\u00a0 Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-\n- basis.\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs ()\n+\u00a0 Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: brezzidouglasmarinibasis.hh Source File\n+dune-functions: raviartthomasbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,406 +74,462 @@\n \n \n \n
    \n-
    brezzidouglasmarinibasis.hh
    \n+
    raviartthomasbasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n
    9
    \n
    10#include <array>
    \n
    11#include <dune/common/exceptions.hh>
    \n-
    12#include <dune/geometry/referenceelements.hh>
    \n-
    13
    \n-
    14#include <dune/localfunctions/common/virtualinterface.hh>
    \n-
    15#include <dune/localfunctions/common/virtualwrappers.hh>
    \n-
    16
    \n-
    17#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh>
    \n-
    18#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>
    \n-
    19#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>
    \n-
    20#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>
    \n-
    21#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh>
    \n-
    22
    \n-\n-\n-\n-\n-
    27
    \n-
    28namespace Dune {
    \n-
    29namespace Functions {
    \n-
    30
    \n-
    31namespace Impl {
    \n-
    32
    \n-
    33 template<int dim, typename D, typename R, std::size_t k>
    \n-
    34 struct BDMSimplexLocalInfo
    \n-
    35 {
    \n-
    36 static_assert((AlwaysFalse<D>::value),"The requested type of BDM element is not implemented, sorry!");
    \n-
    37 };
    \n-
    38
    \n-
    39 template<typename D, typename R>
    \n-
    40 struct BDMSimplexLocalInfo<2,D,R,1>
    \n-
    41 {
    \n-
    42 using FiniteElement = BDM1Simplex2DLocalFiniteElement<D,R>;
    \n-
    43 static const std::size_t Variants = 8;
    \n-
    44 };
    \n-
    45
    \n-
    46 template<typename D, typename R>
    \n-
    47 struct BDMSimplexLocalInfo<2,D,R,2>
    \n-
    48 {
    \n-
    49 using FiniteElement = BDM2Simplex2DLocalFiniteElement<D,R>;
    \n-
    50 static const std::size_t Variants = 8;
    \n-
    51 };
    \n-
    52
    \n-
    53 template<int dim, typename D, typename R, std::size_t k>
    \n-
    54 struct BDMCubeLocalInfo
    \n-
    55 {
    \n-
    56 static_assert((AlwaysFalse<D>::value),"The requested type of BDM element is not implemented, sorry!");
    \n-
    57 };
    \n-
    58
    \n-
    59 template<typename D, typename R>
    \n-
    60 struct BDMCubeLocalInfo<2,D,R,1>
    \n-
    61 {
    \n-
    62 using FiniteElement = BDM1Cube2DLocalFiniteElement<D,R>;
    \n-
    63 static const std::size_t Variants = 16;
    \n-
    64 };
    \n-
    65
    \n-
    66 template<typename D, typename R>
    \n-
    67 struct BDMCubeLocalInfo<2,D,R,2>
    \n-
    68 {
    \n-
    69 using FiniteElement = BDM2Cube2DLocalFiniteElement<D,R>;
    \n-
    70 static const std::size_t Variants = 16;
    \n-
    71 };
    \n-
    72
    \n-
    73 template<typename D, typename R>
    \n-
    74 struct BDMCubeLocalInfo<3,D,R,1>
    \n-
    75 {
    \n-
    76 using FiniteElement = BDM1Cube3DLocalFiniteElement<D,R>;
    \n-
    77 static const std::size_t Variants = 64;
    \n-
    78 };
    \n-
    79
    \n-
    80 template<typename GV, int dim, typename R, std::size_t k>
    \n-
    81 class BDMLocalFiniteElementMap
    \n-
    82 {
    \n-
    83 using D = typename GV::ctype;
    \n-
    84 using CubeFiniteElement = typename BDMCubeLocalInfo<dim, D, R, k>::FiniteElement;
    \n-
    85 using SimplexFiniteElement = typename BDMSimplexLocalInfo<dim, D, R, k>::FiniteElement;
    \n+
    12
    \n+
    13#include <dune/grid/common/capabilities.hh>
    \n+
    14#include <dune/grid/common/mcmgmapper.hh>
    \n+
    15
    \n+
    16#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n+
    17#include <dune/localfunctions/raviartthomas.hh>
    \n+
    18#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>
    \n+
    19#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>
    \n+
    20#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>
    \n+
    21#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>
    \n+
    22#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>
    \n+
    23#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>
    \n+
    24#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>
    \n+
    25#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>
    \n+
    26
    \n+\n+\n+\n+\n+
    31
    \n+
    32namespace Dune {
    \n+
    33namespace Functions {
    \n+
    34
    \n+
    35namespace Impl {
    \n+
    36
    \n+
    37 template<int dim, typename D, typename R, std::size_t k>
    \n+
    38 struct RaviartThomasSimplexLocalInfo
    \n+
    39 {
    \n+
    40 // Dummy type, must be something that we can have a std::unique_ptr to
    \n+
    41 using FiniteElement = void*;
    \n+
    42 };
    \n+
    43
    \n+
    44 template<typename D, typename R>
    \n+
    45 struct RaviartThomasSimplexLocalInfo<2,D,R,0>
    \n+
    46 {
    \n+
    47 using FiniteElement = RT02DLocalFiniteElement<D,R>;
    \n+
    48 };
    \n+
    49
    \n+
    50 template<typename D, typename R>
    \n+
    51 struct RaviartThomasSimplexLocalInfo<2,D,R,1>
    \n+
    52 {
    \n+
    53 using FiniteElement = RT12DLocalFiniteElement<D,R>;
    \n+
    54 };
    \n+
    55
    \n+
    56 template<typename D, typename R>
    \n+
    57 struct RaviartThomasSimplexLocalInfo<3,D,R,0>
    \n+
    58 {
    \n+
    59 using FiniteElement = RT03DLocalFiniteElement<D,R>;
    \n+
    60 };
    \n+
    61
    \n+
    62 template<int dim, typename D, typename R, std::size_t k>
    \n+
    63 struct RaviartThomasCubeLocalInfo
    \n+
    64 {
    \n+
    65 // Dummy type, must be something that we can have a std::unique_ptr to
    \n+
    66 using FiniteElement = void*;
    \n+
    67 };
    \n+
    68
    \n+
    69 template<typename D, typename R>
    \n+
    70 struct RaviartThomasCubeLocalInfo<2,D,R,0>
    \n+
    71 {
    \n+
    72 using FiniteElement = RT0Cube2DLocalFiniteElement<D,R>;
    \n+
    73 };
    \n+
    74
    \n+
    75 template<typename D, typename R>
    \n+
    76 struct RaviartThomasCubeLocalInfo<2,D,R,1>
    \n+
    77 {
    \n+
    78 using FiniteElement = RT1Cube2DLocalFiniteElement<D,R>;
    \n+
    79 };
    \n+
    80
    \n+
    81 template<typename D, typename R>
    \n+
    82 struct RaviartThomasCubeLocalInfo<2,D,R,2>
    \n+
    83 {
    \n+
    84 using FiniteElement = RT2Cube2DLocalFiniteElement<D,R>;
    \n+
    85 };
    \n
    86
    \n-
    87 public:
    \n-
    88
    \n-
    89 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n-
    90 using FiniteElement = LocalFiniteElementVirtualInterface<T>;
    \n-
    91
    \n-
    92 BDMLocalFiniteElementMap(const GV& gv)
    \n-
    93 : is_(&(gv.indexSet())), orient_(gv.size(0))
    \n-
    94 {
    \n-
    95 cubeVariant_.resize(BDMCubeLocalInfo<dim, D, R, k>::Variants);
    \n-
    96 simplexVariant_.resize(BDMSimplexLocalInfo<dim, D, R, k>::Variants);
    \n-
    97
    \n-
    98 // create all variants
    \n-
    99 for (size_t i = 0; i < cubeVariant_.size(); i++)
    \n-
    100 cubeVariant_[i] = std::make_shared<LocalFiniteElementVirtualImp<CubeFiniteElement> >(CubeFiniteElement(i));
    \n-
    101
    \n-
    102 for (size_t i = 0; i < simplexVariant_.size(); i++)
    \n-
    103 simplexVariant_[i] = std::make_shared<LocalFiniteElementVirtualImp<SimplexFiniteElement> >(SimplexFiniteElement(i));
    \n+
    87 template<typename D, typename R>
    \n+
    88 struct RaviartThomasCubeLocalInfo<3,D,R,0>
    \n+
    89 {
    \n+
    90 using FiniteElement = RT0Cube3DLocalFiniteElement<D,R>;
    \n+
    91 };
    \n+
    92
    \n+
    93 template<typename D, typename R>
    \n+
    94 struct RaviartThomasCubeLocalInfo<3,D,R,1>
    \n+
    95 {
    \n+
    96 using FiniteElement = RT1Cube3DLocalFiniteElement<D,R>;
    \n+
    97 };
    \n+
    98
    \n+
    99 template<typename GV, int dim, typename R, std::size_t k>
    \n+
    100 class RaviartThomasLocalFiniteElementMap
    \n+
    101 {
    \n+
    102 using D = typename GV::ctype;
    \n+
    103 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n
    104
    \n-
    105 // compute orientation for all elements
    \n-
    106 // loop once over the grid
    \n-
    107 for(const auto& cell : elements(gv))
    \n-
    108 {
    \n-
    109 unsigned int myId = is_->index(cell);
    \n-
    110 orient_[myId] = 0;
    \n+
    105 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo<dim, D, R, k>::FiniteElement;
    \n+
    106 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo<dim, D, R, k>::FiniteElement;
    \n+
    107
    \n+
    108 public:
    \n+
    109
    \n+
    110 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n
    111
    \n-
    112 for (const auto& intersection : intersections(gv,cell))
    \n-
    113 {
    \n-
    114 if (intersection.neighbor() && (is_->index(intersection.outside()) > myId))
    \n-
    115 orient_[myId] |= (1 << intersection.indexInInside());
    \n-
    116 }
    \n-
    117 }
    \n-
    118 }
    \n-
    119
    \n-
    121 template<class EntityType>
    \n-
    122 const FiniteElement& find(const EntityType& e) const
    \n-
    123 {
    \n-
    124 if (e.type().isCube())
    \n-
    125 return *cubeVariant_[orient_[is_->index(e)]];
    \n-
    126 else
    \n-
    127 return *simplexVariant_[orient_[is_->index(e)]];
    \n-
    128 }
    \n-
    129
    \n-
    130 private:
    \n-
    131 std::vector<std::shared_ptr<LocalFiniteElementVirtualImp<CubeFiniteElement> > > cubeVariant_;
    \n-
    132 std::vector<std::shared_ptr<LocalFiniteElementVirtualImp<SimplexFiniteElement> > > simplexVariant_;
    \n-
    133 const typename GV::IndexSet* is_;
    \n-
    134 std::vector<unsigned char> orient_;
    \n-
    135 };
    \n-
    136
    \n-
    137
    \n-
    138} // namespace Impl
    \n-
    139
    \n-
    140
    \n-
    141// *****************************************************************************
    \n-
    142// This is the reusable part of the basis. It contains
    \n-
    143//
    \n-
    144// BrezziDouglasMariniPreBasis
    \n-
    145// BrezziDouglasMariniNode
    \n-
    146//
    \n-
    147// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    148// state. These components do _not_ depend on the global basis and local view
    \n-
    149// and can be used without a global basis.
    \n-
    150// *****************************************************************************
    \n+
    112 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n+
    113 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n+
    114
    \n+
    115 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n+
    116 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n+
    117 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n+
    118
    \n+
    119 // Each element facet can have its orientation reversed, hence there are
    \n+
    120 // 2^#facets different variants.
    \n+
    121 static std::size_t numVariants(GeometryType type)
    \n+
    122 {
    \n+
    123 auto numFacets = referenceElement<D,dim>(type).size(1);
    \n+
    124 return power(2,numFacets);
    \n+
    125 }
    \n+
    126
    \n+
    127 RaviartThomasLocalFiniteElementMap(const GV& gv)
    \n+
    128 : elementMapper_(gv, mcmgElementLayout()),
    \n+
    129 orient_(gv.size(0))
    \n+
    130 {
    \n+
    131 if constexpr (hasFixedElementType)
    \n+
    132 {
    \n+
    133 variants_.resize(numVariants(type));
    \n+
    134 for (size_t i = 0; i < numVariants(type); i++)
    \n+
    135 variants_[i] = FiniteElement(i);
    \n+
    136 }
    \n+
    137 else
    \n+
    138 {
    \n+
    139 // for mixed grids add offset for cubes
    \n+
    140 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));
    \n+
    141 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)
    \n+
    142 variants_[i] = SimplexFiniteElement(i);
    \n+
    143 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)
    \n+
    144 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);
    \n+
    145 }
    \n+
    146
    \n+
    147 for(const auto& cell : elements(gv))
    \n+
    148 {
    \n+
    149 unsigned int myId = elementMapper_.index(cell);
    \n+
    150 orient_[myId] = 0;
    \n
    151
    \n-
    152template<typename GV, int k>
    \n-
    153class BrezziDouglasMariniNode;
    \n-
    154
    \n-
    155template<typename GV, int k>
    \n-
    \n-\n-
    157 public LeafPreBasisMixin< BrezziDouglasMariniPreBasis<GV,k> >
    \n-
    158{
    \n-
    159 static const int dim = GV::dimension;
    \n-
    160 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;
    \n-
    161
    \n-
    162public:
    \n-
    163
    \n-
    165 using GridView = GV;
    \n-
    166 using size_type = std::size_t;
    \n-
    167
    \n-\n-
    169
    \n-
    \n-\n-
    172 gridView_(gv),
    \n-\n-
    174 {
    \n-
    175 // There is no inherent reason why the basis shouldn't work for grids with more than one
    \n-
    176 // element types. Somebody simply has to sit down and implement the missing bits.
    \n-
    177 if (gv.indexSet().types(0).size() > 1)
    \n-
    178 DUNE_THROW(Dune::NotImplemented, "Brezzi-Douglas-Marini basis is only implemented for grids with a single element type");
    \n-
    179 }
    \n-
    \n+
    152 for (const auto& intersection : intersections(gv,cell))
    \n+
    153 {
    \n+
    154 if (intersection.neighbor() && (elementMapper_.index(intersection.outside()) > myId))
    \n+
    155 orient_[myId] |= (1 << intersection.indexInInside());
    \n+
    156 }
    \n+
    157
    \n+
    158 // for mixed grids add offset for cubes
    \n+
    159 if constexpr (!hasFixedElementType)
    \n+
    160 if (cell.type().isCube())
    \n+
    161 orient_[myId] += numVariants(GeometryTypes::simplex(dim));
    \n+
    162 }
    \n+
    163 }
    \n+
    164
    \n+
    165 template<class EntityType>
    \n+
    166 const FiniteElement& find(const EntityType& e) const
    \n+
    167 {
    \n+
    168 return variants_[orient_[elementMapper_.index(e)]];
    \n+
    169 }
    \n+
    170
    \n+
    171 private:
    \n+
    172 std::vector<FiniteElement> variants_;
    \n+
    173 Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;
    \n+
    174 std::vector<unsigned char> orient_;
    \n+
    175 };
    \n+
    176
    \n+
    177
    \n+
    178} // namespace Impl
    \n+
    179
    \n
    180
    \n-
    \n-\n-
    182 {
    \n-
    183 codimOffset_[0] = 0;
    \n-
    184 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);
    \n-
    185 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] * gridView_.size(1);
    \n-
    186 }
    \n-
    \n-
    187
    \n-
    \n-
    190 const GridView& gridView() const
    \n-
    191 {
    \n-
    192 return gridView_;
    \n-
    193 }
    \n-
    \n+
    181// *****************************************************************************
    \n+
    182// This is the reusable part of the basis. It contains
    \n+
    183//
    \n+
    184// RaviartThomasPreBasis
    \n+
    185// RaviartThomasNode
    \n+
    186//
    \n+
    187// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    188// state. These components do _not_ depend on the global basis and local view
    \n+
    189// and can be used without a global basis.
    \n+
    190// *****************************************************************************
    \n+
    191
    \n+
    192template<typename GV, int k>
    \n+
    193class RaviartThomasNode;
    \n
    194
    \n-
    195 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n-
    \n-
    196 void update (const GridView& gv)
    \n-
    197 {
    \n-
    198 gridView_ = gv;
    \n-
    199 }
    \n-
    \n-
    200
    \n-
    \n-\n-
    205 {
    \n-
    206 return Node{&finiteElementMap_};
    \n-
    207 }
    \n-
    \n-
    208
    \n-
    \n-\n-
    210 {
    \n-
    211 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] * gridView_.size(1); // only 2d
    \n-
    212 }
    \n-
    \n-
    213
    \n-
    \n-\n-
    215 {
    \n-
    216 // The implementation currently only supports grids with a single element type.
    \n-
    217 // We can therefore return the actual number of dofs here.
    \n-
    218 GeometryType elementType = *(gridView_.indexSet().types(0).begin());
    \n-
    219 size_t numFaces = ReferenceElements<double,dim>::general(elementType).size(1);
    \n-
    220 return dofsPerCodim_[0] + dofsPerCodim_[1] * numFaces;
    \n-
    221 }
    \n-
    \n+
    195template<typename GV, int k>
    \n+
    \n+\n+
    197 public LeafPreBasisMixin< RaviartThomasPreBasis<GV,k> >
    \n+
    198{
    \n+
    199 static const int dim = GV::dimension;
    \n+
    200 using FiniteElementMap = typename Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;
    \n+
    201
    \n+
    202public:
    \n+
    203
    \n+
    205 using GridView = GV;
    \n+
    206 using size_type = std::size_t;
    \n+
    207
    \n+\n+
    209
    \n+
    \n+\n+
    212 gridView_(gv),
    \n+\n+
    214 {
    \n+
    215 // Currently there are some unresolved bugs with hybrid grids and higher order Raviart-Thomas elements
    \n+
    216 if (gv.indexSet().types(0).size() > 1 and k>0)
    \n+
    217 DUNE_THROW(Dune::NotImplemented, "Raviart-Thomas basis with index k>0 is only implemented for grids with a single element type");
    \n+
    218
    \n+
    219 for(auto type : gv.indexSet().types(0))
    \n+
    220 if (!type.isSimplex() && !type.isCube())
    \n+
    221 DUNE_THROW(Dune::NotImplemented, "Raviart-Thomas elements are only implemented for grids with simplex or cube elements.");
    \n
    222
    \n-
    228 template<typename It>
    \n-
    \n-
    229 It indices(const Node& node, It it) const
    \n-
    230 {
    \n-
    231 const auto& gridIndexSet = gridView().indexSet();
    \n-
    232 const auto& element = node.element();
    \n-
    233
    \n-
    234 // throw if element is not of predefined type
    \n-
    235 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n-
    236 DUNE_THROW(Dune::NotImplemented, "BrezziDouglasMariniBasis only implemented for cube and simplex elements.");
    \n-
    237
    \n-
    238 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n-
    239 {
    \n-
    240 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    241
    \n-
    242 // The dimension of the entity that the current dof is related to
    \n-
    243 size_t subentity = localKey.subEntity();
    \n-
    244 size_t codim = localKey.codim();
    \n-
    245
    \n-
    246 *it = { codimOffset_[codim] +
    \n-
    247 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \n-
    248 }
    \n-
    249
    \n-
    250 return it;
    \n-
    251 }
    \n-
    \n-
    252
    \n-
    253protected:
    \n-\n-
    255 std::array<size_t,dim+1> codimOffset_;
    \n-
    256 FiniteElementMap finiteElementMap_;
    \n-
    257 // Number of dofs per entity type depending on the entity's codimension and type
    \n-
    258 std::array<int,2> dofsPerCodim_ {{dim*(k-1)*3, dim+(k-1)}};
    \n-
    259};
    \n+
    223 GeometryType type = gv.template begin<0>()->type();
    \n+
    224 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;
    \n+
    225 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;
    \n+
    226
    \n+
    227 dofsPerCodim_ = {{dofsPerElement, dofsPerFace}};
    \n+
    228 }
    \n+
    \n+
    229
    \n+
    \n+\n+
    231 {
    \n+
    232 codimOffset_[0] = 0;
    \n+
    233 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);
    \n+
    234 }
    \n+
    \n+
    235
    \n+
    \n+
    238 const GridView& gridView() const
    \n+
    239 {
    \n+
    240 return gridView_;
    \n+
    241 }
    \n+
    \n+
    242
    \n+
    243 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n+
    \n+
    244 void update (const GridView& gv)
    \n+
    245 {
    \n+
    246 gridView_ = gv;
    \n+
    247 }
    \n+
    \n+
    248
    \n+
    \n+\n+
    253 {
    \n+
    254 return Node{&finiteElementMap_};
    \n+
    255 }
    \n+
    \n+
    256
    \n+
    \n+\n+
    258 {
    \n+
    259 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] * gridView_.size(1);
    \n+
    260 }
    \n
    \n-
    260
    \n
    261
    \n-
    262
    \n-
    263template<typename GV, int k>
    \n-
    \n-\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 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;
    \n-
    274 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,
    \n-
    275 typename FiniteElementMap::FiniteElement,
    \n-
    276 Element>;
    \n-
    277
    \n-
    \n-
    278 BrezziDouglasMariniNode(const FiniteElementMap* finiteElementMap) :
    \n-
    279 element_(nullptr),
    \n-
    280 finiteElementMap_(finiteElementMap)
    \n-
    281 {}
    \n-
    \n-
    282
    \n-
    \n-
    284 const Element& element() const
    \n-
    285 {
    \n-
    286 return *element_;
    \n-
    287 }
    \n-
    \n-
    288
    \n-
    \n-\n-
    294 {
    \n-
    295 return finiteElement_;
    \n-
    296 }
    \n-
    \n-
    297
    \n-
    \n-
    299 void bind(const Element& e)
    \n-
    300 {
    \n-
    301 element_ = &e;
    \n-
    302 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n-
    303 this->setSize(finiteElement_.size());
    \n-
    304 }
    \n-
    \n+
    \n+\n+
    263 {
    \n+
    264 size_type result = 0;
    \n+
    265 for (auto&& type : gridView_.indexSet().types(0))
    \n+
    266 {
    \n+
    267 size_t numFaces = ReferenceElements<double,dim>::general(type).size(1);
    \n+
    268 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;
    \n+
    269 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;
    \n+
    270 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);
    \n+
    271 }
    \n+
    272
    \n+
    273 return result;
    \n+
    274 }
    \n+
    \n+
    275
    \n+
    281 template<typename It>
    \n+
    \n+
    282 It indices(const Node& node, It it) const
    \n+
    283 {
    \n+
    284 const auto& gridIndexSet = gridView().indexSet();
    \n+
    285 const auto& element = node.element();
    \n+
    286
    \n+
    287 // throw if Element is not of predefined type
    \n+
    288 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n+
    289 DUNE_THROW(Dune::NotImplemented, "RaviartThomasBasis only implemented for cube and simplex elements.");
    \n+
    290
    \n+
    291 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n+
    292 {
    \n+
    293 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    294
    \n+
    295 // The dimension of the entity that the current dof is related to
    \n+
    296 size_t subentity = localKey.subEntity();
    \n+
    297 size_t codim = localKey.codim();
    \n+
    298
    \n+
    299 if (not(codim==0 or codim==1))
    \n+
    300 DUNE_THROW(Dune::NotImplemented, "Grid contains elements not supported for the RaviartThomasBasis");
    \n+
    301
    \n+
    302 *it = { codimOffset_[codim] +
    \n+
    303 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \n+
    304 }
    \n
    305
    \n-
    306protected:
    \n-
    307
    \n-\n-\n-\n-
    311};
    \n-
    \n-
    312
    \n-
    313
    \n-
    314
    \n-
    315namespace BasisFactory {
    \n-
    316
    \n-
    324template<std::size_t k>
    \n-
    \n-\n-
    326{
    \n-
    327 return [](const auto& gridView) {
    \n-
    328 return BrezziDouglasMariniPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n-
    329 };
    \n-
    330}
    \n+
    306 return it;
    \n+
    307 }
    \n+
    \n+
    308
    \n+
    309protected:
    \n+\n+
    311 std::array<size_t,dim+1> codimOffset_;
    \n+
    312 FiniteElementMap finiteElementMap_;
    \n+
    313 // Number of dofs per entity type depending on the entity's codimension and type
    \n+
    314 std::array<int,dim+1> dofsPerCodim_;
    \n+
    315};
    \n
    \n-
    331
    \n-
    332} // end namespace BasisFactory
    \n+
    316
    \n+
    317
    \n+
    318
    \n+
    319template<typename GV, int k>
    \n+
    \n+\n+
    321 public LeafBasisNode
    \n+
    322{
    \n+
    323 static const int dim = GV::dimension;
    \n+
    324
    \n+
    325public:
    \n+
    326
    \n+
    327 using size_type = std::size_t;
    \n+
    328 using Element = typename GV::template Codim<0>::Entity;
    \n+
    329 using FiniteElementMap = typename Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;
    \n+
    330 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,
    \n+
    331 typename FiniteElementMap::FiniteElement,
    \n+
    332 Element>;
    \n
    333
    \n-
    334
    \n-
    335
    \n-
    336// *****************************************************************************
    \n-
    337// This is the actual global basis implementation based on the reusable parts.
    \n-
    338// *****************************************************************************
    \n-
    339
    \n-
    347template<typename GV, int k>
    \n-\n-
    349
    \n-
    350} // end namespace Functions
    \n-
    351} // end namespace Dune
    \n-
    352
    \n+
    \n+
    334 RaviartThomasNode(const FiniteElementMap* finiteElementMap) :
    \n+
    335 element_(nullptr),
    \n+
    336 finiteElementMap_(finiteElementMap)
    \n+
    337 { }
    \n+
    \n+
    338
    \n+
    \n+
    340 const Element& element() const
    \n+
    341 {
    \n+
    342 return *element_;
    \n+
    343 }
    \n+
    \n+
    344
    \n+
    \n+\n+
    350 {
    \n+
    351 return finiteElement_;
    \n+
    352 }
    \n+
    \n
    353
    \n-
    354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n-\n-\n-\n+
    \n+
    355 void bind(const Element& e)
    \n+
    356 {
    \n+
    357 element_ = &e;
    \n+
    358 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n+
    359 this->setSize(finiteElement_.size());
    \n+
    360 }
    \n+
    \n+
    361
    \n+
    362protected:
    \n+
    363
    \n+\n+\n+\n+
    367};
    \n+
    \n+
    368
    \n+
    369namespace BasisFactory {
    \n+
    370
    \n+
    378template<std::size_t k>
    \n+
    \n+\n+
    380{
    \n+
    381 return [](const auto& gridView) {
    \n+
    382 return RaviartThomasPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n+
    383 };
    \n+
    384}
    \n+
    \n+
    385
    \n+
    386} // end namespace BasisFactory
    \n+
    387
    \n+
    388
    \n+
    389
    \n+
    390// *****************************************************************************
    \n+
    391// This is the actual global basis implementation based on the reusable parts.
    \n+
    392// *****************************************************************************
    \n+
    393
    \n+
    401template<typename GV, int k>
    \n+\n+
    403
    \n+
    404} // end namespace Functions
    \n+
    405} // end namespace Dune
    \n+
    406
    \n+
    407
    \n+
    408#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n+\n+\n \n-
    auto brezziDouglasMarini()
    Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.
    Definition brezzidouglasmarinibasis.hh:325
    \n+\n+
    auto raviartThomas()
    Create a pre-basis factory that can create a Raviart-Thomas pre-basis.
    Definition raviartthomasbasis.hh:379
    \n+
    auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
    Create a pre-basis factory that can build a PowerPreBasis.
    Definition dynamicpowerbasis.hh:409
    \n
    Definition polynomial.hh:17
    \n-
    Definition brezzidouglasmarinibasis.hh:266
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition brezzidouglasmarinibasis.hh:293
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition brezzidouglasmarinibasis.hh:272
    \n-
    const FiniteElementMap * finiteElementMap_
    Definition brezzidouglasmarinibasis.hh:310
    \n-
    std::size_t size_type
    Definition brezzidouglasmarinibasis.hh:271
    \n-
    FiniteElement finiteElement_
    Definition brezzidouglasmarinibasis.hh:308
    \n-
    typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap
    Definition brezzidouglasmarinibasis.hh:273
    \n-
    const Element * element_
    Definition brezzidouglasmarinibasis.hh:309
    \n-
    Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition brezzidouglasmarinibasis.hh:276
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition brezzidouglasmarinibasis.hh:299
    \n-
    BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)
    Definition brezzidouglasmarinibasis.hh:278
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition brezzidouglasmarinibasis.hh:284
    \n-
    Definition brezzidouglasmarinibasis.hh:158
    \n-
    std::size_t size_type
    Definition brezzidouglasmarinibasis.hh:166
    \n-
    std::array< int, 2 > dofsPerCodim_
    Definition brezzidouglasmarinibasis.hh:258
    \n-
    size_type dimension() const
    Definition brezzidouglasmarinibasis.hh:209
    \n-
    std::array< size_t, dim+1 > codimOffset_
    Definition brezzidouglasmarinibasis.hh:255
    \n-
    Node makeNode() const
    Create tree node.
    Definition brezzidouglasmarinibasis.hh:204
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition brezzidouglasmarinibasis.hh:165
    \n-
    BrezziDouglasMariniPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition brezzidouglasmarinibasis.hh:171
    \n-
    FiniteElementMap finiteElementMap_
    Definition brezzidouglasmarinibasis.hh:256
    \n-
    void update(const GridView &gv)
    Definition brezzidouglasmarinibasis.hh:196
    \n-
    void initializeIndices()
    Definition brezzidouglasmarinibasis.hh:181
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition brezzidouglasmarinibasis.hh:190
    \n-
    size_type maxNodeSize() const
    Definition brezzidouglasmarinibasis.hh:214
    \n-
    GridView gridView_
    Definition brezzidouglasmarinibasis.hh:254
    \n-
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition brezzidouglasmarinibasis.hh:229
    \n
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n
    size_type size() const
    Definition nodes.hh:147
    \n
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n
    Definition nodes.hh:191
    \n+
    Definition raviartthomasbasis.hh:322
    \n+
    typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap
    Definition raviartthomasbasis.hh:329
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition raviartthomasbasis.hh:355
    \n+
    Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition raviartthomasbasis.hh:332
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition raviartthomasbasis.hh:328
    \n+
    const Element * element_
    Definition raviartthomasbasis.hh:365
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition raviartthomasbasis.hh:349
    \n+
    std::size_t size_type
    Definition raviartthomasbasis.hh:327
    \n+
    RaviartThomasNode(const FiniteElementMap *finiteElementMap)
    Definition raviartthomasbasis.hh:334
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition raviartthomasbasis.hh:340
    \n+
    FiniteElement finiteElement_
    Definition raviartthomasbasis.hh:364
    \n+
    const FiniteElementMap * finiteElementMap_
    Definition raviartthomasbasis.hh:366
    \n+
    Definition raviartthomasbasis.hh:198
    \n+
    Node makeNode() const
    Create tree node.
    Definition raviartthomasbasis.hh:252
    \n+
    std::array< int, dim+1 > dofsPerCodim_
    Definition raviartthomasbasis.hh:314
    \n+
    void update(const GridView &gv)
    Definition raviartthomasbasis.hh:244
    \n+
    RaviartThomasPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition raviartthomasbasis.hh:211
    \n+
    std::size_t size_type
    Definition raviartthomasbasis.hh:206
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition raviartthomasbasis.hh:238
    \n+
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition raviartthomasbasis.hh:282
    \n+
    FiniteElementMap finiteElementMap_
    Definition raviartthomasbasis.hh:312
    \n+
    size_type dimension() const
    Definition raviartthomasbasis.hh:257
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition raviartthomasbasis.hh:205
    \n+
    size_type maxNodeSize() const
    Definition raviartthomasbasis.hh:262
    \n+
    GridView gridView_
    Definition raviartthomasbasis.hh:310
    \n+
    void initializeIndices()
    Definition raviartthomasbasis.hh:230
    \n+
    std::array< size_t, dim+1 > codimOffset_
    Definition raviartthomasbasis.hh:311
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,489 +1,545 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-brezzidouglasmarinibasis.hh\n+raviartthomasbasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n 9\n 10#include \n 11#include \n-12#include \n-13\n-14#include \n-15#include \n-16\n-17#include \n-18#include \n-19#include \n-20#include \n-21#include \n-22\n-23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/\n+12\n+13#include \n+14#include \n+15\n+16#include \n+17#include \n+18#include \n+19#include \n+20#include \n+21#include \n+22#include \n+23#include \n+24#include \n+25#include \n+26\n+27#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/\n _\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n-24#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-26#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-27\n-28namespace _\bD_\bu_\bn_\be {\n-29namespace Functions {\n-30\n-31namespace Impl {\n-32\n-33 template\n-34 struct BDMSimplexLocalInfo\n-35 {\n-36 static_assert((AlwaysFalse::value),\"The requested type of BDM element is\n-not implemented, sorry!\");\n-37 };\n-38\n-39 template\n-40 struct BDMSimplexLocalInfo<2,D,R,1>\n-41 {\n-42 using FiniteElement = BDM1Simplex2DLocalFiniteElement;\n-43 static const std::size_t Variants = 8;\n-44 };\n-45\n-46 template\n-47 struct BDMSimplexLocalInfo<2,D,R,2>\n-48 {\n-49 using FiniteElement = BDM2Simplex2DLocalFiniteElement;\n-50 static const std::size_t Variants = 8;\n-51 };\n-52\n-53 template\n-54 struct BDMCubeLocalInfo\n-55 {\n-56 static_assert((AlwaysFalse::value),\"The requested type of BDM element is\n-not implemented, sorry!\");\n-57 };\n-58\n-59 template\n-60 struct BDMCubeLocalInfo<2,D,R,1>\n-61 {\n-62 using FiniteElement = BDM1Cube2DLocalFiniteElement;\n-63 static const std::size_t Variants = 16;\n-64 };\n-65\n-66 template\n-67 struct BDMCubeLocalInfo<2,D,R,2>\n-68 {\n-69 using FiniteElement = BDM2Cube2DLocalFiniteElement;\n-70 static const std::size_t Variants = 16;\n-71 };\n-72\n-73 template\n-74 struct BDMCubeLocalInfo<3,D,R,1>\n-75 {\n-76 using FiniteElement = BDM1Cube3DLocalFiniteElement;\n-77 static const std::size_t Variants = 64;\n-78 };\n-79\n-80 template\n-81 class BDMLocalFiniteElementMap\n-82 {\n-83 using D = typename GV::ctype;\n-84 using CubeFiniteElement = typename BDMCubeLocalInfo::\n-FiniteElement;\n-85 using SimplexFiniteElement = typename BDMSimplexLocalInfo::\n-FiniteElement;\n+28#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+29#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+30#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+31\n+32namespace _\bD_\bu_\bn_\be {\n+33namespace Functions {\n+34\n+35namespace Impl {\n+36\n+37 template\n+38 struct RaviartThomasSimplexLocalInfo\n+39 {\n+40 // Dummy type, must be something that we can have a std::unique_ptr to\n+41 using FiniteElement = void*;\n+42 };\n+43\n+44 template\n+45 struct RaviartThomasSimplexLocalInfo<2,D,R,0>\n+46 {\n+47 using FiniteElement = RT02DLocalFiniteElement;\n+48 };\n+49\n+50 template\n+51 struct RaviartThomasSimplexLocalInfo<2,D,R,1>\n+52 {\n+53 using FiniteElement = RT12DLocalFiniteElement;\n+54 };\n+55\n+56 template\n+57 struct RaviartThomasSimplexLocalInfo<3,D,R,0>\n+58 {\n+59 using FiniteElement = RT03DLocalFiniteElement;\n+60 };\n+61\n+62 template\n+63 struct RaviartThomasCubeLocalInfo\n+64 {\n+65 // Dummy type, must be something that we can have a std::unique_ptr to\n+66 using FiniteElement = void*;\n+67 };\n+68\n+69 template\n+70 struct RaviartThomasCubeLocalInfo<2,D,R,0>\n+71 {\n+72 using FiniteElement = RT0Cube2DLocalFiniteElement;\n+73 };\n+74\n+75 template\n+76 struct RaviartThomasCubeLocalInfo<2,D,R,1>\n+77 {\n+78 using FiniteElement = RT1Cube2DLocalFiniteElement;\n+79 };\n+80\n+81 template\n+82 struct RaviartThomasCubeLocalInfo<2,D,R,2>\n+83 {\n+84 using FiniteElement = RT2Cube2DLocalFiniteElement;\n+85 };\n 86\n-87 public:\n-88\n-89 using T = LocalBasisTraits, R, dim,\n-FieldVector, FieldMatrix >;\n-90 using FiniteElement = LocalFiniteElementVirtualInterface;\n-91\n-92 BDMLocalFiniteElementMap(const GV& gv)\n-93 : is_(&(gv.indexSet())), orient_(gv.size(0))\n-94 {\n-95 cubeVariant_.resize(BDMCubeLocalInfo::Variants);\n-96 simplexVariant_.resize(BDMSimplexLocalInfo::Variants);\n-97\n-98 // create all variants\n-99 for (size_t i = 0; i < cubeVariant_.size(); i++)\n-100 cubeVariant_[i] = std::\n-make_shared >(CubeFiniteElement\n-(i));\n-101\n-102 for (size_t i = 0; i < simplexVariant_.size(); i++)\n-103 simplexVariant_[i] = std::\n-make_shared >\n-(SimplexFiniteElement(i));\n+87 template\n+88 struct RaviartThomasCubeLocalInfo<3,D,R,0>\n+89 {\n+90 using FiniteElement = RT0Cube3DLocalFiniteElement;\n+91 };\n+92\n+93 template\n+94 struct RaviartThomasCubeLocalInfo<3,D,R,1>\n+95 {\n+96 using FiniteElement = RT1Cube3DLocalFiniteElement;\n+97 };\n+98\n+99 template\n+100 class RaviartThomasLocalFiniteElementMap\n+101 {\n+102 using D = typename GV::ctype;\n+103 constexpr static bool hasFixedElementType = Capabilities::\n+hasSingleGeometryType::v;\n 104\n-105 // compute orientation for all elements\n-106 // loop once over the grid\n-107 for(const auto& cell : elements(gv))\n-108 {\n-109 unsigned int myId = is_->index(cell);\n-110 orient_[myId] = 0;\n+105 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo::FiniteElement;\n+106 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo::FiniteElement;\n+107\n+108 public:\n+109\n+110 using T = LocalBasisTraits, R, dim,\n+FieldVector, FieldMatrix >;\n 111\n-112 for (const auto& intersection : intersections(gv,cell))\n-113 {\n-114 if (intersection.neighbor() && (is_->index(intersection.outside()) > myId))\n-115 orient_[myId] |= (1 << intersection.indexInInside());\n-116 }\n-117 }\n-118 }\n-119\n-121 template\n-122 const FiniteElement& find(const EntityType& e) const\n-123 {\n-124 if (e.type().isCube())\n-125 return *cubeVariant_[orient_[is_->index(e)]];\n-126 else\n-127 return *simplexVariant_[orient_[is_->index(e)]];\n-128 }\n-129\n-130 private:\n-131 std::vector\n-> > cubeVariant_;\n-132 std::vector > >\n-simplexVariant_;\n-133 const typename GV::IndexSet* is_;\n-134 std::vector orient_;\n-135 };\n-136\n-137\n-138} // namespace Impl\n-139\n-140\n-141/\n+112 constexpr static unsigned int topologyId = Capabilities::\n+hasSingleGeometryType::topologyId; // meaningless if\n+hasFixedElementType is false\n+113 constexpr static GeometryType type = GeometryType(topologyId, GV::\n+dimension);\n+114\n+115 using FiniteElement = std::conditional_t,\n+117 LocalFiniteElementVariant >;\n+118\n+119 // Each element facet can have its orientation reversed, hence there are\n+120 // 2^#facets different variants.\n+121 static std::size_t numVariants(GeometryType type)\n+122 {\n+123 auto numFacets = referenceElement(type).size(1);\n+124 return _\bp_\bo_\bw_\be_\br(2,numFacets);\n+125 }\n+126\n+127 RaviartThomasLocalFiniteElementMap(const GV& gv)\n+128 : elementMapper_(gv, mcmgElementLayout()),\n+129 orient_(gv.size(0))\n+130 {\n+131 if constexpr (hasFixedElementType)\n+132 {\n+133 variants_.resize(numVariants(type));\n+134 for (size_t i = 0; i < numVariants(type); i++)\n+135 variants_[i] = FiniteElement(i);\n+136 }\n+137 else\n+138 {\n+139 // for mixed grids add offset for cubes\n+140 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n+(GeometryTypes::cube(dim)));\n+141 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n+142 variants_[i] = SimplexFiniteElement(i);\n+143 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n+144 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n+(i);\n+145 }\n+146\n+147 for(const auto& cell : elements(gv))\n+148 {\n+149 unsigned int myId = elementMapper_.index(cell);\n+150 orient_[myId] = 0;\n+151\n+152 for (const auto& intersection : intersections(gv,cell))\n+153 {\n+154 if (intersection.neighbor() && (elementMapper_.index(intersection.outside\n+()) > myId))\n+155 orient_[myId] |= (1 << intersection.indexInInside());\n+156 }\n+157\n+158 // for mixed grids add offset for cubes\n+159 if constexpr (!hasFixedElementType)\n+160 if (cell.type().isCube())\n+161 orient_[myId] += numVariants(GeometryTypes::simplex(dim));\n+162 }\n+163 }\n+164\n+165 template\n+166 const FiniteElement& find(const EntityType& e) const\n+167 {\n+168 return variants_[orient_[elementMapper_.index(e)]];\n+169 }\n+170\n+171 private:\n+172 std::vector variants_;\n+173 Dune::MultipleCodimMultipleGeomTypeMapper elementMapper_;\n+174 std::vector orient_;\n+175 };\n+176\n+177\n+178} // namespace Impl\n+179\n+180\n+181/\n / *****************************************************************************\n-142// This is the reusable part of the basis. It contains\n-143//\n-144// BrezziDouglasMariniPreBasis\n-145// BrezziDouglasMariniNode\n-146//\n-147// The pre-basis allows to create the others and is the owner of possible\n+182// This is the reusable part of the basis. It contains\n+183//\n+184// RaviartThomasPreBasis\n+185// RaviartThomasNode\n+186//\n+187// The pre-basis allows to create the others and is the owner of possible\n shared\n-148// state. These components do _not_ depend on the global basis and local\n+188// state. These components do _not_ depend on the global basis and local\n view\n-149// and can be used without a global basis.\n-150/\n+189// and can be used without a global basis.\n+190/\n / *****************************************************************************\n-151\n-152template\n-153class BrezziDouglasMariniNode;\n-154\n-155template\n-_\b1_\b5_\b6class _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n-157 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< BrezziDouglasMariniPreBasis >\n-158{\n-159 static const int dim = GV::dimension;\n-160 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap;\n-161\n-162public:\n-163\n-_\b1_\b6_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b1_\b6_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-167\n-_\b1_\b6_\b8 using _\bN_\bo_\bd_\be = _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b>;\n-169\n-_\b1_\b7_\b1 _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n-172 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n-173 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv)\n-174 {\n-175 // There is no inherent reason why the basis shouldn't work for grids with\n-more than one\n-176 // element types. Somebody simply has to sit down and implement the missing\n-bits.\n-177 if (gv.indexSet().types(0).size() > 1)\n-178 DUNE_THROW(Dune::NotImplemented, \"Brezzi-Douglas-Marini basis is only\n-implemented for grids with a single element type\");\n-179 }\n-180\n-_\b1_\b8_\b1 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-182 {\n-183 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] = 0;\n-184 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[1] = _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0);\n-185 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] *\n-gridView_.size(1);\n-186 }\n-187\n-_\b1_\b9_\b0 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-191 {\n-192 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-193 }\n+191\n+192template\n+193class RaviartThomasNode;\n 194\n-195 /* \\brief Update the stored grid view, to be called if the grid has changed\n-*/\n-_\b1_\b9_\b6 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-197 {\n-198 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-199 }\n-200\n-_\b2_\b0_\b4 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-205 {\n-206 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n-207 }\n-208\n-_\b2_\b0_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-210 {\n-211 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0) + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[1] *\n-_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(1); // only 2d\n-212 }\n-213\n-_\b2_\b1_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-215 {\n-216 // The implementation currently only supports grids with a single element\n-type.\n-217 // We can therefore return the actual number of dofs here.\n-218 GeometryType elementType = *(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0).begin());\n-219 size_t numFaces = ReferenceElements::general(elementType).size\n-(1);\n-220 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[1] * numFaces;\n-221 }\n+195template\n+_\b1_\b9_\b6class _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n+197 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< RaviartThomasPreBasis >\n+198{\n+199 static const int dim = GV::dimension;\n+200 using FiniteElementMap = typename Impl::\n+RaviartThomasLocalFiniteElementMap;\n+201\n+202public:\n+203\n+_\b2_\b0_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b2_\b0_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+207\n+_\b2_\b0_\b8 using _\bN_\bo_\bd_\be = _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b>;\n+209\n+_\b2_\b1_\b1 _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n+212 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n+213 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv)\n+214 {\n+215 // Currently there are some unresolved bugs with hybrid grids and higher\n+order Raviart-Thomas elements\n+216 if (gv.indexSet().types(0).size() > 1 and k>0)\n+217 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas basis with index k>0 is\n+only implemented for grids with a single element type\");\n+218\n+219 for(auto type : gv.indexSet().types(0))\n+220 if (!type.isSimplex() && !type.isCube())\n+221 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas elements are only\n+implemented for grids with simplex or cube elements.\");\n 222\n-228 template\n-_\b2_\b2_\b9 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-230 {\n-231 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-232 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-233\n-234 // throw if element is not of predefined type\n-235 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n-236 DUNE_THROW(Dune::NotImplemented, \"BrezziDouglasMariniBasis only implemented\n-for cube and simplex elements.\");\n-237\n-238 for(std::size_t i=0, end=node._\bs_\bi_\bz_\be(); i()->type();\n+224 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim\n+: k*(k+1)*(k+1)*dim) : k*dim;\n+225 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n+1)*k+1 ;\n+226\n+227 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_ = {{dofsPerElement, dofsPerFace}};\n+228 }\n+229\n+_\b2_\b3_\b0 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+231 {\n+232 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] = 0;\n+233 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[1] = _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0);\n+234 }\n+235\n+_\b2_\b3_\b8 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n 239 {\n-240 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n+240 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+241 }\n+242\n+243 /* \\brief Update the stored grid view, to be called if the grid has changed\n+*/\n+_\b2_\b4_\b4 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+245 {\n+246 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+247 }\n+248\n+_\b2_\b5_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+253 {\n+254 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n+255 }\n+256\n+_\b2_\b5_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+258 {\n+259 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0) + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[1] *\n+_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(1);\n+260 }\n+261\n+_\b2_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+263 {\n+264 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n+265 for (auto&& type : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0))\n+266 {\n+267 size_t numFaces = ReferenceElements::general(type).size(1);\n+268 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim\n+: k*(k+1)*(k+1)*dim) : k*dim;\n+269 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n+1)*k+1 ;\n+270 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);\n+271 }\n+272\n+273 return result;\n+274 }\n+275\n+281 template\n+_\b2_\b8_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+283 {\n+284 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n+285 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+286\n+287 // throw if Element is not of predefined type\n+288 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n+289 DUNE_THROW(Dune::NotImplemented, \"RaviartThomasBasis only implemented for\n+cube and simplex elements.\");\n+290\n+291 for(std::size_t i=0, end=node._\bs_\bi_\bz_\be(); i _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b2_\b5_\b6 FiniteElementMap _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n-257 // Number of dofs per entity type depending on the entity's codimension and\n-type\n-_\b2_\b5_\b8 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_ {{dim*(k-1)*3, dim+(k-1)}};\n-259};\n-260\n-261\n-262\n-263template\n-_\b2_\b6_\b4class _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be :\n-265 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-266{\n-267 static const int dim = GV::dimension;\n-268\n-269public:\n-270\n-_\b2_\b7_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b2_\b7_\b2 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b2_\b7_\b3 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::BDMLocalFiniteElementMap;\n-_\b2_\b7_\b4 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n-277\n-_\b2_\b7_\b8 _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be(const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* finiteElementMap) :\n-279 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-280 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n-281 {}\n-282\n-_\b2_\b8_\b4 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-285 {\n-286 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-287 }\n-288\n-_\b2_\b9_\b3 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n-294 {\n-295 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-296 }\n-297\n-_\b2_\b9_\b9 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-300 {\n-301 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-302 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.bind((_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_->find(*_\be_\bl_\be_\bm_\be_\bn_\bt_\b_)), e);\n-303 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n 304 }\n 305\n-306protected:\n-307\n-_\b3_\b0_\b8 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b3_\b0_\b9 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b3_\b1_\b0 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n-311};\n-312\n-313\n-314\n-315namespace BasisFactory {\n+306 return it;\n+307 }\n+308\n+309protected:\n+_\b3_\b1_\b0 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+_\b3_\b1_\b1 std::array _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b1_\b2 FiniteElementMap _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n+313 // Number of dofs per entity type depending on the entity's codimension and\n+type\n+_\b3_\b1_\b4 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_;\n+315};\n 316\n-324template\n-_\b3_\b2_\b5auto _\bb_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi()\n-326{\n-327 return [](const auto& gridView) {\n-328 return _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k>\n-(gridView);\n-329 };\n-330}\n-331\n-332} // end namespace BasisFactory\n+317\n+318\n+319template\n+_\b3_\b2_\b0class _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be :\n+321 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+322{\n+323 static const int dim = GV::dimension;\n+324\n+325public:\n+326\n+_\b3_\b2_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b3_\b2_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b3_\b2_\b9 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::\n+RaviartThomasLocalFiniteElementMap;\n+_\b3_\b3_\b0 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n 333\n-334\n-335\n-336/\n+_\b3_\b3_\b4 _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be(const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* finiteElementMap) :\n+335 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+336 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n+337 { }\n+338\n+_\b3_\b4_\b0 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+341 {\n+342 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+343 }\n+344\n+_\b3_\b4_\b9 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n+350 {\n+351 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+352 }\n+353\n+_\b3_\b5_\b5 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+356 {\n+357 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+358 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.bind((_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_->find(*_\be_\bl_\be_\bm_\be_\bn_\bt_\b_)), e);\n+359 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n+360 }\n+361\n+362protected:\n+363\n+_\b3_\b6_\b4 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b3_\b6_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b3_\b6_\b6 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n+367};\n+368\n+369namespace BasisFactory {\n+370\n+378template\n+_\b3_\b7_\b9auto _\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs()\n+380{\n+381 return [](const auto& gridView) {\n+382 return _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k>\n+(gridView);\n+383 };\n+384}\n+385\n+386} // end namespace BasisFactory\n+387\n+388\n+389\n+390/\n / *****************************************************************************\n-337// This is the actual global basis implementation based on the reusable\n+391// This is the actual global basis implementation based on the reusable\n parts.\n-338/\n+392/\n / *****************************************************************************\n-339\n-347template\n-_\b3_\b4_\b8using _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bB_\ba_\bs_\bi_\bs =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b> >;\n-349\n-350} // end namespace Functions\n-351} // end namespace Dune\n-352\n-353\n-354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+393\n+401template\n+_\b4_\b0_\b2using _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b>\n+>;\n+403\n+404} // end namespace Functions\n+405} // end namespace Dune\n+406\n+407\n+408#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n _\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n _\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi\n-auto brezziDouglasMarini()\n-Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:325\n+_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs\n+auto raviartThomas()\n+Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:379\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br\n+auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const\n+IndexMergingStrategy &)\n+Create a pre-basis factory that can build a PowerPreBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:409\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:266\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:293\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename GV::template Codim< 0 >::Entity Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:272\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n-const FiniteElementMap * finiteElementMap_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:310\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:271\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n-FiniteElement finiteElement_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:308\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp\n-typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:273\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n-const Element * element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:309\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator,\n-typename FiniteElementMap::FiniteElement, Element > FiniteElement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:276\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind to element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:299\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be\n-BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:278\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return current element, throw if unbound.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:284\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:158\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:166\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_\n-std::array< int, 2 > dofsPerCodim_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:258\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:209\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-std::array< size_t, dim+1 > codimOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:255\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:204\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-The grid view that the FE space is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:165\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-BrezziDouglasMariniPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n-FiniteElementMap finiteElementMap_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:256\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:196\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void initializeIndices()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:190\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:214\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n-GridView gridView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:254\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:229\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n Global basis for given pre-basis.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n A generic MixIn class for PreBasis.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n size_type size() const\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n void setSize(const size_type size)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:322\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp\n+typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k >\n+FiniteElementMap\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:329\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind to element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:355\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator,\n+typename FiniteElementMap::FiniteElement, Element > FiniteElement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:332\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename GV::template Codim< 0 >::Entity Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:328\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n+const Element * element_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:365\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:349\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:327\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be\n+RaviartThomasNode(const FiniteElementMap *finiteElementMap)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:334\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return current element, throw if unbound.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:340\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n+FiniteElement finiteElement_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:364\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n+const FiniteElementMap * finiteElementMap_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:366\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:198\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:252\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_\n+std::array< int, dim+1 > dofsPerCodim_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:314\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:244\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+RaviartThomasPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:211\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:206\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:238\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:282\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n+FiniteElementMap finiteElementMap_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:312\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:257\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+The grid view that the FE space is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:205\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:262\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n+GridView gridView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:310\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void initializeIndices()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:230\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+std::array< size_t, dim+1 > codimOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:311\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: periodicbasis.hh File Reference\n+dune-functions: flatmultiindex.hh File Reference\n \n \n \n \n \n \n \n@@ -70,54 +70,37 @@\n \n
    \n
    \n \n-
    periodicbasis.hh File Reference
    \n+Typedefs
    \n+
    flatmultiindex.hh File Reference
    \n
    \n
    \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/containerdescriptors.hh>
    \n-#include <dune/functions/functionspacebases/transformedindexbasis.hh>
    \n+
    #include <array>
    \n+#include <dune/functions/common/multiindex.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet
     Container storing identified indices for a periodic basis. More...
     
    \n \n \n \n \n \n-\n-\n-\n-\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisFactory::Experimental
     
    \n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n

    \n-Functions

    template<class RawPreBasisIndicator , class PIS >
    auto Dune::Functions::BasisFactory::Experimental::periodic (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)
     Create a pre-basis factory that can create a periodic pre-basis.
     

    \n+Typedefs

    template<class size_type >
    using Dune::Functions::FlatMultiIndex = StaticMultiIndex< size_type, 1 >
     A multi-index class with only one level.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,24 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-periodicbasis.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bi_\bn_\bd_\be_\bx_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+flatmultiindex.hh File Reference\n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt\n-\u00a0 Container storing identified indices for a periodic basis. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bp_\be_\br_\bi_\bo_\bd_\bi_\bc\n- (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)\n-\u00a0 Create a pre-basis factory that can create a periodic pre-basis.\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bl_\ba_\bt_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx< size_type, 1 >\n+\u00a0 A multi-index class with only one level.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: periodicbasis.hh Source File\n+dune-functions: flatmultiindex.hh Source File\n \n \n \n \n \n \n \n@@ -74,227 +74,48 @@\n \n \n
    \n
    \n-
    periodicbasis.hh
    \n+
    flatmultiindex.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n
    9
    \n-
    10#include <utility>
    \n-
    11#include <type_traits>
    \n-
    12#include <limits>
    \n-
    13#include <set>
    \n-
    14#include <vector>
    \n-
    15
    \n-\n-\n-\n-
    19
    \n-
    20
    \n-
    21namespace Dune::Functions {
    \n-
    22
    \n-
    23namespace BasisFactory {
    \n-
    24
    \n-
    25// The PeriodicBasis class is in the Experimental namespace because we are
    \n-
    26// not completely sure yet whether we like it. We reserve the right to
    \n-
    27// modify it without advance warning. Use at your own risk!
    \n-
    28
    \n-
    \n-
    29namespace Experimental {
    \n-
    30
    \n-
    31
    \n-
    \n-\n-
    41{
    \n-
    42 using IndexPairSet = std::set<std::pair<std::size_t,std::size_t>>;
    \n-
    43public:
    \n-
    44
    \n-
    \n-
    52 void unifyIndexPair(std::size_t a, std::size_t b)
    \n-
    53 {
    \n-
    54 if (a>b)
    \n-
    55 std::swap(a,b);
    \n-
    56 if (a==b)
    \n-
    57 return;
    \n-
    58 indexPairSet_.insert(std::make_pair(a,b));
    \n-
    59 }
    \n-
    \n-
    60
    \n-
    \n-
    61 const auto& indexPairSet() const
    \n-
    62 {
    \n-
    63 return indexPairSet_;
    \n-
    64 }
    \n-
    \n-
    65
    \n-
    66private:
    \n-
    67 IndexPairSet indexPairSet_;
    \n-
    68};
    \n-
    \n-
    69
    \n-
    70
    \n-
    71
    \n-
    72namespace Impl {
    \n-
    73
    \n-
    74// An index transformation for a TransformedIndexPreBasis
    \n-
    75// implementing periodic functions by merging indices.
    \n-
    76// Currently only flat indices are supported.
    \n-
    77class PeriodicIndexingTransformation
    \n-
    78{
    \n-
    79public:
    \n-
    80
    \n-
    81 static constexpr std::size_t minIndexSize = 1;
    \n-
    82 static constexpr std::size_t maxIndexSize = 1;
    \n-
    83
    \n-
    84 template<class RawPreBasis, class IndexPairSet>
    \n-
    85 PeriodicIndexingTransformation(const RawPreBasis& rawPreBasis, const IndexPairSet& indexPairSet)
    \n-
    86 {
    \n-
    87 static_assert(RawPreBasis::maxMultiIndexSize==1, "PeriodicIndexingTransformation is only implemented for flat multi-indices");
    \n-
    88 std::size_t invalid = {std::numeric_limits<std::size_t>::max()};
    \n-
    89 mappedIdx_.resize(rawPreBasis.size(), invalid);
    \n-
    90 numIndices_ = 0;
    \n-
    91 std::size_t i = 0;
    \n-
    92 for(const auto& [a, b] : indexPairSet)
    \n-
    93 {
    \n-
    94 for(; i<=a; ++i)
    \n-
    95 if (mappedIdx_[i] == invalid)
    \n-
    96 mappedIdx_[i] = numIndices_++;
    \n-
    97 mappedIdx_[b] = mappedIdx_[a];
    \n-
    98 }
    \n-
    99 for(; i<rawPreBasis.size(); ++i)
    \n-
    100 if (mappedIdx_[i] == invalid)
    \n-
    101 mappedIdx_[i] = numIndices_++;
    \n-
    102 }
    \n-
    103
    \n-
    104 template<class MultiIndex, class PreBasis>
    \n-
    105 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const
    \n-
    106 {
    \n-
    107 multiIndex = {{ mappedIdx_[multiIndex[0]] }};
    \n-
    108 }
    \n-
    109
    \n-
    110 template<class Prefix, class PreBasis>
    \n-
    111 std::size_t size(const Prefix& prefix, const PreBasis& preBasis) const
    \n-
    112 {
    \n-
    113 if (prefix.size() == 1)
    \n-
    114 return 0;
    \n-
    115 return numIndices_;
    \n-
    116 }
    \n-
    117
    \n-
    118 template<class PreBasis>
    \n-
    119 auto dimension(const PreBasis& preBasis) const
    \n-
    120 {
    \n-
    121 return numIndices_;
    \n-
    122 }
    \n-
    123
    \n-
    125 template<class PreBasis>
    \n-
    126 auto containerDescriptor(const PreBasis& preBasis) const
    \n-
    127 {
    \n-\n-
    129 }
    \n-
    130
    \n-
    131private:
    \n-
    132 std::vector<std::size_t> mappedIdx_;
    \n-
    133 std::size_t numIndices_;
    \n-
    134};
    \n-
    135
    \n-
    136
    \n-
    137
    \n-
    138template<class RawPreBasisIndicator>
    \n-
    139class PeriodicPreBasisFactory
    \n-
    140{
    \n-
    141public:
    \n-
    142 PeriodicPreBasisFactory()
    \n-
    143 {}
    \n-
    144
    \n-
    145 template<class RPBI, class PIS>
    \n-
    146 PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&& periodicIndexSet) :
    \n-
    147 rawPreBasisIndicator_(std::forward<RPBI>(rawPreBasisIndicator)),
    \n-
    148 periodicIndexSet_(std::forward<PIS>(periodicIndexSet))
    \n-
    149 {}
    \n-
    150
    \n-
    151 template<class GridView,
    \n-
    152 std::enable_if_t<models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n-
    153 auto operator()(const GridView& gridView) const
    \n-
    154 {
    \n-
    155 const auto& rawPreBasis = rawPreBasisIndicator_.preBasis();
    \n-
    156 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n-
    157 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n-
    158 }
    \n-
    159
    \n-
    160 template<class GridView,
    \n-
    161 std::enable_if_t<models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n-
    162 auto operator()(const GridView& gridView) const
    \n-
    163 {
    \n-
    164 const auto& rawPreBasis = rawPreBasisIndicator_;
    \n-
    165 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n-
    166 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n-
    167 }
    \n-
    168
    \n-
    169 template<class GridView,
    \n-
    170 std::enable_if_t<not models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0,
    \n-
    171 std::enable_if_t<not models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n-
    172 auto operator()(const GridView& gridView) const
    \n-
    173 {
    \n-
    174 auto rawPreBasis = rawPreBasisIndicator_(gridView);
    \n-
    175 rawPreBasis.initializeIndices();
    \n-
    176 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n-
    177 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n-
    178 }
    \n-
    179
    \n-
    180private:
    \n-
    181 RawPreBasisIndicator rawPreBasisIndicator_;
    \n-
    182 PeriodicIndexSet periodicIndexSet_;
    \n-
    183};
    \n-
    184
    \n-
    185} // end namespace BasisFactory::Impl
    \n-
    186
    \n-
    187
    \n-
    188
    \n-
    202template<class RawPreBasisIndicator, class PIS>
    \n-
    \n-\n-
    204 RawPreBasisIndicator&& rawPreBasisIndicator,
    \n-
    205 PIS&& periodicIndexSet
    \n-
    206 )
    \n-
    207{
    \n-
    208 return Impl::PeriodicPreBasisFactory<std::decay_t<RawPreBasisIndicator>>(
    \n-
    209 std::forward<RawPreBasisIndicator>(rawPreBasisIndicator),
    \n-
    210 std::forward<PIS>(periodicIndexSet));
    \n-
    211}
    \n-
    \n-
    212
    \n-
    213} // end namespace Experimental
    \n-
    \n-
    214
    \n-
    215} // end namespace BasisFactory
    \n-
    216
    \n-
    217} // end namespace Dune::Functions
    \n-
    218
    \n-
    219#endif // DUNE_FUFEM_PERIODICBASIS_HH
    \n-\n-\n-
    auto periodic(RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)
    Create a pre-basis factory that can create a periodic pre-basis.
    Definition periodicbasis.hh:203
    \n-
    Definition polynomial.hh:18
    \n-
    auto containerDescriptor(const PreBasis &preBasis)
    Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
    Definition containerdescriptors.hh:73
    \n-
    Container storing identified indices for a periodic basis.
    Definition periodicbasis.hh:41
    \n-
    void unifyIndexPair(std::size_t a, std::size_t b)
    Insert a pair of indices.
    Definition periodicbasis.hh:52
    \n-
    const auto & indexPairSet() const
    Definition periodicbasis.hh:61
    \n-
    A pre-basis transforming multi-indices.
    Definition transformedindexbasis.hh:55
    \n-\n+
    10#include <array>
    \n+
    11
    \n+\n+
    13
    \n+
    14namespace Dune {
    \n+
    15namespace Functions {
    \n+
    16
    \n+
    17
    \n+
    18
    \n+
    34template<class size_type>
    \n+\n+
    36
    \n+
    37
    \n+
    38
    \n+
    39} // end namespace Functions
    \n+
    40} // end namespace Dune
    \n+
    41
    \n+
    42#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n+\n+
    Definition polynomial.hh:17
    \n+
    A statically sized MultiIndex type.
    Definition multiindex.hh:29
    \n+
    A statically sized MultiIndex type.
    Definition multiindex.hh:54
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,244 +1,49 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-periodicbasis.hh\n+flatmultiindex.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n 9\n-10#include \n-11#include \n-12#include \n-13#include \n-14#include \n-15\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bi_\bn_\bd_\be_\bx_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-19\n-20\n-21namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n-22\n-23namespace BasisFactory {\n-24\n-25// The PeriodicBasis class is in the Experimental namespace because we are\n-26// not completely sure yet whether we like it. We reserve the right to\n-27// modify it without advance warning. Use at your own risk!\n-28\n-_\b2_\b9namespace Experimental {\n-30\n-31\n-_\b4_\b0class _\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt\n-41{\n-42 using IndexPairSet = std::set>;\n-43public:\n-44\n-_\b5_\b2 void _\bu_\bn_\bi_\bf_\by_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br(std::size_t a, std::size_t b)\n-53 {\n-54 if (a>b)\n-55 std::swap(a,b);\n-56 if (a==b)\n-57 return;\n-58 indexPairSet_.insert(std::make_pair(a,b));\n-59 }\n-60\n-_\b6_\b1 const auto& _\bi_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bS_\be_\bt() const\n-62 {\n-63 return indexPairSet_;\n-64 }\n-65\n-66private:\n-67 IndexPairSet indexPairSet_;\n-68};\n-69\n-70\n-71\n-72namespace Impl {\n-73\n-74// An index transformation for a TransformedIndexPreBasis\n-75// implementing periodic functions by merging indices.\n-76// Currently only flat indices are supported.\n-77class PeriodicIndexingTransformation\n-78{\n-79public:\n-80\n-81 static constexpr std::size_t minIndexSize = 1;\n-82 static constexpr std::size_t maxIndexSize = 1;\n-83\n-84 template\n-85 PeriodicIndexingTransformation(const RawPreBasis& rawPreBasis, const\n-IndexPairSet& indexPairSet)\n-86 {\n-87 static_assert(RawPreBasis::maxMultiIndexSize==1,\n-\"PeriodicIndexingTransformation is only implemented for flat multi-indices\");\n-88 std::size_t invalid = {std::numeric_limits::max()};\n-89 mappedIdx_.resize(rawPreBasis.size(), invalid);\n-90 numIndices_ = 0;\n-91 std::size_t i = 0;\n-92 for(const auto& [a, b] : indexPairSet)\n-93 {\n-94 for(; i<=a; ++i)\n-95 if (mappedIdx_[i] == invalid)\n-96 mappedIdx_[i] = numIndices_++;\n-97 mappedIdx_[b] = mappedIdx_[a];\n-98 }\n-99 for(; i\n-105 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const\n-106 {\n-107 multiIndex = {{ mappedIdx_[multiIndex[0]] }};\n-108 }\n-109\n-110 template\n-111 std::size_t size(const Prefix& prefix, const PreBasis& preBasis) const\n-112 {\n-113 if (prefix.size() == 1)\n-114 return 0;\n-115 return numIndices_;\n-116 }\n-117\n-118 template\n-119 auto dimension(const PreBasis& preBasis) const\n-120 {\n-121 return numIndices_;\n-122 }\n-123\n-125 template\n-126 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(const PreBasis& preBasis) const\n-127 {\n-128 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(preBasis);\n-129 }\n-130\n-131private:\n-132 std::vector mappedIdx_;\n-133 std::size_t numIndices_;\n-134};\n-135\n-136\n-137\n-138template\n-139class PeriodicPreBasisFactory\n-140{\n-141public:\n-142 PeriodicPreBasisFactory()\n-143 {}\n-144\n-145 template\n-146 PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&&\n-periodicIndexSet) :\n-147 rawPreBasisIndicator_(std::forward(rawPreBasisIndicator)),\n-148 periodicIndexSet_(std::forward(periodicIndexSet))\n-149 {}\n-150\n-151 template,RawPreBasisIndicator>(), int> = 0>\n-153 auto operator()(const GridView& gridView) const\n-154 {\n-155 const auto& rawPreBasis = rawPreBasisIndicator_.preBasis();\n-156 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n-periodicIndexSet_.indexPairSet());\n-157 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(std::move\n-(rawPreBasis), std::move(transformation));\n-158 }\n-159\n-160 template,RawPreBasisIndicator>\n-(), int> = 0>\n-162 auto operator()(const GridView& gridView) const\n-163 {\n-164 const auto& rawPreBasis = rawPreBasisIndicator_;\n-165 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n-periodicIndexSet_.indexPairSet());\n-166 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(std::move\n-(rawPreBasis), std::move(transformation));\n-167 }\n-168\n-169 template,RawPreBasisIndicator>(), int> = 0,\n-171 std::enable_if_t,RawPreBasisIndicator>(), int> = 0>\n-172 auto operator()(const GridView& gridView) const\n-173 {\n-174 auto rawPreBasis = rawPreBasisIndicator_(gridView);\n-175 rawPreBasis.initializeIndices();\n-176 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n-periodicIndexSet_.indexPairSet());\n-177 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(std::move\n-(rawPreBasis), std::move(transformation));\n-178 }\n-179\n-180private:\n-181 RawPreBasisIndicator rawPreBasisIndicator_;\n-182 PeriodicIndexSet periodicIndexSet_;\n-183};\n-184\n-185} // end namespace BasisFactory::Impl\n-186\n-187\n-188\n-202template\n-_\b2_\b0_\b3auto _\bp_\be_\br_\bi_\bo_\bd_\bi_\bc(\n-204 RawPreBasisIndicator&& rawPreBasisIndicator,\n-205 PIS&& periodicIndexSet\n-206 )\n-207{\n-208 return Impl::PeriodicPreBasisFactory>(\n-209 std::forward(rawPreBasisIndicator),\n-210 std::forward(periodicIndexSet));\n-211}\n-212\n-213} // end namespace Experimental\n-214\n-215} // end namespace BasisFactory\n-216\n-217} // end namespace Dune::Functions\n-218\n-219#endif // DUNE_FUFEM_PERIODICBASIS_HH\n-_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bi_\bn_\bd_\be_\bx_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bp_\be_\br_\bi_\bo_\bd_\bi_\bc\n-auto periodic(RawPreBasisIndicator &&rawPreBasisIndicator, PIS\n-&&periodicIndexSet)\n-Create a pre-basis factory that can create a periodic pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn periodicbasis.hh:203\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor(const PreBasis &preBasis)\n-Return the container descriptor of the pre-basis, if defined, otherwise\n-ContainerDescriptor::Unknown.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt\n-Container storing identified indices for a periodic basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn periodicbasis.hh:41\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt_\b:_\b:_\bu_\bn_\bi_\bf_\by_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br\n-void unifyIndexPair(std::size_t a, std::size_t b)\n-Insert a pair of indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn periodicbasis.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bS_\be_\bt\n-const auto & indexPairSet() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn periodicbasis.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-A pre-basis transforming multi-indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:55\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+10#include \n+11\n+12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+13\n+14namespace _\bD_\bu_\bn_\be {\n+15namespace Functions {\n+16\n+17\n+18\n+34template\n+_\b3_\b5using _\bF_\bl_\ba_\bt_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b>;\n+36\n+37\n+38\n+39} // end namespace Functions\n+40} // end namespace Dune\n+41\n+42#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+A statically sized MultiIndex type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:29\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>\n+A statically sized MultiIndex type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:54\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: boundarydofs.hh File Reference\n+dune-functions: basistags.hh File Reference\n \n \n \n \n \n \n \n@@ -70,37 +70,80 @@\n \n \n
    \n \n-
    boundarydofs.hh File Reference
    \n+
    basistags.hh File Reference
    \n
    \n
    \n-
    #include <utility>
    \n-#include <dune/functions/functionspacebases/subentitydofs.hh>
    \n+
    #include <type_traits>
    \n+#include <dune/common/concept.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n+Classes

    struct  Dune::Functions::Concept::IndexMergingStrategy
     
    struct  Dune::Functions::BasisFactory::IndexMergingStrategy
     Base class for index merging strategies to simplify detection. More...
     
    struct  Dune::Functions::BasisFactory::FlatLexicographic
     Lexicographic merging of direct children without blocking. More...
     
    struct  Dune::Functions::BasisFactory::FlatInterleaved
     Interleaved merging of direct children without blocking. More...
     
    struct  Dune::Functions::BasisFactory::BlockedLexicographic
     Lexicographic merging of direct children with blocking (i.e. creating one block per direct child). More...
     
    struct  Dune::Functions::BasisFactory::BlockedInterleaved
     Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each). More...
     
    \n \n \n \n \n \n+\n+\n+\n+\n+\n+\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::Concept
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    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>
    void Dune::Functions::forEachBoundaryDOF (const Basis &basis, F &&f)
     Loop over all DOFs on the boundary.
     
    template<typename T >
    static constexpr bool Dune::Functions::Concept::isIndexMergingStrategy ()
     
    template<typename T >
    static constexpr bool Dune::Functions::Concept::isIndexMergingStrategy (T &&t)
     
    void Dune::Functions::BasisFactory::registerIndexMergingStrategy (IndexMergingStrategy)
     
    constexpr FlatLexicographic Dune::Functions::BasisFactory::flatLexicographic ()
     Creates a lexicographic merging of direct children without blocking.
     
    constexpr FlatInterleaved Dune::Functions::BasisFactory::flatInterleaved ()
     Creates an interleaved merging of direct children without blocking.
     
    constexpr BlockedLexicographic Dune::Functions::BasisFactory::blockedLexicographic ()
     Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
     
    constexpr BlockedInterleaved Dune::Functions::BasisFactory::blockedInterleaved ()
     Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each).
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,80 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-boundarydofs.hh File Reference\n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bs_\bu_\bb_\be_\bn_\bt_\bi_\bt_\by_\bd_\bo_\bf_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+basistags.hh File Reference\n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+\u00a0 Base class for index merging strategies to simplify detection. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+\u00a0 Lexicographic merging of direct children without blocking. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+\u00a0 Interleaved merging of direct children without blocking. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+\u00a0 Lexicographic merging of direct children with blocking (i.e. creating\n+ one block per direct child). _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+\u00a0 Interleaved merging of direct children with blocking (i.e. creating\n+ blocks at the leaves containing one leaf per child each). _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template >()\n-(0, std::declval< typename Basis::LocalView >(), std::declval< typename\n-Basis::GridView::Intersection >()), 0) = 0>\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF (const Basis &basis, F &&f)\n-\u00a0 Loop over all DOFs on the boundary.\n+template\n+ static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:\n+ _\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by ()\n+\u00a0\n+template\n+ static constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:\n+ _\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by (T &&t)\n+\u00a0\n+ void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+ _\br_\be_\bg_\bi_\bs_\bt_\be_\br_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+ (_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by)\n+\u00a0\n+ constexpr _\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+ _\bf_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc ()\n+\u00a0 Creates a lexicographic merging of direct\n+ children without blocking.\n+\u00a0\n+ constexpr _\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bf_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+ ()\n+\u00a0 Creates an interleaved merging of direct\n+ children without blocking.\n+\u00a0\n+constexpr _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+ _\bb_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc ()\n+ Creates a lexicographic merging of direct\n+\u00a0 children with blocking (i.e. creating one block\n+ per direct child).\n+\u00a0\n+ constexpr _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n+ _\bb_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd ()\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 \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: boundarydofs.hh Source File\n+dune-functions: basistags.hh Source File\n \n \n \n \n \n \n \n@@ -74,105 +74,150 @@\n \n \n
    \n
    \n-
    boundarydofs.hh
    \n+
    basistags.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n
    9
    \n-
    10#include <utility>
    \n-
    11
    \n-\n-
    13
    \n-
    14namespace Dune {
    \n-
    15namespace Functions {
    \n-
    16
    \n+
    10#include <type_traits>
    \n+
    11#include <dune/common/concept.hh>
    \n+
    12
    \n+
    13namespace Dune {
    \n+
    14namespace Functions {
    \n+
    15
    \n+
    16 namespace Concept {
    \n
    17
    \n-
    18
    \n-
    38template<class Basis, class F,
    \n-
    39 decltype(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::LocalView>(),std::declval<typename Basis::GridView::Intersection>()), 0) = 0>
    \n-
    \n-
    40void forEachBoundaryDOF(const Basis& basis, F&& f)
    \n-
    41{
    \n-
    42 auto localView = basis.localView();
    \n-
    43 auto seDOFs = subEntityDOFs(basis);
    \n-
    44 const auto& gridView = basis.gridView();
    \n-
    45 for(auto&& element : elements(gridView))
    \n-
    46 if (element.hasBoundaryIntersections())
    \n-
    47 {
    \n-
    48 localView.bind(element);
    \n-
    49 for(const auto& intersection: intersections(gridView, element))
    \n-
    50 if (intersection.boundary())
    \n-
    51 for(auto localIndex: seDOFs.bind(localView,intersection))
    \n-
    52 f(localIndex, localView, intersection);
    \n-
    53 }
    \n-
    54}
    \n-
    \n-
    55
    \n-
    56
    \n-
    57
    \n-
    75template<class Basis, class F,
    \n-
    76 decltype(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::LocalView>()),0) = 0>
    \n-
    77void forEachBoundaryDOF(const Basis& basis, F&& f)
    \n-
    78{
    \n-
    79 auto localView = basis.localView();
    \n-
    80 auto seDOFs = subEntityDOFs(basis);
    \n-
    81 const auto& gridView = basis.gridView();
    \n-
    82 for(auto&& element : elements(gridView))
    \n-
    83 if (element.hasBoundaryIntersections())
    \n-
    84 {
    \n-
    85 localView.bind(element);
    \n-
    86 for(const auto& intersection: intersections(gridView, element))
    \n-
    87 if (intersection.boundary())
    \n-
    88 for(auto localIndex: seDOFs.bind(localView,intersection))
    \n-
    89 f(localIndex, localView);
    \n-
    90 }
    \n-
    91}
    \n-
    92
    \n-
    93
    \n-
    94
    \n-
    111template<class Basis, class F,
    \n-
    112 decltype(std::declval<std::decay_t<F>>()(std::declval<typename Basis::MultiIndex>()),0) = 0>
    \n-
    113void forEachBoundaryDOF(const Basis& basis, F&& f)
    \n-
    114{
    \n-
    115 auto localView = basis.localView();
    \n-
    116 auto seDOFs = subEntityDOFs(basis);
    \n-
    117 const auto& gridView = basis.gridView();
    \n-
    118 for(auto&& element : elements(gridView))
    \n-
    119 if (element.hasBoundaryIntersections())
    \n-
    120 {
    \n-
    121 localView.bind(element);
    \n-
    122 for(const auto& intersection: intersections(gridView, element))
    \n-
    123 if (intersection.boundary())
    \n-
    124 for(auto localIndex: seDOFs.bind(localView,intersection))
    \n-
    125 f(localView.index(localIndex));
    \n-
    126 }
    \n-
    127}
    \n-
    128
    \n-
    129
    \n-
    130
    \n-
    131} // namespace Functions
    \n-
    132} // namespace Dune
    \n-
    133
    \n-
    134#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n-\n-
    auto subEntityDOFs(const T &)
    Create SubEntityDOFs object.
    Definition subentitydofs.hh:164
    \n-
    void forEachBoundaryDOF(const Basis &basis, F &&f)
    Loop over all DOFs on the boundary.
    Definition boundarydofs.hh:40
    \n+
    \n+\n+
    19 {
    \n+
    20 template<typename T>
    \n+
    21 auto require(T&& t) -> decltype(
    \n+
    22 registerIndexMergingStrategy(t)
    \n+
    23 );
    \n+
    24 };
    \n+
    \n+
    25
    \n+
    26 template<typename T>
    \n+
    \n+
    27 static constexpr bool isIndexMergingStrategy()
    \n+
    28 {
    \n+
    29 return models<Concept::IndexMergingStrategy,T>();
    \n+
    30 }
    \n+
    \n+
    31
    \n+
    32 template<typename T>
    \n+
    \n+
    33 static constexpr bool isIndexMergingStrategy(T&& t)
    \n+
    34 {
    \n+
    35 return models<Concept::IndexMergingStrategy,std::decay_t<T>>();
    \n+
    36 }
    \n+
    \n+
    37
    \n+
    38 } // namespace Concept
    \n+
    39
    \n+
    40
    \n+
    \n+
    41namespace BasisFactory {
    \n+
    42
    \n+\n+
    49
    \n+\n+
    51
    \n+
    \n+\n+\n+
    84 {};
    \n+
    \n+
    85
    \n+
    \n+\n+
    117 : public IndexMergingStrategy
    \n+
    118 {};
    \n+
    \n+
    119
    \n+
    \n+\n+
    151 : public IndexMergingStrategy
    \n+
    152 {};
    \n+
    \n+
    153
    \n+\n+
    185
    \n+
    186
    \n+
    \n+\n+
    193 {
    \n+
    194 return {};
    \n+
    195 }
    \n+
    \n+
    196
    \n+
    \n+\n+
    203 {
    \n+
    204 return {};
    \n+
    205 }
    \n+
    \n+
    206
    \n+
    \n+\n+
    213 {
    \n+
    214 return {};
    \n+
    215 }
    \n+
    \n+
    216
    \n+
    \n+\n+
    223 {
    \n+
    224 return {};
    \n+
    225 }
    \n+
    \n+
    226
    \n+
    227} // end namespace BasisFactory
    \n+
    \n+
    228
    \n+
    229// Backward compatibility
    \n+
    \n+
    230namespace [[deprecated("Will be removed after Dune 2.10")]] BasisBuilder {
    \n+
    231
    \n+
    232 using namespace BasisFactory;
    \n+
    233
    \n+
    234}
    \n+
    \n+
    235
    \n+
    236} // end namespace Functions
    \n+
    237} // end namespace Dune
    \n+
    238
    \n+
    239
    \n+
    240#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n+
    constexpr FlatLexicographic flatLexicographic()
    Creates a lexicographic merging of direct children without blocking.
    Definition basistags.hh:192
    \n+
    constexpr BlockedInterleaved blockedInterleaved()
    Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves c...
    Definition basistags.hh:222
    \n+
    constexpr FlatInterleaved flatInterleaved()
    Creates an interleaved merging of direct children without blocking.
    Definition basistags.hh:202
    \n+
    constexpr BlockedLexicographic blockedLexicographic()
    Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct ...
    Definition basistags.hh:212
    \n
    Definition polynomial.hh:17
    \n+
    static constexpr bool isIndexMergingStrategy()
    Definition basistags.hh:27
    \n+
    void registerIndexMergingStrategy(IndexMergingStrategy)
    \n+\n+
    auto require(T &&t) -> decltype(registerIndexMergingStrategy(t))
    \n+
    Base class for index merging strategies to simplify detection.
    Definition basistags.hh:48
    \n+
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:84
    \n+
    Interleaved merging of direct children without blocking.
    Definition basistags.hh:118
    \n+
    Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
    Definition basistags.hh:152
    \n+
    Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...
    Definition basistags.hh:184
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,109 +1,154 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-boundarydofs.hh\n+basistags.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n 9\n-10#include \n-11\n-12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bs_\bu_\bb_\be_\bn_\bt_\bi_\bt_\by_\bd_\bo_\bf_\bs_\b._\bh_\bh>\n-13\n-14namespace _\bD_\bu_\bn_\be {\n-15namespace Functions {\n-16\n+10#include \n+11#include \n+12\n+13namespace _\bD_\bu_\bn_\be {\n+14namespace Functions {\n+15\n+16 namespace Concept {\n 17\n-18\n-38template>()(0, std::declval(),std::declval()), 0) = 0>\n-_\b4_\b0void _\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF(const Basis& basis, F&& f)\n-41{\n-42 auto localView = basis.localView();\n-43 auto seDOFs = _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(basis);\n-44 const auto& gridView = basis.gridView();\n-45 for(auto&& element : elements(gridView))\n-46 if (element.hasBoundaryIntersections())\n-47 {\n-48 localView.bind(element);\n-49 for(const auto& intersection: intersections(gridView, element))\n-50 if (intersection.boundary())\n-51 for(auto localIndex: seDOFs.bind(localView,intersection))\n-52 f(localIndex, localView, intersection);\n-53 }\n-54}\n-55\n-56\n-57\n-75template>()(0, std::declval()),0) = 0>\n-77void _\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF(const Basis& basis, F&& f)\n-78{\n-79 auto localView = basis.localView();\n-80 auto seDOFs = _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(basis);\n-81 const auto& gridView = basis.gridView();\n-82 for(auto&& element : elements(gridView))\n-83 if (element.hasBoundaryIntersections())\n-84 {\n-85 localView.bind(element);\n-86 for(const auto& intersection: intersections(gridView, element))\n-87 if (intersection.boundary())\n-88 for(auto localIndex: seDOFs.bind(localView,intersection))\n-89 f(localIndex, localView);\n-90 }\n-91}\n-92\n-93\n-94\n-111template>()(std::declval()),0) = 0>\n-113void _\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF(const Basis& basis, F&& f)\n-114{\n-115 auto localView = basis.localView();\n-116 auto seDOFs = _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(basis);\n-117 const auto& gridView = basis.gridView();\n-118 for(auto&& element : elements(gridView))\n-119 if (element.hasBoundaryIntersections())\n-120 {\n-121 localView.bind(element);\n-122 for(const auto& intersection: intersections(gridView, element))\n-123 if (intersection.boundary())\n-124 for(auto localIndex: seDOFs.bind(localView,intersection))\n-125 f(localView.index(localIndex));\n-126 }\n-127}\n-128\n-129\n-130\n-131} // namespace Functions\n-132} // namespace Dune\n-133\n-134#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n-_\bs_\bu_\bb_\be_\bn_\bt_\bi_\bt_\by_\bd_\bo_\bf_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n-auto subEntityDOFs(const T &)\n-Create SubEntityDOFs object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:164\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF\n-void forEachBoundaryDOF(const Basis &basis, F &&f)\n-Loop over all DOFs on the boundary.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn boundarydofs.hh:40\n+_\b1_\b8 struct _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+19 {\n+20 template\n+_\b2_\b1 auto _\br_\be_\bq_\bu_\bi_\br_\be(T&& t) -> decltype(\n+22 registerIndexMergingStrategy(t)\n+23 );\n+24 };\n+25\n+26 template\n+_\b2_\b7 static constexpr bool _\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by()\n+28 {\n+29 return models();\n+30 }\n+31\n+32 template\n+_\b3_\b3 static constexpr bool _\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by(T&& t)\n+34 {\n+35 return models>();\n+36 }\n+37\n+38 } // namespace Concept\n+39\n+40\n+_\b4_\b1namespace BasisFactory {\n+42\n+_\b4_\b8 struct _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by {};\n+49\n+_\b5_\b0 void _\br_\be_\bg_\bi_\bs_\bt_\be_\br_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by(_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by);\n+51\n+_\b8_\b2 struct _\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+83 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+84 {};\n+85\n+_\b1_\b1_\b6 struct _\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+117 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+118 {};\n+119\n+_\b1_\b5_\b0 struct _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+151 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+152 {};\n+153\n+_\b1_\b8_\b4 struct _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by {};\n+185\n+186\n+_\b1_\b9_\b2 constexpr _\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc _\bf_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc()\n+193 {\n+194 return {};\n+195 }\n+196\n+_\b2_\b0_\b2 constexpr _\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd _\bf_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd()\n+203 {\n+204 return {};\n+205 }\n+206\n+_\b2_\b1_\b2 constexpr _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc _\bb_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc()\n+213 {\n+214 return {};\n+215 }\n+216\n+_\b2_\b2_\b2 constexpr _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd _\bb_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd()\n+223 {\n+224 return {};\n+225 }\n+226\n+227} // end namespace BasisFactory\n+228\n+229// Backward compatibility\n+_\b2_\b3_\b0namespace [[deprecated(\"Will be removed after Dune 2.10\")]] BasisBuilder {\n+231\n+232 using namespace BasisFactory;\n+233\n+234}\n+235\n+236} // end namespace Functions\n+237} // end namespace Dune\n+238\n+239\n+240#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bf_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+constexpr FlatLexicographic flatLexicographic()\n+Creates a lexicographic merging of direct children without blocking.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:192\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+constexpr BlockedInterleaved blockedInterleaved()\n+Creates an interleaved merging of direct children with blocking (i.e. creating\n+blocks at the leaves c...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:222\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bf_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+constexpr FlatInterleaved flatInterleaved()\n+Creates an interleaved merging of direct children without blocking.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:202\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+constexpr BlockedLexicographic blockedLexicographic()\n+Creates a lexicographic merging of direct children with blocking (i.e. creating\n+one block per direct ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:212\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+static constexpr bool isIndexMergingStrategy()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:27\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bg_\bi_\bs_\bt_\be_\br_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+void registerIndexMergingStrategy(IndexMergingStrategy)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:19\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be\n+auto require(T &&t) -> decltype(registerIndexMergingStrategy(t))\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+Base class for index merging strategies to simplify detection.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+Lexicographic merging of direct children without blocking.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:84\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+Interleaved merging of direct children without blocking.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:118\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+Lexicographic merging of direct children with blocking (i.e. creating one block\n+per direct child).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\be_\bd_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+Interleaved merging of direct children with blocking (i.e. creating blocks at\n+the leaves containing o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:184\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: flatmultiindex.hh File Reference\n+dune-functions: rannacherturekbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -70,37 +70,62 @@\n \n \n
    \n \n-
    flatmultiindex.hh File Reference
    \n+Typedefs |\n+Functions
    \n+
    rannacherturekbasis.hh File Reference
    \n \n
    \n-
    #include <array>
    \n-#include <dune/functions/common/multiindex.hh>
    \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+#include <dune/functions/functionspacebases/leafprebasismixin.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+\n+\n+

    \n+Classes

    class  Dune::Functions::RannacherTurekPreBasis< GV >
     Pre-basis for a Rannacher-Turek basis. More...
     
    class  Dune::Functions::RannacherTurekNode< GV >
     
    \n \n \n \n \n \n+\n+\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n+

    \n Typedefs

    template<class size_type >
    using Dune::Functions::FlatMultiIndex = StaticMultiIndex< size_type, 1 >
     A multi-index class with only one level.
     
    template<typename GV >
    using Dune::Functions::RannacherTurekBasis = DefaultGlobalBasis< RannacherTurekPreBasis< GV > >
     Rannacher-Turek basis.
     
    \n+\n+\n+\n+\n+\n

    \n+Functions

    template<class Dummy = void>
    auto Dune::Functions::BasisFactory::rannacherTurek ()
     Create a pre-basis factory that can create a Rannacher-Turek pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,44 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-flatmultiindex.hh File Reference\n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+rannacherturekbasis.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b _\b>\n+\u00a0 Pre-basis for a Rannacher-Turek basis. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bl_\ba_\bt_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx< size_type, 1 >\n-\u00a0 A multi-index class with only one level.\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV > >\n+\u00a0 Rannacher-Turek basis.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk ()\n+\u00a0 Create a pre-basis factory that can create a Rannacher-Turek pre-basis.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: flatmultiindex.hh Source File\n+dune-functions: rannacherturekbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,48 +74,268 @@\n \n \n
    \n
    \n-
    flatmultiindex.hh
    \n+
    rannacherturekbasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n
    9
    \n-
    10#include <array>
    \n+
    10#include <dune/common/exceptions.hh>
    \n
    11
    \n-\n+
    12#include <dune/grid/common/capabilities.hh>
    \n
    13
    \n-
    14namespace Dune {
    \n-
    15namespace Functions {
    \n-
    16
    \n+
    14#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n+
    15#include <dune/localfunctions/rannacherturek.hh>
    \n+
    16#include <dune/localfunctions/crouzeixraviart.hh>
    \n
    17
    \n-
    18
    \n-
    34template<class size_type>
    \n-\n+\n+\n+\n+
    21
    \n+
    22
    \n+
    23namespace Dune {
    \n+
    24namespace Functions {
    \n+
    25
    \n+
    26// *****************************************************************************
    \n+
    27// This is the reusable part of the basis. It contains
    \n+
    28//
    \n+
    29// RannacherTurekPreBasis
    \n+
    30// RannacherTurekNode
    \n+
    31//
    \n+
    32// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    33// state. These components do _not_ depend on the global basis and local view
    \n+
    34// and can be used without a global basis.
    \n+
    35// *****************************************************************************
    \n
    36
    \n-
    37
    \n-
    38
    \n-
    39} // end namespace Functions
    \n-
    40} // end namespace Dune
    \n-
    41
    \n-
    42#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n-\n+
    37template<typename GV>
    \n+
    38class RannacherTurekNode;
    \n+
    39
    \n+
    40template<typename GV>
    \n+
    41class RannacherTurekPreBasis;
    \n+
    42
    \n+
    55template<typename GV>
    \n+
    \n+\n+
    57 public LeafPreBasisMixin< RannacherTurekPreBasis<GV> >
    \n+
    58{
    \n+
    59 static const int dim = GV::dimension;
    \n+
    60
    \n+
    61public:
    \n+
    62
    \n+
    64 using GridView = GV;
    \n+
    65
    \n+
    67 using size_type = std::size_t;
    \n+
    68
    \n+\n+
    71
    \n+
    \n+\n+
    74 gridView_(gv)
    \n+
    75 {
    \n+
    76 for(auto type : gv.indexSet().types(0))
    \n+
    77 if (!type.isSimplex() && !type.isCube())
    \n+
    78 DUNE_THROW(Dune::NotImplemented, "Rannacher-Turek or Crouzeix-Raviart elements are only implemented for grids with simplex or cube elements.");
    \n+
    79 }
    \n+
    \n+
    80
    \n+
    \n+\n+
    83 {}
    \n+
    \n+
    84
    \n+
    \n+
    86 const GridView& gridView() const
    \n+
    87 {
    \n+
    88 return gridView_;
    \n+
    89 }
    \n+
    \n+
    90
    \n+
    \n+
    92 void update (const GridView& gv)
    \n+
    93 {
    \n+
    94 gridView_ = gv;
    \n+
    95 }
    \n+
    \n+
    96
    \n+
    \n+\n+
    101 {
    \n+
    102 return Node{};
    \n+
    103 }
    \n+
    \n+
    104
    \n+
    \n+\n+
    107 {
    \n+
    108 return (size_type)(gridView_.size(1));
    \n+
    109 }
    \n+
    \n+
    110
    \n+
    \n+\n+
    113 {
    \n+
    114 return 2*GV::dimension;
    \n+
    115 }
    \n+
    \n+
    116
    \n+
    117 template<typename It>
    \n+
    \n+
    118 It indices(const Node& node, It it) const
    \n+
    119 {
    \n+
    120 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n+
    121 {
    \n+
    122 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    123 const auto& gridIndexSet = gridView().indexSet();
    \n+
    124 const auto& element = node.element();
    \n+
    125
    \n+
    126 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity(),1)) }};
    \n+
    127 }
    \n+
    128 return it;
    \n+
    129 }
    \n+
    \n+
    130
    \n+
    131protected:
    \n+\n+
    133};
    \n+
    \n+
    134
    \n+
    135
    \n+
    136
    \n+
    137template<typename GV>
    \n+
    \n+\n+
    139 public LeafBasisNode
    \n+
    140{
    \n+
    141 static const int dim = GV::dimension;
    \n+
    142 static const int maxSize = 2*dim;
    \n+
    143
    \n+
    144 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n+
    145
    \n+
    146 using CubeFiniteElement = RannacherTurekLocalFiniteElement<typename GV::ctype,double,dim>;
    \n+
    147 using SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement<typename GV::ctype,double,dim>;
    \n+
    148
    \n+
    149 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n+
    150 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n+
    151
    \n+
    152public:
    \n+
    153
    \n+
    154 using size_type = std::size_t;
    \n+
    155 using Element = typename GV::template Codim<0>::Entity;
    \n+
    156 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n+
    157 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n+
    158 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n+
    159
    \n+
    \n+\n+\n+
    162 element_(nullptr)
    \n+
    163 {}
    \n+
    \n+
    164
    \n+
    \n+
    166 const Element& element() const
    \n+
    167 {
    \n+
    168 return *element_;
    \n+
    169 }
    \n+
    \n+
    170
    \n+
    \n+\n+
    176 {
    \n+
    177 return finiteElement_;
    \n+
    178 }
    \n+
    \n+
    179
    \n+
    \n+
    181 void bind(const Element& e)
    \n+
    182 {
    \n+
    183 element_ = &e;
    \n+
    184 if constexpr (!hasFixedElementType)
    \n+
    185 finiteElement_ = e.type().isCube() ? static_cast<FiniteElement>(CubeFiniteElement())
    \n+
    186 : static_cast<FiniteElement>(SimplexFiniteElement()) ;
    \n+
    187 this->setSize(finiteElement_.size());
    \n+
    188 }
    \n+
    \n+
    189
    \n+
    190protected:
    \n+
    191
    \n+\n+\n+
    194};
    \n+
    \n+
    195
    \n+
    196
    \n+
    197
    \n+
    198namespace BasisFactory {
    \n+
    199
    \n+
    205template<class Dummy=void>
    \n+
    \n+\n+
    207{
    \n+
    208 return [](const auto& gridView) {
    \n+
    209 return RannacherTurekPreBasis<std::decay_t<decltype(gridView)>>(gridView);
    \n+
    210 };
    \n+
    211}
    \n+
    \n+
    212
    \n+
    213} // end namespace BasisFactory
    \n+
    214
    \n+
    215
    \n+
    216
    \n+
    217
    \n+
    229template<typename GV>
    \n+\n+
    231
    \n+
    232} // end namespace Functions
    \n+
    233} // end namespace Dune
    \n+
    234
    \n+
    235#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n+\n+\n+\n+
    auto rannacherTurek()
    Create a pre-basis factory that can create a Rannacher-Turek pre-basis.
    Definition rannacherturekbasis.hh:206
    \n
    Definition polynomial.hh:17
    \n-
    A statically sized MultiIndex type.
    Definition multiindex.hh:29
    \n-
    A statically sized MultiIndex type.
    Definition multiindex.hh:54
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n+
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n+
    size_type size() const
    Definition nodes.hh:147
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n+
    Definition nodes.hh:191
    \n+
    Definition rannacherturekbasis.hh:140
    \n+
    std::conditional_t< hasFixedElementType, std::conditional_t< type.isCube(), CubeFiniteElement, SimplexFiniteElement >, LocalFiniteElementVariant< CubeFiniteElement, SimplexFiniteElement > > FiniteElement
    Definition rannacherturekbasis.hh:158
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition rannacherturekbasis.hh:181
    \n+
    FiniteElement finiteElement_
    Definition rannacherturekbasis.hh:192
    \n+
    std::size_t size_type
    Definition rannacherturekbasis.hh:154
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition rannacherturekbasis.hh:155
    \n+
    RannacherTurekNode()
    Definition rannacherturekbasis.hh:160
    \n+
    const Element * element_
    Definition rannacherturekbasis.hh:193
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition rannacherturekbasis.hh:175
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition rannacherturekbasis.hh:166
    \n+
    Pre-basis for a Rannacher-Turek basis.
    Definition rannacherturekbasis.hh:58
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition rannacherturekbasis.hh:82
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition rannacherturekbasis.hh:67
    \n+
    Node makeNode() const
    Create tree node.
    Definition rannacherturekbasis.hh:100
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition rannacherturekbasis.hh:92
    \n+
    It indices(const Node &node, It it) const
    Definition rannacherturekbasis.hh:118
    \n+
    GV GridView
    The grid view that the FE basis is defined on.
    Definition rannacherturekbasis.hh:64
    \n+
    size_type dimension() const
    Same as size(prefix) with empty prefix.
    Definition rannacherturekbasis.hh:106
    \n+
    RannacherTurekPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition rannacherturekbasis.hh:73
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition rannacherturekbasis.hh:86
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition rannacherturekbasis.hh:112
    \n+
    GridView gridView_
    Definition rannacherturekbasis.hh:132
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,49 +1,317 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-flatmultiindex.hh\n+rannacherturekbasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n 9\n-10#include \n+10#include \n 11\n-12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+12#include \n 13\n-14namespace _\bD_\bu_\bn_\be {\n-15namespace Functions {\n-16\n+14#include \n+15#include \n+16#include \n 17\n-18\n-34template\n-_\b3_\b5using _\bF_\bl_\ba_\bt_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b>;\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+21\n+22\n+23namespace _\bD_\bu_\bn_\be {\n+24namespace Functions {\n+25\n+26/\n+/ *****************************************************************************\n+27// This is the reusable part of the basis. It contains\n+28//\n+29// RannacherTurekPreBasis\n+30// RannacherTurekNode\n+31//\n+32// The pre-basis allows to create the others and is the owner of possible\n+shared\n+33// state. These components do _not_ depend on the global basis and local view\n+34// and can be used without a global basis.\n+35/\n+/ *****************************************************************************\n 36\n-37\n-38\n-39} // end namespace Functions\n-40} // end namespace Dune\n-41\n-42#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n-_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n+37template\n+38class RannacherTurekNode;\n+39\n+40template\n+41class RannacherTurekPreBasis;\n+42\n+55template\n+_\b5_\b6class _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n+57 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< RannacherTurekPreBasis >\n+58{\n+59 static const int dim = GV::dimension;\n+60\n+61public:\n+62\n+_\b6_\b4 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+65\n+_\b6_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+68\n+_\b7_\b0 using _\bN_\bo_\bd_\be = _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b>;\n+71\n+_\b7_\b3 _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n+74 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv)\n+75 {\n+76 for(auto type : gv.indexSet().types(0))\n+77 if (!type.isSimplex() && !type.isCube())\n+78 DUNE_THROW(Dune::NotImplemented, \"Rannacher-Turek or Crouzeix-Raviart\n+elements are only implemented for grids with simplex or cube elements.\");\n+79 }\n+80\n+_\b8_\b2 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+83 {}\n+84\n+_\b8_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+87 {\n+88 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+89 }\n+90\n+_\b9_\b2 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+93 {\n+94 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+95 }\n+96\n+_\b1_\b0_\b0 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+101 {\n+102 return _\bN_\bo_\bd_\be{};\n+103 }\n+104\n+_\b1_\b0_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+107 {\n+108 return (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(1));\n+109 }\n+110\n+_\b1_\b1_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+113 {\n+114 return 2*GV::dimension;\n+115 }\n+116\n+117 template\n+_\b1_\b1_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+119 {\n+120 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0, end = node._\bs_\bi_\bz_\be() ; i < end ; ++i, ++it)\n+121 {\n+122 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n+(i);\n+123 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n+124 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+125\n+126 *it = {{ (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(gridIndexSet.subIndex(element,localKey.subEntity(),1))\n+}};\n+127 }\n+128 return it;\n+129 }\n+130\n+131protected:\n+_\b1_\b3_\b2 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+133};\n+134\n+135\n+136\n+137template\n+_\b1_\b3_\b8class _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be :\n+139 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+140{\n+141 static const int dim = GV::dimension;\n+142 static const int maxSize = 2*dim;\n+143\n+144 constexpr static bool hasFixedElementType = Capabilities::\n+hasSingleGeometryType::v;\n+145\n+146 using CubeFiniteElement = RannacherTurekLocalFiniteElement;\n+147 using SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement;\n+148\n+149 constexpr static unsigned int topologyId = Capabilities::\n+hasSingleGeometryType::topologyId; // meaningless if\n+hasFixedElementType is false\n+150 constexpr static GeometryType type = GeometryType(topologyId, GV::\n+dimension);\n+151\n+152public:\n+153\n+_\b1_\b5_\b4 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b1_\b5_\b5 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b1_\b5_\b6 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = std::conditional_t,\n+158 LocalFiniteElementVariant >;\n+159\n+_\b1_\b6_\b0 _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be() :\n+161 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(),\n+162 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n+163 {}\n+164\n+_\b1_\b6_\b6 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+167 {\n+168 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+169 }\n+170\n+_\b1_\b7_\b5 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n+176 {\n+177 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+178 }\n+179\n+_\b1_\b8_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+182 {\n+183 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+184 if constexpr (!hasFixedElementType)\n+185 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_ = e.type().isCube() ? static_cast<_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt>\n+(CubeFiniteElement())\n+186 : static_cast<_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt>(SimplexFiniteElement()) ;\n+187 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n+188 }\n+189\n+190protected:\n+191\n+_\b1_\b9_\b2 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b1_\b9_\b3 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+194};\n+195\n+196\n+197\n+198namespace BasisFactory {\n+199\n+205template\n+_\b2_\b0_\b6auto _\br_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk()\n+207{\n+208 return [](const auto& gridView) {\n+209 return _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(gridView);\n+210 };\n+211}\n+212\n+213} // end namespace BasisFactory\n+214\n+215\n+216\n+217\n+229template\n+_\b2_\b3_\b0using _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b> >;\n+231\n+232} // end namespace Functions\n+233} // end namespace Dune\n+234\n+235#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk\n+auto rannacherTurek()\n+Create a pre-basis factory that can create a Rannacher-Turek pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:206\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-A statically sized MultiIndex type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:29\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\b _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>\n-A statically sized MultiIndex type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:54\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+Global basis for given pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+A generic MixIn class for PreBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n+void setSize(const size_type size)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:140\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+std::conditional_t< hasFixedElementType, std::conditional_t< type.isCube(),\n+CubeFiniteElement, SimplexFiniteElement >, LocalFiniteElementVariant<\n+CubeFiniteElement, SimplexFiniteElement > > FiniteElement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:158\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind to element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n+FiniteElement finiteElement_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:192\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:154\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename GV::template Codim< 0 >::Entity Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:155\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be\n+RannacherTurekNode()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:160\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n+const Element * element_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:193\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:175\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return current element, throw if unbound.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:166\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+Pre-basis for a Rannacher-Turek basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void initializeIndices()\n+Initialize the global indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:82\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:100\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:92\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n+It indices(const Node &node, It it) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:118\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+The grid view that the FE basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:64\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+Same as size(prefix) with empty prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:106\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+RannacherTurekPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:86\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:112\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n+GridView gridView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:132\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: transformedindexbasis.hh File Reference\n+dune-functions: sizeinfo.hh File Reference\n \n \n \n \n \n \n \n@@ -73,73 +73,39 @@\n \n \n
    \n \n-
    transformedindexbasis.hh File Reference
    \n+
    sizeinfo.hh File Reference
    \n
    \n
    \n-
    #include <tuple>
    \n-#include <utility>
    \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/functionspacebases/defaultglobalbasis.hh>
    \n+
    #include <array>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::Experimental::TransformedIndexPreBasis< RPB, T >
     A pre-basis transforming multi-indices. More...
     
    class  Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation< IndexTransformation, SizeImplementation, ContainerDescriptorImplementation, minIS, maxIS >
     A generic implementation of a transformation. More...
    class  Dune::Functions::SizeInfo< B >
     A class encapsulating size information. More...
     
    \n \n \n \n \n \n-\n-\n-\n-\n-\n-\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::Experimental
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisFactory::Experimental
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n

    \n Functions

    template<class RPB , class T >
     Dune::Functions::Experimental::TransformedIndexPreBasis (RPB &&, T &&) -> TransformedIndexPreBasis< std::decay_t< RPB >, std::decay_t< T > >
     
    template<class RawPreBasisFactory , class Transformation >
    auto Dune::Functions::BasisFactory::Experimental::transformIndices (RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)
     Create a TransformedIndexPreBasisFactory.
     
    template<class IndexTransformation , class SizeImplementation , class ContainerDescriptorImplementation , std::size_t minIndexSize, std::size_t maxIndexSize>
    auto Dune::Functions::BasisFactory::Experimental::indexTransformation (IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, ContainerDescriptorImplementation &&containerDescriptorImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)
     A generic implementation of a transformation.
     
    template<class IndexTransformation , class SizeImplementation , std::size_t minIndexSize, std::size_t maxIndexSize>
    auto Dune::Functions::BasisFactory::Experimental::indexTransformation (IndexTransformation &&indexTrafo, SizeImplementation &&sizeImpl, Dune::index_constant< minIndexSize > minSize, Dune::index_constant< maxIndexSize > maxSize)
     Fallback implementation if no container descriptor argument is given.
     
    template<class Basis >
    SizeInfo< Basis > Dune::Functions::sizeInfo (const Basis &basis)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,73 +2,25 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-transformedindexbasis.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+sizeinfo.hh File Reference\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bR_\bP_\bB_\b,_\b _\bT_\b _\b>\n-\u00a0 A pre-basis transforming multi-indices. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:\n- _\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b<_\b _\bI_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b,_\b _\bS_\bi_\bz_\be_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b,\n- _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b,_\b _\bm_\bi_\bn_\bI_\bS_\b,_\b _\bm_\ba_\bx_\bI_\bS_\b _\b>\n-\u00a0 A generic implementation of a transformation. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b<_\b _\bB_\b _\b>\n+\u00a0 A class encapsulating size information. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs (RPB &&, T &&) -\n- > _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< std::decay_t< RPB >, std::decay_t< T > >\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\bi_\bc_\be_\bs\n- (RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)\n-\u00a0 Create a TransformedIndexPreBasisFactory.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n- (IndexTransformation &&indexTransformation, SizeImplementation\n- &&sizeImplementation, ContainerDescriptorImplementation\n- &&containerDescriptorImplementation, Dune::index_constant< minIndexSize\n- >, Dune::index_constant< maxIndexSize >)\n-\u00a0 A generic implementation of a transformation.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n- (IndexTransformation &&indexTrafo, SizeImplementation &&sizeImpl, Dune::\n- index_constant< minIndexSize > minSize, Dune::index_constant<\n- maxIndexSize > maxSize)\n-\u00a0 Fallback implementation if no container descriptor argument is given.\n+template\n+_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo< Basis >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bn_\bf_\bo (const Basis &basis)\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: transformedindexbasis.hh Source File\n+dune-functions: sizeinfo.hh Source File\n \n \n \n \n \n \n \n@@ -74,360 +74,104 @@\n \n \n
    \n
    \n-
    transformedindexbasis.hh
    \n+
    sizeinfo.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n
    9
    \n-
    10#include <tuple>
    \n-
    11#include <utility>
    \n-
    12
    \n-
    13#include <dune/common/hybridutilities.hh>
    \n-
    14#include <dune/common/reservedvector.hh>
    \n-
    15#include <dune/common/typeutilities.hh>
    \n-
    16#include <dune/common/hybridutilities.hh>
    \n+
    10#warning The header dune/functions/functionspacebases/sizeinfo.hh is deprecated and will be removed after release 2.10.
    \n+
    11
    \n+
    12#include <array>
    \n+
    13
    \n+
    14namespace Dune {
    \n+
    15namespace Functions {
    \n+
    16
    \n
    17
    \n-
    18#include <dune/typetree/compositenode.hh>
    \n-
    19#include <dune/typetree/utility.hh>
    \n-
    20
    \n-\n-\n-\n-\n-\n-\n-\n-
    28
    \n-
    29
    \n-
    30namespace Dune {
    \n-
    31namespace Functions {
    \n-
    \n-
    32namespace Experimental {
    \n-
    33
    \n-
    34// *****************************************************************************
    \n-
    35// *****************************************************************************
    \n-
    36
    \n-
    53template<class RPB, class T>
    \n-
    \n-\n-
    55{
    \n-
    56 using Transformation = T;
    \n-
    57
    \n-\n-
    59
    \n-
    60public:
    \n-
    61
    \n-
    62 using RawPreBasis = RPB;
    \n-
    63
    \n-
    65 using GridView = typename RawPreBasis::GridView;
    \n+
    18
    \n+
    31template<class B>
    \n+
    \n+
    32class
    \n+
    33[[deprecated("SizeInfo is deprecated and will be removed after release 2.10.")]]
    \n+\n+
    35{
    \n+
    36public:
    \n+
    37 using Basis = B;
    \n+
    38 using size_type = typename Basis::size_type;
    \n+
    39 using SizePrefix = typename Basis::SizePrefix;
    \n+
    40
    \n+
    \n+
    44 SizeInfo(const Basis& basis) :
    \n+
    45 basis_(&basis)
    \n+
    46 {}
    \n+
    \n+
    47
    \n+
    \n+
    51 size_type operator()(const SizePrefix& prefix) const
    \n+
    52 {
    \n+
    53 return basis_->size(prefix);
    \n+
    54 }
    \n+
    \n+
    55
    \n+
    \n+
    62 size_type size(const SizePrefix& prefix) const
    \n+
    63 {
    \n+
    64 return basis_->size(prefix);
    \n+
    65 }
    \n+
    \n
    66
    \n-
    68 using size_type = std::size_t;
    \n-
    69
    \n-
    71 using Node = typename RawPreBasis::Node;
    \n-
    72
    \n-
    73 static constexpr size_type maxMultiIndexSize = Transformation::maxIndexSize;
    \n-
    74 static constexpr size_type minMultiIndexSize = Transformation::minIndexSize;
    \n-
    75 static constexpr size_type multiIndexBufferSize = std::max(RawPreBasis::multiIndexBufferSize, maxMultiIndexSize);
    \n+
    \n+
    67 operator size_type () const
    \n+
    68 {
    \n+
    69 return basis_->dimension();
    \n+
    70 }
    \n+
    \n+
    71
    \n+
    72protected:
    \n+
    73
    \n+
    74 const Basis* basis_;
    \n+
    75};
    \n+
    \n
    76
    \n-
    82 template<class RPB_R, class T_R>
    \n-
    \n-
    83 TransformedIndexPreBasis(RPB_R&& rawPreBasis, T_R&& transformation) :
    \n-
    84 rawPreBasis_(std::forward<RPB_R>(rawPreBasis)),
    \n-
    85 transformation_(std::forward<T_R>(transformation))
    \n-
    86 {}
    \n+
    77
    \n+
    81template<class Basis>
    \n+
    \n+
    82SizeInfo<Basis> sizeInfo(const Basis& basis)
    \n+
    83{
    \n+
    84 return SizeInfo<Basis>(basis);
    \n+
    85}
    \n
    \n+
    86
    \n
    87
    \n-
    \n-\n-
    90 {
    \n-
    91 rawPreBasis_.initializeIndices();
    \n-
    92 }
    \n-
    \n-
    93
    \n-
    \n-
    95 const GridView& gridView() const
    \n-
    96 {
    \n-
    97 return rawPreBasis_.gridView();
    \n-
    98 }
    \n-
    \n-
    99
    \n-
    \n-
    101 void update(const GridView& gv)
    \n-
    102 {
    \n-
    103 rawPreBasis_.update(gv);
    \n-
    104 }
    \n-
    \n-
    105
    \n-
    \n-\n-
    117 {
    \n-
    118 return rawPreBasis_.makeNode();
    \n-
    119 }
    \n-
    \n-
    120
    \n-
    \n-\n-
    123 {
    \n-
    124 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    128 template<class SizePrefix>
    \n-
    \n-
    129 size_type size(const SizePrefix& prefix) const
    \n-
    130 {
    \n-
    131 return transformation_.size(prefix, rawPreBasis_);
    \n-
    132 }
    \n-
    \n-
    133
    \n-
    \n-\n-
    136 {
    \n-
    137 return transformation_.containerDescriptor(rawPreBasis_);
    \n-
    138 }
    \n-
    \n-
    139
    \n-
    \n-\n-
    142 {
    \n-
    143 return transformation_.dimension(rawPreBasis_);
    \n-
    144 }
    \n-
    \n-
    145
    \n-
    \n-\n-
    148 {
    \n-
    149 return rawPreBasis_.maxNodeSize();
    \n-
    150 }
    \n-
    \n-
    151
    \n-
    \n-\n-
    153 {
    \n-
    154 return rawPreBasis_;
    \n-
    155 }
    \n-
    \n-
    156
    \n-
    \n-\n-
    158 {
    \n-
    159 return rawPreBasis_;
    \n-
    160 }
    \n-
    \n-
    161
    \n-
    162 template<class MultiIndex>
    \n-
    \n-
    163 void transformIndex(MultiIndex& multiIndex) const
    \n-
    164 {
    \n-
    165 transformation_.transformIndex(multiIndex, rawPreBasis_);
    \n-
    166 }
    \n-
    \n-
    167
    \n-
    168 template<typename It>
    \n-
    \n-
    169 It indices(const Node& node, It it) const
    \n-
    170 {
    \n-
    171 rawPreBasis().indices(node, it);
    \n-
    172 for(std::size_t i=0; i<node.size(); ++i)
    \n-
    173 {
    \n-
    174 transformIndex(*it);
    \n-
    175 ++it;
    \n-
    176 }
    \n-
    177 return it;
    \n-
    178 }
    \n-
    \n-
    179
    \n-
    180protected:
    \n-\n-
    182 Transformation transformation_;
    \n-
    183};
    \n-
    \n-
    184
    \n-
    185template<class RPB, class T>
    \n-\n-
    187
    \n-
    188
    \n-
    189} // end namespace Experimental
    \n-
    \n-
    190
    \n-
    191
    \n-
    192namespace BasisFactory {
    \n-
    193namespace Experimental {
    \n-
    194
    \n-
    206template<class RawPreBasisFactory, class Transformation>
    \n-
    \n-\n-
    208 RawPreBasisFactory&& preBasisFactory,
    \n-
    209 Transformation&& transformation)
    \n-
    210{
    \n-
    211 return [
    \n-
    212 preBasisFactory=std::forward<RawPreBasisFactory>(preBasisFactory),
    \n-
    213 transformation =std::forward<Transformation>(transformation)
    \n-
    214 ](const auto& gridView) {
    \n-
    215 return Dune::Functions::Experimental::TransformedIndexPreBasis(preBasisFactory(gridView), std::move(transformation));
    \n-
    216 };
    \n-
    217}
    \n-
    \n-
    218
    \n-
    219
    \n-
    220
    \n-
    239template<class IndexTransformation, class SizeImplementation, class ContainerDescriptorImplementation, std::size_t minIS, std::size_t maxIS>
    \n-
    \n-\n-
    241{
    \n-
    242public:
    \n-
    243
    \n-
    244 static constexpr std::size_t minIndexSize = minIS;
    \n-
    245 static constexpr std::size_t maxIndexSize = maxIS;
    \n-
    246
    \n-
    247 template<class IT_R, class SI_R, class CD_R>
    \n-
    \n-
    248 GenericIndexingTransformation(IT_R&& indexTransformation, SI_R&& sizeImplementation, CD_R&& containerDescriptorImplementation) :
    \n-
    249 indexTransformation_(std::forward<IT_R>(indexTransformation)),
    \n-
    250 sizeImplementation_(std::forward<SI_R>(sizeImplementation)),
    \n-
    251 containerDescriptorImplementation_(std::forward<CD_R>(containerDescriptorImplementation))
    \n-
    252 {}
    \n-
    \n-
    253
    \n-
    254 template<class MultiIndex, class PreBasis>
    \n-
    \n-
    255 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const
    \n-
    256 {
    \n-
    257 indexTransformation_(multiIndex, preBasis);
    \n-
    258 }
    \n-
    \n-
    259
    \n-
    260 template<class Prefix, class PreBasis>
    \n-
    \n-
    261 auto size(const Prefix& prefix, const PreBasis& preBasis) const
    \n-
    262 {
    \n-
    263 return sizeImplementation_(prefix, preBasis);
    \n-
    264 }
    \n-
    \n-
    265
    \n-
    266 template<class PreBasis>
    \n-
    \n-
    267 auto dimension(const PreBasis& preBasis) const
    \n-
    268 {
    \n-
    269 return preBasis.dimension();
    \n-
    270 }
    \n-
    \n-
    271
    \n-
    272 template<class PreBasis>
    \n-
    \n-
    273 auto containerDescriptor(const PreBasis& preBasis) const
    \n-
    274 {
    \n-
    275 return containerDescriptorImplementation_(preBasis);
    \n-
    276 }
    \n-
    \n-
    277
    \n-
    278private:
    \n-
    279 IndexTransformation indexTransformation_;
    \n-
    280 SizeImplementation sizeImplementation_;
    \n-
    281 ContainerDescriptorImplementation containerDescriptorImplementation_;
    \n-
    282};
    \n-
    \n-
    283
    \n-
    284
    \n-
    285
    \n-
    305template<class IndexTransformation, class SizeImplementation, class ContainerDescriptorImplementation, std::size_t minIndexSize, std::size_t maxIndexSize>
    \n-
    \n-
    306auto indexTransformation(IndexTransformation&& indexTransformation,
    \n-
    307 SizeImplementation&& sizeImplementation,
    \n-
    308 ContainerDescriptorImplementation&& containerDescriptorImplementation,
    \n-
    309 Dune::index_constant<minIndexSize>,
    \n-
    310 Dune::index_constant<maxIndexSize>)
    \n-
    311{
    \n-\n-
    313 std::decay_t<IndexTransformation>,
    \n-
    314 std::decay_t<SizeImplementation>,
    \n-
    315 std::decay_t<ContainerDescriptorImplementation>,
    \n-
    316 minIndexSize, maxIndexSize>(
    \n-
    317 std::forward<IndexTransformation>(indexTransformation),
    \n-
    318 std::forward<SizeImplementation>(sizeImplementation),
    \n-
    319 std::forward<ContainerDescriptorImplementation>(containerDescriptorImplementation));
    \n-
    320}
    \n-
    \n-
    321
    \n-
    323template<class IndexTransformation, class SizeImplementation,
    \n-
    324 std::size_t minIndexSize, std::size_t maxIndexSize>
    \n-
    \n-
    325auto indexTransformation(IndexTransformation&& indexTrafo,
    \n-
    326 SizeImplementation&& sizeImpl,
    \n-
    327 Dune::index_constant<minIndexSize> minSize,
    \n-
    328 Dune::index_constant<maxIndexSize> maxSize)
    \n-
    329{
    \n-
    330 return indexTransformation(indexTrafo, sizeImpl,
    \n-
    331 [](auto&&) { return Dune::Functions::ContainerDescriptors::Unknown{}; },
    \n-
    332 minSize, maxSize);
    \n-
    333}
    \n-
    \n-
    334
    \n-
    335} // end namespace Experimental
    \n-
    336} // end namespace BasisFactory
    \n-
    337} // end namespace Functions
    \n-
    338} // end namespace Dune
    \n-
    339
    \n-
    340
    \n-
    341#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n-\n-\n-\n-\n-\n-\n+
    88
    \n+
    89} // end namespace Functions
    \n+
    90} // end namespace Dune
    \n+
    91
    \n+
    92#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n
    Definition polynomial.hh:17
    \n-
    auto indexTransformation(IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, ContainerDescriptorImplementation &&containerDescriptorImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)
    A generic implementation of a transformation.
    Definition transformedindexbasis.hh:306
    \n-
    auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)
    Create a TransformedIndexPreBasisFactory.
    Definition transformedindexbasis.hh:207
    \n-
    Fallback container descriptor if nothing else fits.
    Definition containerdescriptors.hh:50
    \n-
    A pre-basis transforming multi-indices.
    Definition transformedindexbasis.hh:55
    \n-
    It indices(const Node &node, It it) const
    Definition transformedindexbasis.hh:169
    \n-
    Transformation transformation_
    Definition transformedindexbasis.hh:182
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition transformedindexbasis.hh:89
    \n-
    typename RawPreBasis::GridView GridView
    The grid view that the FE basis is defined on.
    Definition transformedindexbasis.hh:65
    \n-
    void transformIndex(MultiIndex &multiIndex) const
    Definition transformedindexbasis.hh:163
    \n-
    RawPreBasis rawPreBasis_
    Definition transformedindexbasis.hh:181
    \n-
    typename RawPreBasis::Node Node
    Template mapping root tree path to type of created tree node.
    Definition transformedindexbasis.hh:71
    \n-
    TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)
    Constructor for given child pre-basis objects.
    Definition transformedindexbasis.hh:83
    \n-
    RawPreBasis & rawPreBasis()
    Definition transformedindexbasis.hh:157
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition transformedindexbasis.hh:73
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition transformedindexbasis.hh:101
    \n-
    Node makeNode() const
    Create tree node with given root tree path.
    Definition transformedindexbasis.hh:116
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition transformedindexbasis.hh:95
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition transformedindexbasis.hh:129
    \n-
    RPB RawPreBasis
    Definition transformedindexbasis.hh:62
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition transformedindexbasis.hh:122
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition transformedindexbasis.hh:147
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition transformedindexbasis.hh:68
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition transformedindexbasis.hh:75
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition transformedindexbasis.hh:141
    \n-
    const RawPreBasis & rawPreBasis() const
    Definition transformedindexbasis.hh:152
    \n-
    static constexpr size_type minMultiIndexSize
    Definition transformedindexbasis.hh:74
    \n-
    auto containerDescriptor() const
    Return the container descriptor of the transformed pre-basis.
    Definition transformedindexbasis.hh:135
    \n-
    A generic implementation of a transformation.
    Definition transformedindexbasis.hh:241
    \n-
    GenericIndexingTransformation(IT_R &&indexTransformation, SI_R &&sizeImplementation, CD_R &&containerDescriptorImplementation)
    Definition transformedindexbasis.hh:248
    \n-
    static constexpr std::size_t maxIndexSize
    Definition transformedindexbasis.hh:245
    \n-
    auto containerDescriptor(const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:273
    \n-
    auto dimension(const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:267
    \n-
    auto size(const Prefix &prefix, const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:261
    \n-
    static constexpr std::size_t minIndexSize
    Definition transformedindexbasis.hh:244
    \n-
    void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:255
    \n-\n+
    SizeInfo< Basis > sizeInfo(const Basis &basis)
    Definition sizeinfo.hh:82
    \n+
    A class encapsulating size information.
    Definition sizeinfo.hh:35
    \n+
    typename Basis::SizePrefix SizePrefix
    Definition sizeinfo.hh:39
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition sizeinfo.hh:62
    \n+
    size_type operator()(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition sizeinfo.hh:51
    \n+
    typename Basis::size_type size_type
    Definition sizeinfo.hh:38
    \n+
    B Basis
    Definition sizeinfo.hh:37
    \n+
    SizeInfo(const Basis &basis)
    Construct from basis.
    Definition sizeinfo.hh:44
    \n+
    const Basis * basis_
    Definition sizeinfo.hh:74
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,416 +1,112 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-transformedindexbasis.hh\n+sizeinfo.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n 9\n-10#include \n-11#include \n-12\n-13#include \n-14#include \n-15#include \n-16#include \n+10#warning The header dune/functions/functionspacebases/sizeinfo.hh is\n+deprecated and will be removed after release 2.10.\n+11\n+12#include \n+13\n+14namespace _\bD_\bu_\bn_\be {\n+15namespace Functions {\n+16\n 17\n-18#include \n-19#include \n-20\n-21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n-22#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-24#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-26#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-27#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-28\n-29\n-30namespace _\bD_\bu_\bn_\be {\n-31namespace Functions {\n-_\b3_\b2namespace Experimental {\n-33\n-34/\n-/ *****************************************************************************\n-35/\n-/ *****************************************************************************\n-36\n-53template\n-_\b5_\b4class _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-55{\n-56 using Transformation = T;\n-57\n-58 using _\bT_\bh_\bi_\bs = _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\bP_\bB_\b,_\b _\bT_\b>;\n-59\n-60public:\n-61\n-_\b6_\b2 using _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = RPB;\n-63\n-_\b6_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename RawPreBasis::GridView;\n+18\n+31template\n+_\b3_\b2class\n+33[[deprecated(\"SizeInfo is deprecated and will be removed after release\n+2.10.\")]]\n+34_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo\n+35{\n+36public:\n+_\b3_\b7 using _\bB_\ba_\bs_\bi_\bs = B;\n+_\b3_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = typename Basis::size_type;\n+_\b3_\b9 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = typename Basis::SizePrefix;\n+40\n+_\b4_\b4 _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo(const _\bB_\ba_\bs_\bi_\bs& basis) :\n+45 basis_(&basis)\n+46 {}\n+47\n+_\b5_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx& prefix) const\n+52 {\n+53 return basis_->size(prefix);\n+54 }\n+55\n+_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx& prefix) const\n+63 {\n+64 return basis_->size(prefix);\n+65 }\n 66\n-_\b6_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-69\n-_\b7_\b1 using _\bN_\bo_\bd_\be = typename RawPreBasis::Node;\n-72\n-_\b7_\b3 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = Transformation::maxIndexSize;\n-_\b7_\b4 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = Transformation::minIndexSize;\n-_\b7_\b5 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be = std::max(RawPreBasis::\n-multiIndexBufferSize, _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be);\n+_\b6_\b7 operator _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be () const\n+68 {\n+69 return basis_->dimension();\n+70 }\n+71\n+72protected:\n+73\n+_\b7_\b4 const _\bB_\ba_\bs_\bi_\bs* _\bb_\ba_\bs_\bi_\bs_\b_;\n+75};\n 76\n-82 template\n-_\b8_\b3 _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(RPB_R&& _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, T_R&& transformation) :\n-84 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(std::forward(_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs)),\n-85 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_(std::forward(transformation))\n-86 {}\n+77\n+81template\n+_\b8_\b2_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b<_\bB_\ba_\bs_\bi_\bs_\b> _\bs_\bi_\bz_\be_\bI_\bn_\bf_\bo(const Basis& basis)\n+83{\n+84 return _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b<_\bB_\ba_\bs_\bi_\bs_\b>(basis);\n+85}\n+86\n 87\n-_\b8_\b9 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-90 {\n-91 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n-92 }\n-93\n-_\b9_\b5 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-96 {\n-97 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.gridView();\n-98 }\n-99\n-_\b1_\b0_\b1 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-102 {\n-103 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.update(gv);\n-104 }\n-105\n-_\b1_\b1_\b6 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-117 {\n-118 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.makeNode();\n-119 }\n-120\n-_\b1_\b2_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-123 {\n-124 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n-125 }\n-126\n-128 template\n-_\b1_\b2_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-130 {\n-131 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_.size(prefix, _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n-132 }\n-133\n-_\b1_\b3_\b5 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n-136 {\n-137 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_.containerDescriptor(_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n-138 }\n-139\n-_\b1_\b4_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-142 {\n-143 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_.dimension(_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n-144 }\n-145\n-_\b1_\b4_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-148 {\n-149 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.maxNodeSize();\n-150 }\n-151\n-_\b1_\b5_\b2 const _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs() const\n-153 {\n-154 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-155 }\n-156\n-_\b1_\b5_\b7 _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs()\n-158 {\n-159 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-160 }\n-161\n-162 template\n-_\b1_\b6_\b3 void _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx(MultiIndex& multiIndex) const\n-164 {\n-165 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_.transformIndex(multiIndex, _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n-166 }\n-167\n-168 template\n-_\b1_\b6_\b9 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-170 {\n-171 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node, it);\n-172 for(std::size_t i=0; i\n-_\b1_\b8_\b6_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(RPB&&, T&&) -> _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bs_\bt_\bd_\b:_\b:\n-_\bd_\be_\bc_\ba_\by_\b__\bt_\b<_\bR_\bP_\bB_\b>, std::decay_t>;\n-187\n-188\n-189} // end namespace Experimental\n-190\n-191\n-192namespace BasisFactory {\n-193namespace Experimental {\n-194\n-206template\n-_\b2_\b0_\b7auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\bi_\bc_\be_\bs(\n-208 RawPreBasisFactory&& preBasisFactory,\n-209 Transformation&& transformation)\n-210{\n-211 return [\n-212 preBasisFactory=std::forward(preBasisFactory),\n-213 transformation =std::forward(transformation)\n-214 ](const auto& gridView) {\n-215 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-(preBasisFactory(gridView), std::move(transformation));\n-216 };\n-217}\n-218\n-219\n-220\n-239template\n-_\b2_\b4_\b0class _\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-241{\n-242public:\n-243\n-_\b2_\b4_\b4 static constexpr std::size_t _\bm_\bi_\bn_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = minIS;\n-_\b2_\b4_\b5 static constexpr std::size_t _\bm_\ba_\bx_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = maxIS;\n-246\n-247 template\n-_\b2_\b4_\b8 _\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(IT_R&& _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn, SI_R&&\n-sizeImplementation, CD_R&& containerDescriptorImplementation) :\n-249 indexTransformation_(std::forward(_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn)),\n-250 sizeImplementation_(std::forward(sizeImplementation)),\n-251 containerDescriptorImplementation_(std::forward\n-(containerDescriptorImplementation))\n-252 {}\n-253\n-254 template\n-_\b2_\b5_\b5 void _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx(MultiIndex& multiIndex, const PreBasis& preBasis) const\n-256 {\n-257 indexTransformation_(multiIndex, preBasis);\n-258 }\n-259\n-260 template\n-_\b2_\b6_\b1 auto _\bs_\bi_\bz_\be(const Prefix& prefix, const PreBasis& preBasis) const\n-262 {\n-263 return sizeImplementation_(prefix, preBasis);\n-264 }\n-265\n-266 template\n-_\b2_\b6_\b7 auto _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(const PreBasis& preBasis) const\n-268 {\n-269 return preBasis.dimension();\n-270 }\n-271\n-272 template\n-_\b2_\b7_\b3 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(const PreBasis& preBasis) const\n-274 {\n-275 return containerDescriptorImplementation_(preBasis);\n-276 }\n-277\n-278private:\n-279 IndexTransformation indexTransformation_;\n-280 SizeImplementation sizeImplementation_;\n-281 ContainerDescriptorImplementation containerDescriptorImplementation_;\n-282};\n-283\n-284\n-285\n-305template\n-_\b3_\b0_\b6auto _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(IndexTransformation&& _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn,\n-307 SizeImplementation&& sizeImplementation,\n-308 ContainerDescriptorImplementation&& containerDescriptorImplementation,\n-309 Dune::index_constant,\n-310 Dune::index_constant)\n-311{\n-312 return _\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn<\n-313 std::decay_t,\n-314 std::decay_t,\n-315 std::decay_t,\n-316 minIndexSize, maxIndexSize>(\n-317 std::forward(_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn),\n-318 std::forward(sizeImplementation),\n-319 std::forward\n-(containerDescriptorImplementation));\n-320}\n-321\n-323template\n-_\b3_\b2_\b5auto _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(IndexTransformation&& indexTrafo,\n-326 SizeImplementation&& sizeImpl,\n-327 Dune::index_constant minSize,\n-328 Dune::index_constant maxSize)\n-329{\n-330 return _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(indexTrafo, sizeImpl,\n-331 [](auto&&) { return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn{}; },\n-332 minSize, maxSize);\n-333}\n-334\n-335} // end namespace Experimental\n-336} // end namespace BasisFactory\n-337} // end namespace Functions\n-338} // end namespace Dune\n-339\n-340\n-341#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh\n-_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n-_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+88\n+89} // end namespace Functions\n+90} // end namespace Dune\n+91\n+92#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-auto indexTransformation(IndexTransformation &&indexTransformation,\n-SizeImplementation &&sizeImplementation, ContainerDescriptorImplementation\n-&&containerDescriptorImplementation, Dune::index_constant< minIndexSize >,\n-Dune::index_constant< maxIndexSize >)\n-A generic implementation of a transformation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:306\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation\n-&&transformation)\n-Create a TransformedIndexPreBasisFactory.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:207\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn\n-Fallback container descriptor if nothing else fits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-A pre-basis transforming multi-indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:55\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n-It indices(const Node &node, It it) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_\n-Transformation transformation_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:182\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void initializeIndices()\n-Initialize the global indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:89\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-typename RawPreBasis::GridView GridView\n-The grid view that the FE basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:65\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx\n-void transformIndex(MultiIndex &multiIndex) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:163\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n-RawPreBasis rawPreBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\bo_\bd_\be\n-typename RawPreBasis::Node Node\n-Template mapping root tree path to type of created tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:71\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:\n-_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)\n-Constructor for given child pre-basis objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:83\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-RawPreBasis & rawPreBasis()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:157\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr size_type maxMultiIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:101\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node with given root tree path.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:116\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:95\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bn_\bf_\bo\n+SizeInfo< Basis > sizeInfo(const Basis &basis)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:82\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo\n+A class encapsulating size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:35\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx\n+typename Basis::SizePrefix SizePrefix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:39\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bs_\bi_\bz_\be\n size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-RPB RawPreBasis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n-static constexpr size_type multiIndexBufferSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:141\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-const RawPreBasis & rawPreBasis() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr size_type minMultiIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor() const\n-Return the container descriptor of the transformed pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:135\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-A generic implementation of a transformation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:241\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-GenericIndexingTransformation(IT_R &&indexTransformation, SI_R\n-&&sizeImplementation, CD_R &&containerDescriptorImplementation)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:248\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bm_\ba_\bx_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr std::size_t maxIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:245\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor(const PreBasis &preBasis) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:273\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-auto dimension(const PreBasis &preBasis) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:267\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bs_\bi_\bz_\be\n-auto size(const Prefix &prefix, const PreBasis &preBasis) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:261\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bm_\bi_\bn_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr std::size_t minIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:244\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx\n-void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:255\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+Return number possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+size_type operator()(const SizePrefix &prefix) const\n+Return number possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:51\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+typename Basis::size_type size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:38\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bB_\ba_\bs_\bi_\bs\n+B Basis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:37\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo\n+SizeInfo(const Basis &basis)\n+Construct from basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:44\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bb_\ba_\bs_\bi_\bs_\b_\n+const Basis * basis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:74\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: subspacelocalview.hh File Reference\n+dune-functions: defaultglobalbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,37 +71,59 @@\n \n
    \n \n
    \n \n-
    subspacelocalview.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    defaultglobalbasis.hh File Reference
    \n \n
    \n-
    #include <tuple>
    \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/typetree/childextraction.hh>
    \n+#include <dune/functions/common/type_traits.hh>
    \n+#include <dune/functions/functionspacebases/defaultlocalview.hh>
    \n #include <dune/functions/functionspacebases/concepts.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::SubspaceLocalView< RLV, PP >
     The restriction of a finite element basis to a single element. More...
    class  Dune::Functions::DefaultGlobalBasis< PB >
     Global basis for given pre-basis. More...
     
    \n \n \n \n \n \n+\n+\n+\n+\n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    template<class PreBasis >
     Dune::Functions::DefaultGlobalBasis (PreBasis &&) -> DefaultGlobalBasis< std::decay_t< PreBasis > >
     
    template<class GridView , class PreBasisFactory >
     Dune::Functions::DefaultGlobalBasis (const GridView &gv, PreBasisFactory &&f) -> DefaultGlobalBasis< std::decay_t< decltype(f(gv))> >
     
    template<class GridView , class PreBasisFactory >
    auto Dune::Functions::BasisFactory::makeBasis (const GridView &gridView, PreBasisFactory &&preBasisFactory)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,47 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-subspacelocalview.hh File Reference\n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+defaultglobalbasis.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n #include \n-#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b<_\b _\bR_\bL_\bV_\b,_\b _\bP_\bP_\b _\b>\n-\u00a0 The restriction of a finite element basis to a single element. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bP_\bB_\b _\b>\n+\u00a0 Global basis for given pre-basis. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs (PreBasis &&) -> _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ std::decay_t< PreBasis > >\n+\u00a0\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs (const GridView &gv, PreBasisFactory\n+ &&f) -> _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< std::decay_t< decltype(f(gv))> >\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bm_\ba_\bk_\be_\bB_\ba_\bs_\bi_\bs (const GridView &gridView,\n+ PreBasisFactory &&preBasisFactory)\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: subspacelocalview.hh Source File\n+dune-functions: defaultglobalbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,190 +74,233 @@\n \n \n
    \n
    \n-
    subspacelocalview.hh
    \n+
    defaultglobalbasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n
    9
    \n-
    10
    \n-
    11#include <tuple>
    \n-
    12
    \n-
    13#include <dune/common/concept.hh>
    \n-
    14
    \n-
    15#include <dune/typetree/childextraction.hh>
    \n-
    16
    \n-\n-
    18
    \n-
    19
    \n-
    20
    \n-
    21namespace Dune {
    \n-
    22namespace Functions {
    \n+
    10#include <cstddef>
    \n+
    11#include <type_traits>
    \n+
    12#include <utility>
    \n+
    13
    \n+
    14#include <dune/common/reservedvector.hh>
    \n+
    15#include <dune/common/typeutilities.hh>
    \n+
    16#include <dune/common/concept.hh>
    \n+
    17
    \n+\n+\n+\n+
    21
    \n+
    22
    \n
    23
    \n-
    24
    \n-
    25
    \n-
    26template<class RB, class PP>
    \n-
    27class SubspaceBasis;
    \n+
    24namespace Dune {
    \n+
    25namespace Functions {
    \n+
    26
    \n+
    27
    \n
    28
    \n-
    29
    \n-
    30
    \n-
    32template<class RLV, class PP>
    \n-
    \n-\n-
    34{
    \n-
    35 using PrefixPath = PP;
    \n-
    36
    \n-
    37public:
    \n-
    38
    \n-
    39 using RootLocalView = RLV;
    \n-
    40
    \n-\n-
    43
    \n-\n-
    46
    \n-
    48 using Element = typename GridView::template Codim<0>::Entity;
    \n-
    49
    \n-
    51 using size_type = std::size_t;
    \n-
    52
    \n-
    54 using RootTree = typename RootLocalView::Tree;
    \n-
    55
    \n-
    57 using Tree = typename TypeTree::ChildForTreePath<RootTree, PrefixPath>;
    \n-
    58
    \n-
    60 using MultiIndex = typename RootLocalView::MultiIndex;
    \n-
    61
    \n-
    \n-
    63 SubspaceLocalView(const GlobalBasis& globalBasis, const PrefixPath& /*prefixPath*/) :
    \n-\n-
    65 rootLocalView_(globalBasis.rootBasis().localView())
    \n-
    66 {
    \n-
    67// static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to SubspaceLocalView does not model the BasisNode concept.");
    \n-
    68 }
    \n-
    \n-
    69
    \n-
    \n-
    75 void bind(const Element& e)
    \n-
    76 {
    \n-
    77 rootLocalView_.bind(e);
    \n-
    78 }
    \n-
    \n-
    79
    \n-
    \n-
    84 const Element& element() const
    \n-
    85 {
    \n-
    86 return rootLocalView_.element();
    \n-
    87 }
    \n-
    \n-
    88
    \n-
    \n-
    93 void unbind()
    \n-
    94 {
    \n-
    95 rootLocalView_.unbind();
    \n-
    96 }
    \n-
    \n-
    97
    \n-
    \n-
    100 bool bound() const
    \n-
    101 {
    \n-
    102 return rootLocalView_.bound();
    \n-
    103 }
    \n-
    \n-
    104
    \n-
    \n-
    109 const Tree& tree() const
    \n-
    110 {
    \n-
    111 return TypeTree::child(rootLocalView_.tree(), globalBasis_->prefixPath());
    \n-
    112 }
    \n-
    \n-
    113
    \n-
    \n-\n-
    117 {
    \n-
    118 return rootLocalView_.size();
    \n-
    119 }
    \n-
    \n-
    120
    \n-
    \n-\n-
    128 {
    \n-
    129 return rootLocalView_.maxSize();
    \n-
    130 }
    \n-
    \n-
    131
    \n-
    \n-\n-
    134 {
    \n-
    135 return rootLocalView_.index(i);
    \n-
    136 }
    \n-
    \n-
    137
    \n-
    \n-\n-
    141 {
    \n-
    142 return *globalBasis_;
    \n-
    143 }
    \n-
    \n-
    144
    \n-
    \n-\n-
    146 {
    \n-
    147 return rootLocalView_;
    \n-
    148 }
    \n-
    \n-
    149
    \n-
    150protected:
    \n-\n-\n-
    153};
    \n-
    \n-
    154
    \n-
    155
    \n-
    156
    \n-
    157} // end namespace Functions
    \n-
    158} // end namespace Dune
    \n-
    159
    \n-
    160
    \n-
    161
    \n-
    162#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n+
    48template<class PB>
    \n+
    \n+\n+
    50{
    \n+
    51
    \n+
    52public:
    \n+
    53
    \n+
    55 using PreBasis = PB;
    \n+
    56
    \n+
    58 using PrefixPath = TypeTree::HybridTreePath<>;
    \n+
    59
    \n+
    61 using GridView = typename PreBasis::GridView;
    \n+
    62
    \n+
    64 using size_type = std::size_t;
    \n+
    65
    \n+\n+
    68
    \n+\n+
    71
    \n+
    73 using SizePrefix = Dune::ReservedVector<std::size_t, PreBasis::multiIndexBufferSize>;
    \n+
    74
    \n+
    83 template<class... T,
    \n+
    84 disableCopyMove<DefaultGlobalBasis, T...> = 0,
    \n+\n+
    \n+\n+
    87 preBasis_(std::forward<T>(t)...),
    \n+\n+
    89 {
    \n+
    90 static_assert(models<Concept::PreBasis<GridView>, PreBasis>(), "Type passed to DefaultGlobalBasis does not model the PreBasis concept.");
    \n+
    91 preBasis_.initializeIndices();
    \n+
    92 }
    \n+
    \n+
    93
    \n+
    100 template<class PreBasisFactory,
    \n+
    101 std::enable_if_t<Dune::IsCallable<PreBasisFactory(GridView), PreBasis>::value, int> = 0>
    \n+
    \n+
    102 DefaultGlobalBasis(const GridView& gridView, PreBasisFactory&& factory) :
    \n+
    103 preBasis_(factory(gridView)),
    \n+\n+
    105 {
    \n+
    106 static_assert(models<Concept::PreBasis<GridView>, PreBasis>(), "Type passed to DefaultGlobalBasis does not model the PreBasis concept.");
    \n+
    107 preBasis_.initializeIndices();
    \n+
    108 }
    \n+
    \n+
    109
    \n+
    \n+
    111 const GridView& gridView() const
    \n+
    112 {
    \n+
    113 return preBasis_.gridView();
    \n+
    114 }
    \n+
    \n+
    115
    \n+
    \n+
    117 const PreBasis& preBasis() const
    \n+
    118 {
    \n+
    119 return preBasis_;
    \n+
    120 }
    \n+
    \n+
    121
    \n+
    \n+\n+
    124 {
    \n+
    125 return preBasis_;
    \n+
    126 }
    \n+
    \n+
    127
    \n+
    \n+
    134 void update(const GridView & gv)
    \n+
    135 {
    \n+
    136 preBasis_.update(gv);
    \n+
    137 preBasis_.initializeIndices();
    \n+
    138 }
    \n+
    \n+
    139
    \n+
    \n+\n+
    142 {
    \n+
    143 return preBasis_.dimension();
    \n+
    144 }
    \n+
    \n+
    145
    \n+
    \n+\n+
    148 {
    \n+
    149 return preBasis_.size();
    \n+
    150 }
    \n+
    \n+
    151
    \n+
    \n+
    153 size_type size(const SizePrefix& prefix) const
    \n+
    154 {
    \n+
    155 return preBasis_.size(prefix);
    \n+
    156 }
    \n+
    \n+
    157
    \n+
    \n+\n+
    160 {
    \n+
    161 return LocalView(*this);
    \n+
    162 }
    \n+
    \n+
    163
    \n+
    \n+\n+
    166 {
    \n+
    167 return *this;
    \n+
    168 }
    \n+
    \n+
    169
    \n+
    \n+
    171 const PrefixPath& prefixPath() const
    \n+
    172 {
    \n+
    173 return prefixPath_;
    \n+
    174 }
    \n+
    \n+
    175
    \n+
    176protected:
    \n+\n+\n+
    179};
    \n+
    \n+
    180
    \n+
    181
    \n+
    182
    \n+
    183template<class PreBasis>
    \n+\n+
    185
    \n+
    186template<class GridView, class PreBasisFactory>
    \n+
    187DefaultGlobalBasis(const GridView& gv, PreBasisFactory&& f) -> DefaultGlobalBasis<std::decay_t<decltype(f(gv))>>;
    \n+
    188
    \n+
    189
    \n+
    190
    \n+
    191namespace BasisFactory {
    \n+
    192
    \n+
    193template<class GridView, class PreBasisFactory>
    \n+
    \n+
    194auto makeBasis(const GridView& gridView, PreBasisFactory&& preBasisFactory)
    \n+
    195{
    \n+
    196 return DefaultGlobalBasis(preBasisFactory(gridView));
    \n+
    197}
    \n+
    \n+
    198
    \n+
    199} // end namespace BasisFactory
    \n+
    200
    \n+
    201// Backward compatibility
    \n+
    202namespace [[deprecated("Will be removed after Dune 2.10")]] BasisBuilder {
    \n+
    203
    \n+
    204 using namespace BasisFactory;
    \n+
    205
    \n+
    206}
    \n+
    207
    \n+
    208
    \n+
    209} // end namespace Functions
    \n+
    210} // end namespace Dune
    \n+
    211
    \n+
    212
    \n+
    213
    \n+
    214#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n+\n+\n+
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n
    Definition polynomial.hh:17
    \n-
    SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >
    \n-
    Definition subspacebasis.hh:42
    \n-
    typename RootBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition subspacebasis.hh:52
    \n-
    const PrefixPath & prefixPath() const
    Definition subspacebasis.hh:122
    \n-
    The restriction of a finite element basis to a single element.
    Definition subspacelocalview.hh:34
    \n-
    typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree
    Tree of local finite elements / local shape function sets.
    Definition subspacelocalview.hh:57
    \n-
    void unbind()
    Unbind from the current element.
    Definition subspacelocalview.hh:93
    \n-
    const Element & element() const
    Return the grid element that the view is bound to.
    Definition subspacelocalview.hh:84
    \n-
    const GlobalBasis * globalBasis_
    Definition subspacelocalview.hh:151
    \n-
    bool bound() const
    Return if the view is bound to a grid element.
    Definition subspacelocalview.hh:100
    \n-
    typename RootLocalView::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition subspacelocalview.hh:60
    \n-
    size_type size() const
    Total number of degrees of freedom on this element.
    Definition subspacelocalview.hh:116
    \n-
    RootLocalView rootLocalView_
    Definition subspacelocalview.hh:152
    \n-
    void bind(const Element &e)
    Bind the view to a grid element.
    Definition subspacelocalview.hh:75
    \n-
    typename GlobalBasis::GridView GridView
    The grid view the global FE basis lives on.
    Definition subspacelocalview.hh:45
    \n-
    SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)
    Construct local view for a given global finite element basis.
    Definition subspacelocalview.hh:63
    \n-
    RLV RootLocalView
    Definition subspacelocalview.hh:39
    \n-
    const RootLocalView & rootLocalView() const
    Definition subspacelocalview.hh:145
    \n-
    std::size_t size_type
    The type used for sizes.
    Definition subspacelocalview.hh:51
    \n-
    typename GridView::template Codim< 0 >::Entity Element
    Type of the grid element we are bound to.
    Definition subspacelocalview.hh:48
    \n-
    const GlobalBasis & globalBasis() const
    Return the global basis that we are a view on.
    Definition subspacelocalview.hh:140
    \n-
    size_type maxSize() const
    Maximum local size for any element on the GridView.
    Definition subspacelocalview.hh:127
    \n-
    const Tree & tree() const
    Return the local ansatz tree associated to the bound entity.
    Definition subspacelocalview.hh:109
    \n-
    MultiIndex index(size_type i) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition subspacelocalview.hh:133
    \n-
    typename RootLocalView::Tree RootTree
    Tree of local finite elements / local shape function sets.
    Definition subspacelocalview.hh:54
    \n+
    auto makeBasis(const GridView &gridView, PreBasisFactory &&preBasisFactory)
    Definition defaultglobalbasis.hh:194
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n+
    Dune::ReservedVector< std::size_t, PreBasis::multiIndexBufferSize > SizePrefix
    Type used for prefixes handed to the size() method.
    Definition defaultglobalbasis.hh:73
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition defaultglobalbasis.hh:64
    \n+
    typename PreBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition defaultglobalbasis.hh:61
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition defaultglobalbasis.hh:111
    \n+
    PB PreBasis
    Pre-basis providing the implementation details.
    Definition defaultglobalbasis.hh:55
    \n+
    PreBasis & preBasis()
    Obtain the pre-basis providing the implementation details.
    Definition defaultglobalbasis.hh:123
    \n+
    void update(const GridView &gv)
    Update the stored grid view.
    Definition defaultglobalbasis.hh:134
    \n+
    DefaultLocalView< DefaultGlobalBasis< PreBasis > > LocalView
    Type of the local view on the restriction of the basis to a single element.
    Definition defaultglobalbasis.hh:67
    \n+
    typename LocalView::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition defaultglobalbasis.hh:70
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition defaultglobalbasis.hh:153
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition defaultglobalbasis.hh:141
    \n+
    PreBasis preBasis_
    Definition defaultglobalbasis.hh:177
    \n+
    LocalView localView() const
    Return local view for basis.
    Definition defaultglobalbasis.hh:159
    \n+
    TypeTree::HybridTreePath<> PrefixPath
    The empty prefix path that identifies the root in the local ansatz tree.
    Definition defaultglobalbasis.hh:58
    \n+
    DefaultGlobalBasis(T &&... t)
    Constructor.
    Definition defaultglobalbasis.hh:86
    \n+
    DefaultGlobalBasis(const GridView &gridView, PreBasisFactory &&factory)
    Constructor from a PreBasis factory.
    Definition defaultglobalbasis.hh:102
    \n+
    size_type size() const
    Return number of possible values for next position in empty multi index.
    Definition defaultglobalbasis.hh:147
    \n+
    const PreBasis & preBasis() const
    Obtain the pre-basis providing the implementation details.
    Definition defaultglobalbasis.hh:117
    \n+
    PrefixPath prefixPath_
    Definition defaultglobalbasis.hh:178
    \n+
    const DefaultGlobalBasis & rootBasis() const
    Return *this because we are not embedded in a larger basis.
    Definition defaultglobalbasis.hh:165
    \n+
    const PrefixPath & prefixPath() const
    Return empty path, because this is the root in the local ansatz tree.
    Definition defaultglobalbasis.hh:171
    \n+
    The restriction of a finite element basis to a single element.
    Definition defaultlocalview.hh:32
    \n+
    std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex
    Type used for global numbering of the basis vectors.
    Definition defaultlocalview.hh:68
    \n \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,233 +1,285 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-subspacelocalview.hh\n+defaultglobalbasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n 9\n-10\n-11#include \n-12\n-13#include \n-14\n-15#include \n-16\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-18\n-19\n-20\n-21namespace _\bD_\bu_\bn_\be {\n-22namespace Functions {\n+10#include \n+11#include \n+12#include \n+13\n+14#include \n+15#include \n+16#include \n+17\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+21\n+22\n 23\n-24\n-25\n-26template\n-27class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs;\n+24namespace _\bD_\bu_\bn_\be {\n+25namespace Functions {\n+26\n+27\n 28\n-29\n-30\n-32template\n-_\b3_\b3class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-34{\n-35 using PrefixPath = PP;\n-36\n-37public:\n-38\n-_\b3_\b9 using _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = RLV;\n-40\n-_\b4_\b2 using _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs = _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b,\n-_\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b>;\n-43\n-_\b4_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw;\n-46\n-_\b4_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GridView::template Codim<0>::Entity;\n-49\n-_\b5_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-52\n-_\b5_\b4 using _\bR_\bo_\bo_\bt_\bT_\br_\be_\be = typename RootLocalView::Tree;\n-55\n-_\b5_\b7 using _\bT_\br_\be_\be = typename TypeTree::ChildForTreePath;\n-58\n-_\b6_\b0 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename RootLocalView::MultiIndex;\n-61\n-_\b6_\b3 _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs, const PrefixPath& /\n-*prefixPath*/) :\n-64 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(&_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs),\n-65 _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs.rootBasis().localView())\n-66 {\n-67// static_assert(models, Tree>(), \"Tree type\n-passed to SubspaceLocalView does not model the BasisNode concept.\");\n-68 }\n-69\n-_\b7_\b5 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-76 {\n-77 _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bind(e);\n-78 }\n-79\n-_\b8_\b4 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-85 {\n-86 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.element();\n-87 }\n-88\n-_\b9_\b3 void _\bu_\bn_\bb_\bi_\bn_\bd()\n-94 {\n-95 _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.unbind();\n-96 }\n-97\n-_\b1_\b0_\b0 bool _\bb_\bo_\bu_\bn_\bd() const\n-101 {\n-102 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bound();\n-103 }\n-104\n-_\b1_\b0_\b9 const _\bT_\br_\be_\be& _\bt_\br_\be_\be() const\n-110 {\n-111 return TypeTree::child(_\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree(), _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh());\n-112 }\n-113\n-_\b1_\b1_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-117 {\n-118 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.size();\n-119 }\n-120\n-_\b1_\b2_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bS_\bi_\bz_\be() const\n-128 {\n-129 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize();\n-130 }\n-131\n-_\b1_\b3_\b3 _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx _\bi_\bn_\bd_\be_\bx(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n-134 {\n-135 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.index(i);\n-136 }\n-137\n-_\b1_\b4_\b0 const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs() const\n-141 {\n-142 return *_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n-143 }\n-144\n-_\b1_\b4_\b5 const _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw& _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n-146 {\n-147 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n-148 }\n-149\n-150protected:\n-_\b1_\b5_\b1 const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs* _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n-_\b1_\b5_\b2 _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n-153};\n-154\n-155\n-156\n-157} // end namespace Functions\n-158} // end namespace Dune\n-159\n-160\n-161\n-162#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n+48template\n+_\b4_\b9class _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+50{\n+51\n+52public:\n+53\n+_\b5_\b5 using _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = PB;\n+56\n+_\b5_\b8 using _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh = TypeTree::HybridTreePath<>;\n+59\n+_\b6_\b1 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename PreBasis::GridView;\n+62\n+_\b6_\b4 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+65\n+_\b6_\b7 using _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b<_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b>>;\n+68\n+_\b7_\b0 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx;\n+71\n+_\b7_\b3 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = Dune::ReservedVector;\n+74\n+83 template = 0,\n+85 _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be<_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, T...> = 0>\n+_\b8_\b6 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(T&&... t) :\n+87 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(std::forward(t)...),\n+88 _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_()\n+89 {\n+90 static_assert(models, _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(), \"Type passed\n+to DefaultGlobalBasis does not model the PreBasis concept.\");\n+91 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n+92 }\n+93\n+100 template::\n+value, int> = 0>\n+_\b1_\b0_\b2 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw, PreBasisFactory&& factory) :\n+103 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(factory(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)),\n+104 _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_()\n+105 {\n+106 static_assert(models, _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(), \"Type passed\n+to DefaultGlobalBasis does not model the PreBasis concept.\");\n+107 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n+108 }\n+109\n+_\b1_\b1_\b1 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+112 {\n+113 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.gridView();\n+114 }\n+115\n+_\b1_\b1_\b7 const _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs() const\n+118 {\n+119 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+120 }\n+121\n+_\b1_\b2_\b3 _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs()\n+124 {\n+125 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+126 }\n+127\n+_\b1_\b3_\b4 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw & gv)\n+135 {\n+136 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.update(gv);\n+137 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n+138 }\n+139\n+_\b1_\b4_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+142 {\n+143 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.dimension();\n+144 }\n+145\n+_\b1_\b4_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+148 {\n+149 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size();\n+150 }\n+151\n+_\b1_\b5_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx& prefix) const\n+154 {\n+155 return _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.size(prefix);\n+156 }\n+157\n+_\b1_\b5_\b9 _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n+160 {\n+161 return _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(*this);\n+162 }\n+163\n+_\b1_\b6_\b5 const _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs() const\n+166 {\n+167 return *this;\n+168 }\n+169\n+_\b1_\b7_\b1 const _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh() const\n+172 {\n+173 return _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n+174 }\n+175\n+176protected:\n+_\b1_\b7_\b7 _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+_\b1_\b7_\b8 _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n+179};\n+180\n+181\n+182\n+183template\n+_\b1_\b8_\b4_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(PreBasis&&) -> _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bs_\bt_\bd_\b:_\b:\n+_\bd_\be_\bc_\ba_\by_\b__\bt_\b<_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b>>;\n+185\n+186template\n+_\b1_\b8_\b7_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(const GridView& gv, PreBasisFactory&& f) -\n+> _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs>;\n+188\n+189\n+190\n+191namespace BasisFactory {\n+192\n+193template\n+_\b1_\b9_\b4auto _\bm_\ba_\bk_\be_\bB_\ba_\bs_\bi_\bs(const GridView& gridView, PreBasisFactory&& preBasisFactory)\n+195{\n+196 return _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs(preBasisFactory(gridView));\n+197}\n+198\n+199} // end namespace BasisFactory\n+200\n+201// Backward compatibility\n+202namespace [[deprecated(\"Will be removed after Dune 2.10\")]] BasisBuilder {\n+203\n+204 using namespace BasisFactory;\n+205\n+206}\n+207\n+208\n+209} // end namespace Functions\n+210} // end namespace Dune\n+211\n+212\n+213\n+214#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be\n+std::enable_if_t< std::is_constructible_v< T, Args... >, int >\n+enableIfConstructible\n+Helper to constrain forwarding constructors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:31\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n-SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:42\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-typename RootBasis::GridView GridView\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bm_\ba_\bk_\be_\bB_\ba_\bs_\bi_\bs\n+auto makeBasis(const GridView &gridView, PreBasisFactory &&preBasisFactory)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:194\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+Global basis for given pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx\n+Dune::ReservedVector< std::size_t, PreBasis::multiIndexBufferSize > SizePrefix\n+Type used for prefixes handed to the size() method.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:64\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+typename PreBasis::GridView GridView\n The grid view that the FE space is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:61\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:111\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+PB PreBasis\n+Pre-basis providing the implementation details.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:55\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs\n+PreBasis & preBasis()\n+Obtain the pre-basis providing the implementation details.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:123\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+Update the stored grid view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:134\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+DefaultLocalView< DefaultGlobalBasis< PreBasis > > LocalView\n+Type of the local view on the restriction of the basis to a single element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+typename LocalView::MultiIndex MultiIndex\n+Type used for global numbering of the basis vectors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:70\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:153\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:141\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n+PreBasis preBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:177\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+LocalView localView() const\n+Return local view for basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:159\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n+TypeTree::HybridTreePath<> PrefixPath\n+The empty prefix path that identifies the root in the local ansatz tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+DefaultGlobalBasis(T &&... t)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:86\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+DefaultGlobalBasis(const GridView &gridView, PreBasisFactory &&factory)\n+Constructor from a PreBasis factory.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:102\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Return number of possible values for next position in empty multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs\n+const PreBasis & preBasis() const\n+Obtain the pre-basis providing the implementation details.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:117\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_\n+PrefixPath prefixPath_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:178\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs\n+const DefaultGlobalBasis & rootBasis() const\n+Return *this because we are not embedded in a larger basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n const PrefixPath & prefixPath() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+Return empty path, because this is the root in the local ansatz tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:171\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n The restriction of a finite element basis to a single element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:34\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bT_\br_\be_\be\n-typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree\n-Tree of local finite elements / local shape function sets.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bu_\bn_\bb_\bi_\bn_\bd\n-void unbind()\n-Unbind from the current element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:93\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return the grid element that the view is bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:84\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_\n-const GlobalBasis * globalBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:151\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bo_\bu_\bn_\bd\n-bool bound() const\n-Return if the view is bound to a grid element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-typename RootLocalView::MultiIndex MultiIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:32\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Total number of degrees of freedom on this element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:116\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_\n-RootLocalView rootLocalView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind the view to a grid element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-typename GlobalBasis::GridView GridView\n-The grid view the global FE basis lives on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:45\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)\n-Construct local view for a given global finite element basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:63\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-RLV RootLocalView\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:39\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-const RootLocalView & rootLocalView() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:145\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-The type used for sizes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:51\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename GridView::template Codim< 0 >::Entity Element\n-Type of the grid element we are bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:48\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-const GlobalBasis & globalBasis() const\n-Return the global basis that we are a view on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:140\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bm_\ba_\bx_\bS_\bi_\bz_\be\n-size_type maxSize() const\n-Maximum local size for any element on the GridView.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:127\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bt_\br_\be_\be\n-const Tree & tree() const\n-Return the local ansatz tree associated to the bound entity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:109\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bi_\bn_\bd_\be_\bx\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:133\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bR_\bo_\bo_\bt_\bT_\br_\be_\be\n-typename RootLocalView::Tree RootTree\n-Tree of local finite elements / local shape function sets.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:54\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:68\n _\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: defaultnodetorangemap.hh File Reference\n+dune-functions: taylorhoodbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,48 +72,61 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    defaultnodetorangemap.hh File Reference
    \n+
    taylorhoodbasis.hh File Reference
    \n
    \n
    \n-
    #include <dune/common/concept.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n-#include <dune/typetree/traversal.hh>
    \n-#include <dune/typetree/visitor.hh>
    \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
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n-\n+\n+\n+\n \n

    \n Classes

    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >
     A simple node to range map using lexicographic ordering. More...
    class  Dune::Functions::TaylorHoodPreBasis< GV, HI >
     Pre-basis for lowest order Taylor-Hood basis. More...
     
    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor
    class  Dune::Functions::TaylorHoodVelocityTree< GV >
     
    class  Dune::Functions::TaylorHoodBasisTree< GV >
     
    \n \n \n \n \n \n+\n+\n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n+\n+\n+\n+\n+\n

    \n+Typedefs

    template<typename GV >
    using Dune::Functions::TaylorHoodBasis = DefaultGlobalBasis< TaylorHoodPreBasis< GV > >
     Nodal basis for a lowest order Taylor-Hood Lagrangean finite element space.
     
    \n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n

    \n Functions

    template<class Tree >
    DefaultNodeToRangeMap< Tree > Dune::Functions::makeDefaultNodeToRangeMap (const Tree &tree)
     
    template<class Basis , class TreePath >
    auto Dune::Functions::makeDefaultNodeToRangeMap (const Basis &basis, TreePath &&treePath) -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView().tree(), treePath)))
     
    auto Dune::Functions::BasisFactory::taylorHood ()
     Create a pre-basis factory that can create a Taylor-Hood pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,38 +1,46 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-defaultnodetorangemap.hh File Reference\n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+taylorhoodbasis.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\b _\bT_\br_\be_\be_\b _\b>\n-\u00a0 A simple node to range map using lexicographic ordering. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bH_\bI_\b _\b>\n+\u00a0 Pre-basis for lowest order Taylor-Hood basis. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\b _\bT_\br_\be_\be_\b _\b>_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be_\b<_\b _\bG_\bV_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be_\b<_\b _\bG_\bV_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV > >\n+\u00a0 Nodal basis for a lowest order Taylor-Hood Lagrangean finite element\n+ space.\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp< Tree >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n- (const Tree &tree)\n-\u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n- (const Basis &basis, TreePath &&treePath) -\n- > decltype(makeDefaultNodeToRangeMap(TypeTree::\n- child(basis.localView().tree(), treePath)))\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bt_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd ()\n+\u00a0 Create a pre-basis factory that can create a Taylor-Hood pre-basis.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: defaultnodetorangemap.hh Source File\n+dune-functions: taylorhoodbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,152 +74,412 @@\n \n \n
    \n
    \n-
    defaultnodetorangemap.hh
    \n+
    taylorhoodbasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n
    9
    \n-
    10#warning The header dune/functions/common/defaultnodetorangemap.hh is deprecated and will be removed after release 2.10.
    \n-
    11
    \n-
    12#include <dune/common/concept.hh>
    \n+
    10#include <dune/common/exceptions.hh>
    \n+
    11#include <dune/common/reservedvector.hh>
    \n+
    12#include <dune/common/indices.hh>
    \n
    13
    \n-\n-
    15
    \n-
    16#include <dune/typetree/traversal.hh>
    \n-
    17#include <dune/typetree/visitor.hh>
    \n+
    14#include <dune/typetree/powernode.hh>
    \n+
    15#include <dune/typetree/compositenode.hh>
    \n+
    16
    \n+\n
    18
    \n-
    19
    \n-
    20namespace Dune {
    \n-
    21namespace Functions {
    \n-
    22
    \n-
    23
    \n+\n+\n+
    21
    \n+
    22namespace Dune {
    \n+
    23namespace Functions {
    \n
    24
    \n-
    44template<class Tree>
    \n-
    \n-
    45struct
    \n-
    46[[deprecated("DefaultNodeToRangeMap is deprecated and will be removed after release 2.10.")]]
    \n-\n-
    48{
    \n-
    49
    \n-
    50 // A simple visitor for computing lexicographic
    \n-
    51 // subtree indices. To identify a leaf node
    \n-
    52 // we use its treeIndex() which is unique
    \n-
    53 // wrt the whole tree and store the computed
    \n-
    54 // index in a vector indexed by the tree indices.
    \n-
    \n-
    55 struct Visitor
    \n-
    56 : public TypeTree::TreeVisitor
    \n-
    57 , public TypeTree::DynamicTraversal
    \n-
    58 {
    \n-
    \n-
    59 Visitor(std::vector<std::size_t>& indices) :
    \n-
    60 indices_(indices),
    \n-
    61 counter_(0)
    \n-
    62 {}
    \n-
    \n-
    63
    \n-
    64 template<typename Node, typename TreePath>
    \n-
    \n-
    65 void leaf(Node& node, TreePath treePath)
    \n-
    66 {
    \n-
    67 if (indices_.size() < node.treeIndex()+1)
    \n-
    68 indices_.resize(node.treeIndex()+1);
    \n-
    69 indices_[node.treeIndex()] = counter_;
    \n-
    70 ++counter_;
    \n-
    71 }
    \n-
    \n-
    72
    \n-
    73 std::vector<std::size_t>& indices_;
    \n-
    74 std::size_t counter_;
    \n-
    75 };
    \n-
    \n-
    76
    \n-
    \n-
    87 DefaultNodeToRangeMap(const Tree& tree)
    \n-
    88 {
    \n-
    89 TypeTree::applyToTree(tree, Visitor(indices_));
    \n-
    90 }
    \n-
    \n+
    25
    \n+
    26// *****************************************************************************
    \n+
    27// This is the reusable part of the basis. It contains
    \n+
    28//
    \n+
    29// TaylorHoodPreBasis
    \n+
    30// TaylorHoodBasisTree
    \n+
    31// TaylorHoodVelocityTree
    \n+
    32//
    \n+
    33// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    34// state. These components do _not_ depend on the global basis and local view
    \n+
    35// and can be used without a global basis.
    \n+
    36// *****************************************************************************
    \n+
    37
    \n+
    38template<typename GV>
    \n+
    39class TaylorHoodVelocityTree;
    \n+
    40
    \n+
    41template<typename GV>
    \n+
    42class TaylorHoodBasisTree;
    \n+
    43
    \n+
    63template<typename GV, bool HI=false>
    \n+
    \n+\n+
    65{
    \n+
    66 static const bool useHybridIndices = HI;
    \n+
    67
    \n+
    68 static const int dim = GV::dimension;
    \n+
    69
    \n+
    70public:
    \n+
    71
    \n+
    73 using GridView = GV;
    \n+
    74
    \n+
    76 using size_type = std::size_t;
    \n+
    77
    \n+\n+
    80
    \n+
    81 static constexpr size_type maxMultiIndexSize = useHybridIndices ? 3 : 2;
    \n+
    82 static constexpr size_type minMultiIndexSize = 2;
    \n+\n+
    84
    \n+
    85private:
    \n+
    86
    \n+\n+\n+
    89
    \n+
    90public:
    \n
    91
    \n-
    92 template<class Node, class TreePath, class Range,
    \n-
    93 std::enable_if_t<models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() and not Tree::isLeaf, int> = 0>
    \n-
    \n-
    94 decltype(auto) operator()(const Node& node, const TreePath& treePath, Range&& y) const
    \n-
    95 {
    \n-
    96 return y[indices_[node.treeIndex()]];
    \n-
    97 }
    \n+
    \n+\n+
    94 gridView_(gv),
    \n+
    95 pq1PreBasis_(gv),
    \n+
    96 pq2PreBasis_(gv)
    \n+
    97 {}
    \n
    \n
    98
    \n-
    99 template<class Node, class TreePath, class Range,
    \n-
    100 std::enable_if_t< not models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() or Tree::isLeaf, int> = 0>
    \n-
    \n-
    101 decltype(auto) operator()(const Node& node, const TreePath& treePath, Range&& y) const
    \n-
    102 {
    \n-
    103 return std::forward<Range>(y);
    \n+
    \n+\n+
    101 {
    \n+\n+\n
    104 }
    \n
    \n
    105
    \n-
    106 std::vector<std::size_t> indices_;
    \n-
    107};
    \n-
    \n-
    108
    \n-
    109
    \n-
    110
    \n-
    111template<class Tree>
    \n-
    \n-\n-
    113{
    \n-
    114 return DefaultNodeToRangeMap<Tree>(tree);
    \n-
    115}
    \n+
    \n+
    107 const GridView& gridView() const
    \n+
    108 {
    \n+
    109 return gridView_;
    \n+
    110 }
    \n+
    \n+
    111
    \n+
    \n+
    113 void update (const GridView& gv)
    \n+
    114 {
    \n+\n+\n+
    117 }
    \n
    \n-
    116
    \n-
    117
    \n
    118
    \n-
    119template<class Basis, class TreePath>
    \n-
    \n-
    120auto makeDefaultNodeToRangeMap(const Basis& basis, TreePath&& treePath)
    \n-
    121 -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView().tree(),treePath)))
    \n-
    122{
    \n-
    123 auto&& localView = basis.localView();
    \n-
    124 localView.bind(*basis.gridView().template begin<0>());
    \n-
    125 auto&& tree = TypeTree::child(localView.tree(),treePath);
    \n-
    126 return makeDefaultNodeToRangeMap(tree);
    \n-
    127}
    \n-
    \n-
    128
    \n-
    129
    \n-
    130
    \n-
    131} // namespace Dune::Functions
    \n-
    132} // namespace Dune
    \n-
    133
    \n-
    134
    \n-
    135#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n+
    \n+\n+
    123 {
    \n+
    124 return Node{};
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    \n+\n+
    129 {
    \n+
    130 return 2;
    \n+
    131 }
    \n+
    \n+
    132
    \n+
    134 template<class SizePrefix>
    \n+
    \n+
    135 size_type size(const SizePrefix& prefix) const
    \n+
    136 {
    \n+
    137 return sizeImp<useHybridIndices>(prefix);
    \n+
    138 }
    \n+
    \n+
    139
    \n+
    140private:
    \n+
    141
    \n+
    142 template<bool hi, class SizePrefix,
    \n+
    143 std::enable_if_t<not hi,int> = 0>
    \n+
    144 size_type sizeImp(const SizePrefix& prefix) const
    \n+
    145 {
    \n+
    146 if (prefix.size() == 0)
    \n+
    147 return 2;
    \n+
    148 if (prefix.size() == 1)
    \n+
    149 {
    \n+
    150 if (prefix[0] == 0)
    \n+
    151 return dim * pq2PreBasis_.size();
    \n+
    152 if (prefix[0] == 1)
    \n+
    153 return pq1PreBasis_.size();
    \n+
    154 }
    \n+
    155 assert(prefix.size() == 2);
    \n+
    156 return 0;
    \n+
    157 }
    \n+
    158
    \n+
    159 template<bool hi, class SizePrefix,
    \n+
    160 std::enable_if_t<hi,int> = 0>
    \n+
    161 size_type sizeImp(const SizePrefix& prefix) const
    \n+
    162 {
    \n+
    163 if (prefix.size() == 0)
    \n+
    164 return 2;
    \n+
    165 if (prefix.size() == 1)
    \n+
    166 {
    \n+
    167 if (prefix[0] == 0)
    \n+
    168 return pq2PreBasis_.size();
    \n+
    169 if (prefix[0] == 1)
    \n+
    170 return pq1PreBasis_.size();
    \n+
    171 }
    \n+
    172 if (prefix.size() == 2)
    \n+
    173 {
    \n+
    174 if (prefix[0] == 0)
    \n+
    175 return dim;
    \n+
    176 if (prefix[0] == 1)
    \n+
    177 return 0;
    \n+
    178 }
    \n+
    179 assert(prefix.size() == 3);
    \n+
    180 return 0;
    \n+
    181 }
    \n+
    182
    \n+
    183public:
    \n+
    184
    \n+
    \n+\n+
    187 {
    \n+
    188 return dim * pq2PreBasis_.size() + pq1PreBasis_.size();
    \n+
    189 }
    \n+
    \n+
    190
    \n+
    \n+\n+
    193 {
    \n+\n+
    195 }
    \n+
    \n+
    196
    \n+
    197 template<typename It>
    \n+
    \n+
    198 It indices(const Node& node, It it) const
    \n+
    199 {
    \n+
    200 return indicesImp<useHybridIndices>(node, it);
    \n+
    201 }
    \n+
    \n+
    202
    \n+
    \n+\n+
    209 {
    \n+\n+
    211 if constexpr(HI)
    \n+
    212 return CD::makeDescriptor(
    \n+
    213 CD::makeUniformDescriptor(pq2PreBasis_.size(),
    \n+
    214 CD::FlatArray<GV::dimension>{}),
    \n+
    215 CD::FlatVector{pq1PreBasis_.size()});
    \n+
    216 else
    \n+
    217 return CD::Array<CD::FlatVector,2>{
    \n+
    218 CD::FlatVector{GV::dimension * pq2PreBasis_.size()},
    \n+
    219 CD::FlatVector{pq1PreBasis_.size()} };
    \n+
    220 }
    \n+
    \n+
    221
    \n+
    222protected:
    \n+
    223
    \n+
    224 template<class MultiIndex>
    \n+
    \n+
    225 static const void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n+
    226 {
    \n+
    227 M.resize(M.size()+1);
    \n+
    228 for(std::size_t i=M.size()-1; i>0; --i)
    \n+
    229 M[i] = M[i-1];
    \n+
    230 M[0] = M0;
    \n+
    231 }
    \n+
    \n+
    232
    \n+
    233 template<bool hi, class It,
    \n+
    234 std::enable_if_t<not hi,int> = 0>
    \n+
    \n+
    235 It indicesImp(const Node& node, It multiIndices) const
    \n+
    236 {
    \n+
    237 using namespace Dune::Indices;
    \n+
    238 for(std::size_t child=0; child<dim; ++child)
    \n+
    239 {
    \n+
    240 size_type subTreeSize = node.child(_0, 0).size();
    \n+
    241 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);
    \n+
    242 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    243 {
    \n+
    244 multiIndexPushFront(multiIndices[i], 0);
    \n+
    245 multiIndices[i][1] = multiIndices[i][1]*dim + child;
    \n+
    246 }
    \n+
    247 multiIndices += subTreeSize;
    \n+
    248 }
    \n+
    249 size_type subTreeSize = node.child(_1).size();
    \n+
    250 pq1PreBasis_.indices(node.child(_1), multiIndices);
    \n+
    251 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    252 multiIndexPushFront(multiIndices[i], 1);
    \n+
    253 multiIndices += subTreeSize;
    \n+
    254 return multiIndices;
    \n+
    255 }
    \n+
    \n+
    256
    \n+
    257 template<bool hi, class It,
    \n+
    258 std::enable_if_t<hi,int> = 0>
    \n+
    \n+
    259 It indicesImp(const Node& node, It multiIndices) const
    \n+
    260 {
    \n+
    261 using namespace Dune::Indices;
    \n+
    262 for(std::size_t child=0; child<dim; ++child)
    \n+
    263 {
    \n+
    264 size_type subTreeSize = node.child(_0, 0).size();
    \n+
    265 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);
    \n+
    266 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    267 {
    \n+
    268 multiIndexPushFront(multiIndices[i], 0);
    \n+
    269 multiIndices[i].push_back(i);
    \n+
    270 }
    \n+
    271 multiIndices += subTreeSize;
    \n+
    272 }
    \n+
    273 size_type subTreeSize = node.child(_1).size();
    \n+
    274 pq1PreBasis_.indices(node.child(_1), multiIndices);
    \n+
    275 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    276 multiIndexPushFront(multiIndices[i], 1);
    \n+
    277 multiIndices += subTreeSize;
    \n+
    278 return multiIndices;
    \n+
    279 }
    \n+
    \n+
    280
    \n+\n+
    282
    \n+\n+\n+
    285};
    \n+
    \n+
    286
    \n+
    287
    \n+
    288
    \n+
    289template<typename GV>
    \n+
    \n+\n+
    291 public PowerBasisNode<LagrangeNode<GV,2>, GV::dimension>
    \n+
    292{
    \n+\n+\n+
    295
    \n+
    296public:
    \n+
    \n+\n+
    298 {
    \n+
    299 for(int i=0; i<GV::dimension; ++i)
    \n+
    300 this->setChild(i, std::make_shared<PQ2Node>());
    \n+
    301 }
    \n+
    \n+
    302};
    \n+
    \n+
    303
    \n+
    304template<typename GV>
    \n+
    \n+\n+
    306 public CompositeBasisNode<
    \n+
    307 TaylorHoodVelocityTree<GV>,
    \n+
    308 LagrangeNode<GV,1>
    \n+
    309 >
    \n+
    310{
    \n+\n+\n+
    313
    \n+\n+
    315
    \n+
    316public:
    \n+
    \n+\n+
    318 {
    \n+
    319 this->template setChild<0>(std::make_shared<VelocityNode>());
    \n+
    320 this->template setChild<1>(std::make_shared<PressureNode>());
    \n+
    321 }
    \n+
    \n+
    322};
    \n+
    \n+
    323
    \n+
    324
    \n+
    325
    \n+
    326namespace BasisFactory {
    \n+
    327
    \n+
    \n+
    334inline auto taylorHood()
    \n+
    335{
    \n+
    336 return [](const auto& gridView) {
    \n+
    337 return TaylorHoodPreBasis<std::decay_t<decltype(gridView)>>(gridView);
    \n+
    338 };
    \n+
    339}
    \n+
    \n+
    340
    \n+
    341} // end namespace BasisFactory
    \n+
    342
    \n+
    343// *****************************************************************************
    \n+
    344// This is the actual global basis implementation based on the reusable parts.
    \n+
    345// *****************************************************************************
    \n+
    346
    \n+
    368template<typename GV>
    \n+\n+
    370
    \n+
    371
    \n+
    372
    \n+
    373} // end namespace Functions
    \n+
    374} // end namespace Dune
    \n+
    375
    \n+
    376
    \n+
    377#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n+\n+\n+\n+
    auto taylorHood()
    Create a pre-basis factory that can create a Taylor-Hood pre-basis.
    Definition taylorhoodbasis.hh:334
    \n
    Definition polynomial.hh:17
    \n-
    DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)
    Definition defaultnodetorangemap.hh:112
    \n-
    A simple node to range map using lexicographic ordering.
    Definition defaultnodetorangemap.hh:48
    \n-
    std::vector< std::size_t > indices_
    Definition defaultnodetorangemap.hh:106
    \n-
    DefaultNodeToRangeMap(const Tree &tree)
    Construct DefaultNodeToRangeMap.
    Definition defaultnodetorangemap.hh:87
    \n-
    Definition defaultnodetorangemap.hh:58
    \n-
    Visitor(std::vector< std::size_t > &indices)
    Definition defaultnodetorangemap.hh:59
    \n-
    void leaf(Node &node, TreePath treePath)
    Definition defaultnodetorangemap.hh:65
    \n-
    std::size_t counter_
    Definition defaultnodetorangemap.hh:74
    \n-
    std::vector< std::size_t > & indices_
    Definition defaultnodetorangemap.hh:73
    \n-\n+
    Definition containerdescriptors.hh:47
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n+
    Definition lagrangebasis.hh:375
    \n+\n+
    It indices(const Node &node, It it) const
    Definition lagrangebasis.hh:180
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition lagrangebasis.hh:98
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition lagrangebasis.hh:128
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition lagrangebasis.hh:172
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition leafprebasismixin.hh:53
    \n+
    size_type size() const
    Definition nodes.hh:147
    \n+
    Definition nodes.hh:198
    \n+\n+
    Definition taylorhoodbasis.hh:292
    \n+
    TaylorHoodVelocityTree()
    Definition taylorhoodbasis.hh:297
    \n+
    Definition taylorhoodbasis.hh:310
    \n+
    TaylorHoodBasisTree()
    Definition taylorhoodbasis.hh:317
    \n+
    Pre-basis for lowest order Taylor-Hood basis.
    Definition taylorhoodbasis.hh:65
    \n+
    TaylorHoodPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition taylorhoodbasis.hh:93
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition taylorhoodbasis.hh:107
    \n+
    static constexpr size_type minMultiIndexSize
    Definition taylorhoodbasis.hh:82
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition taylorhoodbasis.hh:135
    \n+
    GridView gridView_
    Definition taylorhoodbasis.hh:281
    \n+
    GV GridView
    The grid view that the FE basis is defined on.
    Definition taylorhoodbasis.hh:73
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition taylorhoodbasis.hh:113
    \n+
    auto containerDescriptor() const
    Return an container descriptor depending on the flag HI. Either return a Tuple if hybrid indices shou...
    Definition taylorhoodbasis.hh:208
    \n+
    PQ2PreBasis pq2PreBasis_
    Definition taylorhoodbasis.hh:284
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition taylorhoodbasis.hh:128
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition taylorhoodbasis.hh:186
    \n+
    PQ1PreBasis pq1PreBasis_
    Definition taylorhoodbasis.hh:283
    \n+
    static const void multiIndexPushFront(MultiIndex &M, size_type M0)
    Definition taylorhoodbasis.hh:225
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition taylorhoodbasis.hh:81
    \n+
    Node makeNode() const
    Create tree node.
    Definition taylorhoodbasis.hh:122
    \n+
    It indices(const Node &node, It it) const
    Definition taylorhoodbasis.hh:198
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition taylorhoodbasis.hh:83
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition taylorhoodbasis.hh:100
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition taylorhoodbasis.hh:192
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition taylorhoodbasis.hh:76
    \n+
    It indicesImp(const Node &node, It multiIndices) const
    Definition taylorhoodbasis.hh:235
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,156 +1,463 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-defaultnodetorangemap.hh\n+taylorhoodbasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n 9\n-10#warning The header dune/functions/common/defaultnodetorangemap.hh is\n-deprecated and will be removed after release 2.10.\n-11\n-12#include \n+10#include \n+11#include \n+12#include \n 13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-15\n-16#include \n-17#include \n+14#include \n+15#include \n+16\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n 18\n-19\n-20namespace _\bD_\bu_\bn_\be {\n-21namespace Functions {\n-22\n-23\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+21\n+22namespace _\bD_\bu_\bn_\be {\n+23namespace Functions {\n 24\n-44template\n-_\b4_\b5struct\n-46[[deprecated(\"DefaultNodeToRangeMap is deprecated and will be removed after\n-release 2.10.\")]]\n-47_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n-48{\n-49\n-50 // A simple visitor for computing lexicographic\n-51 // subtree indices. To identify a leaf node\n-52 // we use its treeIndex() which is unique\n-53 // wrt the whole tree and store the computed\n-54 // index in a vector indexed by the tree indices.\n-_\b5_\b5 struct _\bV_\bi_\bs_\bi_\bt_\bo_\br\n-56 : public TypeTree::TreeVisitor\n-57 , public TypeTree::DynamicTraversal\n-58 {\n-_\b5_\b9 _\bV_\bi_\bs_\bi_\bt_\bo_\br(std::vector& indices) :\n-60 indices_(indices),\n-61 counter_(0)\n-62 {}\n-63\n-64 template\n-_\b6_\b5 void _\bl_\be_\ba_\bf(Node& node, TreePath treePath)\n-66 {\n-67 if (indices_.size() < node.treeIndex()+1)\n-68 indices_.resize(node.treeIndex()+1);\n-69 indices_[node.treeIndex()] = counter_;\n-70 ++counter_;\n-71 }\n-72\n-_\b7_\b3 std::vector& _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n-_\b7_\b4 std::size_t _\bc_\bo_\bu_\bn_\bt_\be_\br_\b_;\n-75 };\n-76\n-_\b8_\b7 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(const Tree& tree)\n-88 {\n-89 TypeTree::applyToTree(tree, _\bV_\bi_\bs_\bi_\bt_\bo_\br(indices_));\n-90 }\n+25\n+26/\n+/ *****************************************************************************\n+27// This is the reusable part of the basis. It contains\n+28//\n+29// TaylorHoodPreBasis\n+30// TaylorHoodBasisTree\n+31// TaylorHoodVelocityTree\n+32//\n+33// The pre-basis allows to create the others and is the owner of possible\n+shared\n+34// state. These components do _not_ depend on the global basis and local view\n+35// and can be used without a global basis.\n+36/\n+/ *****************************************************************************\n+37\n+38template\n+39class TaylorHoodVelocityTree;\n+40\n+41template\n+42class TaylorHoodBasisTree;\n+43\n+63template\n+_\b6_\b4class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+65{\n+66 static const bool useHybridIndices = HI;\n+67\n+68 static const int dim = GV::dimension;\n+69\n+70public:\n+71\n+_\b7_\b3 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+74\n+_\b7_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+77\n+_\b7_\b9 using _\bN_\bo_\bd_\be = _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be_\b<_\bG_\bV_\b>;\n+80\n+_\b8_\b1 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = useHybridIndices ? 3 : 2;\n+_\b8_\b2 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = 2;\n+_\b8_\b3 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be = _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be;\n+84\n+85private:\n+86\n+87 using _\bP_\bQ_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b1_\b>;\n+88 using _\bP_\bQ_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b2_\b>;\n+89\n+90public:\n 91\n-92 template().treeIndex())>() and not Tree::isLeaf, int> = 0>\n-_\b9_\b4 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n-Range&& y) const\n-95 {\n-96 return y[indices_[node.treeIndex()]];\n-97 }\n+_\b9_\b3 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n+94 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n+95 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(gv),\n+96 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(gv)\n+97 {}\n 98\n-99 template().treeIndex())>() or Tree::isLeaf, int> = 0>\n-_\b1_\b0_\b1 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n-Range&& y) const\n-102 {\n-103 return std::forward(y);\n+_\b1_\b0_\b0 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+101 {\n+102 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs();\n+103 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs();\n 104 }\n 105\n-_\b1_\b0_\b6 std::vector _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n-107};\n-108\n-109\n-110\n-111template\n-_\b1_\b1_\b2_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\bT_\br_\be_\be_\b> _\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(const Tree& tree)\n-113{\n-114 return _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\bT_\br_\be_\be_\b>(tree);\n-115}\n-116\n-117\n+_\b1_\b0_\b7 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+108 {\n+109 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+110 }\n+111\n+_\b1_\b1_\b3 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+114 {\n+115 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bu_\bp_\bd_\ba_\bt_\be(gv);\n+116 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bu_\bp_\bd_\ba_\bt_\be(gv);\n+117 }\n 118\n-119template\n-_\b1_\b2_\b0auto _\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(const Basis& basis, TreePath&& treePath)\n-121 -> decltype(_\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(TypeTree::child(basis.localView\n-().tree(),treePath)))\n-122{\n-123 auto&& localView = basis.localView();\n-124 localView.bind(*basis.gridView().template begin<0>());\n-125 auto&& tree = TypeTree::child(localView.tree(),treePath);\n-126 return _\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp(tree);\n-127}\n-128\n-129\n-130\n-131} // namespace Dune::Functions\n-132} // namespace Dune\n-133\n-134\n-135#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n+_\b1_\b2_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+123 {\n+124 return _\bN_\bo_\bd_\be{};\n+125 }\n+126\n+_\b1_\b2_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+129 {\n+130 return 2;\n+131 }\n+132\n+134 template\n+_\b1_\b3_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+136 {\n+137 return sizeImp(prefix);\n+138 }\n+139\n+140private:\n+141\n+142 template = 0>\n+144 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeImp(const SizePrefix& prefix) const\n+145 {\n+146 if (prefix.size() == 0)\n+147 return 2;\n+148 if (prefix.size() == 1)\n+149 {\n+150 if (prefix[0] == 0)\n+151 return dim * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n+152 if (prefix[0] == 1)\n+153 return _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n+154 }\n+155 assert(prefix.size() == 2);\n+156 return 0;\n+157 }\n+158\n+159 template = 0>\n+161 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeImp(const SizePrefix& prefix) const\n+162 {\n+163 if (prefix.size() == 0)\n+164 return 2;\n+165 if (prefix.size() == 1)\n+166 {\n+167 if (prefix[0] == 0)\n+168 return _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n+169 if (prefix[0] == 1)\n+170 return _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n+171 }\n+172 if (prefix.size() == 2)\n+173 {\n+174 if (prefix[0] == 0)\n+175 return dim;\n+176 if (prefix[0] == 1)\n+177 return 0;\n+178 }\n+179 assert(prefix.size() == 3);\n+180 return 0;\n+181 }\n+182\n+183public:\n+184\n+_\b1_\b8_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+187 {\n+188 return dim * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be() + _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n+189 }\n+190\n+_\b1_\b9_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+193 {\n+194 return dim * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() + _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be();\n+195 }\n+196\n+197 template\n+_\b1_\b9_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+199 {\n+200 return indicesImp(node, it);\n+201 }\n+202\n+_\b2_\b0_\b8 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n+209 {\n+210 namespace CD = _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs;\n+211 if constexpr(HI)\n+212 return CD::makeDescriptor(\n+213 CD::makeUniformDescriptor(_\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be(),\n+214 CD::FlatArray{}),\n+215 CD::FlatVector{_\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be()});\n+216 else\n+217 return CD::Array{\n+218 CD::FlatVector{GV::dimension * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be()},\n+219 CD::FlatVector{_\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be()} };\n+220 }\n+221\n+222protected:\n+223\n+224 template\n+_\b2_\b2_\b5 static const void _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bu_\bs_\bh_\bF_\br_\bo_\bn_\bt(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n+226 {\n+227 M.resize(M.size()+1);\n+228 for(std::size_t i=M.size()-1; i>0; --i)\n+229 M[i] = M[i-1];\n+230 M[0] = M0;\n+231 }\n+232\n+233 template = 0>\n+_\b2_\b3_\b5 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp(const _\bN_\bo_\bd_\be& node, It multiIndices) const\n+236 {\n+237 using namespace Dune::Indices;\n+238 for(std::size_t child=0; child = 0>\n+_\b2_\b5_\b9 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp(const _\bN_\bo_\bd_\be& node, It multiIndices) const\n+260 {\n+261 using namespace Dune::Indices;\n+262 for(std::size_t child=0; child\n+_\b2_\b9_\b0class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be :\n+291 public _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be, GV::dimension>\n+292{\n+293 using _\bP_\bQ_\b2_\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b2_\b>;\n+294 using _\bB_\ba_\bs_\be = _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bP_\bQ_\b2_\bN_\bo_\bd_\be_\b,_\b _\bG_\bV_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>;\n+295\n+296public:\n+_\b2_\b9_\b7 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be()\n+298 {\n+299 for(int i=0; isetChild(i, std::make_shared());\n+301 }\n+302};\n+303\n+304template\n+_\b3_\b0_\b5class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be :\n+306 public _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be<\n+307 TaylorHoodVelocityTree,\n+308 LagrangeNode\n+309 >\n+310{\n+311 using _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bN_\bo_\bd_\be=_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be_\b<_\bG_\bV_\b>;\n+312 using _\bP_\br_\be_\bs_\bs_\bu_\br_\be_\bN_\bo_\bd_\be=_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b1_\b>;\n+313\n+314 using _\bB_\ba_\bs_\be=_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bN_\bo_\bd_\be_\b,_\b _\bP_\br_\be_\bs_\bs_\bu_\br_\be_\bN_\bo_\bd_\be_\b>;\n+315\n+316public:\n+_\b3_\b1_\b7 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be()\n+318 {\n+319 this->template setChild<0>(std::make_shared());\n+320 this->template setChild<1>(std::make_shared());\n+321 }\n+322};\n+323\n+324\n+325\n+326namespace BasisFactory {\n+327\n+_\b3_\b3_\b4inline auto _\bt_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd()\n+335{\n+336 return [](const auto& gridView) {\n+337 return _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(gridView);\n+338 };\n+339}\n+340\n+341} // end namespace BasisFactory\n+342\n+343/\n+/ *****************************************************************************\n+344// This is the actual global basis implementation based on the reusable\n+parts.\n+345/\n+/ *****************************************************************************\n+346\n+368template\n+_\b3_\b6_\b9using _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b> >;\n+370\n+371\n+372\n+373} // end namespace Functions\n+374} // end namespace Dune\n+375\n+376\n+377#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bt_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd\n+auto taylorHood()\n+Create a pre-basis factory that can create a Taylor-Hood pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:334\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n-DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:112\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n-A simple node to range map using lexicographic ordering.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:48\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_\n-std::vector< std::size_t > indices_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n-DefaultNodeToRangeMap(const Tree &tree)\n-Construct DefaultNodeToRangeMap.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-Visitor(std::vector< std::size_t > &indices)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:59\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bl_\be_\ba_\bf\n-void leaf(Node &node, TreePath treePath)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:65\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bu_\bn_\bt_\be_\br_\b_\n-std::size_t counter_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_\n-std::vector< std::size_t > & indices_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultnodetorangemap.hh:73\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:47\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+Global basis for given pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:375\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b1_\b _\b>\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n+It indices(const Node &node, It it) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:180\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void initializeIndices()\n+Initialize the global indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:98\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:128\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:172\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:53\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:198\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:252\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:292\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be\n+TaylorHoodVelocityTree()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:297\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:310\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be\n+TaylorHoodBasisTree()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:317\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+Pre-basis for lowest order Taylor-Hood basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:65\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+TaylorHoodPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:93\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:107\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr size_type minMultiIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:82\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:135\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n+GridView gridView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:281\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+The grid view that the FE basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:113\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor() const\n+Return an container descriptor depending on the flag HI. Either return a Tuple\n+if hybrid indices shou...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:208\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n+PQ2PreBasis pq2PreBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:284\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:128\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:186\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n+PQ1PreBasis pq1PreBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:283\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bu_\bs_\bh_\bF_\br_\bo_\bn_\bt\n+static const void multiIndexPushFront(MultiIndex &M, size_type M0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:225\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr size_type maxMultiIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:81\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n+It indices(const Node &node, It it) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:198\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+static constexpr size_type multiIndexBufferSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:83\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void initializeIndices()\n+Initialize the global indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:100\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:192\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:76\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp\n+It indicesImp(const Node &node, It multiIndices) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:235\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: hierarchicnodetorangemap.hh File Reference\n+dune-functions: brezzidouglasmarinibasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,38 +71,66 @@\n \n
    \n
    \n
    \n \n-
    hierarchicnodetorangemap.hh File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    brezzidouglasmarinibasis.hh File Reference
    \n
    \n
    \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+
    #include <array>
    \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/brezzidouglasmarini1cube2d.hh>
    \n+#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>
    \n+#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>
    \n+#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>
    \n+#include <dune/localfunctions/brezzidouglasmarini/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/functions/functionspacebases/leafprebasismixin.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n+\n \n

    \n Classes

    struct  Dune::Functions::HierarchicNodeToRangeMap
     A simple node to range map using the nested tree indices. More...
    class  Dune::Functions::BrezziDouglasMariniPreBasis< GV, k >
     
    class  Dune::Functions::BrezziDouglasMariniNode< GV, k >
     
    \n \n \n \n \n \n+\n+\n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n+\n+\n+\n+\n+\n+

    \n+Typedefs

    template<typename GV , int k>
    using Dune::Functions::BrezziDouglasMariniBasis = DefaultGlobalBasis< BrezziDouglasMariniPreBasis< GV, k > >
     Basis of a scalar k-th-order BDM finite element space on simplex and cube grids.
     
    \n+\n+\n+\n+\n+\n

    \n+Functions

    template<std::size_t k>
    auto Dune::Functions::BasisFactory::brezziDouglasMarini ()
     Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,56 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-hierarchicnodetorangemap.hh File Reference\n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+brezzidouglasmarinibasis.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n-\u00a0 A simple node to range map using the nested tree indices. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k > >\n+\u00a0 Basis of a scalar k-th-order BDM finite element space on simplex and\n+ cube grids.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi ()\n+\u00a0 Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-\n+ basis.\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: hierarchicnodetorangemap.hh Source File\n+dune-functions: brezzidouglasmarinibasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,77 +74,406 @@\n \n \n
    \n
    \n-
    hierarchicnodetorangemap.hh
    \n+
    brezzidouglasmarinibasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n
    9
    \n-
    10
    \n-
    11#include <utility>
    \n-
    12#include <type_traits>
    \n+
    10#include <array>
    \n+
    11#include <dune/common/exceptions.hh>
    \n+
    12#include <dune/geometry/referenceelements.hh>
    \n
    13
    \n-
    14#include <dune/common/concept.hh>
    \n-
    15
    \n-\n-\n-
    18
    \n-
    19namespace Dune {
    \n-
    20namespace Functions {
    \n-
    21
    \n+
    14#include <dune/localfunctions/common/virtualinterface.hh>
    \n+
    15#include <dune/localfunctions/common/virtualwrappers.hh>
    \n+
    16
    \n+
    17#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh>
    \n+
    18#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>
    \n+
    19#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>
    \n+
    20#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>
    \n+
    21#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh>
    \n
    22
    \n-
    23
    \n-
    \n-\n-
    34{
    \n-
    35 template<class Node, class TreePath, class Range,
    \n-
    36 std::enable_if_t< models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), int> = 0>
    \n-
    \n-
    37 decltype(auto) operator()(const Node&, const TreePath& treePath, Range&& y) const
    \n-
    38 {
    \n-
    39 return resolveStaticMultiIndex(y, treePath);
    \n-
    40 }
    \n-
    \n-
    41
    \n-
    42 template<class Node, class TreePath, class Range,
    \n-
    43 std::enable_if_t<not models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), int> = 0>
    \n-
    \n-
    44 decltype(auto) operator()(const Node&, const TreePath&, Range&& y) const
    \n-
    45 {
    \n-
    46 return std::forward<Range>(y);
    \n-
    47 }
    \n-
    \n-
    48};
    \n-
    \n-
    49
    \n-
    50
    \n-
    51
    \n-
    52} // namespace Dune::Functions
    \n-
    53} // namespace Dune
    \n-
    54
    \n-
    55
    \n-
    56#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n-\n-
    constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:421
    \n+\n+\n+\n+\n+
    27
    \n+
    28namespace Dune {
    \n+
    29namespace Functions {
    \n+
    30
    \n+
    31namespace Impl {
    \n+
    32
    \n+
    33 template<int dim, typename D, typename R, std::size_t k>
    \n+
    34 struct BDMSimplexLocalInfo
    \n+
    35 {
    \n+
    36 static_assert((AlwaysFalse<D>::value),"The requested type of BDM element is not implemented, sorry!");
    \n+
    37 };
    \n+
    38
    \n+
    39 template<typename D, typename R>
    \n+
    40 struct BDMSimplexLocalInfo<2,D,R,1>
    \n+
    41 {
    \n+
    42 using FiniteElement = BDM1Simplex2DLocalFiniteElement<D,R>;
    \n+
    43 static const std::size_t Variants = 8;
    \n+
    44 };
    \n+
    45
    \n+
    46 template<typename D, typename R>
    \n+
    47 struct BDMSimplexLocalInfo<2,D,R,2>
    \n+
    48 {
    \n+
    49 using FiniteElement = BDM2Simplex2DLocalFiniteElement<D,R>;
    \n+
    50 static const std::size_t Variants = 8;
    \n+
    51 };
    \n+
    52
    \n+
    53 template<int dim, typename D, typename R, std::size_t k>
    \n+
    54 struct BDMCubeLocalInfo
    \n+
    55 {
    \n+
    56 static_assert((AlwaysFalse<D>::value),"The requested type of BDM element is not implemented, sorry!");
    \n+
    57 };
    \n+
    58
    \n+
    59 template<typename D, typename R>
    \n+
    60 struct BDMCubeLocalInfo<2,D,R,1>
    \n+
    61 {
    \n+
    62 using FiniteElement = BDM1Cube2DLocalFiniteElement<D,R>;
    \n+
    63 static const std::size_t Variants = 16;
    \n+
    64 };
    \n+
    65
    \n+
    66 template<typename D, typename R>
    \n+
    67 struct BDMCubeLocalInfo<2,D,R,2>
    \n+
    68 {
    \n+
    69 using FiniteElement = BDM2Cube2DLocalFiniteElement<D,R>;
    \n+
    70 static const std::size_t Variants = 16;
    \n+
    71 };
    \n+
    72
    \n+
    73 template<typename D, typename R>
    \n+
    74 struct BDMCubeLocalInfo<3,D,R,1>
    \n+
    75 {
    \n+
    76 using FiniteElement = BDM1Cube3DLocalFiniteElement<D,R>;
    \n+
    77 static const std::size_t Variants = 64;
    \n+
    78 };
    \n+
    79
    \n+
    80 template<typename GV, int dim, typename R, std::size_t k>
    \n+
    81 class BDMLocalFiniteElementMap
    \n+
    82 {
    \n+
    83 using D = typename GV::ctype;
    \n+
    84 using CubeFiniteElement = typename BDMCubeLocalInfo<dim, D, R, k>::FiniteElement;
    \n+
    85 using SimplexFiniteElement = typename BDMSimplexLocalInfo<dim, D, R, k>::FiniteElement;
    \n+
    86
    \n+
    87 public:
    \n+
    88
    \n+
    89 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n+
    90 using FiniteElement = LocalFiniteElementVirtualInterface<T>;
    \n+
    91
    \n+
    92 BDMLocalFiniteElementMap(const GV& gv)
    \n+
    93 : is_(&(gv.indexSet())), orient_(gv.size(0))
    \n+
    94 {
    \n+
    95 cubeVariant_.resize(BDMCubeLocalInfo<dim, D, R, k>::Variants);
    \n+
    96 simplexVariant_.resize(BDMSimplexLocalInfo<dim, D, R, k>::Variants);
    \n+
    97
    \n+
    98 // create all variants
    \n+
    99 for (size_t i = 0; i < cubeVariant_.size(); i++)
    \n+
    100 cubeVariant_[i] = std::make_shared<LocalFiniteElementVirtualImp<CubeFiniteElement> >(CubeFiniteElement(i));
    \n+
    101
    \n+
    102 for (size_t i = 0; i < simplexVariant_.size(); i++)
    \n+
    103 simplexVariant_[i] = std::make_shared<LocalFiniteElementVirtualImp<SimplexFiniteElement> >(SimplexFiniteElement(i));
    \n+
    104
    \n+
    105 // compute orientation for all elements
    \n+
    106 // loop once over the grid
    \n+
    107 for(const auto& cell : elements(gv))
    \n+
    108 {
    \n+
    109 unsigned int myId = is_->index(cell);
    \n+
    110 orient_[myId] = 0;
    \n+
    111
    \n+
    112 for (const auto& intersection : intersections(gv,cell))
    \n+
    113 {
    \n+
    114 if (intersection.neighbor() && (is_->index(intersection.outside()) > myId))
    \n+
    115 orient_[myId] |= (1 << intersection.indexInInside());
    \n+
    116 }
    \n+
    117 }
    \n+
    118 }
    \n+
    119
    \n+
    121 template<class EntityType>
    \n+
    122 const FiniteElement& find(const EntityType& e) const
    \n+
    123 {
    \n+
    124 if (e.type().isCube())
    \n+
    125 return *cubeVariant_[orient_[is_->index(e)]];
    \n+
    126 else
    \n+
    127 return *simplexVariant_[orient_[is_->index(e)]];
    \n+
    128 }
    \n+
    129
    \n+
    130 private:
    \n+
    131 std::vector<std::shared_ptr<LocalFiniteElementVirtualImp<CubeFiniteElement> > > cubeVariant_;
    \n+
    132 std::vector<std::shared_ptr<LocalFiniteElementVirtualImp<SimplexFiniteElement> > > simplexVariant_;
    \n+
    133 const typename GV::IndexSet* is_;
    \n+
    134 std::vector<unsigned char> orient_;
    \n+
    135 };
    \n+
    136
    \n+
    137
    \n+
    138} // namespace Impl
    \n+
    139
    \n+
    140
    \n+
    141// *****************************************************************************
    \n+
    142// This is the reusable part of the basis. It contains
    \n+
    143//
    \n+
    144// BrezziDouglasMariniPreBasis
    \n+
    145// BrezziDouglasMariniNode
    \n+
    146//
    \n+
    147// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    148// state. These components do _not_ depend on the global basis and local view
    \n+
    149// and can be used without a global basis.
    \n+
    150// *****************************************************************************
    \n+
    151
    \n+
    152template<typename GV, int k>
    \n+
    153class BrezziDouglasMariniNode;
    \n+
    154
    \n+
    155template<typename GV, int k>
    \n+
    \n+\n+
    157 public LeafPreBasisMixin< BrezziDouglasMariniPreBasis<GV,k> >
    \n+
    158{
    \n+
    159 static const int dim = GV::dimension;
    \n+
    160 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;
    \n+
    161
    \n+
    162public:
    \n+
    163
    \n+
    165 using GridView = GV;
    \n+
    166 using size_type = std::size_t;
    \n+
    167
    \n+\n+
    169
    \n+
    \n+\n+
    172 gridView_(gv),
    \n+\n+
    174 {
    \n+
    175 // There is no inherent reason why the basis shouldn't work for grids with more than one
    \n+
    176 // element types. Somebody simply has to sit down and implement the missing bits.
    \n+
    177 if (gv.indexSet().types(0).size() > 1)
    \n+
    178 DUNE_THROW(Dune::NotImplemented, "Brezzi-Douglas-Marini basis is only implemented for grids with a single element type");
    \n+
    179 }
    \n+
    \n+
    180
    \n+
    \n+\n+
    182 {
    \n+
    183 codimOffset_[0] = 0;
    \n+
    184 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);
    \n+
    185 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] * gridView_.size(1);
    \n+
    186 }
    \n+
    \n+
    187
    \n+
    \n+
    190 const GridView& gridView() const
    \n+
    191 {
    \n+
    192 return gridView_;
    \n+
    193 }
    \n+
    \n+
    194
    \n+
    195 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n+
    \n+
    196 void update (const GridView& gv)
    \n+
    197 {
    \n+
    198 gridView_ = gv;
    \n+
    199 }
    \n+
    \n+
    200
    \n+
    \n+\n+
    205 {
    \n+
    206 return Node{&finiteElementMap_};
    \n+
    207 }
    \n+
    \n+
    208
    \n+
    \n+\n+
    210 {
    \n+
    211 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] * gridView_.size(1); // only 2d
    \n+
    212 }
    \n+
    \n+
    213
    \n+
    \n+\n+
    215 {
    \n+
    216 // The implementation currently only supports grids with a single element type.
    \n+
    217 // We can therefore return the actual number of dofs here.
    \n+
    218 GeometryType elementType = *(gridView_.indexSet().types(0).begin());
    \n+
    219 size_t numFaces = ReferenceElements<double,dim>::general(elementType).size(1);
    \n+
    220 return dofsPerCodim_[0] + dofsPerCodim_[1] * numFaces;
    \n+
    221 }
    \n+
    \n+
    222
    \n+
    228 template<typename It>
    \n+
    \n+
    229 It indices(const Node& node, It it) const
    \n+
    230 {
    \n+
    231 const auto& gridIndexSet = gridView().indexSet();
    \n+
    232 const auto& element = node.element();
    \n+
    233
    \n+
    234 // throw if element is not of predefined type
    \n+
    235 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n+
    236 DUNE_THROW(Dune::NotImplemented, "BrezziDouglasMariniBasis only implemented for cube and simplex elements.");
    \n+
    237
    \n+
    238 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n+
    239 {
    \n+
    240 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    241
    \n+
    242 // The dimension of the entity that the current dof is related to
    \n+
    243 size_t subentity = localKey.subEntity();
    \n+
    244 size_t codim = localKey.codim();
    \n+
    245
    \n+
    246 *it = { codimOffset_[codim] +
    \n+
    247 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \n+
    248 }
    \n+
    249
    \n+
    250 return it;
    \n+
    251 }
    \n+
    \n+
    252
    \n+
    253protected:
    \n+\n+
    255 std::array<size_t,dim+1> codimOffset_;
    \n+
    256 FiniteElementMap finiteElementMap_;
    \n+
    257 // Number of dofs per entity type depending on the entity's codimension and type
    \n+
    258 std::array<int,2> dofsPerCodim_ {{dim*(k-1)*3, dim+(k-1)}};
    \n+
    259};
    \n+
    \n+
    260
    \n+
    261
    \n+
    262
    \n+
    263template<typename GV, int k>
    \n+
    \n+\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 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;
    \n+
    274 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,
    \n+
    275 typename FiniteElementMap::FiniteElement,
    \n+
    276 Element>;
    \n+
    277
    \n+
    \n+
    278 BrezziDouglasMariniNode(const FiniteElementMap* finiteElementMap) :
    \n+
    279 element_(nullptr),
    \n+
    280 finiteElementMap_(finiteElementMap)
    \n+
    281 {}
    \n+
    \n+
    282
    \n+
    \n+
    284 const Element& element() const
    \n+
    285 {
    \n+
    286 return *element_;
    \n+
    287 }
    \n+
    \n+
    288
    \n+
    \n+\n+
    294 {
    \n+
    295 return finiteElement_;
    \n+
    296 }
    \n+
    \n+
    297
    \n+
    \n+
    299 void bind(const Element& e)
    \n+
    300 {
    \n+
    301 element_ = &e;
    \n+
    302 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n+
    303 this->setSize(finiteElement_.size());
    \n+
    304 }
    \n+
    \n+
    305
    \n+
    306protected:
    \n+
    307
    \n+\n+\n+\n+
    311};
    \n+
    \n+
    312
    \n+
    313
    \n+
    314
    \n+
    315namespace BasisFactory {
    \n+
    316
    \n+
    324template<std::size_t k>
    \n+
    \n+\n+
    326{
    \n+
    327 return [](const auto& gridView) {
    \n+
    328 return BrezziDouglasMariniPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n+
    329 };
    \n+
    330}
    \n+
    \n+
    331
    \n+
    332} // end namespace BasisFactory
    \n+
    333
    \n+
    334
    \n+
    335
    \n+
    336// *****************************************************************************
    \n+
    337// This is the actual global basis implementation based on the reusable parts.
    \n+
    338// *****************************************************************************
    \n+
    339
    \n+
    347template<typename GV, int k>
    \n+\n+
    349
    \n+
    350} // end namespace Functions
    \n+
    351} // end namespace Dune
    \n+
    352
    \n+
    353
    \n+
    354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n+\n+\n+\n+\n+
    auto brezziDouglasMarini()
    Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.
    Definition brezzidouglasmarinibasis.hh:325
    \n
    Definition polynomial.hh:17
    \n-
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:34
    \n-
    decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y) const
    Definition hierarchicnodetorangemap.hh:37
    \n-
    decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const
    Definition hierarchicnodetorangemap.hh:44
    \n-\n+
    Definition brezzidouglasmarinibasis.hh:266
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition brezzidouglasmarinibasis.hh:293
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition brezzidouglasmarinibasis.hh:272
    \n+
    const FiniteElementMap * finiteElementMap_
    Definition brezzidouglasmarinibasis.hh:310
    \n+
    std::size_t size_type
    Definition brezzidouglasmarinibasis.hh:271
    \n+
    FiniteElement finiteElement_
    Definition brezzidouglasmarinibasis.hh:308
    \n+
    typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap
    Definition brezzidouglasmarinibasis.hh:273
    \n+
    const Element * element_
    Definition brezzidouglasmarinibasis.hh:309
    \n+
    Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition brezzidouglasmarinibasis.hh:276
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition brezzidouglasmarinibasis.hh:299
    \n+
    BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)
    Definition brezzidouglasmarinibasis.hh:278
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition brezzidouglasmarinibasis.hh:284
    \n+
    Definition brezzidouglasmarinibasis.hh:158
    \n+
    std::size_t size_type
    Definition brezzidouglasmarinibasis.hh:166
    \n+
    std::array< int, 2 > dofsPerCodim_
    Definition brezzidouglasmarinibasis.hh:258
    \n+
    size_type dimension() const
    Definition brezzidouglasmarinibasis.hh:209
    \n+
    std::array< size_t, dim+1 > codimOffset_
    Definition brezzidouglasmarinibasis.hh:255
    \n+
    Node makeNode() const
    Create tree node.
    Definition brezzidouglasmarinibasis.hh:204
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition brezzidouglasmarinibasis.hh:165
    \n+
    BrezziDouglasMariniPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition brezzidouglasmarinibasis.hh:171
    \n+
    FiniteElementMap finiteElementMap_
    Definition brezzidouglasmarinibasis.hh:256
    \n+
    void update(const GridView &gv)
    Definition brezzidouglasmarinibasis.hh:196
    \n+
    void initializeIndices()
    Definition brezzidouglasmarinibasis.hh:181
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition brezzidouglasmarinibasis.hh:190
    \n+
    size_type maxNodeSize() const
    Definition brezzidouglasmarinibasis.hh:214
    \n+
    GridView gridView_
    Definition brezzidouglasmarinibasis.hh:254
    \n+
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition brezzidouglasmarinibasis.hh:229
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n+
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n+
    size_type size() const
    Definition nodes.hh:147
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n+
    Definition nodes.hh:191
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,82 +1,489 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-hierarchicnodetorangemap.hh\n+brezzidouglasmarinibasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n 9\n-10\n-11#include \n-12#include \n+10#include \n+11#include \n+12#include \n 13\n-14#include \n-15\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n-18\n-19namespace _\bD_\bu_\bn_\be {\n-20namespace Functions {\n-21\n+14#include \n+15#include \n+16\n+17#include \n+18#include \n+19#include \n+20#include \n+21#include \n 22\n-23\n-_\b3_\b3struct _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n-34{\n-35 template>(), int> = 0>\n-_\b3_\b7 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Node&, const TreePath& treePath, Range&& y)\n-const\n-38 {\n-39 return _\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(y, treePath);\n-40 }\n-41\n-42 template>(), int> = 0>\n-_\b4_\b4 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Node&, const TreePath&, Range&& y) const\n-45 {\n-46 return std::forward(y);\n-47 }\n-48};\n-49\n-50\n-51\n-52} // namespace Dune::Functions\n-53} // namespace Dune\n-54\n-55\n-56#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n-_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex\n-&multiIndex)\n-Provide multi-index access by chaining operator[].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:421\n+23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/\n+_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n+24#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+26#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+27\n+28namespace _\bD_\bu_\bn_\be {\n+29namespace Functions {\n+30\n+31namespace Impl {\n+32\n+33 template\n+34 struct BDMSimplexLocalInfo\n+35 {\n+36 static_assert((AlwaysFalse::value),\"The requested type of BDM element is\n+not implemented, sorry!\");\n+37 };\n+38\n+39 template\n+40 struct BDMSimplexLocalInfo<2,D,R,1>\n+41 {\n+42 using FiniteElement = BDM1Simplex2DLocalFiniteElement;\n+43 static const std::size_t Variants = 8;\n+44 };\n+45\n+46 template\n+47 struct BDMSimplexLocalInfo<2,D,R,2>\n+48 {\n+49 using FiniteElement = BDM2Simplex2DLocalFiniteElement;\n+50 static const std::size_t Variants = 8;\n+51 };\n+52\n+53 template\n+54 struct BDMCubeLocalInfo\n+55 {\n+56 static_assert((AlwaysFalse::value),\"The requested type of BDM element is\n+not implemented, sorry!\");\n+57 };\n+58\n+59 template\n+60 struct BDMCubeLocalInfo<2,D,R,1>\n+61 {\n+62 using FiniteElement = BDM1Cube2DLocalFiniteElement;\n+63 static const std::size_t Variants = 16;\n+64 };\n+65\n+66 template\n+67 struct BDMCubeLocalInfo<2,D,R,2>\n+68 {\n+69 using FiniteElement = BDM2Cube2DLocalFiniteElement;\n+70 static const std::size_t Variants = 16;\n+71 };\n+72\n+73 template\n+74 struct BDMCubeLocalInfo<3,D,R,1>\n+75 {\n+76 using FiniteElement = BDM1Cube3DLocalFiniteElement;\n+77 static const std::size_t Variants = 64;\n+78 };\n+79\n+80 template\n+81 class BDMLocalFiniteElementMap\n+82 {\n+83 using D = typename GV::ctype;\n+84 using CubeFiniteElement = typename BDMCubeLocalInfo::\n+FiniteElement;\n+85 using SimplexFiniteElement = typename BDMSimplexLocalInfo::\n+FiniteElement;\n+86\n+87 public:\n+88\n+89 using T = LocalBasisTraits, R, dim,\n+FieldVector, FieldMatrix >;\n+90 using FiniteElement = LocalFiniteElementVirtualInterface;\n+91\n+92 BDMLocalFiniteElementMap(const GV& gv)\n+93 : is_(&(gv.indexSet())), orient_(gv.size(0))\n+94 {\n+95 cubeVariant_.resize(BDMCubeLocalInfo::Variants);\n+96 simplexVariant_.resize(BDMSimplexLocalInfo::Variants);\n+97\n+98 // create all variants\n+99 for (size_t i = 0; i < cubeVariant_.size(); i++)\n+100 cubeVariant_[i] = std::\n+make_shared >(CubeFiniteElement\n+(i));\n+101\n+102 for (size_t i = 0; i < simplexVariant_.size(); i++)\n+103 simplexVariant_[i] = std::\n+make_shared >\n+(SimplexFiniteElement(i));\n+104\n+105 // compute orientation for all elements\n+106 // loop once over the grid\n+107 for(const auto& cell : elements(gv))\n+108 {\n+109 unsigned int myId = is_->index(cell);\n+110 orient_[myId] = 0;\n+111\n+112 for (const auto& intersection : intersections(gv,cell))\n+113 {\n+114 if (intersection.neighbor() && (is_->index(intersection.outside()) > myId))\n+115 orient_[myId] |= (1 << intersection.indexInInside());\n+116 }\n+117 }\n+118 }\n+119\n+121 template\n+122 const FiniteElement& find(const EntityType& e) const\n+123 {\n+124 if (e.type().isCube())\n+125 return *cubeVariant_[orient_[is_->index(e)]];\n+126 else\n+127 return *simplexVariant_[orient_[is_->index(e)]];\n+128 }\n+129\n+130 private:\n+131 std::vector\n+> > cubeVariant_;\n+132 std::vector > >\n+simplexVariant_;\n+133 const typename GV::IndexSet* is_;\n+134 std::vector orient_;\n+135 };\n+136\n+137\n+138} // namespace Impl\n+139\n+140\n+141/\n+/ *****************************************************************************\n+142// This is the reusable part of the basis. It contains\n+143//\n+144// BrezziDouglasMariniPreBasis\n+145// BrezziDouglasMariniNode\n+146//\n+147// The pre-basis allows to create the others and is the owner of possible\n+shared\n+148// state. These components do _not_ depend on the global basis and local\n+view\n+149// and can be used without a global basis.\n+150/\n+/ *****************************************************************************\n+151\n+152template\n+153class BrezziDouglasMariniNode;\n+154\n+155template\n+_\b1_\b5_\b6class _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n+157 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< BrezziDouglasMariniPreBasis >\n+158{\n+159 static const int dim = GV::dimension;\n+160 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap;\n+161\n+162public:\n+163\n+_\b1_\b6_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b1_\b6_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+167\n+_\b1_\b6_\b8 using _\bN_\bo_\bd_\be = _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b>;\n+169\n+_\b1_\b7_\b1 _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n+172 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n+173 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv)\n+174 {\n+175 // There is no inherent reason why the basis shouldn't work for grids with\n+more than one\n+176 // element types. Somebody simply has to sit down and implement the missing\n+bits.\n+177 if (gv.indexSet().types(0).size() > 1)\n+178 DUNE_THROW(Dune::NotImplemented, \"Brezzi-Douglas-Marini basis is only\n+implemented for grids with a single element type\");\n+179 }\n+180\n+_\b1_\b8_\b1 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+182 {\n+183 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] = 0;\n+184 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[1] = _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0);\n+185 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] *\n+gridView_.size(1);\n+186 }\n+187\n+_\b1_\b9_\b0 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+191 {\n+192 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+193 }\n+194\n+195 /* \\brief Update the stored grid view, to be called if the grid has changed\n+*/\n+_\b1_\b9_\b6 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+197 {\n+198 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+199 }\n+200\n+_\b2_\b0_\b4 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+205 {\n+206 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n+207 }\n+208\n+_\b2_\b0_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+210 {\n+211 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0) + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[1] *\n+_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(1); // only 2d\n+212 }\n+213\n+_\b2_\b1_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+215 {\n+216 // The implementation currently only supports grids with a single element\n+type.\n+217 // We can therefore return the actual number of dofs here.\n+218 GeometryType elementType = *(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0).begin());\n+219 size_t numFaces = ReferenceElements::general(elementType).size\n+(1);\n+220 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[1] * numFaces;\n+221 }\n+222\n+228 template\n+_\b2_\b2_\b9 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+230 {\n+231 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n+232 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+233\n+234 // throw if element is not of predefined type\n+235 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n+236 DUNE_THROW(Dune::NotImplemented, \"BrezziDouglasMariniBasis only implemented\n+for cube and simplex elements.\");\n+237\n+238 for(std::size_t i=0, end=node._\bs_\bi_\bz_\be(); i _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b2_\b5_\b6 FiniteElementMap _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n+257 // Number of dofs per entity type depending on the entity's codimension and\n+type\n+_\b2_\b5_\b8 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_ {{dim*(k-1)*3, dim+(k-1)}};\n+259};\n+260\n+261\n+262\n+263template\n+_\b2_\b6_\b4class _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be :\n+265 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+266{\n+267 static const int dim = GV::dimension;\n+268\n+269public:\n+270\n+_\b2_\b7_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b2_\b7_\b2 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b2_\b7_\b3 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::BDMLocalFiniteElementMap;\n+_\b2_\b7_\b4 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n+277\n+_\b2_\b7_\b8 _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be(const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* finiteElementMap) :\n+279 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+280 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n+281 {}\n+282\n+_\b2_\b8_\b4 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+285 {\n+286 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+287 }\n+288\n+_\b2_\b9_\b3 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n+294 {\n+295 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+296 }\n+297\n+_\b2_\b9_\b9 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+300 {\n+301 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+302 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.bind((_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_->find(*_\be_\bl_\be_\bm_\be_\bn_\bt_\b_)), e);\n+303 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n+304 }\n+305\n+306protected:\n+307\n+_\b3_\b0_\b8 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b3_\b0_\b9 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b3_\b1_\b0 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n+311};\n+312\n+313\n+314\n+315namespace BasisFactory {\n+316\n+324template\n+_\b3_\b2_\b5auto _\bb_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi()\n+326{\n+327 return [](const auto& gridView) {\n+328 return _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k>\n+(gridView);\n+329 };\n+330}\n+331\n+332} // end namespace BasisFactory\n+333\n+334\n+335\n+336/\n+/ *****************************************************************************\n+337// This is the actual global basis implementation based on the reusable\n+parts.\n+338/\n+/ *****************************************************************************\n+339\n+347template\n+_\b3_\b4_\b8using _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bB_\ba_\bs_\bi_\bs =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b> >;\n+349\n+350} // end namespace Functions\n+351} // end namespace Dune\n+352\n+353\n+354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n+_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi\n+auto brezziDouglasMarini()\n+Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:325\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n-A simple node to range map using the nested tree indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicnodetorangemap.hh:34\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y)\n-const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicnodetorangemap.hh:37\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicnodetorangemap.hh:44\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:266\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:293\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename GV::template Codim< 0 >::Entity Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:272\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n+const FiniteElementMap * finiteElementMap_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:310\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:271\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n+FiniteElement finiteElement_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:308\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp\n+typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:273\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n+const Element * element_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:309\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator,\n+typename FiniteElementMap::FiniteElement, Element > FiniteElement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:276\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind to element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:299\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be\n+BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:278\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return current element, throw if unbound.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:284\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:158\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:166\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_\n+std::array< int, 2 > dofsPerCodim_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:258\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:209\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+std::array< size_t, dim+1 > codimOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:255\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:204\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+GV GridView\n+The grid view that the FE space is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+BrezziDouglasMariniPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:171\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n+FiniteElementMap finiteElementMap_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:256\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:196\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void initializeIndices()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:190\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:214\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n+GridView gridView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:254\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:229\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+Global basis for given pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+A generic MixIn class for PreBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n+void setSize(const size_type size)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: compositebasis.hh File Reference\n+dune-functions: boundarydofs.hh File Reference\n \n \n \n \n \n \n \n@@ -70,53 +70,37 @@\n \n \n
    \n \n-
    compositebasis.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    boundarydofs.hh File Reference
    \n \n
    \n-
    #include <tuple>
    \n-#include <utility>
    \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/containerdescriptors.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n+
    #include <utility>
    \n+#include <dune/functions/functionspacebases/subentitydofs.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::Functions::CompositePreBasis< IMS, SPB >
     A pre-basis for composite bases. More...
     
    \n \n \n \n \n \n-\n-\n-\n-\n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n+\n+\n+\n+\n+\n

    \n+Functions

    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>
    void Dune::Functions::forEachBoundaryDOF (const Basis &basis, F &&f)
     Loop over all DOFs on the boundary.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,40 +1,26 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-compositebasis.hh File Reference\n-#include \n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+boundarydofs.hh File Reference\n #include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bs_\bu_\bb_\be_\bn_\bt_\bi_\bt_\by_\bd_\bo_\bf_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bI_\bM_\bS_\b,_\b _\bS_\bP_\bB_\b _\b>\n-\u00a0 A pre-basis for composite bases. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template >()\n+(0, std::declval< typename Basis::LocalView >(), std::declval< typename\n+Basis::GridView::Intersection >()), 0) = 0>\n+void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF (const Basis &basis, F &&f)\n+\u00a0 Loop over all DOFs on the boundary.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: compositebasis.hh Source File\n+dune-functions: boundarydofs.hh Source File\n \n \n \n \n \n \n \n@@ -74,482 +74,105 @@\n \n \n
    \n
    \n-
    compositebasis.hh
    \n+
    boundarydofs.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n
    9
    \n-
    10#include <tuple>
    \n-
    11#include <utility>
    \n-
    12
    \n-
    13#include <dune/common/hybridutilities.hh>
    \n-
    14#include <dune/common/reservedvector.hh>
    \n-
    15#include <dune/common/typeutilities.hh>
    \n-
    16#include <dune/common/hybridutilities.hh>
    \n-
    17#include <dune/common/tupleutility.hh>
    \n-
    18#include <dune/common/tuplevector.hh>
    \n-
    19
    \n-\n-\n-\n-\n-\n-\n-\n-\n-
    28
    \n-
    29
    \n-
    30namespace Dune {
    \n-
    31namespace Functions {
    \n-
    32
    \n-
    33// *****************************************************************************
    \n-
    34// This is the reusable part of the composite bases. It contains
    \n-
    35//
    \n-
    36// CompositePreBasis
    \n-
    37//
    \n-
    38// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    39// state. These components do _not_ depend on the global basis and local view
    \n-
    40// and can be used without a global basis.
    \n-
    41// *****************************************************************************
    \n-
    42
    \n-
    43
    \n-
    55template<class IMS, class... SPB>
    \n-
    \n-\n-
    57{
    \n-
    58 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;
    \n-
    59public:
    \n-
    60
    \n-
    62 using SubPreBases = std::tuple<SPB...>;
    \n-
    63
    \n-
    65 template<std::size_t i>
    \n-
    66 using SubPreBasis = std::tuple_element_t<i, SubPreBases>;
    \n-
    67
    \n-
    69 using GridView = typename std::tuple_element_t<0, SubPreBases>::GridView;
    \n-
    70
    \n-
    72 using size_type = std::size_t;
    \n-
    73
    \n-\n-
    76
    \n-
    77protected:
    \n-
    78 static const std::size_t children = sizeof...(SPB);
    \n-
    79
    \n-
    80 using ChildIndices = std::make_index_sequence<children>;
    \n-
    81
    \n-
    82public:
    \n-
    83
    \n-
    85 using Node = CompositeBasisNode<typename SPB::Node...>;
    \n-
    86
    \n-
    87 static constexpr size_type maxMultiIndexSize = std::max({SPB::maxMultiIndexSize...}) + isBlocked;
    \n-
    88 static constexpr size_type minMultiIndexSize = std::min({SPB::minMultiIndexSize...}) + isBlocked;
    \n-
    89 static constexpr size_type multiIndexBufferSize = std::max({SPB::multiIndexBufferSize...}) + isBlocked;
    \n-
    90
    \n-
    96 template<class... SFArgs,
    \n-
    97 disableCopyMove<CompositePreBasis, SFArgs...> = 0,
    \n-
    98 enableIfConstructible<std::tuple<SPB...>, SFArgs...> = 0>
    \n-
    \n-
    99 CompositePreBasis(SFArgs&&... sfArgs) :
    \n-
    100 subPreBases_(std::forward<SFArgs>(sfArgs)...)
    \n-
    101 {
    \n-
    102 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){
    \n-
    103 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype(subPreBasis)>>(), "Subprebases passed to CompositePreBasis does not model the PreBasis concept.");
    \n-
    104 });
    \n-
    105 }
    \n-
    \n-
    106
    \n-
    113 template<class GV,
    \n-
    114 std::enable_if_t<std::conjunction_v<
    \n-
    115 std::bool_constant<(children > 1)>, // Avoid ambiguous constructor if there's only one child
    \n-
    116 std::is_same<GV, GridView>,
    \n-
    117 std::is_constructible<SPB, GridView>...
    \n-
    118 >, int> = 0>
    \n-
    \n-
    119 CompositePreBasis(const GV& gv) :
    \n-
    120 subPreBases_(SPB(gv)...)
    \n-
    121 {
    \n-
    122 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){
    \n-
    123 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype(subPreBasis)>>(), "Subprebases passed to CompositePreBasis does not model the PreBasis concept.");
    \n-
    124 });
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    \n-\n-
    129 {
    \n-
    130 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    131 this->subPreBasis(i).initializeIndices();
    \n-
    132 });
    \n-
    133 }
    \n-
    \n-
    134
    \n-
    \n-
    136 const GridView& gridView() const
    \n-
    137 {
    \n-
    138 return std::get<0>(subPreBases_).gridView();
    \n-
    139 }
    \n-
    \n-
    140
    \n-
    \n-
    142 void update(const GridView& gv)
    \n-
    143 {
    \n-
    144 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    145 this->subPreBasis(i).update(gv);
    \n-
    146 });
    \n-
    147 }
    \n-
    \n-
    148
    \n-
    \n-\n-
    153 {
    \n-
    154 auto node = Node{};
    \n-
    155 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    156 node.setChild(this->subPreBasis(i).makeNode(), i);
    \n-
    157 });
    \n-
    158 return node;
    \n-
    159 }
    \n-
    \n-
    160
    \n-
    \n-\n-
    163 {
    \n-
    164 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n-
    165 }
    \n-
    \n-
    166
    \n-
    168 template<class SizePrefix>
    \n-
    \n-
    169 size_type size(const SizePrefix& prefix) const
    \n-
    170 {
    \n-
    171 return size(prefix, IndexMergingStrategy{});
    \n-
    172 }
    \n-
    \n-
    173
    \n-
    174private:
    \n-
    175
    \n-
    176 template<class MultiIndex>
    \n-
    177 static void multiIndexPopFront(MultiIndex& M)
    \n-
    178 {
    \n-
    179 for(std::size_t i=0; i<M.size()-1; ++i)
    \n-
    180 M[i] = M[i+1];
    \n-
    181 M.resize(M.size()-1);
    \n-
    182 }
    \n-
    183
    \n-
    184 template<class SizePrefix>
    \n-
    185 size_type size(SizePrefix prefix, BasisFactory::BlockedLexicographic) const
    \n-
    186 {
    \n-
    187 if (prefix.size() == 0)
    \n-
    188 return children;
    \n-
    189
    \n-
    190 auto front = prefix.front();
    \n-
    191 multiIndexPopFront(prefix);
    \n-
    192 return Hybrid::switchCases(ChildIndices(), front, [&] (auto i) {
    \n-
    193 return this->subPreBasis(i).size(prefix);
    \n-
    194 }, []() {
    \n-
    195 return size_type(0);
    \n-
    196 });
    \n-
    197 }
    \n-
    198
    \n-
    199 template<class SizePrefix>
    \n-
    200 size_type size(SizePrefix prefix, BasisFactory::FlatLexicographic) const
    \n-
    201 {
    \n-
    202 size_type result = 0;
    \n-
    203 if (prefix.size() == 0)
    \n-
    204 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    205 result += this->subPreBasis(i).size();
    \n-
    206 });
    \n-
    207 else {
    \n-
    208 staticFindInRange<0, children>([&](auto i) {
    \n-
    209 auto firstDigitSize = this->subPreBasis(i).size();
    \n-
    210 if (prefix[0] < firstDigitSize)
    \n-
    211 {
    \n-
    212 result = this->subPreBasis(i).size(prefix);
    \n-
    213 return true;
    \n-
    214 }
    \n-
    215 prefix[0] -= firstDigitSize;
    \n-
    216 return false;
    \n-
    217 });
    \n-
    218 }
    \n-
    219 return result;
    \n-
    220 }
    \n-
    221
    \n-
    222public:
    \n-
    223
    \n-
    \n-\n-
    226 {
    \n-
    227 size_type r=0;
    \n-
    228 // Accumulate dimension() for all subprebases
    \n-
    229 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    230 r += this->subPreBasis(i).dimension();
    \n-
    231 });
    \n-
    232 return r;
    \n-
    233 }
    \n-
    \n-
    234
    \n-
    \n-\n-
    237 {
    \n-
    238 size_type r=0;
    \n-
    239 // Accumulate maxNodeSize() for all subprebases
    \n-
    240 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    241 r += this->subPreBasis(i).maxNodeSize();
    \n-
    242 });
    \n-
    243 return r;
    \n-
    244 }
    \n-
    \n-
    245
    \n-
    247 template<std::size_t i>
    \n-
    \n-
    248 const SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {}) const
    \n-
    249 {
    \n-
    250 return std::get<i>(subPreBases_);
    \n-
    251 }
    \n-
    \n-
    252
    \n-
    254 template<std::size_t i>
    \n-
    \n-
    255 SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {})
    \n-
    256 {
    \n-
    257 return std::get<i>(subPreBases_);
    \n-
    258 }
    \n-
    \n-
    259
    \n-
    \n-
    261 const auto& subPreBases() const
    \n-
    262 {
    \n-
    263 return subPreBases_;
    \n-
    264 }
    \n-
    \n-
    265
    \n-
    267 template<typename It>
    \n-
    \n-
    268 It indices(const Node& node, It it) const
    \n-
    269 {
    \n-
    270 return indices(node, it, IndexMergingStrategy{});
    \n-
    271 }
    \n-
    \n-
    272
    \n-
    \n-\n-
    275 {
    \n-\n-
    277 if constexpr(std::is_same_v<IMS, BasisFactory::BlockedLexicographic>) {
    \n-
    278 return std::apply([&](auto const&... spb) {
    \n-
    279 return CD::makeDescriptor(Dune::Functions::containerDescriptor(spb)...);
    \n-
    280 }, subPreBases_);
    \n-
    281 }
    \n-
    282 else if constexpr(std::is_same_v<IMS, BasisFactory::FlatLexicographic>) {
    \n-
    283 return CD::Unknown{}; // Not yet implemented
    \n-
    284 }
    \n-
    285 else
    \n-
    286 return CD::Unknown{};
    \n-
    287 }
    \n-
    \n-
    288
    \n-
    289private:
    \n-
    290
    \n-
    291 template<typename It>
    \n-
    292 It indices(const Node& node, It multiIndices, BasisFactory::FlatLexicographic) const
    \n-
    293 {
    \n-
    294 size_type firstComponentOffset = 0;
    \n-
    295 // Loop over all children
    \n-
    296 Hybrid::forEach(ChildIndices(), [&](auto child){
    \n-
    297 size_type subTreeSize = node.child(child).size();
    \n-
    298 // Fill indices for current child into index buffer starting from current
    \n-
    299 // buffer position and shift first index component of any index for current
    \n-
    300 // child by suitable offset to get lexicographic indices.
    \n-
    301 subPreBasis(child).indices(node.child(child), multiIndices);
    \n-
    302 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    303 multiIndices[i][0] += firstComponentOffset;
    \n-
    304 // Increment offset by the size for first index component of the current child
    \n-
    305 firstComponentOffset += subPreBasis(child).size();
    \n-
    306 // Increment buffer iterator by the number of indices processed for current child
    \n-
    307 multiIndices += subTreeSize;
    \n-
    308 });
    \n-
    309 return multiIndices;
    \n-
    310 }
    \n-
    311
    \n-
    312 template<class MultiIndex>
    \n-
    313 static void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n-
    314 {
    \n-
    315 M.resize(M.size()+1);
    \n-
    316 for(std::size_t i=M.size()-1; i>0; --i)
    \n-
    317 M[i] = M[i-1];
    \n-
    318 M[0] = M0;
    \n-
    319 }
    \n-
    320
    \n-
    321 template<typename It>
    \n-
    322 It indices(const Node& node, It multiIndices, BasisFactory::BlockedLexicographic) const
    \n-
    323 {
    \n-
    324 // Loop over all children
    \n-
    325 Hybrid::forEach(ChildIndices(), [&](auto child){
    \n-
    326 size_type subTreeSize = node.child(child).size();
    \n-
    327 // Fill indices for current child into index buffer starting from current position
    \n-
    328 subPreBasis(child).indices(node.child(child), multiIndices);
    \n-
    329 // Insert child index before first component of all indices of current child.
    \n-
    330 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    331 this->multiIndexPushFront(multiIndices[i], child);
    \n-
    332 // Increment buffer iterator by the number of indices processed for current child
    \n-
    333 multiIndices += subTreeSize;
    \n-
    334 });
    \n-
    335 return multiIndices;
    \n-
    336 }
    \n-
    337
    \n-
    338 std::tuple<SPB...> subPreBases_;
    \n-
    339};
    \n-
    \n-
    340
    \n-
    341
    \n-
    342
    \n-
    343namespace BasisFactory {
    \n-
    344
    \n-
    345namespace Imp {
    \n-
    346
    \n-
    347template<class IndexMergingStrategy, class... ChildPreBasisFactory>
    \n-
    348class CompositePreBasisFactory
    \n-
    349{
    \n-
    350
    \n-
    351 template<class GridView, class... ChildPreBasis>
    \n-
    352 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&... childPreBasis) const
    \n-
    353 {
    \n-
    354 return CompositePreBasis<IndexMergingStrategy, std::decay_t<ChildPreBasis>...>(std::forward<ChildPreBasis>(childPreBasis)...);
    \n-
    355 }
    \n-
    356
    \n-
    357public:
    \n-
    358
    \n-
    359 CompositePreBasisFactory(const ChildPreBasisFactory&... childPreBasisFactory) :
    \n-
    360 childPreBasisFactories_(childPreBasisFactory...)
    \n-
    361 {}
    \n-
    362
    \n-
    363 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :
    \n-
    364 childPreBasisFactories_(std::move(childPreBasisFactory)...)
    \n-
    365 {}
    \n-
    366
    \n-
    367 template<class GridView>
    \n-
    368 auto operator()(const GridView& gridView) const
    \n-
    369 {
    \n-
    370 // Use std::apply to unpack the tuple childPreBasisFactories_
    \n-
    371 return std::apply([&](const auto&... childPreBasisFactory) {
    \n-
    372 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory(gridView)...);
    \n-
    373 }, childPreBasisFactories_);
    \n-
    374 }
    \n-
    375
    \n-
    376private:
    \n-
    377 std::tuple<ChildPreBasisFactory...> childPreBasisFactories_;
    \n-
    378};
    \n-
    379
    \n-
    380} // end namespace BasisFactory::Imp
    \n-
    381
    \n-
    382
    \n-
    383
    \n-
    394template<
    \n-
    395 typename... Args,
    \n-
    396 std::enable_if_t<Concept::isIndexMergingStrategy<typename LastType<Args...>::type>(),int> = 0>
    \n-
    397auto composite(Args&&... args)
    \n-
    398{
    \n-
    399 // We have to separate the last entry which is the IndexMergingStrategy
    \n-
    400 // and the preceding ones, which are the ChildPreBasisFactories
    \n-
    401
    \n-
    402 using ArgTuple = std::tuple<std::decay_t<Args>...>;
    \n-
    403
    \n-
    404 // Compute number of children and index of the IndexMergingStrategy argument
    \n-
    405 constexpr std::size_t children = sizeof...(Args) - 1;
    \n-
    406
    \n-
    407 // Use last type as IndexMergingStrategy
    \n-
    408 using IndexMergingStrategy = std::tuple_element_t<children, ArgTuple>;
    \n-
    409
    \n-
    410 // Index sequence for all but the last entry for partial tuple unpacking
    \n-
    411 auto childIndices = std::make_index_sequence<children>{};
    \n-
    412
    \n-
    413 // Unpack tuple only for those entries related to children
    \n-
    414 return applyPartial([](auto&&... childPreBasisFactory){
    \n-
    415 return Imp::CompositePreBasisFactory<IndexMergingStrategy, std::decay_t<decltype(childPreBasisFactory)>...>(std::forward<decltype(childPreBasisFactory)>(childPreBasisFactory)...);
    \n-
    416 },
    \n-
    417 std::forward_as_tuple(std::forward<Args>(args)...),
    \n-
    418 childIndices);
    \n-
    419}
    \n-
    420
    \n-
    432template<
    \n-
    433 typename... Args,
    \n-
    434 std::enable_if_t<not Concept::isIndexMergingStrategy<typename LastType<Args...>::type>(),int> = 0>
    \n-
    435auto composite(Args&&... args)
    \n-
    436{
    \n-
    437 return Imp::CompositePreBasisFactory<BasisFactory::BlockedLexicographic, std::decay_t<Args>...>(std::forward<Args>(args)...);
    \n-
    438}
    \n-
    439
    \n-
    440} // end namespace BasisFactory
    \n-
    441
    \n-
    442// Backward compatibility
    \n-
    443namespace [[deprecated("Will be removed after Dune 2.10")]] BasisBuilder {
    \n-
    444
    \n-
    445 using namespace BasisFactory;
    \n-
    446
    \n-
    447}
    \n-
    448
    \n-
    449
    \n-
    450
    \n-
    451} // end namespace Functions
    \n-
    452} // end namespace Dune
    \n-
    453
    \n-
    454
    \n-
    455#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n-\n-\n-\n-\n-\n-\n-\n-
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n+
    10#include <utility>
    \n+
    11
    \n+\n+
    13
    \n+
    14namespace Dune {
    \n+
    15namespace Functions {
    \n+
    16
    \n+
    17
    \n+
    18
    \n+
    38template<class Basis, class F,
    \n+
    39 decltype(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::LocalView>(),std::declval<typename Basis::GridView::Intersection>()), 0) = 0>
    \n+
    \n+
    40void forEachBoundaryDOF(const Basis& basis, F&& f)
    \n+
    41{
    \n+
    42 auto localView = basis.localView();
    \n+
    43 auto seDOFs = subEntityDOFs(basis);
    \n+
    44 const auto& gridView = basis.gridView();
    \n+
    45 for(auto&& element : elements(gridView))
    \n+
    46 if (element.hasBoundaryIntersections())
    \n+
    47 {
    \n+
    48 localView.bind(element);
    \n+
    49 for(const auto& intersection: intersections(gridView, element))
    \n+
    50 if (intersection.boundary())
    \n+
    51 for(auto localIndex: seDOFs.bind(localView,intersection))
    \n+
    52 f(localIndex, localView, intersection);
    \n+
    53 }
    \n+
    54}
    \n+
    \n+
    55
    \n+
    56
    \n+
    57
    \n+
    75template<class Basis, class F,
    \n+
    76 decltype(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::LocalView>()),0) = 0>
    \n+
    77void forEachBoundaryDOF(const Basis& basis, F&& f)
    \n+
    78{
    \n+
    79 auto localView = basis.localView();
    \n+
    80 auto seDOFs = subEntityDOFs(basis);
    \n+
    81 const auto& gridView = basis.gridView();
    \n+
    82 for(auto&& element : elements(gridView))
    \n+
    83 if (element.hasBoundaryIntersections())
    \n+
    84 {
    \n+
    85 localView.bind(element);
    \n+
    86 for(const auto& intersection: intersections(gridView, element))
    \n+
    87 if (intersection.boundary())
    \n+
    88 for(auto localIndex: seDOFs.bind(localView,intersection))
    \n+
    89 f(localIndex, localView);
    \n+
    90 }
    \n+
    91}
    \n+
    92
    \n+
    93
    \n+
    94
    \n+
    111template<class Basis, class F,
    \n+
    112 decltype(std::declval<std::decay_t<F>>()(std::declval<typename Basis::MultiIndex>()),0) = 0>
    \n+
    113void forEachBoundaryDOF(const Basis& basis, F&& f)
    \n+
    114{
    \n+
    115 auto localView = basis.localView();
    \n+
    116 auto seDOFs = subEntityDOFs(basis);
    \n+
    117 const auto& gridView = basis.gridView();
    \n+
    118 for(auto&& element : elements(gridView))
    \n+
    119 if (element.hasBoundaryIntersections())
    \n+
    120 {
    \n+
    121 localView.bind(element);
    \n+
    122 for(const auto& intersection: intersections(gridView, element))
    \n+
    123 if (intersection.boundary())
    \n+
    124 for(auto localIndex: seDOFs.bind(localView,intersection))
    \n+
    125 f(localView.index(localIndex));
    \n+
    126 }
    \n+
    127}
    \n+
    128
    \n+
    129
    \n+
    130
    \n+
    131} // namespace Functions
    \n+
    132} // namespace Dune
    \n+
    133
    \n+
    134#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n+\n+
    auto subEntityDOFs(const T &)
    Create SubEntityDOFs object.
    Definition subentitydofs.hh:164
    \n+
    void forEachBoundaryDOF(const Basis &basis, F &&f)
    Loop over all DOFs on the boundary.
    Definition boundarydofs.hh:40
    \n
    Definition polynomial.hh:17
    \n-
    auto containerDescriptor(const PreBasis &preBasis)
    Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
    Definition containerdescriptors.hh:73
    \n-
    static constexpr bool isIndexMergingStrategy()
    Definition basistags.hh:27
    \n-
    Definition containerdescriptors.hh:47
    \n-
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:84
    \n-
    A pre-basis for composite bases.
    Definition compositebasis.hh:57
    \n-
    SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})
    Mutable access to the stored prebasis of the factor in the power space.
    Definition compositebasis.hh:255
    \n-
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child pre-bases.
    Definition compositebasis.hh:75
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition compositebasis.hh:236
    \n-
    const SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={}) const
    Const access to the stored prebasis of the factor in the power space.
    Definition compositebasis.hh:248
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition compositebasis.hh:72
    \n-
    CompositeBasisNode< typename SPB::Node... > Node
    Template mapping root tree path to type of created tree node.
    Definition compositebasis.hh:85
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition compositebasis.hh:169
    \n-
    CompositePreBasis(SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects.
    Definition compositebasis.hh:99
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition compositebasis.hh:225
    \n-
    CompositePreBasis(const GV &gv)
    Constructor for given GridView.
    Definition compositebasis.hh:119
    \n-
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition compositebasis.hh:268
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition compositebasis.hh:162
    \n-
    typename std::tuple_element_t< 0, SubPreBases >::GridView GridView
    The grid view that the FE basis is defined on.
    Definition compositebasis.hh:69
    \n-
    static const std::size_t children
    Definition compositebasis.hh:78
    \n-
    std::tuple< SPB... > SubPreBases
    Tuple of child pre-bases.
    Definition compositebasis.hh:62
    \n-
    Node makeNode() const
    Create tree node.
    Definition compositebasis.hh:152
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition compositebasis.hh:128
    \n-
    std::tuple_element_t< i, SubPreBases > SubPreBasis
    Export individual child pre-bases by index.
    Definition compositebasis.hh:66
    \n-
    std::make_index_sequence< children > ChildIndices
    Definition compositebasis.hh:80
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition compositebasis.hh:142
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition compositebasis.hh:89
    \n-
    const auto & subPreBases() const
    Const access to the stored prebases tuple.
    Definition compositebasis.hh:261
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition compositebasis.hh:136
    \n-
    static constexpr size_type minMultiIndexSize
    Definition compositebasis.hh:88
    \n-
    auto containerDescriptor() const
    Return the associated container descriptor.
    Definition compositebasis.hh:274
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition compositebasis.hh:87
    \n-\n-\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,566 +1,109 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-compositebasis.hh\n+boundarydofs.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n 9\n-10#include \n-11#include \n-12\n-13#include \n-14#include \n-15#include \n-16#include \n-17#include \n-18#include \n-19\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n-21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-22#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-24#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-26#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n-27#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-28\n-29\n-30namespace _\bD_\bu_\bn_\be {\n-31namespace Functions {\n-32\n-33/\n-/ *****************************************************************************\n-34// This is the reusable part of the composite bases. It contains\n-35//\n-36// CompositePreBasis\n-37//\n-38// The pre-basis allows to create the others and is the owner of possible\n-shared\n-39// state. These components do _not_ depend on the global basis and local view\n-40// and can be used without a global basis.\n-41/\n-/ *****************************************************************************\n-42\n-43\n-55template\n-_\b5_\b6class _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-57{\n-58 static const bool isBlocked = std::is_same_v or std::is_same_v;\n-59public:\n-60\n-_\b6_\b2 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs = std::tuple;\n-63\n-65 template\n-_\b6_\b6 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = std::tuple_element_t;\n-67\n-_\b6_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename std::tuple_element_t<0, SubPreBases>::GridView;\n-70\n-_\b7_\b2 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-73\n-_\b7_\b5 using _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n-76\n-77protected:\n-_\b7_\b8 static const std::size_t _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn = sizeof...(SPB);\n-79\n-_\b8_\b0 using _\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs = std::make_index_sequence;\n-81\n-82public:\n-83\n-_\b8_\b5 using _\bN_\bo_\bd_\be = _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be;\n-86\n-_\b8_\b7 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = std::max({SPB::\n-maxMultiIndexSize...}) + isBlocked;\n-_\b8_\b8 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = std::min({SPB::\n-minMultiIndexSize...}) + isBlocked;\n-_\b8_\b9 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be = std::max({SPB::\n-multiIndexBufferSize...}) + isBlocked;\n-90\n-96 template = 0,\n-98 _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be, SFArgs...> = 0>\n-_\b9_\b9 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(SFArgs&&... sfArgs) :\n-100 subPreBases_(std::forward(sfArgs)...)\n-101 {\n-102 Hybrid::forEach(subPreBases_, [&](const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs){\n-103 static_assert(models, std::decay_t>(), \"Subprebases passed to CompositePreBasis does not model the\n-PreBasis concept.\");\n-104 });\n-105 }\n-106\n-113 template 1)>, // Avoid ambiguous constructor if\n-there's only one child\n-116 std::is_same,\n-117 std::is_constructible...\n-118 >, int> = 0>\n-_\b1_\b1_\b9 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const GV& gv) :\n-120 subPreBases_(SPB(gv)...)\n-121 {\n-122 Hybrid::forEach(subPreBases_, [&](const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs){\n-123 static_assert(models, std::decay_t>(), \"Subprebases passed to CompositePreBasis does not model the\n-PreBasis concept.\");\n-124 });\n-125 }\n-126\n-_\b1_\b2_\b8 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-129 {\n-130 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-131 this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).initializeIndices();\n-132 });\n-133 }\n-134\n-_\b1_\b3_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-137 {\n-138 return std::get<0>(subPreBases_).gridView();\n-139 }\n-140\n-_\b1_\b4_\b2 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-143 {\n-144 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-145 this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).update(gv);\n-146 });\n-147 }\n-148\n-_\b1_\b5_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-153 {\n-154 auto node = _\bN_\bo_\bd_\be{};\n-155 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-156 node.setChild(this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i)._\bm_\ba_\bk_\be_\bN_\bo_\bd_\be(), i);\n-157 });\n-158 return node;\n-159 }\n-160\n-_\b1_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-163 {\n-164 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n-165 }\n-166\n-168 template\n-_\b1_\b6_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-170 {\n-171 return _\bs_\bi_\bz_\be(prefix, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n-172 }\n-173\n-174private:\n-175\n-176 template\n-177 static void multiIndexPopFront(MultiIndex& M)\n-178 {\n-179 for(std::size_t i=0; i\n-185 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(SizePrefix prefix, BasisFactory::BlockedLexicographic) const\n-186 {\n-187 if (prefix.size() == 0)\n-188 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n-189\n-190 auto front = prefix.front();\n-191 multiIndexPopFront(prefix);\n-192 return Hybrid::switchCases(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), front, [&] (auto i) {\n-193 return this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size(prefix);\n-194 }, []() {\n-195 return _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be(0);\n-196 });\n-197 }\n-198\n-199 template\n-200 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(SizePrefix prefix, BasisFactory::FlatLexicographic) const\n-201 {\n-202 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n-203 if (prefix.size() == 0)\n-204 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-205 result += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size();\n-206 });\n-207 else {\n-208 staticFindInRange<0, children>([&](auto i) {\n-209 auto firstDigitSize = this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size();\n-210 if (prefix[0] < firstDigitSize)\n-211 {\n-212 result = this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size(prefix);\n-213 return true;\n-214 }\n-215 prefix[0] -= firstDigitSize;\n-216 return false;\n-217 });\n-218 }\n-219 return result;\n-220 }\n-221\n-222public:\n-223\n-_\b2_\b2_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-226 {\n-227 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be r=0;\n-228 // Accumulate dimension() for all subprebases\n-229 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-230 r += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).dimension();\n-231 });\n-232 return r;\n-233 }\n-234\n-_\b2_\b3_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-237 {\n-238 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be r=0;\n-239 // Accumulate maxNodeSize() for all subprebases\n-240 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-241 r += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).maxNodeSize();\n-242 });\n-243 return r;\n-244 }\n-245\n-247 template\n-_\b2_\b4_\b8 const _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bi_\b>& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(Dune::index_constant = {}) const\n-249 {\n-250 return std::get(subPreBases_);\n-251 }\n-252\n-254 template\n-_\b2_\b5_\b5 _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bi_\b>& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(Dune::index_constant = {})\n-256 {\n-257 return std::get(subPreBases_);\n-258 }\n-259\n-_\b2_\b6_\b1 const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs() const\n-262 {\n-263 return subPreBases_;\n-264 }\n-265\n-267 template\n-_\b2_\b6_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-269 {\n-270 return _\bi_\bn_\bd_\bi_\bc_\be_\bs(node, it, _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by{});\n-271 }\n-272\n-_\b2_\b7_\b4 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n-275 {\n-276 namespace CD = _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs;\n-277 if constexpr(std::is_same_v) {\n-278 return std::apply([&](auto const&... spb) {\n-279 return CD::makeDescriptor(_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(spb)...);\n-280 }, subPreBases_);\n-281 }\n-282 else if constexpr(std::is_same_v) {\n-283 return CD::Unknown{}; // Not yet implemented\n-284 }\n-285 else\n-286 return CD::Unknown{};\n-287 }\n-288\n-289private:\n-290\n-291 template\n-292 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:\n-_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc) const\n-293 {\n-294 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be firstComponentOffset = 0;\n-295 // Loop over all children\n-296 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto child){\n-297 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(child)._\bs_\bi_\bz_\be();\n-298 // Fill indices for current child into index buffer starting from current\n-299 // buffer position and shift first index component of any index for current\n-300 // child by suitable offset to get lexicographic indices.\n-301 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(child).indices(node.child(child), multiIndices);\n-302 for (std::size_t i = 0; i\n-313 static void multiIndexPushFront(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n-314 {\n-315 M.resize(M.size()+1);\n-316 for(std::size_t i=M.size()-1; i>0; --i)\n-317 M[i] = M[i-1];\n-318 M[0] = M0;\n-319 }\n-320\n-321 template\n-322 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n-BlockedLexicographic) const\n-323 {\n-324 // Loop over all children\n-325 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto child){\n-326 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(child)._\bs_\bi_\bz_\be();\n-327 // Fill indices for current child into index buffer starting from current\n-position\n-328 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(child).indices(node.child(child), multiIndices);\n-329 // Insert child index before first component of all indices of current\n-child.\n-330 for (std::size_t i = 0; imultiIndexPushFront(multiIndices[i], child);\n-332 // Increment buffer iterator by the number of indices processed for current\n-child\n-333 multiIndices += subTreeSize;\n-334 });\n-335 return multiIndices;\n-336 }\n-337\n-338 std::tuple subPreBases_;\n-339};\n-340\n-341\n-342\n-343namespace BasisFactory {\n-344\n-345namespace Imp {\n-346\n-347template\n-348class CompositePreBasisFactory\n-349{\n-350\n-351 template\n-352 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&...\n-childPreBasis) const\n-353 {\n-354 return CompositePreBasis...>(std::forward(childPreBasis)...);\n-355 }\n-356\n-357public:\n-358\n-359 CompositePreBasisFactory(const ChildPreBasisFactory&...\n-childPreBasisFactory) :\n-360 childPreBasisFactories_(childPreBasisFactory...)\n-361 {}\n-362\n-363 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :\n-364 childPreBasisFactories_(std::move(childPreBasisFactory)...)\n-365 {}\n-366\n-367 template\n-368 auto operator()(const GridView& gridView) const\n-369 {\n-370 // Use std::apply to unpack the tuple childPreBasisFactories_\n-371 return std::apply([&](const auto&... childPreBasisFactory) {\n-372 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory\n-(gridView)...);\n-373 }, childPreBasisFactories_);\n-374 }\n-375\n-376private:\n-377 std::tuple childPreBasisFactories_;\n-378};\n-379\n-380} // end namespace BasisFactory::Imp\n-381\n-382\n-383\n-394template<\n-395 typename... Args,\n-396 std::enable_if_t<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by::type>(),int> = 0>\n-397auto composite(Args&&... args)\n-398{\n-399 // We have to separate the last entry which is the IndexMergingStrategy\n-400 // and the preceding ones, which are the ChildPreBasisFactories\n-401\n-402 using ArgTuple = std::tuple...>;\n-403\n-404 // Compute number of children and index of the IndexMergingStrategy\n-argument\n-405 constexpr std::size_t children = sizeof...(Args) - 1;\n-406\n-407 // Use last type as IndexMergingStrategy\n-408 using IndexMergingStrategy = std::tuple_element_t;\n-409\n-410 // Index sequence for all but the last entry for partial tuple unpacking\n-411 auto childIndices = std::make_index_sequence{};\n-412\n-413 // Unpack tuple only for those entries related to children\n-414 return applyPartial([](auto&&... childPreBasisFactory){\n-415 return Imp::CompositePreBasisFactory...>(std::forward(childPreBasisFactory)...);\n-416 },\n-417 std::forward_as_tuple(std::forward(args)...),\n-418 childIndices);\n-419}\n-420\n-432template<\n-433 typename... Args,\n-434 std::enable_if_t::type>(),int> = 0>\n-435auto composite(Args&&... args)\n-436{\n-437 return Imp::CompositePreBasisFactory...>(std::forward(args)...);\n-438}\n-439\n-440} // end namespace BasisFactory\n-441\n-442// Backward compatibility\n-443namespace [[deprecated(\"Will be removed after Dune 2.10\")]] BasisBuilder {\n-444\n-445 using namespace BasisFactory;\n-446\n-447}\n-448\n-449\n-450\n-451} // end namespace Functions\n-452} // end namespace Dune\n-453\n-454\n-455#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh\n-_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n-_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be\n-std::enable_if_t< std::is_constructible_v< T, Args... >, int >\n-enableIfConstructible\n-Helper to constrain forwarding constructors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:31\n+10#include \n+11\n+12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bs_\bu_\bb_\be_\bn_\bt_\bi_\bt_\by_\bd_\bo_\bf_\bs_\b._\bh_\bh>\n+13\n+14namespace _\bD_\bu_\bn_\be {\n+15namespace Functions {\n+16\n+17\n+18\n+38template>()(0, std::declval(),std::declval()), 0) = 0>\n+_\b4_\b0void _\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF(const Basis& basis, F&& f)\n+41{\n+42 auto localView = basis.localView();\n+43 auto seDOFs = _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(basis);\n+44 const auto& gridView = basis.gridView();\n+45 for(auto&& element : elements(gridView))\n+46 if (element.hasBoundaryIntersections())\n+47 {\n+48 localView.bind(element);\n+49 for(const auto& intersection: intersections(gridView, element))\n+50 if (intersection.boundary())\n+51 for(auto localIndex: seDOFs.bind(localView,intersection))\n+52 f(localIndex, localView, intersection);\n+53 }\n+54}\n+55\n+56\n+57\n+75template>()(0, std::declval()),0) = 0>\n+77void _\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF(const Basis& basis, F&& f)\n+78{\n+79 auto localView = basis.localView();\n+80 auto seDOFs = _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(basis);\n+81 const auto& gridView = basis.gridView();\n+82 for(auto&& element : elements(gridView))\n+83 if (element.hasBoundaryIntersections())\n+84 {\n+85 localView.bind(element);\n+86 for(const auto& intersection: intersections(gridView, element))\n+87 if (intersection.boundary())\n+88 for(auto localIndex: seDOFs.bind(localView,intersection))\n+89 f(localIndex, localView);\n+90 }\n+91}\n+92\n+93\n+94\n+111template>()(std::declval()),0) = 0>\n+113void _\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF(const Basis& basis, F&& f)\n+114{\n+115 auto localView = basis.localView();\n+116 auto seDOFs = _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(basis);\n+117 const auto& gridView = basis.gridView();\n+118 for(auto&& element : elements(gridView))\n+119 if (element.hasBoundaryIntersections())\n+120 {\n+121 localView.bind(element);\n+122 for(const auto& intersection: intersections(gridView, element))\n+123 if (intersection.boundary())\n+124 for(auto localIndex: seDOFs.bind(localView,intersection))\n+125 f(localView.index(localIndex));\n+126 }\n+127}\n+128\n+129\n+130\n+131} // namespace Functions\n+132} // namespace Dune\n+133\n+134#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n+_\bs_\bu_\bb_\be_\bn_\bt_\bi_\bt_\by_\bd_\bo_\bf_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n+auto subEntityDOFs(const T &)\n+Create SubEntityDOFs object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:164\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bE_\ba_\bc_\bh_\bB_\bo_\bu_\bn_\bd_\ba_\br_\by_\bD_\bO_\bF\n+void forEachBoundaryDOF(const Basis &basis, F &&f)\n+Loop over all DOFs on the boundary.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn boundarydofs.hh:40\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor(const PreBasis &preBasis)\n-Return the container descriptor of the pre-basis, if defined, otherwise\n-ContainerDescriptor::Unknown.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-static constexpr bool isIndexMergingStrategy()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:47\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-Lexicographic merging of direct children without blocking.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn basistags.hh:84\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-A pre-basis for composite bases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})\n-Mutable access to the stored prebasis of the factor in the power space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:255\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-IMS IndexMergingStrategy\n-Strategy used to merge the global indices of the child pre-bases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:236\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:248\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:72\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\bo_\bd_\be\n-CompositeBasisNode< typename SPB::Node... > Node\n-Template mapping root tree path to type of created tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:85\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-CompositePreBasis(SFArgs &&... sfArgs)\n-Constructor for given child pre-basis objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:99\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:225\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-CompositePreBasis(const GV &gv)\n-Constructor for given GridView.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:119\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:268\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:162\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-typename std::tuple_element_t< 0, SubPreBases >::GridView GridView\n-The grid view that the FE basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:69\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n-static const std::size_t children\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs\n-std::tuple< SPB... > SubPreBases\n-Tuple of child pre-bases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void initializeIndices()\n-Initialize the global indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-std::tuple_element_t< i, SubPreBases > SubPreBasis\n-Export individual child pre-bases by index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:66\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-std::make_index_sequence< children > ChildIndices\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:80\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:142\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n-static constexpr size_type multiIndexBufferSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:89\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs\n-const auto & subPreBases() const\n-Const access to the stored prebases tuple.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:261\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:136\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr size_type minMultiIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:88\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor() const\n-Return the associated container descriptor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:274\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr size_type maxMultiIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn compositebasis.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:252\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: rannacherturekbasis.hh File Reference\n+dune-functions: subspacebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,60 +72,54 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    rannacherturekbasis.hh File Reference
    \n+
    subspacebasis.hh File Reference
    \n
    \n
    \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-#include <dune/functions/functionspacebases/leafprebasismixin.hh>
    \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
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n+\n \n

    \n Classes

    class  Dune::Functions::RannacherTurekPreBasis< GV >
     Pre-basis for a Rannacher-Turek basis. More...
     
    class  Dune::Functions::RannacherTurekNode< GV >
    class  Dune::Functions::SubspaceBasis< RB, TP >
     
    \n \n \n \n \n \n-\n-\n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n-\n-\n-\n-\n-\n

    \n-Typedefs

    template<typename GV >
    using Dune::Functions::RannacherTurekBasis = DefaultGlobalBasis< RannacherTurekPreBasis< GV > >
     Rannacher-Turek basis.
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class Dummy = void>
    auto Dune::Functions::BasisFactory::rannacherTurek ()
     Create a pre-basis factory that can create a Rannacher-Turek pre-basis.
     
    template<class RB , class TP >
     Dune::Functions::SubspaceBasis (const RB &, const TP) -> SubspaceBasis< RB, TP >
     
    template<class RootRootBasis , class InnerTP , class OuterTP >
     Dune::Functions::SubspaceBasis (const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath) -> SubspaceBasis< std::decay_t< decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t< InnerTP, OuterTP > >
     
    template<class RootBasis , class... PrefixTreeIndices>
    auto Dune::Functions::subspaceBasis (const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)
     Create SubspaceBasis from a root basis and a prefixPath.
     
    template<class RootBasis , class... PrefixTreeIndices>
    auto Dune::Functions::subspaceBasis (const RootBasis &rootBasis, const PrefixTreeIndices &... prefixTreeIndices)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +1,46 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-rannacherturekbasis.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+subspacebasis.hh File Reference\n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b _\b>\n-\u00a0 Pre-basis for a Rannacher-Turek basis. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bR_\bB_\b,_\b _\bT_\bP_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV > >\n-\u00a0 Rannacher-Turek basis.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk ()\n-\u00a0 Create a pre-basis factory that can create a Rannacher-Turek pre-basis.\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs (const RB &, const TP) -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs<\n+ RB, TP >\n+\u00a0\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs (const _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs< RootRootBasis,\n+ InnerTP > &rootBasis, const OuterTP &prefixPath) -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs< std::\n+ decay_t< decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t< InnerTP,\n+ OuterTP > >\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs (const RootBasis &rootBasis, const\n+ TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)\n+\u00a0 Create _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs from a root basis and a prefixPath.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs (const RootBasis &rootBasis, const\n+ PrefixTreeIndices &... prefixTreeIndices)\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: rannacherturekbasis.hh Source File\n+dune-functions: subspacebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,268 +74,211 @@\n \n \n
    \n
    \n-
    rannacherturekbasis.hh
    \n+
    subspacebasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n
    9
    \n-
    10#include <dune/common/exceptions.hh>
    \n-
    11
    \n-
    12#include <dune/grid/common/capabilities.hh>
    \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/localfunctions/common/localfiniteelementvariant.hh>
    \n-
    15#include <dune/localfunctions/rannacherturek.hh>
    \n-
    16#include <dune/localfunctions/crouzeixraviart.hh>
    \n+\n+\n+\n
    17
    \n-\n-\n-\n-
    21
    \n+
    18
    \n+
    19
    \n+
    20namespace Dune {
    \n+
    21namespace Functions {
    \n
    22
    \n-
    23namespace Dune {
    \n-
    24namespace Functions {
    \n-
    25
    \n-
    26// *****************************************************************************
    \n-
    27// This is the reusable part of the basis. It contains
    \n-
    28//
    \n-
    29// RannacherTurekPreBasis
    \n-
    30// RannacherTurekNode
    \n-
    31//
    \n-
    32// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    33// state. These components do _not_ depend on the global basis and local view
    \n-
    34// and can be used without a global basis.
    \n-
    35// *****************************************************************************
    \n-
    36
    \n-
    37template<typename GV>
    \n-
    38class RannacherTurekNode;
    \n+
    23
    \n+
    24
    \n+
    25namespace Impl {
    \n+
    26
    \n+
    27 template<class... Inner, class... Outer>
    \n+
    28 auto joinTreePaths(const TypeTree::HybridTreePath<Inner...>& inner, const TypeTree::HybridTreePath<Outer...> outer)
    \n+
    29 {
    \n+
    30 return TypeTree::HybridTreePath<Inner..., Outer...>(std::tuple_cat(inner._data, outer._data));
    \n+
    31 }
    \n+
    32
    \n+
    33 template<class InnerTP, class OuterTP>
    \n+
    34 using JoinTreePath_t = std::decay_t<decltype(joinTreePaths(std::declval<InnerTP>(), std::declval<OuterTP>()))>;
    \n+
    35
    \n+
    36}
    \n+
    37
    \n+
    38
    \n
    39
    \n-
    40template<typename GV>
    \n-
    41class RannacherTurekPreBasis;
    \n-
    42
    \n-
    55template<typename GV>
    \n-
    \n-\n-
    57 public LeafPreBasisMixin< RannacherTurekPreBasis<GV> >
    \n-
    58{
    \n-
    59 static const int dim = GV::dimension;
    \n-
    60
    \n-
    61public:
    \n-
    62
    \n-
    64 using GridView = GV;
    \n-
    65
    \n-
    67 using size_type = std::size_t;
    \n-
    68
    \n-\n-
    71
    \n-
    \n-\n-
    74 gridView_(gv)
    \n-
    75 {
    \n-
    76 for(auto type : gv.indexSet().types(0))
    \n-
    77 if (!type.isSimplex() && !type.isCube())
    \n-
    78 DUNE_THROW(Dune::NotImplemented, "Rannacher-Turek or Crouzeix-Raviart elements are only implemented for grids with simplex or cube elements.");
    \n-
    79 }
    \n+
    40template<class RB, class TP>
    \n+
    \n+\n+
    42{
    \n+
    43public:
    \n+
    44
    \n+
    45 using RootBasis = RB;
    \n+
    46
    \n+
    47 using RootLocalView = typename RootBasis::LocalView;
    \n+
    48
    \n+
    49 using PrefixPath = TP;
    \n+
    50
    \n+
    52 using GridView = typename RootBasis::GridView;
    \n+
    53
    \n+
    55 using MultiIndex = typename RootBasis::MultiIndex;
    \n+
    56
    \n+
    57 using size_type = std::size_t;
    \n+
    58
    \n+\n+
    61
    \n+
    62 using SizePrefix = typename RootBasis::SizePrefix;
    \n+
    63
    \n+
    64
    \n+\n+
    70
    \n+
    76 template<class RootRootBasis, class InnerTP, class OuterTP>
    \n+\n
    80
    \n-
    \n-\n-
    83 {}
    \n-
    \n-
    84
    \n-
    \n-
    86 const GridView& gridView() const
    \n-
    87 {
    \n-
    88 return gridView_;
    \n-
    89 }
    \n+
    81
    \n+
    \n+
    84 const GridView& gridView() const
    \n+
    85 {
    \n+
    86 return rootBasis_->gridView();
    \n+
    87 }
    \n
    \n-
    90
    \n+
    88
    \n
    \n-
    92 void update (const GridView& gv)
    \n-
    93 {
    \n-
    94 gridView_ = gv;
    \n+\n+
    93 {
    \n+
    94 return rootBasis_->dimension();
    \n
    95 }
    \n
    \n
    96
    \n-
    \n-\n-
    101 {
    \n-
    102 return Node{};
    \n-
    103 }
    \n-
    \n-
    104
    \n-
    \n-\n-
    107 {
    \n-
    108 return (size_type)(gridView_.size(1));
    \n-
    109 }
    \n+
    \n+\n+
    99 {
    \n+
    100 return rootBasis_->size();
    \n+
    101 }
    \n+
    \n+
    102
    \n+
    \n+
    104 size_type size(const SizePrefix& prefix) const
    \n+
    105 {
    \n+
    106 return rootBasis_->size(prefix);
    \n+
    107 }
    \n
    \n-
    110
    \n+
    108
    \n
    \n-\n+\n
    113 {
    \n-
    114 return 2*GV::dimension;
    \n+
    114 return LocalView(*this, prefixPath_);
    \n
    115 }
    \n
    \n
    116
    \n-
    117 template<typename It>
    \n-
    \n-
    118 It indices(const Node& node, It it) const
    \n-
    119 {
    \n-
    120 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n-
    121 {
    \n-
    122 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    123 const auto& gridIndexSet = gridView().indexSet();
    \n-
    124 const auto& element = node.element();
    \n-
    125
    \n-
    126 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity(),1)) }};
    \n-
    127 }
    \n-
    128 return it;
    \n-
    129 }
    \n-
    \n-
    130
    \n-
    131protected:
    \n-\n-
    133};
    \n-
    \n-
    134
    \n-
    135
    \n+
    \n+
    117 const RootBasis& rootBasis() const
    \n+
    118 {
    \n+
    119 return *rootBasis_;
    \n+
    120 }
    \n+
    \n+
    121
    \n+
    \n+
    122 const PrefixPath& prefixPath() const
    \n+
    123 {
    \n+
    124 return prefixPath_;
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    127protected:
    \n+\n+\n+
    130};
    \n+
    \n+
    131
    \n+
    132
    \n+
    133// CTAD guide for a non-SubspaceBasis root basis
    \n+
    134template<class RB, class TP>
    \n+
    135SubspaceBasis(const RB&, const TP) -> SubspaceBasis<RB, TP>;
    \n
    136
    \n-
    137template<typename GV>
    \n-
    \n-\n-
    139 public LeafBasisNode
    \n-
    140{
    \n-
    141 static const int dim = GV::dimension;
    \n-
    142 static const int maxSize = 2*dim;
    \n+
    137// CTAD guide for a SubspaceBasis root basis
    \n+
    138template<class RootRootBasis, class InnerTP, class OuterTP>
    \n+
    139SubspaceBasis(const SubspaceBasis<RootRootBasis, InnerTP>& rootBasis, const OuterTP& prefixPath)
    \n+
    140 -> SubspaceBasis<std::decay_t<decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t<InnerTP, OuterTP>>;
    \n+
    141
    \n+
    142
    \n
    143
    \n-
    144 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n-
    145
    \n-
    146 using CubeFiniteElement = RannacherTurekLocalFiniteElement<typename GV::ctype,double,dim>;
    \n-
    147 using SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement<typename GV::ctype,double,dim>;
    \n-
    148
    \n-
    149 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n-
    150 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n-
    151
    \n-
    152public:
    \n-
    153
    \n-
    154 using size_type = std::size_t;
    \n-
    155 using Element = typename GV::template Codim<0>::Entity;
    \n-
    156 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n-
    157 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n-
    158 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n-
    159
    \n-
    \n-\n-\n-
    162 element_(nullptr)
    \n-
    163 {}
    \n-
    \n-
    164
    \n-
    \n-
    166 const Element& element() const
    \n-
    167 {
    \n-
    168 return *element_;
    \n-
    169 }
    \n+
    154template<class RootBasis, class... PrefixTreeIndices>
    \n+
    \n+
    155auto subspaceBasis(const RootBasis& rootBasis, const TypeTree::HybridTreePath<PrefixTreeIndices...>& prefixPath)
    \n+
    156{
    \n+
    157 return SubspaceBasis(rootBasis, prefixPath);
    \n+
    158}
    \n
    \n+
    159
    \n+
    160template<class RootBasis, class... PrefixTreeIndices>
    \n+
    \n+
    161auto subspaceBasis(const RootBasis& rootBasis, const PrefixTreeIndices&... prefixTreeIndices)
    \n+
    162{
    \n+
    163 return subspaceBasis(rootBasis, TypeTree::hybridTreePath(prefixTreeIndices...));
    \n+
    164}
    \n+
    \n+
    165
    \n+
    166
    \n+
    167
    \n+
    168} // end namespace Functions
    \n+
    169} // end namespace Dune
    \n
    170
    \n-
    \n-\n-
    176 {
    \n-
    177 return finiteElement_;
    \n-
    178 }
    \n-
    \n-
    179
    \n-
    \n-
    181 void bind(const Element& e)
    \n-
    182 {
    \n-
    183 element_ = &e;
    \n-
    184 if constexpr (!hasFixedElementType)
    \n-
    185 finiteElement_ = e.type().isCube() ? static_cast<FiniteElement>(CubeFiniteElement())
    \n-
    186 : static_cast<FiniteElement>(SimplexFiniteElement()) ;
    \n-
    187 this->setSize(finiteElement_.size());
    \n-
    188 }
    \n-
    \n-
    189
    \n-
    190protected:
    \n-
    191
    \n-\n-\n-
    194};
    \n-
    \n-
    195
    \n-
    196
    \n-
    197
    \n-
    198namespace BasisFactory {
    \n-
    199
    \n-
    205template<class Dummy=void>
    \n-
    \n-\n-
    207{
    \n-
    208 return [](const auto& gridView) {
    \n-
    209 return RannacherTurekPreBasis<std::decay_t<decltype(gridView)>>(gridView);
    \n-
    210 };
    \n-
    211}
    \n-
    \n-
    212
    \n-
    213} // end namespace BasisFactory
    \n-
    214
    \n-
    215
    \n-
    216
    \n-
    217
    \n-
    229template<typename GV>
    \n-\n-
    231
    \n-
    232} // end namespace Functions
    \n-
    233} // end namespace Dune
    \n-
    234
    \n-
    235#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n-\n-\n-\n-
    auto rannacherTurek()
    Create a pre-basis factory that can create a Rannacher-Turek pre-basis.
    Definition rannacherturekbasis.hh:206
    \n+
    171
    \n+
    172
    \n+
    173#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n+\n+\n
    Definition polynomial.hh:17
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n-
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n-
    size_type size() const
    Definition nodes.hh:147
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n-
    Definition nodes.hh:191
    \n-
    Definition rannacherturekbasis.hh:140
    \n-
    std::conditional_t< hasFixedElementType, std::conditional_t< type.isCube(), CubeFiniteElement, SimplexFiniteElement >, LocalFiniteElementVariant< CubeFiniteElement, SimplexFiniteElement > > FiniteElement
    Definition rannacherturekbasis.hh:158
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition rannacherturekbasis.hh:181
    \n-
    FiniteElement finiteElement_
    Definition rannacherturekbasis.hh:192
    \n-
    std::size_t size_type
    Definition rannacherturekbasis.hh:154
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition rannacherturekbasis.hh:155
    \n-
    RannacherTurekNode()
    Definition rannacherturekbasis.hh:160
    \n-
    const Element * element_
    Definition rannacherturekbasis.hh:193
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition rannacherturekbasis.hh:175
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition rannacherturekbasis.hh:166
    \n-
    Pre-basis for a Rannacher-Turek basis.
    Definition rannacherturekbasis.hh:58
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition rannacherturekbasis.hh:82
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition rannacherturekbasis.hh:67
    \n-
    Node makeNode() const
    Create tree node.
    Definition rannacherturekbasis.hh:100
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition rannacherturekbasis.hh:92
    \n-
    It indices(const Node &node, It it) const
    Definition rannacherturekbasis.hh:118
    \n-
    GV GridView
    The grid view that the FE basis is defined on.
    Definition rannacherturekbasis.hh:64
    \n-
    size_type dimension() const
    Same as size(prefix) with empty prefix.
    Definition rannacherturekbasis.hh:106
    \n-
    RannacherTurekPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition rannacherturekbasis.hh:73
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition rannacherturekbasis.hh:86
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition rannacherturekbasis.hh:112
    \n-
    GridView gridView_
    Definition rannacherturekbasis.hh:132
    \n+
    auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)
    Create SubspaceBasis from a root basis and a prefixPath.
    Definition subspacebasis.hh:155
    \n+
    Definition subspacebasis.hh:42
    \n+
    typename RootBasis::LocalView RootLocalView
    Definition subspacebasis.hh:47
    \n+
    LocalView localView() const
    Return local view for basis.
    Definition subspacebasis.hh:112
    \n+
    const RootBasis * rootBasis_
    Definition subspacebasis.hh:128
    \n+
    typename RootBasis::SizePrefix SizePrefix
    Definition subspacebasis.hh:62
    \n+
    TP PrefixPath
    Definition subspacebasis.hh:49
    \n+
    SubspaceLocalView< RootLocalView, PrefixPath > LocalView
    Type of the local view on the restriction of the basis to a single element.
    Definition subspacebasis.hh:60
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition subspacebasis.hh:104
    \n+
    typename RootBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition subspacebasis.hh:52
    \n+
    const PrefixPath & prefixPath() const
    Definition subspacebasis.hh:122
    \n+
    SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath)
    Constructor from another SubspaceBasis.
    Definition subspacebasis.hh:77
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition subspacebasis.hh:84
    \n+
    RB RootBasis
    Definition subspacebasis.hh:45
    \n+
    PrefixPath prefixPath_
    Definition subspacebasis.hh:129
    \n+
    size_type size() const
    Return number of possible values for next position in empty multi index.
    Definition subspacebasis.hh:98
    \n+
    const RootBasis & rootBasis() const
    Definition subspacebasis.hh:117
    \n+
    typename RootBasis::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition subspacebasis.hh:55
    \n+
    size_type dimension() const
    Definition subspacebasis.hh:92
    \n+
    std::size_t size_type
    Definition subspacebasis.hh:57
    \n+
    SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)
    Constructor for a given grid view object.
    Definition subspacebasis.hh:66
    \n+
    The restriction of a finite element basis to a single element.
    Definition subspacelocalview.hh:34
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,317 +1,249 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-rannacherturekbasis.hh\n+subspacebasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n 9\n-10#include \n-11\n-12#include \n+10#include \n+11#include \n+12#include \n 13\n-14#include \n-15#include \n-16#include \n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n 17\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-21\n+18\n+19\n+20namespace _\bD_\bu_\bn_\be {\n+21namespace Functions {\n 22\n-23namespace _\bD_\bu_\bn_\be {\n-24namespace Functions {\n-25\n-26/\n-/ *****************************************************************************\n-27// This is the reusable part of the basis. It contains\n-28//\n-29// RannacherTurekPreBasis\n-30// RannacherTurekNode\n-31//\n-32// The pre-basis allows to create the others and is the owner of possible\n-shared\n-33// state. These components do _not_ depend on the global basis and local view\n-34// and can be used without a global basis.\n-35/\n-/ *****************************************************************************\n-36\n-37template\n-38class RannacherTurekNode;\n+23\n+24\n+25namespace Impl {\n+26\n+27 template\n+28 auto joinTreePaths(const TypeTree::HybridTreePath& inner, const\n+TypeTree::HybridTreePath outer)\n+29 {\n+30 return TypeTree::HybridTreePath(std::tuple_cat\n+(inner._data, outer._data));\n+31 }\n+32\n+33 template\n+34 using JoinTreePath_t = std::decay_t(), std::declval()))>;\n+35\n+36}\n+37\n+38\n 39\n-40template\n-41class RannacherTurekPreBasis;\n-42\n-55template\n-_\b5_\b6class _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n-57 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< RannacherTurekPreBasis >\n-58{\n-59 static const int dim = GV::dimension;\n-60\n-61public:\n-62\n-_\b6_\b4 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-65\n-_\b6_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-68\n-_\b7_\b0 using _\bN_\bo_\bd_\be = _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b>;\n-71\n-_\b7_\b3 _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n-74 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv)\n-75 {\n-76 for(auto type : gv.indexSet().types(0))\n-77 if (!type.isSimplex() && !type.isCube())\n-78 DUNE_THROW(Dune::NotImplemented, \"Rannacher-Turek or Crouzeix-Raviart\n-elements are only implemented for grids with simplex or cube elements.\");\n-79 }\n+40template\n+_\b4_\b1class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n+42{\n+43public:\n+44\n+_\b4_\b5 using _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs = RB;\n+46\n+_\b4_\b7 using _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = typename RootBasis::LocalView;\n+48\n+_\b4_\b9 using _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh = TP;\n+50\n+_\b5_\b2 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename RootBasis::GridView;\n+53\n+_\b5_\b5 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename RootBasis::MultiIndex;\n+56\n+_\b5_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+58\n+_\b6_\b0 using _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b<_\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b,_\b _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b>;\n+61\n+_\b6_\b2 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = typename RootBasis::SizePrefix;\n+63\n+64\n+_\b6_\b6 _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs, const _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh) :\n+67 _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_(&_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs),\n+68 _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_(_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh)\n+69 {}\n+70\n+76 template\n+_\b7_\b7 _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\bo_\bo_\bt_\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b,_\b _\bI_\bn_\bn_\be_\br_\bT_\bP_\b>& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs, const\n+OuterTP& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh) :\n+78 _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs._\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs(), Impl::joinTreePaths\n+(_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs._\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh(), _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh))\n+79 {}\n 80\n-_\b8_\b2 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-83 {}\n-84\n-_\b8_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-87 {\n-88 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-89 }\n-90\n-_\b9_\b2 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+81\n+_\b8_\b4 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+85 {\n+86 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->gridView();\n+87 }\n+88\n+_\b9_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n 93 {\n-94 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+94 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->dimension();\n 95 }\n 96\n-_\b1_\b0_\b0 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-101 {\n-102 return _\bN_\bo_\bd_\be{};\n-103 }\n-104\n-_\b1_\b0_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-107 {\n-108 return (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(1));\n-109 }\n-110\n-_\b1_\b1_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+_\b9_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+99 {\n+100 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->size();\n+101 }\n+102\n+_\b1_\b0_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx& prefix) const\n+105 {\n+106 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->size(prefix);\n+107 }\n+108\n+_\b1_\b1_\b2 _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n 113 {\n-114 return 2*GV::dimension;\n+114 return _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(*this, _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_);\n 115 }\n 116\n-117 template\n-_\b1_\b1_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-119 {\n-120 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0, end = node._\bs_\bi_\bz_\be() ; i < end ; ++i, ++it)\n-121 {\n-122 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n-(i);\n-123 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-124 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-125\n-126 *it = {{ (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(gridIndexSet.subIndex(element,localKey.subEntity(),1))\n-}};\n-127 }\n-128 return it;\n-129 }\n-130\n-131protected:\n-_\b1_\b3_\b2 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-133};\n-134\n-135\n+_\b1_\b1_\b7 const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs() const\n+118 {\n+119 return *_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_;\n+120 }\n+121\n+_\b1_\b2_\b2 const _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh() const\n+123 {\n+124 return _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n+125 }\n+126\n+127protected:\n+_\b1_\b2_\b8 const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs* _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_;\n+_\b1_\b2_\b9 _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n+130};\n+131\n+132\n+133// CTAD guide for a non-SubspaceBasis root basis\n+134template\n+_\b1_\b3_\b5_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RB&, const TP) -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\bB_\b,_\b _\bT_\bP_\b>;\n 136\n-137template\n-_\b1_\b3_\b8class _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be :\n-139 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-140{\n-141 static const int dim = GV::dimension;\n-142 static const int maxSize = 2*dim;\n+137// CTAD guide for a SubspaceBasis root basis\n+138template\n+_\b1_\b3_\b9_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\bo_\bo_\bt_\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b,_\b _\bI_\bn_\bn_\be_\br_\bT_\bP_\b>& rootBasis, const\n+OuterTP& prefixPath)\n+140 -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs, Impl::\n+JoinTreePath_t>;\n+141\n+142\n 143\n-144 constexpr static bool hasFixedElementType = Capabilities::\n-hasSingleGeometryType::v;\n-145\n-146 using CubeFiniteElement = RannacherTurekLocalFiniteElement;\n-147 using SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement;\n-148\n-149 constexpr static unsigned int topologyId = Capabilities::\n-hasSingleGeometryType::topologyId; // meaningless if\n-hasFixedElementType is false\n-150 constexpr static GeometryType type = GeometryType(topologyId, GV::\n-dimension);\n-151\n-152public:\n-153\n-_\b1_\b5_\b4 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b1_\b5_\b5 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b1_\b5_\b6 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = std::conditional_t,\n-158 LocalFiniteElementVariant >;\n+154template\n+_\b1_\b5_\b5auto _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RootBasis& rootBasis, const TypeTree::\n+HybridTreePath& prefixPath)\n+156{\n+157 return _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(rootBasis, prefixPath);\n+158}\n 159\n-_\b1_\b6_\b0 _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be() :\n-161 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(),\n-162 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n-163 {}\n-164\n-_\b1_\b6_\b6 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-167 {\n-168 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-169 }\n+160template\n+_\b1_\b6_\b1auto _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RootBasis& rootBasis, const PrefixTreeIndices&...\n+prefixTreeIndices)\n+162{\n+163 return _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(rootBasis, TypeTree::hybridTreePath\n+(prefixTreeIndices...));\n+164}\n+165\n+166\n+167\n+168} // end namespace Functions\n+169} // end namespace Dune\n 170\n-_\b1_\b7_\b5 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n-176 {\n-177 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-178 }\n-179\n-_\b1_\b8_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-182 {\n-183 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-184 if constexpr (!hasFixedElementType)\n-185 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_ = e.type().isCube() ? static_cast<_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt>\n-(CubeFiniteElement())\n-186 : static_cast<_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt>(SimplexFiniteElement()) ;\n-187 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n-188 }\n-189\n-190protected:\n-191\n-_\b1_\b9_\b2 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b1_\b9_\b3 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-194};\n-195\n-196\n-197\n-198namespace BasisFactory {\n-199\n-205template\n-_\b2_\b0_\b6auto _\br_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk()\n-207{\n-208 return [](const auto& gridView) {\n-209 return _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(gridView);\n-210 };\n-211}\n-212\n-213} // end namespace BasisFactory\n-214\n-215\n-216\n-217\n-229template\n-_\b2_\b3_\b0using _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b> >;\n-231\n-232} // end namespace Functions\n-233} // end namespace Dune\n-234\n-235#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk\n-auto rannacherTurek()\n-Create a pre-basis factory that can create a Rannacher-Turek pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:206\n+171\n+172\n+173#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-Global basis for given pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-A generic MixIn class for PreBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n+auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath<\n+PrefixTreeIndices... > &prefixPath)\n+Create SubspaceBasis from a root basis and a prefixPath.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:155\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:42\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+typename RootBasis::LocalView RootLocalView\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:47\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+LocalView localView() const\n+Return local view for basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:112\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_\n+const RootBasis * rootBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:128\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx\n+typename RootBasis::SizePrefix SizePrefix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n+TP PrefixPath\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:49\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+SubspaceLocalView< RootLocalView, PrefixPath > LocalView\n+Type of the local view on the restriction of the basis to a single element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size(const SizePrefix &prefix) const\n+Return number possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:104\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+typename RootBasis::GridView GridView\n+The grid view that the FE space is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n+const PrefixPath & prefixPath() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n+SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const\n+OuterTP &prefixPath)\n+Constructor from another SubspaceBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:77\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:84\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs\n+RB RootBasis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:45\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_\n+PrefixPath prefixPath_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:129\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n-void setSize(const size_type size)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:140\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-std::conditional_t< hasFixedElementType, std::conditional_t< type.isCube(),\n-CubeFiniteElement, SimplexFiniteElement >, LocalFiniteElementVariant<\n-CubeFiniteElement, SimplexFiniteElement > > FiniteElement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:158\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind to element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n-FiniteElement finiteElement_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:192\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:154\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename GV::template Codim< 0 >::Entity Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:155\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be\n-RannacherTurekNode()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:160\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n-const Element * element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:193\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:175\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return current element, throw if unbound.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:166\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-Pre-basis for a Rannacher-Turek basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void initializeIndices()\n-Initialize the global indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:82\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:92\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n-It indices(const Node &node, It it) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:118\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-The grid view that the FE basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:64\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+Return number of possible values for next position in empty multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:98\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs\n+const RootBasis & rootBasis() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:117\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+typename RootBasis::MultiIndex MultiIndex\n+Type used for global numbering of the basis vectors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:55\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n size_type dimension() const\n-Same as size(prefix) with empty prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-RannacherTurekPreBasis(const GridView &gv)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:92\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n+SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)\n Constructor for a given grid view object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:86\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:112\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n-GridView gridView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:132\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:66\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+The restriction of a finite element basis to a single element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:34\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: containerdescriptors.hh File Reference\n+dune-functions: subentitydofs.hh File Reference\n \n \n \n \n \n \n \n@@ -72,96 +72,51 @@\n
  • dune
  • functions
  • functionspacebases
  • \n
    \n
    \n
    \n \n-
    containerdescriptors.hh File Reference
    \n+
    subentitydofs.hh File Reference
    \n
    \n
    \n-
    #include <array>
    \n-#include <cassert>
    \n-#include <functional>
    \n-#include <type_traits>
    \n-#include <vector>
    \n-#include <dune/common/filledarray.hh>
    \n-#include <dune/common/tuplevector.hh>
    \n-#include <dune/common/typeutilities.hh>
    \n-#include <dune/functions/common/type_traits.hh>
    \n-#include <dune/functions/functionspacebases/basistags.hh>
    \n+
    #include <vector>
    \n+#include <dune/geometry/referenceelements.hh>
    \n+#include <dune/typetree/traversal.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    struct  Dune::Functions::ContainerDescriptors::Unknown
     Fallback container descriptor if nothing else fits. More...
     
    struct  Dune::Functions::ContainerDescriptors::Value
     The node in the descriptor tree representing a value placeholder. More...
     
    struct  Dune::Functions::ContainerDescriptors::UniformArray< Child, n >
     Descriptor for arrays with all children identical and the number of children a static size. More...
     
    struct  Dune::Functions::ContainerDescriptors::UniformVector< Child >
     Uniform descriptor with dynamic size. More...
    class  Dune::Functions::SubEntityDOFs< GridView >
     Range of DOFs associated to sub-entity. More...
     
    \n \n \n \n \n \n-\n-\n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::ContainerDescriptors
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Typedefs

    template<class... Children>
    using Dune::Functions::ContainerDescriptors::Tuple = Dune::TupleVector< Children... >
     Descriptor with all children of possibly different type.
     
    template<class Child , std::size_t n>
    using Dune::Functions::ContainerDescriptors::Array = std::array< Child, n >
     Descriptor for arrays with all children of the same type and static size.
     
    template<class Child >
    using Dune::Functions::ContainerDescriptors::Vector = std::vector< Child >
     Descriptor for vectors with all children of the same type and dynamic size.
     
    template<std::size_t n>
    using Dune::Functions::ContainerDescriptors::FlatArray = UniformArray< Value, n >
     Alias for a uniform array storing value placeholders.
     
    using Dune::Functions::ContainerDescriptors::FlatVector = UniformVector< Value >
     Alias for a uniform vector storing value placeholders.
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class PreBasis >
    auto Dune::Functions::containerDescriptor (const PreBasis &preBasis)
     Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
     
    template<class Child0 , class... Children, std::enable_if_t<(std::is_same_v< Child0, Children > &&...), int > = 0>
    auto Dune::Functions::ContainerDescriptors::makeDescriptor (Child0 child, Children... children)
     Generate a descriptor in case the children are all of the same type.
     
    template<class Child , std::size_t n>
    auto Dune::Functions::ContainerDescriptors::makeUniformDescriptor (std::integral_constant< std::size_t, n >, Child child)
     Generate a uniform descriptor in case the size is a static constant.
     
    template<class Child >
    auto Dune::Functions::ContainerDescriptors::makeUniformDescriptor (std::size_t n, Child child)
     Generate a uniform descriptor in case the size is a dynamic value.
     
    template<class T >
    auto Dune::Functions::subEntityDOFs (const T &)
     Create SubEntityDOFs object.
     
    template<class LocalView >
    auto Dune::Functions::subEntityDOFs (const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
     Create bound SubEntityDOFs object.
     
    template<class LocalView , class Intersection >
    auto Dune::Functions::subEntityDOFs (const LocalView &localView, const Intersection &intersection)
     Create bound SubEntityDOFs object.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,91 +1,39 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-containerdescriptors.hh File Reference\n-#include \n-#include \n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+subentitydofs.hh File Reference\n #include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn\n-\u00a0 Fallback container descriptor if nothing else fits. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-\u00a0 The node in the descriptor tree representing a value placeholder.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b<_\b _\bC_\bh_\bi_\bl_\bd_\b,_\b _\bn_\b _\b>\n-\u00a0 Descriptor for arrays with all children identical and the number of\n- children a static size. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bC_\bh_\bi_\bl_\bd_\b _\b>\n-\u00a0 Uniform descriptor with dynamic size. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b _\b>\n+\u00a0 Range of DOFs associated to sub-entity. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bT_\bu_\bp_\bl_\be = Dune::TupleVector<\n- Children... >\n-\u00a0 Descriptor with all children of possibly different type.\n-\u00a0\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bA_\br_\br_\ba_\by = std::array< Child, n >\n-\u00a0 Descriptor for arrays with all children of the same type and static\n- size.\n-\u00a0\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br = std::vector< Child >\n-\u00a0 Descriptor for vectors with all children of the same type and dynamic\n- size.\n-\u00a0\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bF_\bl_\ba_\bt_\bA_\br_\br_\ba_\by = _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by< _\bV_\ba_\bl_\bu_\be,\n- n >\n-\u00a0 Alias for a uniform array storing value placeholders.\n-\u00a0\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bF_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br = _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br< _\bV_\ba_\bl_\bu_\be\n- >\n-\u00a0 Alias for a uniform vector storing value placeholders.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (const PreBasis &preBasis)\n-\u00a0 Return the container descriptor of the pre-basis, if defined, otherwise\n- ContainerDescriptor::Unknown.\n-\u00a0\n-template &&...), int > = 0>\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (Child0 child,\n- Children... children)\n-\u00a0 Generate a descriptor in case the children are all of the same type.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (std::\n- integral_constant< std::size_t, n >, Child child)\n-\u00a0 Generate a uniform descriptor in case the size is a static constant.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (std::size_t\n- n, Child child)\n-\u00a0 Generate a uniform descriptor in case the size is a dynamic value.\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs (const T &)\n+\u00a0 Create _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs object.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs (const LocalView &localView, std::size_t\n+ subEntityIndex, std::size_t subEntityCodim)\n+\u00a0 Create bound _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs object.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs (const LocalView &localView, const\n+ Intersection &intersection)\n+\u00a0 Create bound _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs object.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: containerdescriptors.hh Source File\n+dune-functions: subentitydofs.hh Source File\n \n \n \n \n \n \n \n@@ -74,299 +74,174 @@\n \n \n
    \n
    \n-
    containerdescriptors.hh
    \n+
    subentitydofs.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n
    9
    \n-
    10#include <array>
    \n-
    11#include <cassert>
    \n-
    12#include <functional>
    \n-
    13#include <type_traits>
    \n-
    14#include <vector>
    \n+
    10#include <vector>
    \n+
    11
    \n+
    12#include <dune/geometry/referenceelements.hh>
    \n+
    13#include <dune/typetree/traversal.hh>
    \n+
    14
    \n
    15
    \n-
    16#include <dune/common/filledarray.hh>
    \n-
    17#include <dune/common/tuplevector.hh>
    \n-
    18#include <dune/common/typeutilities.hh>
    \n+
    16
    \n+
    17namespace Dune {
    \n+
    18namespace Functions {
    \n
    19
    \n-\n-\n-
    22
    \n-
    46namespace Dune::Functions {
    \n-
    \n-
    47namespace ContainerDescriptors {
    \n+
    20
    \n+
    21
    \n+
    44template<class GridView>
    \n+
    \n+\n+
    46{
    \n+
    47 static const int dim = GridView::dimension;
    \n
    48
    \n-
    50struct Unknown {};
    \n-
    51
    \n-
    52} // end namespace ContainerDescriptors
    \n-
    \n-
    53
    \n-
    54namespace Impl {
    \n-
    55
    \n-
    56template<class PreBasis>
    \n-
    57auto containerDescriptorImpl(const PreBasis& preBasis, Dune::PriorityTag<1>)
    \n-
    58 -> decltype(preBasis.containerDescriptor())
    \n-
    59{
    \n-
    60 return preBasis.containerDescriptor();
    \n-
    61}
    \n-
    62
    \n-
    63template<class PreBasis>
    \n-
    64auto containerDescriptorImpl(const PreBasis& preBasis, Dune::PriorityTag<0>)
    \n-
    65{
    \n-
    66 return ContainerDescriptors::Unknown{};
    \n-
    67}
    \n-
    68
    \n-
    69} // end namespace Impl
    \n-
    70
    \n-
    72template<class PreBasis>
    \n-
    \n-
    73auto containerDescriptor(const PreBasis& preBasis)
    \n-
    74{
    \n-
    75 return Impl::containerDescriptorImpl(preBasis, Dune::PriorityTag<2>{});
    \n-
    76}
    \n-
    \n-
    77
    \n-
    78
    \n-
    79namespace ContainerDescriptors {
    \n-
    80
    \n-
    \n-
    82struct Value
    \n-
    83{
    \n-
    85 template<class Index>
    \n-
    86 Value operator[] (const Index&) const { return {}; }
    \n-
    87
    \n-
    89 static constexpr std::size_t size () { return 0; }
    \n-
    90};
    \n+
    49public:
    \n+
    50
    \n+
    67 template<class LocalView>
    \n+
    \n+
    68 SubEntityDOFs& bind(const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    \n+
    69 {
    \n+
    70 // fill vector with local indices of all DOFs contained in subentity
    \n+
    71 containedDOFs_.clear();
    \n+
    72 dofIsContained_.assign(localView.size(), false);
    \n+
    73
    \n+
    74 auto re = Dune::referenceElement<double,dim>(localView.element().type());
    \n+
    75
    \n+
    76 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /*treePath*/) {
    \n+
    77 const auto& localCoefficients = node.finiteElement().localCoefficients();
    \n+
    78 std::size_t localSize = localCoefficients.size();
    \n+
    79 for(std::size_t i=0; i<localSize; ++i)
    \n+
    80 {
    \n+
    81 auto localKey = localCoefficients.localKey(i);
    \n+
    82 if (re.subEntities(subEntityIndex, subEntityCodim, localKey.codim()).contains(localKey.subEntity()))
    \n+
    83 {
    \n+
    84 containedDOFs_.push_back(node.localIndex(i));
    \n+
    85 dofIsContained_[node.localIndex(i)] = true;
    \n+
    86 }
    \n+
    87 }
    \n+
    88 });
    \n+
    89 return *this;
    \n+
    90 }
    \n
    \n
    91
    \n-
    93template<class... Children>
    \n-
    94using Tuple = Dune::TupleVector<Children...>;
    \n-
    95
    \n-
    98template<class Child0, class... Children,
    \n-
    99 std::enable_if_t<(sizeof...(Children) > 0), int> = 0,
    \n-
    100 std::enable_if_t<(...|| (not std::is_same_v<Child0, Children>)), int> = 0>
    \n-
    101auto makeDescriptor (Child0 child0, Children... children)
    \n-
    102{
    \n-
    103 using Descriptor = Tuple<Child0,Children...>;
    \n-
    104 return Descriptor{std::move(child0),std::move(children)...};
    \n-
    105}
    \n-
    106
    \n-
    107
    \n-
    109template<class Child, std::size_t n>
    \n-
    110using Array = std::array<Child, n>;
    \n-
    111
    \n-
    113template<class Child0, class... Children,
    \n-
    114 std::enable_if_t<(std::is_same_v<Child0, Children> &&...), int> = 0>
    \n-
    \n-
    115auto makeDescriptor (Child0 child, Children... children)
    \n-
    116{
    \n-
    117 using Descriptor = Array<Child0,1+sizeof...(Children)>;
    \n-
    118 return Descriptor{std::move(child),std::move(children)...};
    \n-
    119}
    \n-
    \n-
    120
    \n-
    121
    \n-
    123template<class Child>
    \n-
    124using Vector = std::vector<Child>;
    \n-
    125
    \n-
    127template<class Child, std::size_t n>
    \n-
    \n-\n-
    129{
    \n-
    131 template<class C = Child,
    \n-
    132 std::enable_if_t<std::is_default_constructible_v<C>, int> = 0>
    \n-
    \n-\n-
    134 : child_{}
    \n-
    135 {}
    \n+
    107 template<class LocalView, class Intersection>
    \n+
    \n+
    108 SubEntityDOFs& bind(const LocalView& localView, const Intersection& intersection)
    \n+
    109 {
    \n+
    110 return bind(localView, intersection.indexInInside(), 1);
    \n+
    111 }
    \n+
    \n+
    112
    \n+
    \n+
    114 auto begin() const
    \n+
    115 {
    \n+
    116 return containedDOFs_.cbegin();
    \n+
    117 }
    \n+
    \n+
    118
    \n+
    \n+
    120 auto end() const
    \n+
    121 {
    \n+
    122 return containedDOFs_.cend();
    \n+
    123 }
    \n+
    \n+
    124
    \n+
    \n+
    126 auto size() const
    \n+
    127 {
    \n+
    128 return containedDOFs_.size();
    \n+
    129 }
    \n+
    \n+
    130
    \n+
    \n+
    132 decltype(auto) operator[](std::size_t i) const
    \n+
    133 {
    \n+
    134 return containedDOFs_[i];
    \n+
    135 }
    \n
    \n
    136
    \n
    \n-
    138 explicit UniformArray (Child child)
    \n-
    139 : child_{std::move(child)}
    \n-
    140 {}
    \n-
    \n-
    141
    \n-
    143 template<class Index>
    \n-
    144 const Child& operator[] (const Index& /*i*/) const { return child_; }
    \n-
    145
    \n-
    147 static constexpr std::size_t size () { return n; }
    \n+
    138 bool contains(std::size_t localIndex) const
    \n+
    139 {
    \n+
    140 return dofIsContained_[localIndex];
    \n+
    141 }
    \n+
    \n+
    142
    \n+
    143private:
    \n+
    144
    \n+
    145 std::vector<std::size_t> containedDOFs_;
    \n+
    146 std::vector<bool> dofIsContained_;
    \n+
    147};
    \n+
    \n
    148
    \n-
    149private:
    \n-
    150 Child child_;
    \n-
    151};
    \n-
    \n-
    152
    \n-
    154template<std::size_t n>
    \n-\n-
    156
    \n-
    158template<class Child, std::size_t n>
    \n-
    \n-
    159auto makeUniformDescriptor (std::integral_constant<std::size_t,n>, Child child)
    \n-
    160{
    \n-
    161 return UniformArray<Child,n>{std::move(child)};
    \n-
    162}
    \n-
    \n-
    163
    \n-
    164
    \n-
    166template<class Child>
    \n-
    \n-\n-
    168{
    \n-
    170 template<class C = Child,
    \n-
    171 std::enable_if_t<std::is_default_constructible_v<C>, int> = 0>
    \n-
    \n-
    172 explicit UniformVector (std::size_t size)
    \n-
    173 : size_{size}
    \n-
    174 , child_{}
    \n-
    175 {}
    \n-
    \n-
    176
    \n-
    \n-
    178 UniformVector (std::size_t size, Child child)
    \n-
    179 : size_{size}
    \n-
    180 , child_{std::move(child)}
    \n-
    181 {}
    \n-
    \n-
    182
    \n-
    184 template<class Index>
    \n-
    185 const Child& operator[] (const Index& /*i*/) const { return child_; }
    \n-
    186
    \n-
    188 std::size_t size () const { return size_; }
    \n-
    189
    \n-
    190private:
    \n-
    191 std::size_t size_;
    \n-
    192 Child child_;
    \n-
    193};
    \n-
    \n-
    194
    \n-\n-
    197
    \n-
    199template<class Child>
    \n-
    \n-
    200auto makeUniformDescriptor (std::size_t n, Child child)
    \n-
    201{
    \n-
    202 return UniformVector<Child>{n,std::move(child)};
    \n-
    203}
    \n-
    \n-
    204
    \n-
    205namespace Impl {
    \n-
    206
    \n-
    207template<class InnerFunc, class LeafFunc>
    \n-
    208struct TreeTransform
    \n-
    209{
    \n-
    210 TreeTransform (const InnerFunc& innerFunc, const LeafFunc& leafFunc)
    \n-
    211 : innerFunc_(innerFunc)
    \n-
    212 , leafFunc_(leafFunc)
    \n-
    213 {}
    \n-
    214
    \n-
    215 Unknown operator() (const Unknown& tree) const
    \n-
    216 {
    \n-
    217 return tree;
    \n-
    218 }
    \n-
    219
    \n-
    220 auto operator() (const Value& tree) const
    \n-
    221 {
    \n-
    222 return leafFunc_(tree);
    \n-
    223 }
    \n-
    224
    \n-
    225 template<class... V>
    \n-
    226 auto operator() (const Tuple<V...>& tree) const
    \n-
    227 {
    \n-
    228 return unpackIntegerSequence([&](auto... ii) {
    \n-
    229 return makeDescriptor(innerFunc_(tree[ii])...);
    \n-
    230 }, std::make_index_sequence<sizeof...(V)>());
    \n-
    231 }
    \n+
    149
    \n+
    150
    \n+
    163template<class T>
    \n+
    \n+
    164auto subEntityDOFs(const T&)
    \n+
    165{
    \n+\n+
    167}
    \n+
    \n+
    168
    \n+
    169
    \n+
    170
    \n+
    190template<class LocalView>
    \n+
    \n+
    191auto subEntityDOFs(const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    \n+
    192{
    \n+
    193 using GridView = typename LocalView::GridView;
    \n+\n+
    195 subEntityDOFs.bind(localView, subEntityIndex, subEntityCodim);
    \n+
    196 return subEntityDOFs;
    \n+
    197}
    \n+
    \n+
    198
    \n+
    199
    \n+
    200
    \n+
    219template<class LocalView, class Intersection>
    \n+
    \n+
    220auto subEntityDOFs(const LocalView& localView, const Intersection& intersection)
    \n+
    221{
    \n+
    222 using GridView = typename LocalView::GridView;
    \n+\n+
    224 subEntityDOFs.bind(localView, intersection);
    \n+
    225 return subEntityDOFs;
    \n+
    226}
    \n+
    \n+
    227
    \n+
    228
    \n+
    229
    \n+
    230} // namespace Functions
    \n+
    231} // namespace Dune
    \n
    232
    \n-
    233 template<class V, std::size_t n>
    \n-
    234 auto operator() (const Array<V,n>& tree) const
    \n-
    235 {
    \n-
    236 return unpackIntegerSequence([&](auto... ii) {
    \n-
    237 return makeDescriptor(innerFunc_(tree[ii])...);
    \n-
    238 }, std::make_index_sequence<n>());
    \n-
    239 }
    \n-
    240
    \n-
    241 template<class V>
    \n-
    242 auto operator() (const Vector<V>& tree) const
    \n-
    243 {
    \n-
    244 using W = decltype(innerFunc_(tree[0]));
    \n-
    245 Vector<W> result;
    \n-
    246 result.reserve(tree.size());
    \n-
    247 for (std::size_t i = 0; i < tree.size(); ++i)
    \n-
    248 result.emplace_back(innerFunc_(tree[i]));
    \n-
    249 return result;
    \n-
    250 }
    \n-
    251
    \n-
    252 template<class V, std::size_t n>
    \n-
    253 auto operator() (const UniformArray<V,n>& tree) const
    \n-
    254 {
    \n-
    255 return makeUniformDescriptor(Dune::index_constant<n>{}, innerFunc_(tree[0]));
    \n-
    256 }
    \n-
    257
    \n-
    258 template<class V>
    \n-
    259 auto operator() (const UniformVector<V>& tree) const
    \n-
    260 {
    \n-
    261 return makeUniformDescriptor(tree.size(), innerFunc_(tree[0]));
    \n-
    262 }
    \n-
    263
    \n-
    264private:
    \n-
    265 InnerFunc innerFunc_;
    \n-
    266 LeafFunc leafFunc_;
    \n-
    267};
    \n-
    268
    \n-
    269
    \n-
    280template<class Size, class T>
    \n-
    281auto appendToTree (Size s, const T& tree)
    \n-
    282{
    \n-
    283 auto transform = TreeTransform(
    \n-
    284 [s](auto&& node) { return appendToTree(s, node); },
    \n-
    285 [s](auto&& node) { return makeUniformDescriptor(s, node); });
    \n-
    286 return transform(tree);
    \n-
    287}
    \n-
    288
    \n-
    289} // end namespace Impl
    \n-
    290} // end namespace ContainerDescriptors
    \n-
    291} // end namespace Dune::Functions
    \n-
    292
    \n-
    293#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH
    \n-\n-\n-
    Definition polynomial.hh:18
    \n-
    auto containerDescriptor(const PreBasis &preBasis)
    Return the container descriptor of the pre-basis, if defined, otherwise ContainerDescriptor::Unknown.
    Definition containerdescriptors.hh:73
    \n-
    std::array< Child, n > Array
    Descriptor for arrays with all children of the same type and static size.
    Definition containerdescriptors.hh:110
    \n-
    auto makeUniformDescriptor(std::integral_constant< std::size_t, n >, Child child)
    Generate a uniform descriptor in case the size is a static constant.
    Definition containerdescriptors.hh:159
    \n-
    Dune::TupleVector< Children... > Tuple
    Descriptor with all children of possibly different type.
    Definition containerdescriptors.hh:94
    \n-
    auto makeDescriptor(Child0 child, Children... children)
    Generate a descriptor in case the children are all of the same type.
    Definition containerdescriptors.hh:115
    \n-
    std::vector< Child > Vector
    Descriptor for vectors with all children of the same type and dynamic size.
    Definition containerdescriptors.hh:124
    \n-
    Fallback container descriptor if nothing else fits.
    Definition containerdescriptors.hh:50
    \n-
    The node in the descriptor tree representing a value placeholder.
    Definition containerdescriptors.hh:83
    \n-
    static constexpr std::size_t size()
    A value placeholder does not have any sub-descriptors, thus its size is zero.
    Definition containerdescriptors.hh:89
    \n-
    Value operator[](const Index &) const
    The child access method is only available for the interface, but should not be called.
    Definition containerdescriptors.hh:86
    \n-
    Descriptor for arrays with all children identical and the number of children a static size.
    Definition containerdescriptors.hh:129
    \n-
    static constexpr std::size_t size()
    The static size information, i.e., number of children.
    Definition containerdescriptors.hh:147
    \n-
    UniformArray()
    Default constructor. Is enable if the child-type is default constructible.
    Definition containerdescriptors.hh:133
    \n-
    UniformArray(Child child)
    Constructor that stores a single child only.
    Definition containerdescriptors.hh:138
    \n-
    const Child & operator[](const Index &) const
    Access the i'th child that is always the same, i.e., child_.
    Definition containerdescriptors.hh:144
    \n-
    Uniform descriptor with dynamic size.
    Definition containerdescriptors.hh:168
    \n-
    UniformVector(std::size_t size, Child child)
    Constructor that stores the size and a single child only.
    Definition containerdescriptors.hh:178
    \n-
    std::size_t size() const
    The dynamic size information, i.e., number of children.
    Definition containerdescriptors.hh:188
    \n-
    UniformVector(std::size_t size)
    Default constructor with size. Is enable if the child-type is default constructible.
    Definition containerdescriptors.hh:172
    \n-
    const Child & operator[](const Index &) const
    Access the i'th child that is always the same, i.e., child_.
    Definition containerdescriptors.hh:185
    \n+
    233#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n+
    auto subEntityDOFs(const T &)
    Create SubEntityDOFs object.
    Definition subentitydofs.hh:164
    \n+
    Definition polynomial.hh:17
    \n+
    Range of DOFs associated to sub-entity.
    Definition subentitydofs.hh:46
    \n+
    auto begin() const
    Create begin iterator for access to range of contained local indices.
    Definition subentitydofs.hh:114
    \n+
    auto size() const
    Return number of contained DOFs.
    Definition subentitydofs.hh:126
    \n+
    SubEntityDOFs & bind(const LocalView &localView, const Intersection &intersection)
    Bind SubEntityDOFs object to LocalView and sub-entity.
    Definition subentitydofs.hh:108
    \n+
    bool contains(std::size_t localIndex) const
    Check if given local index is contained in this range of DOFs.
    Definition subentitydofs.hh:138
    \n+
    auto end() const
    Create end iterator for access to range of contained local indices.
    Definition subentitydofs.hh:120
    \n+
    SubEntityDOFs & bind(const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    Bind SubEntityDOFs object to LocalView and sub-entity.
    Definition subentitydofs.hh:68
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,335 +1,180 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-containerdescriptors.hh\n+subentitydofs.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n 9\n-10#include \n-11#include \n-12#include \n-13#include \n-14#include \n+10#include \n+11\n+12#include \n+13#include \n+14\n 15\n-16#include \n-17#include \n-18#include \n+16\n+17namespace _\bD_\bu_\bn_\be {\n+18namespace Functions {\n 19\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-22\n-46namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n-_\b4_\b7namespace ContainerDescriptors {\n+20\n+21\n+44template\n+_\b4_\b5class _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n+46{\n+47 static const int dim = GridView::dimension;\n 48\n-_\b5_\b0struct _\bU_\bn_\bk_\bn_\bo_\bw_\bn {};\n-51\n-52} // end namespace ContainerDescriptors\n-53\n-54namespace Impl {\n-55\n-56template\n-57auto containerDescriptorImpl(const PreBasis& preBasis, Dune::PriorityTag<1>)\n-58 -> decltype(preBasis.containerDescriptor())\n-59{\n-60 return preBasis.containerDescriptor();\n-61}\n-62\n-63template\n-64auto containerDescriptorImpl(const PreBasis& preBasis, Dune::PriorityTag<0>)\n-65{\n-66 return ContainerDescriptors::Unknown{};\n-67}\n-68\n-69} // end namespace Impl\n-70\n-72template\n-_\b7_\b3auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(const PreBasis& preBasis)\n-74{\n-75 return Impl::containerDescriptorImpl(preBasis, Dune::PriorityTag<2>{});\n-76}\n-77\n-78\n-79namespace ContainerDescriptors {\n-80\n-_\b8_\b2struct _\bV_\ba_\bl_\bu_\be\n-83{\n-85 template\n-_\b8_\b6 _\bV_\ba_\bl_\bu_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (const Index&) const { return {}; }\n-87\n-_\b8_\b9 static constexpr std::size_t _\bs_\bi_\bz_\be () { return 0; }\n-90};\n+49public:\n+50\n+67 template\n+_\b6_\b8 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs& _\bb_\bi_\bn_\bd(const LocalView& localView, std::size_t subEntityIndex,\n+std::size_t subEntityCodim)\n+69 {\n+70 // fill vector with local indices of all DOFs contained in subentity\n+71 containedDOFs_.clear();\n+72 dofIsContained_.assign(localView.size(), false);\n+73\n+74 auto re = Dune::referenceElement(localView.element().type());\n+75\n+76 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /\n+*treePath*/) {\n+77 const auto& localCoefficients = node.finiteElement().localCoefficients();\n+78 std::size_t localSize = localCoefficients.size();\n+79 for(std::size_t i=0; i\n-_\b9_\b4using _\bT_\bu_\bp_\bl_\be = Dune::TupleVector;\n-95\n-98template 0), int> = 0,\n-100 std::enable_if_t<(...|| (not std::is_same_v)), int> = 0>\n-101auto _\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (Child0 child0, Children... children)\n-102{\n-103 using Descriptor = _\bT_\bu_\bp_\bl_\be;\n-104 return Descriptor{std::move(child0),std::move(children)...};\n-105}\n-106\n-107\n-109template\n-_\b1_\b1_\b0using _\bA_\br_\br_\ba_\by = std::array;\n-111\n-113template &&...), int> = 0>\n-_\b1_\b1_\b5auto _\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (Child0 child, Children... children)\n-116{\n-117 using Descriptor = _\bA_\br_\br_\ba_\by;\n-118 return Descriptor{std::move(child),std::move(children)...};\n-119}\n-120\n-121\n-123template\n-_\b1_\b2_\b4using _\bV_\be_\bc_\bt_\bo_\br = std::vector;\n-125\n-127template\n-_\b1_\b2_\b8struct _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by\n-129{\n-131 template, int> = 0>\n-_\b1_\b3_\b3 _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by ()\n-134 : child_{}\n-135 {}\n+107 template\n+_\b1_\b0_\b8 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs& _\bb_\bi_\bn_\bd(const LocalView& localView, const Intersection&\n+intersection)\n+109 {\n+110 return bind(localView, intersection.indexInInside(), 1);\n+111 }\n+112\n+_\b1_\b1_\b4 auto _\bb_\be_\bg_\bi_\bn() const\n+115 {\n+116 return containedDOFs_.cbegin();\n+117 }\n+118\n+_\b1_\b2_\b0 auto _\be_\bn_\bd() const\n+121 {\n+122 return containedDOFs_.cend();\n+123 }\n+124\n+_\b1_\b2_\b6 auto _\bs_\bi_\bz_\be() const\n+127 {\n+128 return containedDOFs_.size();\n+129 }\n+130\n+_\b1_\b3_\b2 decltype(auto) operator[](std::size_t i) const\n+133 {\n+134 return containedDOFs_[i];\n+135 }\n 136\n-_\b1_\b3_\b8 explicit _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by (Child child)\n-139 : child_{std::move(child)}\n-140 {}\n-141\n-143 template\n-_\b1_\b4_\b4 const Child& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (const Index& /*i*/) const { return child_; }\n-145\n-_\b1_\b4_\b7 static constexpr std::size_t _\bs_\bi_\bz_\be () { return n; }\n+_\b1_\b3_\b8 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(std::size_t localIndex) const\n+139 {\n+140 return dofIsContained_[localIndex];\n+141 }\n+142\n+143private:\n+144\n+145 std::vector containedDOFs_;\n+146 std::vector dofIsContained_;\n+147};\n 148\n-149private:\n-150 Child child_;\n-151};\n-152\n-154template\n-_\b1_\b5_\b5using _\bF_\bl_\ba_\bt_\bA_\br_\br_\ba_\by = _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b<_\bV_\ba_\bl_\bu_\be_\b,_\bn_\b>;\n-156\n-158template\n-_\b1_\b5_\b9auto _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (std::integral_constant, Child\n-child)\n-160{\n-161 return _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b<_\bC_\bh_\bi_\bl_\bd_\b,_\bn_\b>{std::move(child)};\n-162}\n-163\n-164\n-166template\n-_\b1_\b6_\b7struct _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br\n-168{\n-170 template, int> = 0>\n-_\b1_\b7_\b2 explicit _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br (std::size_t _\bs_\bi_\bz_\be)\n-173 : size_{_\bs_\bi_\bz_\be}\n-174 , child_{}\n-175 {}\n-176\n-_\b1_\b7_\b8 _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br (std::size_t _\bs_\bi_\bz_\be, Child child)\n-179 : size_{_\bs_\bi_\bz_\be}\n-180 , child_{std::move(child)}\n-181 {}\n-182\n-184 template\n-_\b1_\b8_\b5 const Child& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (const Index& /*i*/) const { return child_; }\n-186\n-_\b1_\b8_\b8 std::size_t _\bs_\bi_\bz_\be () const { return size_; }\n-189\n-190private:\n-191 std::size_t size_;\n-192 Child child_;\n-193};\n-194\n-_\b1_\b9_\b6using _\bF_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br = _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b<_\bV_\ba_\bl_\bu_\be_\b>;\n-197\n-199template\n-_\b2_\b0_\b0auto _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br (std::size_t n, Child child)\n-201{\n-202 return _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b<_\bC_\bh_\bi_\bl_\bd_\b>{n,std::move(child)};\n-203}\n-204\n-205namespace Impl {\n-206\n-207template\n-208struct TreeTransform\n-209{\n-210 TreeTransform (const InnerFunc& innerFunc, const LeafFunc& leafFunc)\n-211 : innerFunc_(innerFunc)\n-212 , leafFunc_(leafFunc)\n-213 {}\n-214\n-215 Unknown operator() (const Unknown& tree) const\n-216 {\n-217 return tree;\n-218 }\n-219\n-220 auto operator() (const Value& tree) const\n-221 {\n-222 return leafFunc_(tree);\n-223 }\n-224\n-225 template\n-226 auto operator() (const Tuple& tree) const\n-227 {\n-228 return unpackIntegerSequence([&](auto... ii) {\n-229 return _\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(innerFunc_(tree[ii])...);\n-230 }, std::make_index_sequence());\n-231 }\n+149\n+150\n+163template\n+_\b1_\b6_\b4auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const T&)\n+165{\n+166 return _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b>{};\n+167}\n+168\n+169\n+170\n+190template\n+_\b1_\b9_\b1auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const LocalView& localView, std::size_t subEntityIndex,\n+std::size_t subEntityCodim)\n+192{\n+193 using GridView = typename LocalView::GridView;\n+194 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b<_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b> _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n+195 _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs.bind(localView, subEntityIndex, subEntityCodim);\n+196 return _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n+197}\n+198\n+199\n+200\n+219template\n+_\b2_\b2_\b0auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const LocalView& localView, const Intersection&\n+intersection)\n+221{\n+222 using GridView = typename LocalView::GridView;\n+223 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b<_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b> _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n+224 _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs.bind(localView, intersection);\n+225 return _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n+226}\n+227\n+228\n+229\n+230} // namespace Functions\n+231} // namespace Dune\n 232\n-233 template\n-234 auto operator() (const Array& tree) const\n-235 {\n-236 return unpackIntegerSequence([&](auto... ii) {\n-237 return _\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(innerFunc_(tree[ii])...);\n-238 }, std::make_index_sequence());\n-239 }\n-240\n-241 template\n-242 auto operator() (const Vector& tree) const\n-243 {\n-244 using W = decltype(innerFunc_(tree[0]));\n-245 Vector result;\n-246 result.reserve(tree.size());\n-247 for (std::size_t i = 0; i < tree.size(); ++i)\n-248 result.emplace_back(innerFunc_(tree[i]));\n-249 return result;\n-250 }\n-251\n-252 template\n-253 auto operator() (const UniformArray& tree) const\n-254 {\n-255 return _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(Dune::index_constant{}, innerFunc_(tree\n-[0]));\n-256 }\n-257\n-258 template\n-259 auto operator() (const UniformVector& tree) const\n-260 {\n-261 return _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(tree.size(), innerFunc_(tree[0]));\n-262 }\n-263\n-264private:\n-265 InnerFunc innerFunc_;\n-266 LeafFunc leafFunc_;\n-267};\n-268\n-269\n-280template\n-281auto appendToTree (Size s, const T& tree)\n-282{\n-283 auto transform = TreeTransform(\n-284 [s](auto&& node) { return appendToTree(s, node); },\n-285 [s](auto&& node) { return _\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(s, node); });\n-286 return transform(tree);\n-287}\n-288\n-289} // end namespace Impl\n-290} // end namespace ContainerDescriptors\n-291} // end namespace Dune::Functions\n-292\n-293#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor(const PreBasis &preBasis)\n-Return the container descriptor of the pre-basis, if defined, otherwise\n-ContainerDescriptor::Unknown.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bA_\br_\br_\ba_\by\n-std::array< Child, n > Array\n-Descriptor for arrays with all children of the same type and static size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:110\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto makeUniformDescriptor(std::integral_constant< std::size_t, n >, Child\n-child)\n-Generate a uniform descriptor in case the size is a static constant.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:159\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bT_\bu_\bp_\bl_\be\n-Dune::TupleVector< Children... > Tuple\n-Descriptor with all children of possibly different type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:94\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto makeDescriptor(Child0 child, Children... children)\n-Generate a descriptor in case the children are all of the same type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:115\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< Child > Vector\n-Descriptor for vectors with all children of the same type and dynamic size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:124\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn\n-Fallback container descriptor if nothing else fits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-The node in the descriptor tree representing a value placeholder.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:83\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr std::size_t size()\n-A value placeholder does not have any sub-descriptors, thus its size is zero.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:89\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-Value operator[](const Index &) const\n-The child access method is only available for the interface, but should not be\n-called.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:86\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by\n-Descriptor for arrays with all children identical and the number of children a\n-static size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr std::size_t size()\n-The static size information, i.e., number of children.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by\n-UniformArray()\n-Default constructor. Is enable if the child-type is default constructible.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:133\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by\n-UniformArray(Child child)\n-Constructor that stores a single child only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:138\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bA_\br_\br_\ba_\by_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const Child & operator[](const Index &) const\n-Access the i'th child that is always the same, i.e., child_.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:144\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br\n-Uniform descriptor with dynamic size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:168\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br\n-UniformVector(std::size_t size, Child child)\n-Constructor that stores the size and a single child only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:178\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-std::size_t size() const\n-The dynamic size information, i.e., number of children.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br\n-UniformVector(std::size_t size)\n-Default constructor with size. Is enable if the child-type is default\n-constructible.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:172\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const Child & operator[](const Index &) const\n-Access the i'th child that is always the same, i.e., child_.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:185\n+233#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n+auto subEntityDOFs(const T &)\n+Create SubEntityDOFs object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:164\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n+Range of DOFs associated to sub-entity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:46\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+auto begin() const\n+Create begin iterator for access to range of contained local indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:114\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+auto size() const\n+Return number of contained DOFs.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bb_\bi_\bn_\bd\n+SubEntityDOFs & bind(const LocalView &localView, const Intersection\n+&intersection)\n+Bind SubEntityDOFs object to LocalView and sub-entity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:108\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs\n+bool contains(std::size_t localIndex) const\n+Check if given local index is contained in this range of DOFs.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:138\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\be_\bn_\bd\n+auto end() const\n+Create end iterator for access to range of contained local indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:120\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b:_\b:_\bb_\bi_\bn_\bd\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subentitydofs.hh:68\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: refinedlagrangebasis.hh File Reference\n+dune-functions: lagrangebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -74,59 +74,62 @@\n
    \n
    \n \n-
    refinedlagrangebasis.hh File Reference
    \n+
    lagrangebasis.hh File Reference
    \n
    \n
    \n
    #include <type_traits>
    \n #include <dune/common/exceptions.hh>
    \n-#include <dune/common/math.hh>
    \n-#include <dune/localfunctions/refined.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n-#include <dune/functions/functionspacebases/leafprebasismappermixin.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n-#include <dune/geometry/type.hh>
    \n-#include <dune/grid/common/mcmgmapper.hh>
    \n+#include <dune/localfunctions/lagrange.hh>
    \n+#include <dune/localfunctions/lagrange/equidistantpoints.hh>
    \n+#include <dune/localfunctions/lagrange/lagrangelfecache.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n+#include <dune/functions/functionspacebases/leafprebasismixin.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n-\n+\n \n

    \n Classes

    class  Dune::Functions::RefinedLagrangePreBasis< GV, k, R >
     A pre-basis for a refined Lagrange bases. More...
    class  Dune::Functions::LagrangePreBasis< GV, k, R >
     A pre-basis for a PQ-lagrange bases with given order. More...
     
    class  Dune::Functions::RefinedLagrangeNode< GV, k, R >
    class  Dune::Functions::LagrangeNode< GV, k, R >
     
    \n \n \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Typedefs

    template<typename GV , int k, typename R = double>
    using Dune::Functions::RefinedLagrangeBasis = DefaultGlobalBasis< RefinedLagrangePreBasis< GV, k, R > >
     Nodal basis of a continuous Lagrange finite-element space on a uniformly refined simplex element.
     
    template<typename GV , int k = -1, typename R = double>
    using Dune::Functions::LagrangeBasis = DefaultGlobalBasis< LagrangePreBasis< GV, k, R > >
     Nodal basis of a scalar k-th-order Lagrangean finite element space.
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<int k, typename R = double>
    auto Dune::Functions::BasisFactory::refinedLagrange ()
     Create a pre-basis factory that can create a RefinedLagrange pre-basis.
     
    template<std::size_t k, typename R = double>
    auto Dune::Functions::BasisFactory::lagrange ()
     Create a pre-basis factory that can create a Lagrange pre-basis.
     
    template<typename R = double>
    auto Dune::Functions::BasisFactory::lagrange (int order)
     Create a pre-basis factory that can create a Lagrange pre-basis with a run-time order.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,45 +2,48 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-refinedlagrangebasis.hh File Reference\n+lagrangebasis.hh File Reference\n #include \n #include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include \n-#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b _\b>\n-\u00a0 A pre-basis for a refined Lagrange bases. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b _\b>\n+\u00a0 A pre-basis for a PQ-lagrange bases with given order. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k, R > >\n-\u00a0 Nodal basis of a continuous Lagrange finite-element space on a uniformly\n- refined simplex element.\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs<\n+ GV, k, R > >\n+\u00a0 Nodal basis of a scalar k-th-order Lagrangean finite element space.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n-\u00a0 Create a pre-basis factory that can create a RefinedLagrange pre-basis.\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n+\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be (int order)\n+\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis with a\n+ run-time order.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: refinedlagrangebasis.hh Source File\n+dune-functions: lagrangebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,222 +74,590 @@\n \n \n
    \n
    \n-
    refinedlagrangebasis.hh
    \n+
    lagrangebasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n
    9
    \n
    10#include <type_traits>
    \n-
    11
    \n-
    12#include <dune/common/exceptions.hh>
    \n-
    13#include <dune/common/math.hh>
    \n-
    14
    \n-
    15#include <dune/localfunctions/refined.hh>
    \n+
    11#include <dune/common/exceptions.hh>
    \n+
    12
    \n+
    13#include <dune/localfunctions/lagrange.hh>
    \n+
    14#include <dune/localfunctions/lagrange/equidistantpoints.hh>
    \n+
    15#include <dune/localfunctions/lagrange/lagrangelfecache.hh>
    \n
    16
    \n-\n-\n-\n+\n+\n+\n
    20
    \n-
    21#include <dune/geometry/type.hh>
    \n-
    22
    \n-
    23#include <dune/grid/common/mcmgmapper.hh>
    \n+
    21
    \n+
    22namespace Dune {
    \n+
    23namespace Functions {
    \n
    24
    \n-
    25
    \n-
    26namespace Dune {
    \n-
    27namespace Functions {
    \n-
    28
    \n-
    29template<typename GV, int k, typename R>
    \n-
    30class RefinedLagrangeNode;
    \n-
    31
    \n-
    43template <typename GV, int k, typename R = double>
    \n-
    \n-\n-
    45 public LeafPreBasisMapperMixin< GV >
    \n-
    46{
    \n-\n-
    48
    \n-
    49 static const int dim = GV::dimension;
    \n-
    50
    \n-
    51 // refined basis only implemented for P0 and P1
    \n-
    52 static_assert(k == 0 || k == 1);
    \n-
    53
    \n-
    54 // the layout is defined in terms of a MCMGLayout specialized for k == 0 or 1
    \n-
    55 static MCMGLayout dofLayout()
    \n-
    56 {
    \n-
    57 if constexpr(k == 0)
    \n-
    58 // a refined P0 basis assigns each element 2^dim DOFs
    \n-
    59 return [](GeometryType gt, int) -> size_t {
    \n-
    60 return (gt.dim() == dim) ? (1 << dim) : 0;
    \n-
    61 };
    \n-
    62 else if constexpr(k == 1)
    \n-
    63 // a refined P1 basis has the same layout as a P2 basis
    \n-
    64 return [](GeometryType gt, int) -> size_t {
    \n-
    65 return Dune::binomial(int(k),int(gt.dim()));
    \n-
    66 };
    \n-
    67 else
    \n-
    68 DUNE_THROW(Dune::NotImplemented,
    \n-
    69 "Refined basis not implemented for higher-order Lagrange (k>=2) elements.");
    \n-
    70 }
    \n-
    71
    \n-
    72public:
    \n-
    73
    \n-
    75 using GridView = GV;
    \n-
    76
    \n-\n-
    79
    \n-
    \n-\n-
    87 : Base(gv, dofLayout())
    \n-
    88 {
    \n-
    89 for (auto gt : gv.indexSet().types(0)) {
    \n-
    90 if (!gt.isSimplex())
    \n-
    91 DUNE_THROW(Dune::NotImplemented,
    \n-
    92 "Refined Lagrange basis only implemented for simplex grids.");
    \n-
    93 }
    \n-
    94 }
    \n-
    \n-
    95
    \n-
    \n-
    97 Node makeNode () const
    \n-
    98 {
    \n-
    99 return Node{};
    \n-
    100 }
    \n-
    \n-
    101
    \n-
    \n-
    109 static constexpr unsigned int order()
    \n-
    110 {
    \n-
    111 return k;
    \n-
    112 }
    \n-
    \n-
    113};
    \n-
    \n+
    25// *****************************************************************************
    \n+
    26// This is the reusable part of the LagrangeBasis. It contains
    \n+
    27//
    \n+
    28// LagrangePreBasis
    \n+
    29// LagrangeNode
    \n+
    30//
    \n+
    31// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    32// state. These components do _not_ depend on the global basis and local view
    \n+
    33// and can be used without a global basis.
    \n+
    34// *****************************************************************************
    \n+
    35
    \n+
    36template<typename GV, int k, typename R=double>
    \n+
    37class LagrangeNode;
    \n+
    38
    \n+
    39template<typename GV, int k, typename R=double>
    \n+
    40class LagrangePreBasis;
    \n+
    41
    \n+
    42
    \n+
    43
    \n+
    58template<typename GV, int k, typename R>
    \n+
    \n+\n+
    60 public LeafPreBasisMixin< LagrangePreBasis<GV,k,R> >
    \n+
    61{
    \n+
    62 static const int dim = GV::dimension;
    \n+
    63 static const bool useDynamicOrder = (k<0);
    \n+
    64
    \n+
    65public:
    \n+
    66
    \n+
    68 using GridView = GV;
    \n+
    69
    \n+
    71 using size_type = std::size_t;
    \n+
    72
    \n+\n+
    75
    \n+
    \n+\n+
    78 : LagrangePreBasis(gv, std::numeric_limits<unsigned int>::max())
    \n+
    79 {}
    \n+
    \n+
    80
    \n+
    \n+
    82 LagrangePreBasis(const GridView& gv, unsigned int order) :
    \n+\n+
    84 {
    \n+
    85 if (!useDynamicOrder && order!=std::numeric_limits<unsigned int>::max())
    \n+
    86 DUNE_THROW(RangeError, "Template argument k has to be -1 when supplying a run-time order!");
    \n+
    87
    \n+
    88 for (int i=0; i<=dim; i++)
    \n+
    89 {
    \n+\n+\n+
    92 }
    \n+\n+\n+
    95 }
    \n+
    \n+
    96
    \n+
    \n+\n+
    99 {
    \n+
    100 vertexOffset_ = 0;
    \n+\n+
    102
    \n+
    103 if (dim>=2)
    \n+
    104 {
    \n+\n+
    106
    \n+
    107 quadrilateralOffset_ = triangleOffset_ + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle));
    \n+
    108 }
    \n+
    109
    \n+
    110 if (dim==3) {
    \n+
    111 tetrahedronOffset_ = quadrilateralOffset_ + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));
    \n+
    112
    \n+
    113 prismOffset_ = tetrahedronOffset_ + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::tetrahedron));
    \n
    114
    \n-
    115
    \n+
    115 hexahedronOffset_ = prismOffset_ + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism));
    \n
    116
    \n-
    117template <typename GV, int k, typename R>
    \n-
    \n-\n-
    119 : public LeafBasisNode
    \n-
    120{
    \n-
    121 static constexpr int dim = GV::dimension;
    \n-
    122
    \n-
    123 // refined basis only implemented for P0 and P1
    \n-
    124 static_assert(k == 0 || k == 1);
    \n-
    125
    \n-
    126public:
    \n-
    128 using Element = typename GV::template Codim<0>::Entity;
    \n-
    129
    \n-
    131 using FiniteElement = std::conditional_t<(k==0),
    \n-
    132 Dune::RefinedP0LocalFiniteElement<typename GV::ctype,R,dim>,
    \n-
    133 Dune::RefinedP1LocalFiniteElement<typename GV::ctype,R,dim>>;
    \n-
    134
    \n-
    \n-\n-\n-
    146 , element_(nullptr)
    \n-
    147 {}
    \n-
    \n-
    148
    \n-
    \n-
    153 const Element& element () const
    \n-
    154 {
    \n-
    155 return *element_;
    \n-
    156 }
    \n-
    \n-
    157
    \n-
    \n-\n-
    165 {
    \n-
    166 return finiteElement_;
    \n-
    167 }
    \n-
    \n-
    168
    \n-
    \n-
    170 void bind (const Element& e)
    \n-
    171 {
    \n-
    172 element_ = &e;
    \n-
    173 this->setSize(finiteElement_.size());
    \n-
    174 }
    \n+
    117 pyramidOffset_ = hexahedronOffset_ + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::hexahedron));
    \n+
    118 }
    \n+
    119 }
    \n+
    \n+
    120
    \n+
    \n+
    122 const GridView& gridView() const
    \n+
    123 {
    \n+
    124 return gridView_;
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    \n+
    128 void update (const GridView& gv)
    \n+
    129 {
    \n+
    130 gridView_ = gv;
    \n+
    131 }
    \n+
    \n+
    132
    \n+
    \n+\n+
    137 {
    \n+
    138 return Node{order_};
    \n+
    139 }
    \n+
    \n+
    140
    \n+
    \n+\n+
    143 {
    \n+
    144 switch (dim)
    \n+
    145 {
    \n+
    146 case 1:
    \n+
    147 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n+
    148 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1));
    \n+
    149 case 2:
    \n+
    150 {
    \n+
    151 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n+
    152 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))
    \n+
    153 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle))
    \n+
    154 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));
    \n+
    155 }
    \n+
    156 case 3:
    \n+
    157 {
    \n+
    158 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n+
    159 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))
    \n+
    160 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle))
    \n+
    161 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral))
    \n+
    162 + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::tetrahedron))
    \n+
    163 + dofsPerPyramid() * ((size_type)gridView_.size(Dune::GeometryTypes::pyramid))
    \n+
    164 + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism))
    \n+
    165 + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::hexahedron));
    \n+
    166 }
    \n+
    167 }
    \n+
    168 DUNE_THROW(Dune::NotImplemented, "No size method for " << dim << "d grids available yet!");
    \n+
    169 }
    \n+
    \n+
    170
    \n+
    \n+\n+
    173 {
    \n+
    174 // That cast to unsigned int is necessary because GV::dimension is an enum,
    \n+
    175 // which is not recognized by the power method as an integer type...
    \n+
    176 return power(order()+1, (unsigned int)GV::dimension);
    \n+
    177 }
    \n
    \n-
    175
    \n+
    178
    \n+
    179 template<typename It>
    \n
    \n-
    180 static constexpr unsigned int order()
    \n-
    181 {
    \n-
    182 return k;
    \n-
    183 }
    \n-
    \n-
    184
    \n-
    185protected:
    \n-\n-\n-
    188};
    \n-
    \n-
    189
    \n+
    180 It indices(const Node& node, It it) const
    \n+
    181 {
    \n+
    182 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it, ++i)
    \n+
    183 {
    \n+
    184 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    185 const auto& gridIndexSet = gridView().indexSet();
    \n+
    186 const auto& element = node.element();
    \n+
    187
    \n+
    188 // The dimension of the entity that the current dof is related to
    \n+
    189 auto dofDim = dim - localKey.codim();
    \n
    190
    \n-
    191
    \n-
    192namespace BasisFactory {
    \n-
    193
    \n-
    201template <int k, typename R=double>
    \n-
    \n-\n-
    203{
    \n-
    204 return [](const auto& gridView) {
    \n-
    205 return RefinedLagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n-
    206 };
    \n-
    207}
    \n-
    \n-
    208
    \n-
    209} // end namespace BasisFactory
    \n-
    210
    \n-
    211
    \n-
    225template <typename GV, int k, typename R=double>
    \n-\n-
    227
    \n-
    228} // end namespace Functions
    \n-
    229} // end namespace Dune
    \n+
    191 // Test for a vertex dof
    \n+
    192 // The test for k==1 is redundant, but having it here allows the compiler to conclude
    \n+
    193 // at compile-time that the dofDim==0 case is the only one that will ever happen.
    \n+
    194 // This leads to measurable speed-up: see
    \n+
    195 // https://gitlab.dune-project.org/staging/dune-functions/issues/30
    \n+
    196 if (k==1 || dofDim==0) {
    \n+
    197 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity(),dim)) }};
    \n+
    198 continue;
    \n+
    199 }
    \n+
    200
    \n+
    201 if (dofDim==1)
    \n+
    202 { // edge dof
    \n+
    203 if (dim==1) // element dof -- any local numbering is fine
    \n+
    204 {
    \n+
    205 *it = {{ edgeOffset_
    \n+
    206 + dofsPerCube(1) * ((size_type)gridIndexSet.subIndex(element,0,0))
    \n+
    207 + localKey.index() }};
    \n+
    208 continue;
    \n+
    209 }
    \n+
    210 else
    \n+
    211 {
    \n+
    212 const auto refElement
    \n+
    213 = Dune::referenceElement<double,dim>(element.type());
    \n+
    214
    \n+
    215 // We have to reverse the numbering if the local element edge is
    \n+
    216 // not aligned with the global edge.
    \n+
    217 auto v0 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),0,dim),dim);
    \n+
    218 auto v1 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),1,dim),dim);
    \n+
    219 bool flip = (v0 > v1);
    \n+
    220 *it = {{ (flip)
    \n+\n+
    222 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))
    \n+
    223 + (dofsPerCube(1)-1)-localKey.index()
    \n+\n+
    225 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))
    \n+
    226 + localKey.index() }};
    \n+
    227 continue;
    \n+
    228 }
    \n+
    229 }
    \n
    230
    \n-
    231
    \n-
    232#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH
    \n-\n-\n-\n-
    auto refinedLagrange()
    Create a pre-basis factory that can create a RefinedLagrange pre-basis.
    Definition refinedlagrangebasis.hh:202
    \n+
    231 if (dofDim==2)
    \n+
    232 {
    \n+
    233 if (dim==2) // element dof -- any local numbering is fine
    \n+
    234 {
    \n+
    235 if (element.type().isTriangle())
    \n+
    236 {
    \n+
    237 *it = {{ triangleOffset_ + dofsPerSimplex(2)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    238 continue;
    \n+
    239 }
    \n+
    240 else if (element.type().isQuadrilateral())
    \n+
    241 {
    \n+
    242 *it = {{ quadrilateralOffset_ + dofsPerCube(2)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    243 continue;
    \n+
    244 }
    \n+
    245 else
    \n+
    246 DUNE_THROW(Dune::NotImplemented, "2d elements have to be triangles or quadrilaterals");
    \n+
    247 } else
    \n+
    248 {
    \n+
    249 const auto refElement
    \n+
    250 = Dune::referenceElement<double,dim>(element.type());
    \n+
    251
    \n+
    252 if (order()>3)
    \n+
    253 DUNE_THROW(Dune::NotImplemented, "LagrangeBasis for 3D grids is only implemented if k<=3");
    \n+
    254
    \n+
    255 if (order()==3 and !refElement.type(localKey.subEntity(), localKey.codim()).isTriangle())
    \n+
    256 DUNE_THROW(Dune::NotImplemented, "LagrangeBasis for 3D grids with k==3 is only implemented if the grid is a simplex grid");
    \n+
    257
    \n+
    258 *it = {{ triangleOffset_ + ((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim())) }};
    \n+
    259 continue;
    \n+
    260 }
    \n+
    261 }
    \n+
    262
    \n+
    263 if (dofDim==3)
    \n+
    264 {
    \n+
    265 if (dim==3) // element dof -- any local numbering is fine
    \n+
    266 {
    \n+
    267 if (element.type().isTetrahedron())
    \n+
    268 {
    \n+
    269 *it = {{ tetrahedronOffset_ + dofsPerSimplex(3)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    270 continue;
    \n+
    271 }
    \n+
    272 else if (element.type().isHexahedron())
    \n+
    273 {
    \n+
    274 *it = {{ hexahedronOffset_ + dofsPerCube(3)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    275 continue;
    \n+
    276 }
    \n+
    277 else if (element.type().isPrism())
    \n+
    278 {
    \n+
    279 *it = {{ prismOffset_ + dofsPerPrism()*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    280 continue;
    \n+
    281 }
    \n+
    282 else if (element.type().isPyramid())
    \n+
    283 {
    \n+
    284 *it = {{ pyramidOffset_ + dofsPerPyramid()*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    285 continue;
    \n+
    286 }
    \n+
    287 else
    \n+
    288 DUNE_THROW(Dune::NotImplemented, "3d elements have to be tetrahedra, hexahedra, prisms, or pyramids");
    \n+
    289 } else
    \n+
    290 DUNE_THROW(Dune::NotImplemented, "Grids of dimension larger than 3 are no supported");
    \n+
    291 }
    \n+
    292 DUNE_THROW(Dune::NotImplemented, "Grid contains elements not supported for the LagrangeBasis");
    \n+
    293 }
    \n+
    294 return it;
    \n+
    295 }
    \n+
    \n+
    296
    \n+
    \n+
    298 unsigned int order() const
    \n+
    299 {
    \n+
    300 return (useDynamicOrder) ? order_ : k;
    \n+
    301 }
    \n+
    \n+
    302
    \n+
    303protected:
    \n+\n+
    305
    \n+
    306 // Run-time order, only valid if k<0
    \n+
    307 unsigned int order_;
    \n+
    308
    \n+
    \n+
    310 size_type dofsPerSimplex(std::size_t simplexDim) const
    \n+
    311 {
    \n+
    312 return useDynamicOrder ? dofsPerSimplex_[simplexDim] : computeDofsPerSimplex(simplexDim);
    \n+
    313 }
    \n+
    \n+
    314
    \n+
    \n+
    316 size_type dofsPerCube(std::size_t cubeDim) const
    \n+
    317 {
    \n+
    318 return useDynamicOrder ? dofsPerCube_[cubeDim] : computeDofsPerCube(cubeDim);
    \n+
    319 }
    \n+
    \n+
    320
    \n+
    \n+\n+
    322 {
    \n+
    323 return useDynamicOrder ? dofsPerPrism_ : computeDofsPerPrism();
    \n+
    324 }
    \n+
    \n+
    325
    \n+
    \n+\n+
    327 {
    \n+
    328 return useDynamicOrder ? dofsPerPyramid_ : computeDofsPerPyramid();
    \n+
    329 }
    \n+
    \n+
    330
    \n+
    \n+
    332 size_type computeDofsPerSimplex(std::size_t simplexDim) const
    \n+
    333 {
    \n+
    334 return order() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::size_t(order()-1),simplexDim);
    \n+
    335 }
    \n+
    \n+
    336
    \n+
    \n+
    338 size_type computeDofsPerCube(std::size_t cubeDim) const
    \n+
    339 {
    \n+
    340 return order() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(order()-1, cubeDim);
    \n+
    341 }
    \n+
    \n+
    342
    \n+
    \n+\n+
    344 {
    \n+
    345 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-1)*(order()-1)*(order()-2)/2;
    \n+
    346 }
    \n+
    \n+
    347
    \n+
    \n+\n+
    349 {
    \n+
    350 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-2)*(order()-1)*(2*order()-3)/6;
    \n+
    351 }
    \n+
    \n+
    352
    \n+
    353 // When the order is given at run-time, the following numbers are pre-computed:
    \n+
    354 std::array<size_type,dim+1> dofsPerSimplex_;
    \n+
    355 std::array<size_type,dim+1> dofsPerCube_;
    \n+\n+\n+
    358
    \n+\n+\n+\n+\n+\n+\n+\n+\n+
    367
    \n+
    368};
    \n+
    \n+
    369
    \n+
    370
    \n+
    371
    \n+
    372template<typename GV, int k, typename R>
    \n+
    \n+\n+
    374 public LeafBasisNode
    \n+
    375{
    \n+
    376 // Stores LocalFiniteElement implementations with run-time order as a function of GeometryType
    \n+
    377 template<typename Domain, typename Range, int dim>
    \n+
    378 class LagrangeRunTimeLFECache
    \n+
    379 {
    \n+
    380 public:
    \n+
    381 using FiniteElementType = LagrangeLocalFiniteElement<EquidistantPointSet,dim,Domain,Range>;
    \n+
    382
    \n+
    383 const FiniteElementType& get(GeometryType type)
    \n+
    384 {
    \n+
    385 auto i = data_.find(type);
    \n+
    386 if (i==data_.end())
    \n+
    387 i = data_.emplace(type,FiniteElementType(type,order_)).first;
    \n+
    388 return (*i).second;
    \n+
    389 }
    \n+
    390
    \n+
    391 std::map<GeometryType, FiniteElementType> data_;
    \n+
    392 unsigned int order_;
    \n+
    393 };
    \n+
    394
    \n+
    395 static constexpr int dim = GV::dimension;
    \n+
    396 static constexpr bool useDynamicOrder = (k<0);
    \n+
    397
    \n+
    398 using FiniteElementCache = std::conditional_t<(useDynamicOrder),
    \n+
    399 LagrangeRunTimeLFECache<typename GV::ctype, R, dim>,
    \n+
    400 LagrangeLocalFiniteElementCache<typename GV::ctype, R, dim, std::max(k,0)>
    \n+
    401 >;
    \n+
    402
    \n+
    403public:
    \n+
    404
    \n+
    405 using size_type = std::size_t;
    \n+
    406 using Element = typename GV::template Codim<0>::Entity;
    \n+
    407 using FiniteElement = typename FiniteElementCache::FiniteElementType;
    \n+
    408
    \n+
    \n+\n+
    411 finiteElement_(nullptr),
    \n+
    412 element_(nullptr)
    \n+
    413 {}
    \n+
    \n+
    414
    \n+
    \n+
    416 LagrangeNode(unsigned int order) :
    \n+
    417 order_(order),
    \n+
    418 finiteElement_(nullptr),
    \n+
    419 element_(nullptr)
    \n+
    420 {
    \n+
    421 // Only the cache for the run-time-order case (i.e., k<0), has the 'order_' member
    \n+
    422 if constexpr (useDynamicOrder)
    \n+
    423 cache_.order_ = order;
    \n+
    424 }
    \n+
    \n+
    425
    \n+
    \n+
    427 const Element& element() const
    \n+
    428 {
    \n+
    429 return *element_;
    \n+
    430 }
    \n+
    \n+
    431
    \n+
    \n+\n+
    437 {
    \n+
    438 return *finiteElement_;
    \n+
    439 }
    \n+
    \n+
    440
    \n+
    \n+
    442 void bind(const Element& e)
    \n+
    443 {
    \n+
    444 element_ = &e;
    \n+
    445 finiteElement_ = &(cache_.get(element_->type()));
    \n+
    446 this->setSize(finiteElement_->size());
    \n+
    447 }
    \n+
    \n+
    448
    \n+
    449protected:
    \n+
    450
    \n+
    \n+
    451 unsigned int order() const
    \n+
    452 {
    \n+
    453 return (useDynamicOrder) ? order_ : k;
    \n+
    454 }
    \n+
    \n+
    455
    \n+
    456 // Run-time order, only valid if k<0
    \n+
    457 unsigned int order_;
    \n+
    458
    \n+
    459 FiniteElementCache cache_;
    \n+\n+\n+
    462};
    \n+
    \n+
    463
    \n+
    464
    \n+
    465
    \n+
    466namespace BasisFactory {
    \n+
    467
    \n+
    476template<std::size_t k, typename R=double>
    \n+
    \n+\n+
    478{
    \n+
    479 return [](const auto& gridView) {
    \n+
    480 return LagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n+
    481 };
    \n+
    482}
    \n+
    \n+
    483
    \n+
    491template<typename R=double>
    \n+
    \n+
    492auto lagrange(int order)
    \n+
    493{
    \n+
    494 return [=](const auto& gridView) {
    \n+
    495 return LagrangePreBasis<std::decay_t<decltype(gridView)>, -1, R>(gridView, order);
    \n+
    496 };
    \n+
    497}
    \n+
    \n+
    498
    \n+
    499} // end namespace BasisFactory
    \n+
    500
    \n+
    501
    \n+
    502
    \n+
    526template<typename GV, int k=-1, typename R=double>
    \n+\n+
    528
    \n+
    529
    \n+
    530
    \n+
    531
    \n+
    532
    \n+
    533} // end namespace Functions
    \n+
    534} // end namespace Dune
    \n+
    535
    \n+
    536
    \n+
    537#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n+\n+\n+\n+
    auto lagrange()
    Create a pre-basis factory that can create a Lagrange pre-basis.
    Definition lagrangebasis.hh:477
    \n
    Definition polynomial.hh:17
    \n
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n-
    A generic MixIn class for PreBasis with flat indices computed from a mapper.
    Definition leafprebasismappermixin.hh:62
    \n+
    Definition lagrangebasis.hh:375
    \n+
    LagrangeNode(unsigned int order)
    Constructor with a run-time order.
    Definition lagrangebasis.hh:416
    \n+
    unsigned int order() const
    Definition lagrangebasis.hh:451
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition lagrangebasis.hh:436
    \n+
    const Element * element_
    Definition lagrangebasis.hh:461
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition lagrangebasis.hh:427
    \n+
    FiniteElementCache cache_
    Definition lagrangebasis.hh:459
    \n+
    typename FiniteElementCache::FiniteElementType FiniteElement
    Definition lagrangebasis.hh:407
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition lagrangebasis.hh:442
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition lagrangebasis.hh:406
    \n+
    const FiniteElement * finiteElement_
    Definition lagrangebasis.hh:460
    \n+
    unsigned int order_
    Definition lagrangebasis.hh:457
    \n+
    std::size_t size_type
    Definition lagrangebasis.hh:405
    \n+
    LagrangeNode()
    Constructor without order (uses the compile-time value)
    Definition lagrangebasis.hh:410
    \n+
    A pre-basis for a PQ-lagrange bases with given order.
    Definition lagrangebasis.hh:61
    \n+
    size_type dofsPerPrism() const
    Definition lagrangebasis.hh:321
    \n+
    size_type computeDofsPerCube(std::size_t cubeDim) const
    Number of degrees of freedom assigned to a cube (without the ones assigned to its faces!...
    Definition lagrangebasis.hh:338
    \n+
    size_type computeDofsPerSimplex(std::size_t simplexDim) const
    Number of degrees of freedom assigned to a simplex (without the ones assigned to its faces!...
    Definition lagrangebasis.hh:332
    \n+
    size_type computeDofsPerPrism() const
    Definition lagrangebasis.hh:343
    \n+
    unsigned int order_
    Definition lagrangebasis.hh:307
    \n+
    size_type edgeOffset_
    Definition lagrangebasis.hh:360
    \n+
    std::array< size_type, dim+1 > dofsPerSimplex_
    Definition lagrangebasis.hh:354
    \n+
    It indices(const Node &node, It it) const
    Definition lagrangebasis.hh:180
    \n+
    size_type vertexOffset_
    Definition lagrangebasis.hh:359
    \n+
    size_type dofsPerSimplex(std::size_t simplexDim) const
    Number of degrees of freedom assigned to a simplex (without the ones assigned to its faces!...
    Definition lagrangebasis.hh:310
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition lagrangebasis.hh:71
    \n+
    size_type pyramidOffset_
    Definition lagrangebasis.hh:364
    \n+
    size_type prismOffset_
    Definition lagrangebasis.hh:365
    \n+
    size_type tetrahedronOffset_
    Definition lagrangebasis.hh:363
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition lagrangebasis.hh:98
    \n+
    size_type computeDofsPerPyramid() const
    Definition lagrangebasis.hh:348
    \n+
    LagrangePreBasis(const GridView &gv, unsigned int order)
    Constructor for a given grid view object and run-time order.
    Definition lagrangebasis.hh:82
    \n+
    size_type dofsPerPyramid_
    Definition lagrangebasis.hh:357
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition lagrangebasis.hh:142
    \n+
    LagrangePreBasis(const GridView &gv)
    Constructor for a given grid view object with compile-time order.
    Definition lagrangebasis.hh:77
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition lagrangebasis.hh:128
    \n+
    GV GridView
    The grid view that the FE basis is defined on.
    Definition lagrangebasis.hh:68
    \n+
    size_type quadrilateralOffset_
    Definition lagrangebasis.hh:362
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition lagrangebasis.hh:122
    \n+
    GridView gridView_
    Definition lagrangebasis.hh:304
    \n+
    Node makeNode() const
    Create tree node.
    Definition lagrangebasis.hh:136
    \n+
    unsigned int order() const
    Polynomial order used in the local Lagrange finite-elements.
    Definition lagrangebasis.hh:298
    \n+
    std::array< size_type, dim+1 > dofsPerCube_
    Definition lagrangebasis.hh:355
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition lagrangebasis.hh:172
    \n+
    size_type dofsPerPrism_
    Definition lagrangebasis.hh:356
    \n+
    size_type dofsPerCube(std::size_t cubeDim) const
    Number of degrees of freedom assigned to a cube (without the ones assigned to its faces!...
    Definition lagrangebasis.hh:316
    \n+
    size_type triangleOffset_
    Definition lagrangebasis.hh:361
    \n+
    size_type hexahedronOffset_
    Definition lagrangebasis.hh:366
    \n+
    size_type dofsPerPyramid() const
    Definition lagrangebasis.hh:326
    \n+
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n
    Definition nodes.hh:191
    \n-
    Definition refinedlagrangebasis.hh:120
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition refinedlagrangebasis.hh:164
    \n-
    const Element * element_
    Definition refinedlagrangebasis.hh:187
    \n-
    void bind(const Element &e)
    Bind the node to the element e.
    Definition refinedlagrangebasis.hh:170
    \n-
    const FiniteElement finiteElement_
    Definition refinedlagrangebasis.hh:186
    \n-
    static constexpr unsigned int order()
    Polynomial order used in the local Lagrange finite-elements in subdomains of the element.
    Definition refinedlagrangebasis.hh:180
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Type of the element in the GridView.
    Definition refinedlagrangebasis.hh:128
    \n-
    std::conditional_t<(k==0), Dune::RefinedP0LocalFiniteElement< typename GV::ctype, R, dim >, Dune::RefinedP1LocalFiniteElement< typename GV::ctype, R, dim > > FiniteElement
    Type of the local finite-element.
    Definition refinedlagrangebasis.hh:133
    \n-
    RefinedLagrangeNode()
    The default constructor initializes all members to their default.
    Definition refinedlagrangebasis.hh:144
    \n-
    const Element & element() const
    Return current element. The behavior is undefined if the node is not bound to any element.
    Definition refinedlagrangebasis.hh:153
    \n-
    A pre-basis for a refined Lagrange bases.
    Definition refinedlagrangebasis.hh:46
    \n-
    static constexpr unsigned int order()
    Polynomial order used in the local Lagrange finite-elements.
    Definition refinedlagrangebasis.hh:109
    \n-
    Node makeNode() const
    Create tree node.
    Definition refinedlagrangebasis.hh:97
    \n-
    GV GridView
    The grid view that the FE basis is defined on.
    Definition refinedlagrangebasis.hh:75
    \n-
    RefinedLagrangePreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition refinedlagrangebasis.hh:86
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,254 +1,715 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-refinedlagrangebasis.hh\n+lagrangebasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n 9\n 10#include \n-11\n-12#include \n-13#include \n-14\n-15#include \n+11#include \n+12\n+13#include \n+14#include \n+15#include \n 16\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n 20\n-21#include \n-22\n-23#include \n+21\n+22namespace _\bD_\bu_\bn_\be {\n+23namespace Functions {\n 24\n-25\n-26namespace _\bD_\bu_\bn_\be {\n-27namespace Functions {\n-28\n-29template\n-30class RefinedLagrangeNode;\n-31\n-43template \n-_\b4_\b4class _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n-45 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn< GV >\n-46{\n-47 using _\bB_\ba_\bs_\be = _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bG_\bV_\b _\b>;\n-48\n-49 static const int dim = GV::dimension;\n-50\n-51 // refined basis only implemented for P0 and P1\n-52 static_assert(k == 0 || k == 1);\n-53\n-54 // the layout is defined in terms of a MCMGLayout specialized for k == 0 or\n-1\n-55 static MCMGLayout dofLayout()\n-56 {\n-57 if constexpr(k == 0)\n-58 // a refined P0 basis assigns each element 2^dim DOFs\n-59 return [](GeometryType gt, int) -> size_t {\n-60 return (gt.dim() == dim) ? (1 << dim) : 0;\n-61 };\n-62 else if constexpr(k == 1)\n-63 // a refined P1 basis has the same layout as a P2 basis\n-64 return [](GeometryType gt, int) -> size_t {\n-65 return Dune::binomial(int(k),int(gt.dim()));\n-66 };\n-67 else\n-68 DUNE_THROW(Dune::NotImplemented,\n-69 \"Refined basis not implemented for higher-order Lagrange (k>=2) elements.\");\n-70 }\n-71\n-72public:\n-73\n-_\b7_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-76\n-_\b7_\b8 using _\bN_\bo_\bd_\be = _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b>;\n-79\n-_\b8_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-87 : _\bB_\ba_\bs_\be(gv, dofLayout())\n-88 {\n-89 for (auto gt : gv.indexSet().types(0)) {\n-90 if (!gt.isSimplex())\n-91 DUNE_THROW(Dune::NotImplemented,\n-92 \"Refined Lagrange basis only implemented for simplex grids.\");\n-93 }\n-94 }\n-95\n-_\b9_\b7 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be () const\n-98 {\n-99 return _\bN_\bo_\bd_\be{};\n-100 }\n-101\n-_\b1_\b0_\b9 static constexpr unsigned int _\bo_\br_\bd_\be_\br()\n-110 {\n-111 return k;\n-112 }\n-113};\n+25/\n+/ *****************************************************************************\n+26// This is the reusable part of the LagrangeBasis. It contains\n+27//\n+28// LagrangePreBasis\n+29// LagrangeNode\n+30//\n+31// The pre-basis allows to create the others and is the owner of possible\n+shared\n+32// state. These components do _not_ depend on the global basis and local view\n+33// and can be used without a global basis.\n+34/\n+/ *****************************************************************************\n+35\n+36template\n+37class LagrangeNode;\n+38\n+39template\n+40class LagrangePreBasis;\n+41\n+42\n+43\n+58template\n+_\b5_\b9class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n+60 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< LagrangePreBasis >\n+61{\n+62 static const int dim = GV::dimension;\n+63 static const bool useDynamicOrder = (k<0);\n+64\n+65public:\n+66\n+_\b6_\b8 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+69\n+_\b7_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+72\n+_\b7_\b4 using _\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b>;\n+75\n+_\b7_\b7 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+78 : _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(gv, std::numeric_limits::max())\n+79 {}\n+80\n+_\b8_\b2 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv, unsigned int _\bo_\br_\bd_\be_\br) :\n+83 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv), _\bo_\br_\bd_\be_\br_\b_(_\bo_\br_\bd_\be_\br)\n+84 {\n+85 if (!useDynamicOrder && _\bo_\br_\bd_\be_\br!=std::numeric_limits::max())\n+86 DUNE_THROW(RangeError, \"Template argument k has to be -1 when supplying a\n+run-time order!\");\n+87\n+88 for (int i=0; i<=dim; i++)\n+89 {\n+90 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_[i] = _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(i);\n+91 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_[i] = _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(i);\n+92 }\n+93 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_ = _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm();\n+94 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd_\b_ = _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd();\n+95 }\n+96\n+_\b9_\b8 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+99 {\n+100 _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_ = 0;\n+101 _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(0) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size\n+(dim));\n+102\n+103 if (dim>=2)\n+104 {\n+105 _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)\n+_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim-1));\n+106\n+107 _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(2) * (\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::triangle));\n+108 }\n+109\n+110 if (dim==3) {\n+111 _\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(2) * (\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::quadrilateral));\n+112\n+113 _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(3) * (\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::tetrahedron));\n 114\n-115\n+115 _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() * (\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::prism));\n 116\n-117template \n-_\b1_\b1_\b8class _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n-119 : public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-120{\n-121 static constexpr int dim = GV::dimension;\n-122\n-123 // refined basis only implemented for P0 and P1\n-124 static_assert(k == 0 || k == 1);\n-125\n-126public:\n-_\b1_\b2_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-129\n-_\b1_\b3_\b1 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = std::conditional_t<(k==0),\n-132 Dune::RefinedP0LocalFiniteElement,\n-133 Dune::RefinedP1LocalFiniteElement>;\n-134\n-_\b1_\b4_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be ()\n-145 : _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_{}\n-146 , _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n-147 {}\n-148\n-_\b1_\b5_\b3 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt () const\n-154 {\n-155 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-156 }\n-157\n-_\b1_\b6_\b4 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt () const\n-165 {\n-166 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+117 _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(3) * (\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::hexahedron));\n+118 }\n+119 }\n+120\n+_\b1_\b2_\b2 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+123 {\n+124 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+125 }\n+126\n+_\b1_\b2_\b8 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+129 {\n+130 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+131 }\n+132\n+_\b1_\b3_\b6 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+137 {\n+138 return _\bN_\bo_\bd_\be{_\bo_\br_\bd_\be_\br_\b_};\n+139 }\n+140\n+_\b1_\b4_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+143 {\n+144 switch (dim)\n+145 {\n+146 case 1:\n+147 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(0) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim))\n+148 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim-1));\n+149 case 2:\n+150 {\n+151 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(0) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim))\n+152 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim-1))\n+153 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(2) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n+triangle))\n+154 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(2) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n+quadrilateral));\n+155 }\n+156 case 3:\n+157 {\n+158 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(0) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim))\n+159 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim-1))\n+160 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(2) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n+triangle))\n+161 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(2) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n+quadrilateral))\n+162 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(3) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n+tetrahedron))\n+163 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd() * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n+pyramid))\n+164 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::prism))\n+165 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(3) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n+hexahedron));\n+166 }\n 167 }\n-168\n-_\b1_\b7_\b0 void _\bb_\bi_\bn_\bd (const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-171 {\n-172 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-173 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n-174 }\n-175\n-_\b1_\b8_\b0 static constexpr unsigned int _\bo_\br_\bd_\be_\br()\n+168 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n+available yet!\");\n+169 }\n+170\n+_\b1_\b7_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+173 {\n+174 // That cast to unsigned int is necessary because GV::dimension is an enum,\n+175 // which is not recognized by the power method as an integer type...\n+176 return power(_\bo_\br_\bd_\be_\br()+1, (unsigned int)GV::dimension);\n+177 }\n+178\n+179 template\n+_\b1_\b8_\b0 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n 181 {\n-182 return k;\n-183 }\n-184\n-185protected:\n-_\b1_\b8_\b6 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b1_\b8_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-188};\n-189\n+182 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0, end = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().size() ; i < end ; ++it,\n+++i)\n+183 {\n+184 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n+(i);\n+185 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n+186 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+187\n+188 // The dimension of the entity that the current dof is related to\n+189 auto dofDim = dim - localKey.codim();\n 190\n-191\n-192namespace BasisFactory {\n-193\n-201template \n-_\b2_\b0_\b2auto _\br_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n-203{\n-204 return [](const auto& gridView) {\n-205 return _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k, R>\n-(gridView);\n-206 };\n-207}\n-208\n-209} // end namespace BasisFactory\n-210\n-211\n-225template \n-_\b2_\b2_\b6using _\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\bk_\b,_\bR_\b> >;\n-227\n-228} // end namespace Functions\n-229} // end namespace Dune\n+191 // Test for a vertex dof\n+192 // The test for k==1 is redundant, but having it here allows the compiler\n+to conclude\n+193 // at compile-time that the dofDim==0 case is the only one that will ever\n+happen.\n+194 // This leads to measurable speed-up: see\n+195 // https://gitlab.dune-project.org/staging/dune-functions/issues/30\n+196 if (k==1 || dofDim==0) {\n+197 *it = {{ (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(gridIndexSet.subIndex(element,localKey.subEntity\n+(),dim)) }};\n+198 continue;\n+199 }\n+200\n+201 if (dofDim==1)\n+202 { // edge dof\n+203 if (dim==1) // element dof -- any local numbering is fine\n+204 {\n+205 *it = {{ _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+206 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0))\n+207 + localKey.index() }};\n+208 continue;\n+209 }\n+210 else\n+211 {\n+212 const auto refElement\n+213 = Dune::referenceElement(element.type());\n+214\n+215 // We have to reverse the numbering if the local element edge is\n+216 // not aligned with the global edge.\n+217 auto v0 = (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,refElement.subEntity\n+(localKey.subEntity(),localKey.codim(),0,dim),dim);\n+218 auto v1 = (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,refElement.subEntity\n+(localKey.subEntity(),localKey.codim(),1,dim),dim);\n+219 bool flip = (v0 > v1);\n+220 *it = {{ (flip)\n+221 ? _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+222 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1)*((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex\n+(element,localKey.subEntity(),localKey.codim()))\n+223 + (_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1)-1)-localKey.index()\n+224 : _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+225 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1)*((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex\n+(element,localKey.subEntity(),localKey.codim()))\n+226 + localKey.index() }};\n+227 continue;\n+228 }\n+229 }\n 230\n-231\n-232#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+231 if (dofDim==2)\n+232 {\n+233 if (dim==2) // element dof -- any local numbering is fine\n+234 {\n+235 if (element.type().isTriangle())\n+236 {\n+237 *it = {{ _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(2)*(\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+238 continue;\n+239 }\n+240 else if (element.type().isQuadrilateral())\n+241 {\n+242 *it = {{ _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(2)*(\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+243 continue;\n+244 }\n+245 else\n+246 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n+quadrilaterals\");\n+247 } else\n+248 {\n+249 const auto refElement\n+250 = Dune::referenceElement(element.type());\n+251\n+252 if (_\bo_\br_\bd_\be_\br()>3)\n+253 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids is only\n+implemented if k<=3\");\n+254\n+255 if (_\bo_\br_\bd_\be_\br()==3 and !refElement.type(localKey.subEntity(), localKey.codim\n+()).isTriangle())\n+256 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids with k==3 is\n+only implemented if the grid is a simplex grid\");\n+257\n+258 *it = {{ _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ + ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex\n+(element,localKey.subEntity(),localKey.codim())) }};\n+259 continue;\n+260 }\n+261 }\n+262\n+263 if (dofDim==3)\n+264 {\n+265 if (dim==3) // element dof -- any local numbering is fine\n+266 {\n+267 if (element.type().isTetrahedron())\n+268 {\n+269 *it = {{ _\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(3)*(\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+270 continue;\n+271 }\n+272 else if (element.type().isHexahedron())\n+273 {\n+274 *it = {{ _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(3)*(\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+275 continue;\n+276 }\n+277 else if (element.type().isPrism())\n+278 {\n+279 *it = {{ _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm()*((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex\n+(element,0,0)) + localKey.index() }};\n+280 continue;\n+281 }\n+282 else if (element.type().isPyramid())\n+283 {\n+284 *it = {{ _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd()*(\n+(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+285 continue;\n+286 }\n+287 else\n+288 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedra,\n+hexahedra, prisms, or pyramids\");\n+289 } else\n+290 DUNE_THROW(Dune::NotImplemented, \"Grids of dimension larger than 3 are no\n+supported\");\n+291 }\n+292 DUNE_THROW(Dune::NotImplemented, \"Grid contains elements not supported for\n+the LagrangeBasis\");\n+293 }\n+294 return it;\n+295 }\n+296\n+_\b2_\b9_\b8 unsigned int _\bo_\br_\bd_\be_\br() const\n+299 {\n+300 return (useDynamicOrder) ? _\bo_\br_\bd_\be_\br_\b_ : k;\n+301 }\n+302\n+303protected:\n+_\b3_\b0_\b4 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+305\n+306 // Run-time order, only valid if k<0\n+_\b3_\b0_\b7 unsigned int _\bo_\br_\bd_\be_\br_\b_;\n+308\n+_\b3_\b1_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(std::size_t simplexDim) const\n+311 {\n+312 return useDynamicOrder ? _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_[simplexDim] :\n+_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(simplexDim);\n+313 }\n+314\n+_\b3_\b1_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(std::size_t cubeDim) const\n+317 {\n+318 return useDynamicOrder ? _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_[cubeDim] : _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be\n+(cubeDim);\n+319 }\n+320\n+_\b3_\b2_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() const\n+322 {\n+323 return useDynamicOrder ? _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_ : _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm();\n+324 }\n+325\n+_\b3_\b2_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd() const\n+327 {\n+328 return useDynamicOrder ? _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd_\b_ : _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd();\n+329 }\n+330\n+_\b3_\b3_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(std::size_t simplexDim) const\n+333 {\n+334 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::\n+size_t(_\bo_\br_\bd_\be_\br()-1),simplexDim);\n+335 }\n+336\n+_\b3_\b3_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(std::size_t cubeDim) const\n+339 {\n+340 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(_\bo_\br_\bd_\be_\br()-1,\n+cubeDim);\n+341 }\n+342\n+_\b3_\b4_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() const\n+344 {\n+345 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == 3 ? 1 : 0) : (_\bo_\br_\bd_\be_\br()-1)*(_\bo_\br_\bd_\be_\br()-1)*(_\bo_\br_\bd_\be_\br\n+()-2)/2;\n+346 }\n+347\n+_\b3_\b4_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd() const\n+349 {\n+350 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == 3 ? 1 : 0) : (_\bo_\br_\bd_\be_\br()-2)*(_\bo_\br_\bd_\be_\br()-1)*(2*_\bo_\br_\bd_\be_\br\n+()-3)/6;\n+351 }\n+352\n+353 // When the order is given at run-time, the following numbers are pre-\n+computed:\n+_\b3_\b5_\b4 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_;\n+_\b3_\b5_\b5 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_;\n+_\b3_\b5_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_;\n+_\b3_\b5_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd_\b_;\n+358\n+_\b3_\b5_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b6_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b6_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b6_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b6_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b6_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b6_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+367\n+368};\n+369\n+370\n+371\n+372template\n+_\b3_\b7_\b3class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be :\n+374 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+375{\n+376 // Stores LocalFiniteElement implementations with run-time order as a\n+function of GeometryType\n+377 template\n+378 class LagrangeRunTimeLFECache\n+379 {\n+380 public:\n+381 using FiniteElementType =\n+LagrangeLocalFiniteElement;\n+382\n+383 const FiniteElementType& get(GeometryType type)\n+384 {\n+385 auto i = data_.find(type);\n+386 if (i==data_.end())\n+387 i = data_.emplace(type,FiniteElementType(type,order_)).first;\n+388 return (*i).second;\n+389 }\n+390\n+391 std::map data_;\n+392 unsigned int order_;\n+393 };\n+394\n+395 static constexpr int dim = GV::dimension;\n+396 static constexpr bool useDynamicOrder = (k<0);\n+397\n+398 using FiniteElementCache = std::conditional_t<(useDynamicOrder),\n+399 LagrangeRunTimeLFECache,\n+400 LagrangeLocalFiniteElementCache\n+401 >;\n+402\n+403public:\n+404\n+_\b4_\b0_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b4_\b0_\b6 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b4_\b0_\b7 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = typename FiniteElementCache::FiniteElementType;\n+408\n+_\b4_\b1_\b0 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be() :\n+411 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+412 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n+413 {}\n+414\n+_\b4_\b1_\b6 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be(unsigned int _\bo_\br_\bd_\be_\br) :\n+417 _\bo_\br_\bd_\be_\br_\b_(_\bo_\br_\bd_\be_\br),\n+418 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+419 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n+420 {\n+421 // Only the cache for the run-time-order case (i.e., k<0), has the 'order_'\n+member\n+422 if constexpr (useDynamicOrder)\n+423 _\bc_\ba_\bc_\bh_\be_\b_.order_ = _\bo_\br_\bd_\be_\br;\n+424 }\n+425\n+_\b4_\b2_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+428 {\n+429 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+430 }\n+431\n+_\b4_\b3_\b6 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n+437 {\n+438 return *_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+439 }\n+440\n+_\b4_\b4_\b2 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+443 {\n+444 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+445 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_ = &(_\bc_\ba_\bc_\bh_\be_\b_.get(_\be_\bl_\be_\bm_\be_\bn_\bt_\b_->type()));\n+446 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_->size());\n+447 }\n+448\n+449protected:\n+450\n+_\b4_\b5_\b1 unsigned int _\bo_\br_\bd_\be_\br() const\n+452 {\n+453 return (useDynamicOrder) ? _\bo_\br_\bd_\be_\br_\b_ : k;\n+454 }\n+455\n+456 // Run-time order, only valid if k<0\n+_\b4_\b5_\b7 unsigned int _\bo_\br_\bd_\be_\br_\b_;\n+458\n+_\b4_\b5_\b9 FiniteElementCache _\bc_\ba_\bc_\bh_\be_\b_;\n+_\b4_\b6_\b0 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt* _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b4_\b6_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+462};\n+463\n+464\n+465\n+466namespace BasisFactory {\n+467\n+476template\n+_\b4_\b7_\b7auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be()\n+478{\n+479 return [](const auto& gridView) {\n+480 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k, R>(gridView);\n+481 };\n+482}\n+483\n+491template\n+_\b4_\b9_\b2auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be(int order)\n+493{\n+494 return [=](const auto& gridView) {\n+495 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, -1, R>(gridView,\n+order);\n+496 };\n+497}\n+498\n+499} // end namespace BasisFactory\n+500\n+501\n+502\n+526template\n+_\b5_\b2_\b7using _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b> >;\n+528\n+529\n+530\n+531\n+532\n+533} // end namespace Functions\n+534} // end namespace Dune\n+535\n+536\n+537#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n _\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be\n-auto refinedLagrange()\n-Create a pre-basis factory that can create a RefinedLagrange pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:202\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be\n+auto lagrange()\n+Create a pre-basis factory that can create a Lagrange pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:477\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n Global basis for given pre-basis.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn\n-A generic MixIn class for PreBasis with flat indices computed from a mapper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismappermixin.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n-void setSize(const size_type size)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:120\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:375\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n+LagrangeNode(unsigned int order)\n+Constructor with a run-time order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:416\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bo_\br_\bd_\be_\br\n+unsigned int order() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:451\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n const FiniteElement & finiteElement() const\n Return the LocalFiniteElement for the element we are bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:164\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:436\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n const Element * element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:187\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:461\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return current element, throw if unbound.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:427\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bc_\ba_\bc_\bh_\be_\b_\n+FiniteElementCache cache_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:459\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename FiniteElementCache::FiniteElementType FiniteElement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:407\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n void bind(const Element &e)\n-Bind the node to the element e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:170\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n-const FiniteElement finiteElement_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:186\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bo_\br_\bd_\be_\br\n-static constexpr unsigned int order()\n-Polynomial order used in the local Lagrange finite-elements in subdomains of\n-the element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:180\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+Bind to element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:442\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n typename GV::template Codim< 0 >::Entity Element\n-Type of the element in the GridView.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-std::conditional_t<(k==0), Dune::RefinedP0LocalFiniteElement< typename GV::\n-ctype, R, dim >, Dune::RefinedP1LocalFiniteElement< typename GV::ctype, R, dim\n-> > FiniteElement\n-Type of the local finite-element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:133\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n-RefinedLagrangeNode()\n-The default constructor initializes all members to their default.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:144\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return current element. The behavior is undefined if the node is not bound to\n-any element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:153\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-A pre-basis for a refined Lagrange bases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:46\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br\n-static constexpr unsigned int order()\n-Polynomial order used in the local Lagrange finite-elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:109\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:97\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:406\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n+const FiniteElement * finiteElement_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:460\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bo_\br_\bd_\be_\br_\b_\n+unsigned int order_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:457\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:405\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n+LagrangeNode()\n+Constructor without order (uses the compile-time value)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:410\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+A pre-basis for a PQ-lagrange bases with given order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:61\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm\n+size_type dofsPerPrism() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:321\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:338\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:332\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm\n+size_type computeDofsPerPrism() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:343\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br_\b_\n+unsigned int order_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:307\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+size_type edgeOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:360\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_\n+std::array< size_type, dim+1 > dofsPerSimplex_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:354\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n+It indices(const Node &node, It it) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:180\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+size_type vertexOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:359\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:310\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:71\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+size_type pyramidOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:364\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+size_type prismOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:365\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+size_type tetrahedronOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:363\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+void initializeIndices()\n+Initialize the global indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:98\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd\n+size_type computeDofsPerPyramid() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:348\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+LagrangePreBasis(const GridView &gv, unsigned int order)\n+Constructor for a given grid view object and run-time order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:82\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd_\b_\n+size_type dofsPerPyramid_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:357\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:142\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+LagrangePreBasis(const GridView &gv)\n+Constructor for a given grid view object with compile-time order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:77\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:128\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n GV GridView\n The grid view that the FE basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bd_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-RefinedLagrangePreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn refinedlagrangebasis.hh:86\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+size_type quadrilateralOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:362\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n+GridView gridView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:304\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:136\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br\n+unsigned int order() const\n+Polynomial order used in the local Lagrange finite-elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:298\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_\n+std::array< size_type, dim+1 > dofsPerCube_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:355\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:172\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_\n+size_type dofsPerPrism_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:356\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:316\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+size_type triangleOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:361\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+size_type hexahedronOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:366\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd\n+size_type dofsPerPyramid() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:326\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+A generic MixIn class for PreBasis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n+void setSize(const size_type size)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: sizeinfo.hh File Reference\n+dune-functions: defaultlocalview.hh File Reference\n \n \n \n \n \n \n \n@@ -71,41 +71,41 @@\n \n
    \n \n
    \n \n-
    sizeinfo.hh File Reference
    \n+Namespaces
    \n+
    defaultlocalview.hh File Reference
    \n \n
    \n-
    #include <array>
    \n+
    #include <tuple>
    \n+#include <optional>
    \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
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::SizeInfo< B >
     A class encapsulating size information. More...
    class  Dune::Functions::DefaultLocalView< GB >
     The restriction of a finite element basis to a single element. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\n-\n-\n-\n

    \n-Functions

    template<class Basis >
    SizeInfo< Basis > Dune::Functions::sizeInfo (const Basis &basis)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,29 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-sizeinfo.hh File Reference\n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+defaultlocalview.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b<_\b _\bB_\b _\b>\n-\u00a0 A class encapsulating size information. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b<_\b _\bG_\bB_\b _\b>\n+\u00a0 The restriction of a finite element basis to a single element. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo< Basis >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bn_\bf_\bo (const Basis &basis)\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: sizeinfo.hh Source File\n+dune-functions: defaultlocalview.hh Source File\n \n \n \n \n \n \n \n@@ -74,104 +74,212 @@\n \n \n
    \n
    \n-
    sizeinfo.hh
    \n+
    defaultlocalview.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n
    9
    \n-
    10#warning The header dune/functions/functionspacebases/sizeinfo.hh is deprecated and will be removed after release 2.10.
    \n-
    11
    \n-
    12#include <array>
    \n+
    10
    \n+
    11#include <tuple>
    \n+
    12#include <optional>
    \n
    13
    \n-
    14namespace Dune {
    \n-
    15namespace Functions {
    \n-
    16
    \n+
    14#include <dune/common/concept.hh>
    \n+
    15#include <dune/common/hybridutilities.hh>
    \n+
    16#include <dune/common/reservedvector.hh>
    \n
    17
    \n-
    18
    \n-
    31template<class B>
    \n-
    \n-
    32class
    \n-
    33[[deprecated("SizeInfo is deprecated and will be removed after release 2.10.")]]
    \n-\n-
    35{
    \n-
    36public:
    \n-
    37 using Basis = B;
    \n-
    38 using size_type = typename Basis::size_type;
    \n-
    39 using SizePrefix = typename Basis::SizePrefix;
    \n+\n+\n+\n+
    21
    \n+
    22
    \n+
    23
    \n+
    24namespace Dune {
    \n+
    25namespace Functions {
    \n+
    26
    \n+
    27
    \n+
    28
    \n+
    30template<class GB>
    \n+
    \n+\n+
    32{
    \n+
    33public:
    \n+
    34
    \n+
    36 using GlobalBasis = GB;
    \n+
    37
    \n+
    39 using GridView = typename GlobalBasis::GridView;
    \n
    40
    \n-
    \n-
    44 SizeInfo(const Basis& basis) :
    \n-
    45 basis_(&basis)
    \n-
    46 {}
    \n-
    \n-
    47
    \n-
    \n-
    51 size_type operator()(const SizePrefix& prefix) const
    \n-
    52 {
    \n-
    53 return basis_->size(prefix);
    \n-
    54 }
    \n-
    \n-
    55
    \n-
    \n-
    62 size_type size(const SizePrefix& prefix) const
    \n-
    63 {
    \n-
    64 return basis_->size(prefix);
    \n-
    65 }
    \n-
    \n-
    66
    \n-
    \n-
    67 operator size_type () const
    \n-
    68 {
    \n-
    69 return basis_->dimension();
    \n-
    70 }
    \n-
    \n-
    71
    \n-
    72protected:
    \n-
    73
    \n-
    74 const Basis* basis_;
    \n-
    75};
    \n-
    \n-
    76
    \n-
    77
    \n-
    81template<class Basis>
    \n-
    \n-
    82SizeInfo<Basis> sizeInfo(const Basis& basis)
    \n-
    83{
    \n-
    84 return SizeInfo<Basis>(basis);
    \n-
    85}
    \n-
    \n-
    86
    \n-
    87
    \n-
    88
    \n-
    89} // end namespace Functions
    \n-
    90} // end namespace Dune
    \n-
    91
    \n-
    92#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n+
    42 using Element = typename GridView::template Codim<0>::Entity;
    \n+
    43
    \n+
    45 using size_type = std::size_t;
    \n+
    46
    \n+
    48 using Tree = typename GlobalBasis::PreBasis::Node;
    \n+
    49
    \n+
    50protected:
    \n+
    51
    \n+
    52 using PreBasis = typename GlobalBasis::PreBasis;
    \n+
    53
    \n+
    54 // Type used to store the multi indices of the basis vectors.
    \n+
    55 // In contrast to MultiIndex this always has dynamic size.
    \n+
    56 // It's guaranteed, that you can always cast it to MultiIndex
    \n+\n+
    58 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),
    \n+\n+
    60 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;
    \n+
    61
    \n+
    62public:
    \n+
    63
    \n+
    65 using MultiIndex =
    \n+
    66 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),
    \n+\n+
    68 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;
    \n+
    69
    \n+
    70
    \n+
    \n+\n+\n+
    74 tree_(globalBasis_->preBasis().makeNode())
    \n+
    75 {
    \n+
    76 static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to DefaultLocalView does not model the BasisNode concept.");
    \n+\n+
    78 }
    \n+
    \n+
    79
    \n+
    \n+
    85 void bind(const Element& e)
    \n+
    86 {
    \n+
    87 element_ = e;
    \n+\n+
    89 indices_.resize(size());
    \n+
    90 globalBasis_->preBasis().indices(tree_, indices_.begin());
    \n+
    91 }
    \n+
    \n+
    92
    \n+
    \n+
    95 bool bound() const
    \n+
    96 {
    \n+
    97 return static_cast<bool>(element_);
    \n+
    98 }
    \n+
    \n+
    99
    \n+
    \n+
    104 const Element& element() const
    \n+
    105 {
    \n+
    106 return *element_;
    \n+
    107 }
    \n+
    \n+
    108
    \n+
    \n+
    113 void unbind()
    \n+
    114 {
    \n+
    115 element_.reset();
    \n+
    116 }
    \n+
    \n+
    117
    \n+
    \n+
    122 const Tree& tree() const
    \n+
    123 {
    \n+
    124 return tree_;
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    \n+\n+
    130 {
    \n+
    131 return tree_.size();
    \n+
    132 }
    \n+
    \n+
    133
    \n+
    \n+\n+
    141 {
    \n+
    142 return globalBasis_->preBasis().maxNodeSize();
    \n+
    143 }
    \n+
    \n+
    144
    \n+
    \n+
    146 const MultiIndex& index(size_type i) const
    \n+
    147 {
    \n+
    148 return indices_[i];
    \n+
    149 }
    \n+
    \n+
    150
    \n+
    \n+\n+
    154 {
    \n+
    155 return *globalBasis_;
    \n+
    156 }
    \n+
    \n+
    157
    \n+
    \n+\n+
    159 {
    \n+
    160 return *this;
    \n+
    161 }
    \n+
    \n+
    162
    \n+
    163protected:
    \n+\n+
    165 std::optional<Element> element_;
    \n+\n+
    167 std::vector<MultiIndexStorage> indices_;
    \n+
    168};
    \n+
    \n+
    169
    \n+
    170
    \n+
    171
    \n+
    172} // end namespace Functions
    \n+
    173} // end namespace Dune
    \n+
    174
    \n+
    175
    \n+
    176
    \n+
    177#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n+\n+\n
    Definition polynomial.hh:17
    \n-
    SizeInfo< Basis > sizeInfo(const Basis &basis)
    Definition sizeinfo.hh:82
    \n-
    A class encapsulating size information.
    Definition sizeinfo.hh:35
    \n-
    typename Basis::SizePrefix SizePrefix
    Definition sizeinfo.hh:39
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition sizeinfo.hh:62
    \n-
    size_type operator()(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition sizeinfo.hh:51
    \n-
    typename Basis::size_type size_type
    Definition sizeinfo.hh:38
    \n-
    B Basis
    Definition sizeinfo.hh:37
    \n-
    SizeInfo(const Basis &basis)
    Construct from basis.
    Definition sizeinfo.hh:44
    \n-
    const Basis * basis_
    Definition sizeinfo.hh:74
    \n+
    void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)
    Definition nodes.hh:286
    \n+
    void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)
    Definition nodes.hh:293
    \n+
    A statically sized MultiIndex type.
    Definition multiindex.hh:29
    \n+
    A dynamically sized array-like class with overflow.
    Definition overflowarray.hh:49
    \n+
    The restriction of a finite element basis to a single element.
    Definition defaultlocalview.hh:32
    \n+
    typename GlobalBasis::PreBasis PreBasis
    Definition defaultlocalview.hh:52
    \n+
    void unbind()
    Unbind from the current element.
    Definition defaultlocalview.hh:113
    \n+
    bool bound() const
    Return if the view is bound to a grid element.
    Definition defaultlocalview.hh:95
    \n+
    typename GlobalBasis::GridView GridView
    The grid view the global FE basis lives on.
    Definition defaultlocalview.hh:39
    \n+
    const MultiIndex & index(size_type i) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition defaultlocalview.hh:146
    \n+
    std::optional< Element > element_
    Definition defaultlocalview.hh:165
    \n+
    typename GridView::template Codim< 0 >::Entity Element
    Type of the grid element we are bound to.
    Definition defaultlocalview.hh:42
    \n+
    const Tree & tree() const
    Return the local ansatz tree associated to the bound entity.
    Definition defaultlocalview.hh:122
    \n+
    void bind(const Element &e)
    Bind the view to a grid element.
    Definition defaultlocalview.hh:85
    \n+
    const Element & element() const
    Return the grid element that the view is bound to.
    Definition defaultlocalview.hh:104
    \n+
    size_type size() const
    Total number of degrees of freedom on this element.
    Definition defaultlocalview.hh:129
    \n+
    GB GlobalBasis
    The global FE basis that this is a view on.
    Definition defaultlocalview.hh:36
    \n+
    Tree tree_
    Definition defaultlocalview.hh:166
    \n+
    size_type maxSize() const
    Maximum local size for any element on the GridView.
    Definition defaultlocalview.hh:140
    \n+
    std::size_t size_type
    The type used for sizes.
    Definition defaultlocalview.hh:45
    \n+
    const DefaultLocalView & rootLocalView() const
    Definition defaultlocalview.hh:158
    \n+
    std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), OverflowArray< StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, PreBasis::multiIndexBufferSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndexStorage
    Definition defaultlocalview.hh:60
    \n+
    std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex
    Type used for global numbering of the basis vectors.
    Definition defaultlocalview.hh:68
    \n+
    std::vector< MultiIndexStorage > indices_
    Definition defaultlocalview.hh:167
    \n+
    typename GlobalBasis::PreBasis::Node Tree
    Tree of local finite elements / local shape function sets.
    Definition defaultlocalview.hh:48
    \n+
    DefaultLocalView(const GlobalBasis &globalBasis)
    Construct local view for a given global finite element basis.
    Definition defaultlocalview.hh:72
    \n+
    const GlobalBasis * globalBasis_
    Definition defaultlocalview.hh:164
    \n+
    const GlobalBasis & globalBasis() const
    Return the global basis that we are a view on.
    Definition defaultlocalview.hh:153
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,112 +1,267 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-sizeinfo.hh\n+defaultlocalview.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n 9\n-10#warning The header dune/functions/functionspacebases/sizeinfo.hh is\n-deprecated and will be removed after release 2.10.\n-11\n-12#include \n+10\n+11#include \n+12#include \n 13\n-14namespace _\bD_\bu_\bn_\be {\n-15namespace Functions {\n-16\n+14#include \n+15#include \n+16#include \n 17\n-18\n-31template\n-_\b3_\b2class\n-33[[deprecated(\"SizeInfo is deprecated and will be removed after release\n-2.10.\")]]\n-34_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo\n-35{\n-36public:\n-_\b3_\b7 using _\bB_\ba_\bs_\bi_\bs = B;\n-_\b3_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = typename Basis::size_type;\n-_\b3_\b9 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = typename Basis::SizePrefix;\n+18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\by_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+21\n+22\n+23\n+24namespace _\bD_\bu_\bn_\be {\n+25namespace Functions {\n+26\n+27\n+28\n+30template\n+_\b3_\b1class _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+32{\n+33public:\n+34\n+_\b3_\b6 using _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs = GB;\n+37\n+_\b3_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename GlobalBasis::GridView;\n 40\n-_\b4_\b4 _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo(const _\bB_\ba_\bs_\bi_\bs& basis) :\n-45 basis_(&basis)\n-46 {}\n-47\n-_\b5_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx& prefix) const\n-52 {\n-53 return basis_->size(prefix);\n-54 }\n-55\n-_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx& prefix) const\n-63 {\n-64 return basis_->size(prefix);\n-65 }\n-66\n-_\b6_\b7 operator _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be () const\n-68 {\n-69 return basis_->dimension();\n-70 }\n-71\n-72protected:\n-73\n-_\b7_\b4 const _\bB_\ba_\bs_\bi_\bs* _\bb_\ba_\bs_\bi_\bs_\b_;\n-75};\n-76\n-77\n-81template\n-_\b8_\b2_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b<_\bB_\ba_\bs_\bi_\bs_\b> _\bs_\bi_\bz_\be_\bI_\bn_\bf_\bo(const Basis& basis)\n-83{\n-84 return _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b<_\bB_\ba_\bs_\bi_\bs_\b>(basis);\n-85}\n-86\n-87\n-88\n-89} // end namespace Functions\n-90} // end namespace Dune\n-91\n-92#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n+_\b4_\b2 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GridView::template Codim<0>::Entity;\n+43\n+_\b4_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+46\n+_\b4_\b8 using _\bT_\br_\be_\be = typename GlobalBasis::PreBasis::Node;\n+49\n+50protected:\n+51\n+_\b5_\b2 using _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = typename GlobalBasis::PreBasis;\n+53\n+54 // Type used to store the multi indices of the basis vectors.\n+55 // In contrast to MultiIndex this always has dynamic size.\n+56 // It's guaranteed, that you can always cast it to MultiIndex\n+_\b5_\b7 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bt_\bo_\br_\ba_\bg_\be =\n+58 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n+maxMultiIndexSize),\n+59 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by<_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be_\b>,\n+PreBasis::multiIndexBufferSize>,\n+60 Dune::ReservedVector>;\n+61\n+62public:\n+63\n+_\b6_\b5 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx =\n+66 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n+maxMultiIndexSize),\n+67 _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be_\b>,\n+68 Dune::ReservedVector>;\n+69\n+70\n+_\b7_\b2 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs) :\n+73 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(&_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs),\n+74 _\bt_\br_\be_\be_\b_(_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().makeNode())\n+75 {\n+76 static_assert(models, _\bT_\br_\be_\be>(), \"Tree type\n+passed to DefaultLocalView does not model the BasisNode concept.\");\n+77 _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be(_\bt_\br_\be_\be_\b_);\n+78 }\n+79\n+_\b8_\b5 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+86 {\n+87 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = e;\n+88 _\bb_\bi_\bn_\bd_\bT_\br_\be_\be(_\bt_\br_\be_\be_\b_, *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n+89 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.resize(_\bs_\bi_\bz_\be());\n+90 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().indices(_\bt_\br_\be_\be_\b_, _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.begin());\n+91 }\n+92\n+_\b9_\b5 bool _\bb_\bo_\bu_\bn_\bd() const\n+96 {\n+97 return static_cast(_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n+98 }\n+99\n+_\b1_\b0_\b4 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+105 {\n+106 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+107 }\n+108\n+_\b1_\b1_\b3 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+114 {\n+115 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_.reset();\n+116 }\n+117\n+_\b1_\b2_\b2 const _\bT_\br_\be_\be& _\bt_\br_\be_\be() const\n+123 {\n+124 return _\bt_\br_\be_\be_\b_;\n+125 }\n+126\n+_\b1_\b2_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+130 {\n+131 return _\bt_\br_\be_\be_\b_.size();\n+132 }\n+133\n+_\b1_\b4_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bS_\bi_\bz_\be() const\n+141 {\n+142 return _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().maxNodeSize();\n+143 }\n+144\n+_\b1_\b4_\b6 const _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx& _\bi_\bn_\bd_\be_\bx(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n+147 {\n+148 return _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_[i];\n+149 }\n+150\n+_\b1_\b5_\b3 const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs() const\n+154 {\n+155 return *_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n+156 }\n+157\n+_\b1_\b5_\b8 const _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw& _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n+159 {\n+160 return *this;\n+161 }\n+162\n+163protected:\n+_\b1_\b6_\b4 const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs* _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n+_\b1_\b6_\b5 std::optional _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b1_\b6_\b6 _\bT_\br_\be_\be _\bt_\br_\be_\be_\b_;\n+_\b1_\b6_\b7 std::vector _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n+168};\n+169\n+170\n+171\n+172} // end namespace Functions\n+173} // end namespace Dune\n+174\n+175\n+176\n+177#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\by_\b._\bh_\bh\n+_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bi_\bz_\be_\bI_\bn_\bf_\bo\n-SizeInfo< Basis > sizeInfo(const Basis &basis)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:82\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo\n-A class encapsulating size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:35\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx\n-typename Basis::SizePrefix SizePrefix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:39\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size(const SizePrefix &prefix) const\n-Return number possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-size_type operator()(const SizePrefix &prefix) const\n-Return number possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:51\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-typename Basis::size_type size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:38\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bB_\ba_\bs_\bi_\bs\n-B Basis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:37\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo\n-SizeInfo(const Basis &basis)\n-Construct from basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:44\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bb_\ba_\bs_\bi_\bs_\b_\n-const Basis * basis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bb_\bi_\bn_\bd_\bT_\br_\be_\be\n+void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:286\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be\n+void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:293\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+A statically sized MultiIndex type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:29\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by\n+A dynamically sized array-like class with overflow.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:49\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+The restriction of a finite element basis to a single element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:32\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+typename GlobalBasis::PreBasis PreBasis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bu_\bn_\bb_\bi_\bn_\bd\n+void unbind()\n+Unbind from the current element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:113\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bo_\bu_\bn_\bd\n+bool bound() const\n+Return if the view is bound to a grid element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:95\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+typename GlobalBasis::GridView GridView\n+The grid view the global FE basis lives on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:39\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bi_\bn_\bd_\be_\bx\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:146\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n+std::optional< Element > element_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename GridView::template Codim< 0 >::Entity Element\n+Type of the grid element we are bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:42\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bt_\br_\be_\be\n+const Tree & tree() const\n+Return the local ansatz tree associated to the bound entity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind the view to a grid element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:85\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return the grid element that the view is bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:104\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Total number of degrees of freedom on this element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:129\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+GB GlobalBasis\n+The global FE basis that this is a view on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bt_\br_\be_\be_\b_\n+Tree tree_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:166\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bm_\ba_\bx_\bS_\bi_\bz_\be\n+size_type maxSize() const\n+Maximum local size for any element on the GridView.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:140\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+The type used for sizes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:45\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+const DefaultLocalView & rootLocalView() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:158\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bt_\bo_\br_\ba_\bg_\be\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_\n+std::vector< MultiIndexStorage > indices_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:167\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bT_\br_\be_\be\n+typename GlobalBasis::PreBasis::Node Tree\n+Tree of local finite elements / local shape function sets.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+DefaultLocalView(const GlobalBasis &globalBasis)\n+Construct local view for a given global finite element basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:72\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_\n+const GlobalBasis * globalBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:164\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+const GlobalBasis & globalBasis() const\n+Return the global basis that we are a view on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:153\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: lagrangebasis.hh File Reference\n+dune-functions: transformedindexbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,64 +72,74 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    lagrangebasis.hh File Reference
    \n+
    transformedindexbasis.hh File Reference
    \n
    \n
    \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/lagrangelfecache.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n-#include <dune/functions/functionspacebases/leafprebasismixin.hh>
    \n+
    #include <tuple>
    \n+#include <utility>
    \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/functionspacebases/defaultglobalbasis.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::LagrangePreBasis< GV, k, R >
     A pre-basis for a PQ-lagrange bases with given order. More...
    class  Dune::Functions::Experimental::TransformedIndexPreBasis< RPB, T >
     A pre-basis transforming multi-indices. More...
     
    class  Dune::Functions::LagrangeNode< GV, k, R >
    class  Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation< IndexTransformation, SizeImplementation, ContainerDescriptorImplementation, minIS, maxIS >
     A generic implementation of a transformation. More...
     
    \n \n \n \n \n \n+\n+\n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::Experimental
     
    namespace  Dune::Functions::BasisFactory
     
    \n-\n-\n-\n-\n-\n+\n+\n

    \n-Typedefs

    template<typename GV , int k = -1, typename R = double>
    using Dune::Functions::LagrangeBasis = DefaultGlobalBasis< LagrangePreBasis< GV, k, R > >
     Nodal basis of a scalar k-th-order Lagrangean finite element space.
     
    namespace  Dune::Functions::BasisFactory::Experimental
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<std::size_t k, typename R = double>
    auto Dune::Functions::BasisFactory::lagrange ()
     Create a pre-basis factory that can create a Lagrange pre-basis.
     
    template<typename R = double>
    auto Dune::Functions::BasisFactory::lagrange (int order)
     Create a pre-basis factory that can create a Lagrange pre-basis with a run-time order.
     
    template<class RPB , class T >
     Dune::Functions::Experimental::TransformedIndexPreBasis (RPB &&, T &&) -> TransformedIndexPreBasis< std::decay_t< RPB >, std::decay_t< T > >
     
    template<class RawPreBasisFactory , class Transformation >
    auto Dune::Functions::BasisFactory::Experimental::transformIndices (RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)
     Create a TransformedIndexPreBasisFactory.
     
    template<class IndexTransformation , class SizeImplementation , class ContainerDescriptorImplementation , std::size_t minIndexSize, std::size_t maxIndexSize>
    auto Dune::Functions::BasisFactory::Experimental::indexTransformation (IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, ContainerDescriptorImplementation &&containerDescriptorImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)
     A generic implementation of a transformation.
     
    template<class IndexTransformation , class SizeImplementation , std::size_t minIndexSize, std::size_t maxIndexSize>
    auto Dune::Functions::BasisFactory::Experimental::indexTransformation (IndexTransformation &&indexTrafo, SizeImplementation &&sizeImpl, Dune::index_constant< minIndexSize > minSize, Dune::index_constant< maxIndexSize > maxSize)
     Fallback implementation if no container descriptor argument is given.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,49 +1,74 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-lagrangebasis.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+transformedindexbasis.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b _\b>\n-\u00a0 A pre-basis for a PQ-lagrange bases with given order. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bR_\bP_\bB_\b,_\b _\bT_\b _\b>\n+\u00a0 A pre-basis transforming multi-indices. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:\n+ _\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b<_\b _\bI_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b,_\b _\bS_\bi_\bz_\be_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b,\n+ _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b,_\b _\bm_\bi_\bn_\bI_\bS_\b,_\b _\bm_\ba_\bx_\bI_\bS_\b _\b>\n+\u00a0 A generic implementation of a transformation. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl\n+\u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs<\n- GV, k, R > >\n-\u00a0 Nodal basis of a scalar k-th-order Lagrangean finite element space.\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n-\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be (int order)\n-\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis with a\n- run-time order.\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs (RPB &&, T &&) -\n+ > _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< std::decay_t< RPB >, std::decay_t< T > >\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+ (RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)\n+\u00a0 Create a TransformedIndexPreBasisFactory.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+ (IndexTransformation &&indexTransformation, SizeImplementation\n+ &&sizeImplementation, ContainerDescriptorImplementation\n+ &&containerDescriptorImplementation, Dune::index_constant< minIndexSize\n+ >, Dune::index_constant< maxIndexSize >)\n+\u00a0 A generic implementation of a transformation.\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+ (IndexTransformation &&indexTrafo, SizeImplementation &&sizeImpl, Dune::\n+ index_constant< minIndexSize > minSize, Dune::index_constant<\n+ maxIndexSize > maxSize)\n+\u00a0 Fallback implementation if no container descriptor argument is given.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: lagrangebasis.hh Source File\n+dune-functions: transformedindexbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,590 +74,360 @@\n \n \n
    \n
    \n-
    lagrangebasis.hh
    \n+
    transformedindexbasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n-
    11#include <dune/common/exceptions.hh>
    \n+
    10#include <tuple>
    \n+
    11#include <utility>
    \n
    12
    \n-
    13#include <dune/localfunctions/lagrange.hh>
    \n-
    14#include <dune/localfunctions/lagrange/equidistantpoints.hh>
    \n-
    15#include <dune/localfunctions/lagrange/lagrangelfecache.hh>
    \n-
    16
    \n-\n-\n-\n+
    13#include <dune/common/hybridutilities.hh>
    \n+
    14#include <dune/common/reservedvector.hh>
    \n+
    15#include <dune/common/typeutilities.hh>
    \n+
    16#include <dune/common/hybridutilities.hh>
    \n+
    17
    \n+
    18#include <dune/typetree/compositenode.hh>
    \n+
    19#include <dune/typetree/utility.hh>
    \n
    20
    \n-
    21
    \n-
    22namespace Dune {
    \n-
    23namespace Functions {
    \n-
    24
    \n-
    25// *****************************************************************************
    \n-
    26// This is the reusable part of the LagrangeBasis. It contains
    \n-
    27//
    \n-
    28// LagrangePreBasis
    \n-
    29// LagrangeNode
    \n-
    30//
    \n-
    31// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    32// state. These components do _not_ depend on the global basis and local view
    \n-
    33// and can be used without a global basis.
    \n+\n+\n+\n+\n+\n+\n+\n+
    28
    \n+
    29
    \n+
    30namespace Dune {
    \n+
    31namespace Functions {
    \n+
    \n+
    32namespace Experimental {
    \n+
    33
    \n
    34// *****************************************************************************
    \n-
    35
    \n-
    36template<typename GV, int k, typename R=double>
    \n-
    37class LagrangeNode;
    \n-
    38
    \n-
    39template<typename GV, int k, typename R=double>
    \n-
    40class LagrangePreBasis;
    \n-
    41
    \n-
    42
    \n-
    43
    \n-
    58template<typename GV, int k, typename R>
    \n-
    \n-\n-
    60 public LeafPreBasisMixin< LagrangePreBasis<GV,k,R> >
    \n-
    61{
    \n-
    62 static const int dim = GV::dimension;
    \n-
    63 static const bool useDynamicOrder = (k<0);
    \n-
    64
    \n-
    65public:
    \n+
    35// *****************************************************************************
    \n+
    36
    \n+
    53template<class RPB, class T>
    \n+
    \n+\n+
    55{
    \n+
    56 using Transformation = T;
    \n+
    57
    \n+\n+
    59
    \n+
    60public:
    \n+
    61
    \n+
    62 using RawPreBasis = RPB;
    \n+
    63
    \n+
    65 using GridView = typename RawPreBasis::GridView;
    \n
    66
    \n-
    68 using GridView = GV;
    \n+
    68 using size_type = std::size_t;
    \n
    69
    \n-
    71 using size_type = std::size_t;
    \n+
    71 using Node = typename RawPreBasis::Node;
    \n
    72
    \n-\n-
    75
    \n-
    \n-\n-
    78 : LagrangePreBasis(gv, std::numeric_limits<unsigned int>::max())
    \n-
    79 {}
    \n-
    \n-
    80
    \n-
    \n-
    82 LagrangePreBasis(const GridView& gv, unsigned int order) :
    \n-\n-
    84 {
    \n-
    85 if (!useDynamicOrder && order!=std::numeric_limits<unsigned int>::max())
    \n-
    86 DUNE_THROW(RangeError, "Template argument k has to be -1 when supplying a run-time order!");
    \n+
    73 static constexpr size_type maxMultiIndexSize = Transformation::maxIndexSize;
    \n+
    74 static constexpr size_type minMultiIndexSize = Transformation::minIndexSize;
    \n+
    75 static constexpr size_type multiIndexBufferSize = std::max(RawPreBasis::multiIndexBufferSize, maxMultiIndexSize);
    \n+
    76
    \n+
    82 template<class RPB_R, class T_R>
    \n+
    \n+
    83 TransformedIndexPreBasis(RPB_R&& rawPreBasis, T_R&& transformation) :
    \n+
    84 rawPreBasis_(std::forward<RPB_R>(rawPreBasis)),
    \n+
    85 transformation_(std::forward<T_R>(transformation))
    \n+
    86 {}
    \n+
    \n
    87
    \n-
    88 for (int i=0; i<=dim; i++)
    \n-
    89 {
    \n-\n-\n-
    92 }
    \n-\n-\n-
    95 }
    \n-
    \n-
    96
    \n-
    \n-\n-
    99 {
    \n-
    100 vertexOffset_ = 0;
    \n-\n-
    102
    \n-
    103 if (dim>=2)
    \n-
    104 {
    \n-\n-
    106
    \n-
    107 quadrilateralOffset_ = triangleOffset_ + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle));
    \n-
    108 }
    \n-
    109
    \n-
    110 if (dim==3) {
    \n-
    111 tetrahedronOffset_ = quadrilateralOffset_ + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));
    \n-
    112
    \n-
    113 prismOffset_ = tetrahedronOffset_ + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::tetrahedron));
    \n-
    114
    \n-
    115 hexahedronOffset_ = prismOffset_ + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism));
    \n-
    116
    \n-
    117 pyramidOffset_ = hexahedronOffset_ + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::hexahedron));
    \n-
    118 }
    \n+
    \n+\n+
    90 {
    \n+
    91 rawPreBasis_.initializeIndices();
    \n+
    92 }
    \n+
    \n+
    93
    \n+
    \n+
    95 const GridView& gridView() const
    \n+
    96 {
    \n+
    97 return rawPreBasis_.gridView();
    \n+
    98 }
    \n+
    \n+
    99
    \n+
    \n+
    101 void update(const GridView& gv)
    \n+
    102 {
    \n+
    103 rawPreBasis_.update(gv);
    \n+
    104 }
    \n+
    \n+
    105
    \n+
    \n+\n+
    117 {
    \n+
    118 return rawPreBasis_.makeNode();
    \n
    119 }
    \n
    \n
    120
    \n
    \n-
    122 const GridView& gridView() const
    \n+\n
    123 {
    \n-
    124 return gridView_;
    \n+
    124 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n
    125 }
    \n
    \n
    126
    \n-
    \n-
    128 void update (const GridView& gv)
    \n-
    129 {
    \n-
    130 gridView_ = gv;
    \n-
    131 }
    \n-
    \n-
    132
    \n-
    \n-\n-
    137 {
    \n-
    138 return Node{order_};
    \n-
    139 }
    \n-
    \n-
    140
    \n-
    \n-\n-
    143 {
    \n-
    144 switch (dim)
    \n-
    145 {
    \n-
    146 case 1:
    \n-
    147 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n-
    148 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1));
    \n-
    149 case 2:
    \n-
    150 {
    \n-
    151 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n-
    152 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))
    \n-
    153 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle))
    \n-
    154 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));
    \n-
    155 }
    \n-
    156 case 3:
    \n-
    157 {
    \n-
    158 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n-
    159 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))
    \n-
    160 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle))
    \n-
    161 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral))
    \n-
    162 + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::tetrahedron))
    \n-
    163 + dofsPerPyramid() * ((size_type)gridView_.size(Dune::GeometryTypes::pyramid))
    \n-
    164 + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism))
    \n-
    165 + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::hexahedron));
    \n-
    166 }
    \n-
    167 }
    \n-
    168 DUNE_THROW(Dune::NotImplemented, "No size method for " << dim << "d grids available yet!");
    \n-
    169 }
    \n-
    \n-
    170
    \n-
    \n-\n-
    173 {
    \n-
    174 // That cast to unsigned int is necessary because GV::dimension is an enum,
    \n-
    175 // which is not recognized by the power method as an integer type...
    \n-
    176 return power(order()+1, (unsigned int)GV::dimension);
    \n-
    177 }
    \n-
    \n-
    178
    \n-
    179 template<typename It>
    \n-
    \n-
    180 It indices(const Node& node, It it) const
    \n-
    181 {
    \n-
    182 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it, ++i)
    \n-
    183 {
    \n-
    184 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    185 const auto& gridIndexSet = gridView().indexSet();
    \n-
    186 const auto& element = node.element();
    \n+
    128 template<class SizePrefix>
    \n+
    \n+
    129 size_type size(const SizePrefix& prefix) const
    \n+
    130 {
    \n+
    131 return transformation_.size(prefix, rawPreBasis_);
    \n+
    132 }
    \n+
    \n+
    133
    \n+
    \n+\n+
    136 {
    \n+
    137 return transformation_.containerDescriptor(rawPreBasis_);
    \n+
    138 }
    \n+
    \n+
    139
    \n+
    \n+\n+
    142 {
    \n+
    143 return transformation_.dimension(rawPreBasis_);
    \n+
    144 }
    \n+
    \n+
    145
    \n+
    \n+\n+
    148 {
    \n+
    149 return rawPreBasis_.maxNodeSize();
    \n+
    150 }
    \n+
    \n+
    151
    \n+
    \n+\n+
    153 {
    \n+
    154 return rawPreBasis_;
    \n+
    155 }
    \n+
    \n+
    156
    \n+
    \n+\n+
    158 {
    \n+
    159 return rawPreBasis_;
    \n+
    160 }
    \n+
    \n+
    161
    \n+
    162 template<class MultiIndex>
    \n+
    \n+
    163 void transformIndex(MultiIndex& multiIndex) const
    \n+
    164 {
    \n+
    165 transformation_.transformIndex(multiIndex, rawPreBasis_);
    \n+
    166 }
    \n+
    \n+
    167
    \n+
    168 template<typename It>
    \n+
    \n+
    169 It indices(const Node& node, It it) const
    \n+
    170 {
    \n+
    171 rawPreBasis().indices(node, it);
    \n+
    172 for(std::size_t i=0; i<node.size(); ++i)
    \n+
    173 {
    \n+
    174 transformIndex(*it);
    \n+
    175 ++it;
    \n+
    176 }
    \n+
    177 return it;
    \n+
    178 }
    \n+
    \n+
    179
    \n+
    180protected:
    \n+\n+
    182 Transformation transformation_;
    \n+
    183};
    \n+
    \n+
    184
    \n+
    185template<class RPB, class T>
    \n+\n
    187
    \n-
    188 // The dimension of the entity that the current dof is related to
    \n-
    189 auto dofDim = dim - localKey.codim();
    \n+
    188
    \n+
    189} // end namespace Experimental
    \n+
    \n
    190
    \n-
    191 // Test for a vertex dof
    \n-
    192 // The test for k==1 is redundant, but having it here allows the compiler to conclude
    \n-
    193 // at compile-time that the dofDim==0 case is the only one that will ever happen.
    \n-
    194 // This leads to measurable speed-up: see
    \n-
    195 // https://gitlab.dune-project.org/staging/dune-functions/issues/30
    \n-
    196 if (k==1 || dofDim==0) {
    \n-
    197 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity(),dim)) }};
    \n-
    198 continue;
    \n-
    199 }
    \n-
    200
    \n-
    201 if (dofDim==1)
    \n-
    202 { // edge dof
    \n-
    203 if (dim==1) // element dof -- any local numbering is fine
    \n-
    204 {
    \n-
    205 *it = {{ edgeOffset_
    \n-
    206 + dofsPerCube(1) * ((size_type)gridIndexSet.subIndex(element,0,0))
    \n-
    207 + localKey.index() }};
    \n-
    208 continue;
    \n-
    209 }
    \n-
    210 else
    \n-
    211 {
    \n-
    212 const auto refElement
    \n-
    213 = Dune::referenceElement<double,dim>(element.type());
    \n-
    214
    \n-
    215 // We have to reverse the numbering if the local element edge is
    \n-
    216 // not aligned with the global edge.
    \n-
    217 auto v0 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),0,dim),dim);
    \n-
    218 auto v1 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),1,dim),dim);
    \n-
    219 bool flip = (v0 > v1);
    \n-
    220 *it = {{ (flip)
    \n-\n-
    222 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))
    \n-
    223 + (dofsPerCube(1)-1)-localKey.index()
    \n-\n-
    225 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))
    \n-
    226 + localKey.index() }};
    \n-
    227 continue;
    \n-
    228 }
    \n-
    229 }
    \n-
    230
    \n-
    231 if (dofDim==2)
    \n-
    232 {
    \n-
    233 if (dim==2) // element dof -- any local numbering is fine
    \n-
    234 {
    \n-
    235 if (element.type().isTriangle())
    \n-
    236 {
    \n-
    237 *it = {{ triangleOffset_ + dofsPerSimplex(2)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    238 continue;
    \n-
    239 }
    \n-
    240 else if (element.type().isQuadrilateral())
    \n-
    241 {
    \n-
    242 *it = {{ quadrilateralOffset_ + dofsPerCube(2)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    243 continue;
    \n-
    244 }
    \n-
    245 else
    \n-
    246 DUNE_THROW(Dune::NotImplemented, "2d elements have to be triangles or quadrilaterals");
    \n-
    247 } else
    \n-
    248 {
    \n-
    249 const auto refElement
    \n-
    250 = Dune::referenceElement<double,dim>(element.type());
    \n-
    251
    \n-
    252 if (order()>3)
    \n-
    253 DUNE_THROW(Dune::NotImplemented, "LagrangeBasis for 3D grids is only implemented if k<=3");
    \n-
    254
    \n-
    255 if (order()==3 and !refElement.type(localKey.subEntity(), localKey.codim()).isTriangle())
    \n-
    256 DUNE_THROW(Dune::NotImplemented, "LagrangeBasis for 3D grids with k==3 is only implemented if the grid is a simplex grid");
    \n-
    257
    \n-
    258 *it = {{ triangleOffset_ + ((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim())) }};
    \n-
    259 continue;
    \n-
    260 }
    \n-
    261 }
    \n-
    262
    \n-
    263 if (dofDim==3)
    \n-
    264 {
    \n-
    265 if (dim==3) // element dof -- any local numbering is fine
    \n-
    266 {
    \n-
    267 if (element.type().isTetrahedron())
    \n-
    268 {
    \n-
    269 *it = {{ tetrahedronOffset_ + dofsPerSimplex(3)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    270 continue;
    \n-
    271 }
    \n-
    272 else if (element.type().isHexahedron())
    \n-
    273 {
    \n-
    274 *it = {{ hexahedronOffset_ + dofsPerCube(3)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    275 continue;
    \n-
    276 }
    \n-
    277 else if (element.type().isPrism())
    \n-
    278 {
    \n-
    279 *it = {{ prismOffset_ + dofsPerPrism()*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    280 continue;
    \n-
    281 }
    \n-
    282 else if (element.type().isPyramid())
    \n-
    283 {
    \n-
    284 *it = {{ pyramidOffset_ + dofsPerPyramid()*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    285 continue;
    \n-
    286 }
    \n-
    287 else
    \n-
    288 DUNE_THROW(Dune::NotImplemented, "3d elements have to be tetrahedra, hexahedra, prisms, or pyramids");
    \n-
    289 } else
    \n-
    290 DUNE_THROW(Dune::NotImplemented, "Grids of dimension larger than 3 are no supported");
    \n-
    291 }
    \n-
    292 DUNE_THROW(Dune::NotImplemented, "Grid contains elements not supported for the LagrangeBasis");
    \n-
    293 }
    \n-
    294 return it;
    \n-
    295 }
    \n-
    \n-
    296
    \n-
    \n-
    298 unsigned int order() const
    \n-
    299 {
    \n-
    300 return (useDynamicOrder) ? order_ : k;
    \n-
    301 }
    \n-
    \n-
    302
    \n-
    303protected:
    \n-\n-
    305
    \n-
    306 // Run-time order, only valid if k<0
    \n-
    307 unsigned int order_;
    \n-
    308
    \n-
    \n-
    310 size_type dofsPerSimplex(std::size_t simplexDim) const
    \n-
    311 {
    \n-
    312 return useDynamicOrder ? dofsPerSimplex_[simplexDim] : computeDofsPerSimplex(simplexDim);
    \n-
    313 }
    \n-
    \n-
    314
    \n-
    \n-
    316 size_type dofsPerCube(std::size_t cubeDim) const
    \n-
    317 {
    \n-
    318 return useDynamicOrder ? dofsPerCube_[cubeDim] : computeDofsPerCube(cubeDim);
    \n-
    319 }
    \n-
    \n-
    320
    \n-
    \n-\n-
    322 {
    \n-
    323 return useDynamicOrder ? dofsPerPrism_ : computeDofsPerPrism();
    \n-
    324 }
    \n-
    \n-
    325
    \n-
    \n-\n-
    327 {
    \n-
    328 return useDynamicOrder ? dofsPerPyramid_ : computeDofsPerPyramid();
    \n-
    329 }
    \n-
    \n-
    330
    \n-
    \n-
    332 size_type computeDofsPerSimplex(std::size_t simplexDim) const
    \n-
    333 {
    \n-
    334 return order() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::size_t(order()-1),simplexDim);
    \n-
    335 }
    \n-
    \n-
    336
    \n-
    \n-
    338 size_type computeDofsPerCube(std::size_t cubeDim) const
    \n-
    339 {
    \n-
    340 return order() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(order()-1, cubeDim);
    \n-
    341 }
    \n-
    \n-
    342
    \n-
    \n-\n-
    344 {
    \n-
    345 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-1)*(order()-1)*(order()-2)/2;
    \n-
    346 }
    \n-
    \n-
    347
    \n-
    \n-\n-
    349 {
    \n-
    350 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-2)*(order()-1)*(2*order()-3)/6;
    \n-
    351 }
    \n-
    \n-
    352
    \n-
    353 // When the order is given at run-time, the following numbers are pre-computed:
    \n-
    354 std::array<size_type,dim+1> dofsPerSimplex_;
    \n-
    355 std::array<size_type,dim+1> dofsPerCube_;
    \n-\n-\n-
    358
    \n-\n-\n-\n-\n-\n-\n-\n-\n-
    367
    \n-
    368};
    \n-
    \n-
    369
    \n-
    370
    \n-
    371
    \n-
    372template<typename GV, int k, typename R>
    \n-
    \n-\n-
    374 public LeafBasisNode
    \n-
    375{
    \n-
    376 // Stores LocalFiniteElement implementations with run-time order as a function of GeometryType
    \n-
    377 template<typename Domain, typename Range, int dim>
    \n-
    378 class LagrangeRunTimeLFECache
    \n-
    379 {
    \n-
    380 public:
    \n-
    381 using FiniteElementType = LagrangeLocalFiniteElement<EquidistantPointSet,dim,Domain,Range>;
    \n-
    382
    \n-
    383 const FiniteElementType& get(GeometryType type)
    \n-
    384 {
    \n-
    385 auto i = data_.find(type);
    \n-
    386 if (i==data_.end())
    \n-
    387 i = data_.emplace(type,FiniteElementType(type,order_)).first;
    \n-
    388 return (*i).second;
    \n-
    389 }
    \n-
    390
    \n-
    391 std::map<GeometryType, FiniteElementType> data_;
    \n-
    392 unsigned int order_;
    \n-
    393 };
    \n-
    394
    \n-
    395 static constexpr int dim = GV::dimension;
    \n-
    396 static constexpr bool useDynamicOrder = (k<0);
    \n-
    397
    \n-
    398 using FiniteElementCache = std::conditional_t<(useDynamicOrder),
    \n-
    399 LagrangeRunTimeLFECache<typename GV::ctype, R, dim>,
    \n-
    400 LagrangeLocalFiniteElementCache<typename GV::ctype, R, dim, std::max(k,0)>
    \n-
    401 >;
    \n-
    402
    \n-
    403public:
    \n-
    404
    \n-
    405 using size_type = std::size_t;
    \n-
    406 using Element = typename GV::template Codim<0>::Entity;
    \n-
    407 using FiniteElement = typename FiniteElementCache::FiniteElementType;
    \n-
    408
    \n-
    \n-\n-
    411 finiteElement_(nullptr),
    \n-
    412 element_(nullptr)
    \n-
    413 {}
    \n-
    \n-
    414
    \n-
    \n-
    416 LagrangeNode(unsigned int order) :
    \n-
    417 order_(order),
    \n-
    418 finiteElement_(nullptr),
    \n-
    419 element_(nullptr)
    \n-
    420 {
    \n-
    421 // Only the cache for the run-time-order case (i.e., k<0), has the 'order_' member
    \n-
    422 if constexpr (useDynamicOrder)
    \n-
    423 cache_.order_ = order;
    \n-
    424 }
    \n-
    \n-
    425
    \n-
    \n-
    427 const Element& element() const
    \n-
    428 {
    \n-
    429 return *element_;
    \n-
    430 }
    \n-
    \n-
    431
    \n-
    \n-\n-
    437 {
    \n-
    438 return *finiteElement_;
    \n-
    439 }
    \n-
    \n-
    440
    \n-
    \n-
    442 void bind(const Element& e)
    \n-
    443 {
    \n-
    444 element_ = &e;
    \n-
    445 finiteElement_ = &(cache_.get(element_->type()));
    \n-
    446 this->setSize(finiteElement_->size());
    \n-
    447 }
    \n-
    \n-
    448
    \n-
    449protected:
    \n-
    450
    \n-
    \n-
    451 unsigned int order() const
    \n-
    452 {
    \n-
    453 return (useDynamicOrder) ? order_ : k;
    \n-
    454 }
    \n-
    \n-
    455
    \n-
    456 // Run-time order, only valid if k<0
    \n-
    457 unsigned int order_;
    \n-
    458
    \n-
    459 FiniteElementCache cache_;
    \n-\n-\n-
    462};
    \n-
    \n-
    463
    \n-
    464
    \n-
    465
    \n-
    466namespace BasisFactory {
    \n-
    467
    \n-
    476template<std::size_t k, typename R=double>
    \n-
    \n-\n-
    478{
    \n-
    479 return [](const auto& gridView) {
    \n-
    480 return LagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n-
    481 };
    \n-
    482}
    \n-
    \n-
    483
    \n-
    491template<typename R=double>
    \n-
    \n-
    492auto lagrange(int order)
    \n-
    493{
    \n-
    494 return [=](const auto& gridView) {
    \n-
    495 return LagrangePreBasis<std::decay_t<decltype(gridView)>, -1, R>(gridView, order);
    \n-
    496 };
    \n-
    497}
    \n-
    \n-
    498
    \n-
    499} // end namespace BasisFactory
    \n-
    500
    \n-
    501
    \n-
    502
    \n-
    526template<typename GV, int k=-1, typename R=double>
    \n-\n-
    528
    \n-
    529
    \n-
    530
    \n-
    531
    \n-
    532
    \n-
    533} // end namespace Functions
    \n-
    534} // end namespace Dune
    \n-
    535
    \n-
    536
    \n-
    537#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n-\n-\n-\n-
    auto lagrange()
    Create a pre-basis factory that can create a Lagrange pre-basis.
    Definition lagrangebasis.hh:477
    \n+
    191
    \n+
    192namespace BasisFactory {
    \n+
    193namespace Experimental {
    \n+
    194
    \n+
    206template<class RawPreBasisFactory, class Transformation>
    \n+
    \n+\n+
    208 RawPreBasisFactory&& preBasisFactory,
    \n+
    209 Transformation&& transformation)
    \n+
    210{
    \n+
    211 return [
    \n+
    212 preBasisFactory=std::forward<RawPreBasisFactory>(preBasisFactory),
    \n+
    213 transformation =std::forward<Transformation>(transformation)
    \n+
    214 ](const auto& gridView) {
    \n+
    215 return Dune::Functions::Experimental::TransformedIndexPreBasis(preBasisFactory(gridView), std::move(transformation));
    \n+
    216 };
    \n+
    217}
    \n+
    \n+
    218
    \n+
    219
    \n+
    220
    \n+
    239template<class IndexTransformation, class SizeImplementation, class ContainerDescriptorImplementation, std::size_t minIS, std::size_t maxIS>
    \n+
    \n+\n+
    241{
    \n+
    242public:
    \n+
    243
    \n+
    244 static constexpr std::size_t minIndexSize = minIS;
    \n+
    245 static constexpr std::size_t maxIndexSize = maxIS;
    \n+
    246
    \n+
    247 template<class IT_R, class SI_R, class CD_R>
    \n+
    \n+
    248 GenericIndexingTransformation(IT_R&& indexTransformation, SI_R&& sizeImplementation, CD_R&& containerDescriptorImplementation) :
    \n+
    249 indexTransformation_(std::forward<IT_R>(indexTransformation)),
    \n+
    250 sizeImplementation_(std::forward<SI_R>(sizeImplementation)),
    \n+
    251 containerDescriptorImplementation_(std::forward<CD_R>(containerDescriptorImplementation))
    \n+
    252 {}
    \n+
    \n+
    253
    \n+
    254 template<class MultiIndex, class PreBasis>
    \n+
    \n+
    255 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const
    \n+
    256 {
    \n+
    257 indexTransformation_(multiIndex, preBasis);
    \n+
    258 }
    \n+
    \n+
    259
    \n+
    260 template<class Prefix, class PreBasis>
    \n+
    \n+
    261 auto size(const Prefix& prefix, const PreBasis& preBasis) const
    \n+
    262 {
    \n+
    263 return sizeImplementation_(prefix, preBasis);
    \n+
    264 }
    \n+
    \n+
    265
    \n+
    266 template<class PreBasis>
    \n+
    \n+
    267 auto dimension(const PreBasis& preBasis) const
    \n+
    268 {
    \n+
    269 return preBasis.dimension();
    \n+
    270 }
    \n+
    \n+
    271
    \n+
    272 template<class PreBasis>
    \n+
    \n+
    273 auto containerDescriptor(const PreBasis& preBasis) const
    \n+
    274 {
    \n+
    275 return containerDescriptorImplementation_(preBasis);
    \n+
    276 }
    \n+
    \n+
    277
    \n+
    278private:
    \n+
    279 IndexTransformation indexTransformation_;
    \n+
    280 SizeImplementation sizeImplementation_;
    \n+
    281 ContainerDescriptorImplementation containerDescriptorImplementation_;
    \n+
    282};
    \n+
    \n+
    283
    \n+
    284
    \n+
    285
    \n+
    305template<class IndexTransformation, class SizeImplementation, class ContainerDescriptorImplementation, std::size_t minIndexSize, std::size_t maxIndexSize>
    \n+
    \n+
    306auto indexTransformation(IndexTransformation&& indexTransformation,
    \n+
    307 SizeImplementation&& sizeImplementation,
    \n+
    308 ContainerDescriptorImplementation&& containerDescriptorImplementation,
    \n+
    309 Dune::index_constant<minIndexSize>,
    \n+
    310 Dune::index_constant<maxIndexSize>)
    \n+
    311{
    \n+\n+
    313 std::decay_t<IndexTransformation>,
    \n+
    314 std::decay_t<SizeImplementation>,
    \n+
    315 std::decay_t<ContainerDescriptorImplementation>,
    \n+
    316 minIndexSize, maxIndexSize>(
    \n+
    317 std::forward<IndexTransformation>(indexTransformation),
    \n+
    318 std::forward<SizeImplementation>(sizeImplementation),
    \n+
    319 std::forward<ContainerDescriptorImplementation>(containerDescriptorImplementation));
    \n+
    320}
    \n+
    \n+
    321
    \n+
    323template<class IndexTransformation, class SizeImplementation,
    \n+
    324 std::size_t minIndexSize, std::size_t maxIndexSize>
    \n+
    \n+
    325auto indexTransformation(IndexTransformation&& indexTrafo,
    \n+
    326 SizeImplementation&& sizeImpl,
    \n+
    327 Dune::index_constant<minIndexSize> minSize,
    \n+
    328 Dune::index_constant<maxIndexSize> maxSize)
    \n+
    329{
    \n+
    330 return indexTransformation(indexTrafo, sizeImpl,
    \n+
    331 [](auto&&) { return Dune::Functions::ContainerDescriptors::Unknown{}; },
    \n+
    332 minSize, maxSize);
    \n+
    333}
    \n+
    \n+
    334
    \n+
    335} // end namespace Experimental
    \n+
    336} // end namespace BasisFactory
    \n+
    337} // end namespace Functions
    \n+
    338} // end namespace Dune
    \n+
    339
    \n+
    340
    \n+
    341#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n+\n+\n+\n+\n+\n+\n
    Definition polynomial.hh:17
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n-
    Definition lagrangebasis.hh:375
    \n-
    LagrangeNode(unsigned int order)
    Constructor with a run-time order.
    Definition lagrangebasis.hh:416
    \n-
    unsigned int order() const
    Definition lagrangebasis.hh:451
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition lagrangebasis.hh:436
    \n-
    const Element * element_
    Definition lagrangebasis.hh:461
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition lagrangebasis.hh:427
    \n-
    FiniteElementCache cache_
    Definition lagrangebasis.hh:459
    \n-
    typename FiniteElementCache::FiniteElementType FiniteElement
    Definition lagrangebasis.hh:407
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition lagrangebasis.hh:442
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition lagrangebasis.hh:406
    \n-
    const FiniteElement * finiteElement_
    Definition lagrangebasis.hh:460
    \n-
    unsigned int order_
    Definition lagrangebasis.hh:457
    \n-
    std::size_t size_type
    Definition lagrangebasis.hh:405
    \n-
    LagrangeNode()
    Constructor without order (uses the compile-time value)
    Definition lagrangebasis.hh:410
    \n-
    A pre-basis for a PQ-lagrange bases with given order.
    Definition lagrangebasis.hh:61
    \n-
    size_type dofsPerPrism() const
    Definition lagrangebasis.hh:321
    \n-
    size_type computeDofsPerCube(std::size_t cubeDim) const
    Number of degrees of freedom assigned to a cube (without the ones assigned to its faces!...
    Definition lagrangebasis.hh:338
    \n-
    size_type computeDofsPerSimplex(std::size_t simplexDim) const
    Number of degrees of freedom assigned to a simplex (without the ones assigned to its faces!...
    Definition lagrangebasis.hh:332
    \n-
    size_type computeDofsPerPrism() const
    Definition lagrangebasis.hh:343
    \n-
    unsigned int order_
    Definition lagrangebasis.hh:307
    \n-
    size_type edgeOffset_
    Definition lagrangebasis.hh:360
    \n-
    std::array< size_type, dim+1 > dofsPerSimplex_
    Definition lagrangebasis.hh:354
    \n-
    It indices(const Node &node, It it) const
    Definition lagrangebasis.hh:180
    \n-
    size_type vertexOffset_
    Definition lagrangebasis.hh:359
    \n-
    size_type dofsPerSimplex(std::size_t simplexDim) const
    Number of degrees of freedom assigned to a simplex (without the ones assigned to its faces!...
    Definition lagrangebasis.hh:310
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition lagrangebasis.hh:71
    \n-
    size_type pyramidOffset_
    Definition lagrangebasis.hh:364
    \n-
    size_type prismOffset_
    Definition lagrangebasis.hh:365
    \n-
    size_type tetrahedronOffset_
    Definition lagrangebasis.hh:363
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition lagrangebasis.hh:98
    \n-
    size_type computeDofsPerPyramid() const
    Definition lagrangebasis.hh:348
    \n-
    LagrangePreBasis(const GridView &gv, unsigned int order)
    Constructor for a given grid view object and run-time order.
    Definition lagrangebasis.hh:82
    \n-
    size_type dofsPerPyramid_
    Definition lagrangebasis.hh:357
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition lagrangebasis.hh:142
    \n-
    LagrangePreBasis(const GridView &gv)
    Constructor for a given grid view object with compile-time order.
    Definition lagrangebasis.hh:77
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition lagrangebasis.hh:128
    \n-
    GV GridView
    The grid view that the FE basis is defined on.
    Definition lagrangebasis.hh:68
    \n-
    size_type quadrilateralOffset_
    Definition lagrangebasis.hh:362
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition lagrangebasis.hh:122
    \n-
    GridView gridView_
    Definition lagrangebasis.hh:304
    \n-
    Node makeNode() const
    Create tree node.
    Definition lagrangebasis.hh:136
    \n-
    unsigned int order() const
    Polynomial order used in the local Lagrange finite-elements.
    Definition lagrangebasis.hh:298
    \n-
    std::array< size_type, dim+1 > dofsPerCube_
    Definition lagrangebasis.hh:355
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition lagrangebasis.hh:172
    \n-
    size_type dofsPerPrism_
    Definition lagrangebasis.hh:356
    \n-
    size_type dofsPerCube(std::size_t cubeDim) const
    Number of degrees of freedom assigned to a cube (without the ones assigned to its faces!...
    Definition lagrangebasis.hh:316
    \n-
    size_type triangleOffset_
    Definition lagrangebasis.hh:361
    \n-
    size_type hexahedronOffset_
    Definition lagrangebasis.hh:366
    \n-
    size_type dofsPerPyramid() const
    Definition lagrangebasis.hh:326
    \n-
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n-
    Definition nodes.hh:191
    \n+
    auto indexTransformation(IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, ContainerDescriptorImplementation &&containerDescriptorImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)
    A generic implementation of a transformation.
    Definition transformedindexbasis.hh:306
    \n+
    auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)
    Create a TransformedIndexPreBasisFactory.
    Definition transformedindexbasis.hh:207
    \n+
    Fallback container descriptor if nothing else fits.
    Definition containerdescriptors.hh:50
    \n+
    A pre-basis transforming multi-indices.
    Definition transformedindexbasis.hh:55
    \n+
    It indices(const Node &node, It it) const
    Definition transformedindexbasis.hh:169
    \n+
    Transformation transformation_
    Definition transformedindexbasis.hh:182
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition transformedindexbasis.hh:89
    \n+
    typename RawPreBasis::GridView GridView
    The grid view that the FE basis is defined on.
    Definition transformedindexbasis.hh:65
    \n+
    void transformIndex(MultiIndex &multiIndex) const
    Definition transformedindexbasis.hh:163
    \n+
    RawPreBasis rawPreBasis_
    Definition transformedindexbasis.hh:181
    \n+
    typename RawPreBasis::Node Node
    Template mapping root tree path to type of created tree node.
    Definition transformedindexbasis.hh:71
    \n+
    TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)
    Constructor for given child pre-basis objects.
    Definition transformedindexbasis.hh:83
    \n+
    RawPreBasis & rawPreBasis()
    Definition transformedindexbasis.hh:157
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition transformedindexbasis.hh:73
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition transformedindexbasis.hh:101
    \n+
    Node makeNode() const
    Create tree node with given root tree path.
    Definition transformedindexbasis.hh:116
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition transformedindexbasis.hh:95
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition transformedindexbasis.hh:129
    \n+
    RPB RawPreBasis
    Definition transformedindexbasis.hh:62
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition transformedindexbasis.hh:122
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition transformedindexbasis.hh:147
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition transformedindexbasis.hh:68
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition transformedindexbasis.hh:75
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition transformedindexbasis.hh:141
    \n+
    const RawPreBasis & rawPreBasis() const
    Definition transformedindexbasis.hh:152
    \n+
    static constexpr size_type minMultiIndexSize
    Definition transformedindexbasis.hh:74
    \n+
    auto containerDescriptor() const
    Return the container descriptor of the transformed pre-basis.
    Definition transformedindexbasis.hh:135
    \n+
    A generic implementation of a transformation.
    Definition transformedindexbasis.hh:241
    \n+
    GenericIndexingTransformation(IT_R &&indexTransformation, SI_R &&sizeImplementation, CD_R &&containerDescriptorImplementation)
    Definition transformedindexbasis.hh:248
    \n+
    static constexpr std::size_t maxIndexSize
    Definition transformedindexbasis.hh:245
    \n+
    auto containerDescriptor(const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:273
    \n+
    auto dimension(const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:267
    \n+
    auto size(const Prefix &prefix, const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:261
    \n+
    static constexpr std::size_t minIndexSize
    Definition transformedindexbasis.hh:244
    \n+
    void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:255
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,715 +1,416 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-lagrangebasis.hh\n+transformedindexbasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n 9\n-10#include \n-11#include \n+10#include \n+11#include \n 12\n-13#include \n-14#include \n-15#include \n-16\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+13#include \n+14#include \n+15#include \n+16#include \n+17\n+18#include \n+19#include \n 20\n-21\n-22namespace _\bD_\bu_\bn_\be {\n-23namespace Functions {\n-24\n-25/\n-/ *****************************************************************************\n-26// This is the reusable part of the LagrangeBasis. It contains\n-27//\n-28// LagrangePreBasis\n-29// LagrangeNode\n-30//\n-31// The pre-basis allows to create the others and is the owner of possible\n-shared\n-32// state. These components do _not_ depend on the global basis and local view\n-33// and can be used without a global basis.\n+21#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n+22#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+24#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+26#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+27#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+28\n+29\n+30namespace _\bD_\bu_\bn_\be {\n+31namespace Functions {\n+_\b3_\b2namespace Experimental {\n+33\n 34/\n / *****************************************************************************\n-35\n-36template\n-37class LagrangeNode;\n-38\n-39template\n-40class LagrangePreBasis;\n-41\n-42\n-43\n-58template\n-_\b5_\b9class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n-60 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< LagrangePreBasis >\n-61{\n-62 static const int dim = GV::dimension;\n-63 static const bool useDynamicOrder = (k<0);\n-64\n-65public:\n+35/\n+/ *****************************************************************************\n+36\n+53template\n+_\b5_\b4class _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+55{\n+56 using Transformation = T;\n+57\n+58 using _\bT_\bh_\bi_\bs = _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\bP_\bB_\b,_\b _\bT_\b>;\n+59\n+60public:\n+61\n+_\b6_\b2 using _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = RPB;\n+63\n+_\b6_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename RawPreBasis::GridView;\n 66\n-_\b6_\b8 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b6_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n 69\n-_\b7_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b7_\b1 using _\bN_\bo_\bd_\be = typename RawPreBasis::Node;\n 72\n-_\b7_\b4 using _\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b>;\n-75\n-_\b7_\b7 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-78 : _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(gv, std::numeric_limits::max())\n-79 {}\n-80\n-_\b8_\b2 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv, unsigned int _\bo_\br_\bd_\be_\br) :\n-83 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv), _\bo_\br_\bd_\be_\br_\b_(_\bo_\br_\bd_\be_\br)\n-84 {\n-85 if (!useDynamicOrder && _\bo_\br_\bd_\be_\br!=std::numeric_limits::max())\n-86 DUNE_THROW(RangeError, \"Template argument k has to be -1 when supplying a\n-run-time order!\");\n+_\b7_\b3 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = Transformation::maxIndexSize;\n+_\b7_\b4 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = Transformation::minIndexSize;\n+_\b7_\b5 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be = std::max(RawPreBasis::\n+multiIndexBufferSize, _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be);\n+76\n+82 template\n+_\b8_\b3 _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(RPB_R&& _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, T_R&& transformation) :\n+84 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(std::forward(_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs)),\n+85 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_(std::forward(transformation))\n+86 {}\n 87\n-88 for (int i=0; i<=dim; i++)\n-89 {\n-90 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_[i] = _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(i);\n-91 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_[i] = _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(i);\n+_\b8_\b9 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+90 {\n+91 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n 92 }\n-93 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_ = _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm();\n-94 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd_\b_ = _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd();\n-95 }\n-96\n-_\b9_\b8 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-99 {\n-100 _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_ = 0;\n-101 _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(0) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size\n-(dim));\n-102\n-103 if (dim>=2)\n-104 {\n-105 _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)\n-_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim-1));\n-106\n-107 _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(2) * (\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::triangle));\n-108 }\n-109\n-110 if (dim==3) {\n-111 _\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(2) * (\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::quadrilateral));\n-112\n-113 _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(3) * (\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::tetrahedron));\n-114\n-115 _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() * (\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::prism));\n-116\n-117 _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(3) * (\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::hexahedron));\n-118 }\n+93\n+_\b9_\b5 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+96 {\n+97 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.gridView();\n+98 }\n+99\n+_\b1_\b0_\b1 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+102 {\n+103 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.update(gv);\n+104 }\n+105\n+_\b1_\b1_\b6 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+117 {\n+118 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.makeNode();\n 119 }\n 120\n-_\b1_\b2_\b2 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+_\b1_\b2_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n 123 {\n-124 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+124 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n 125 }\n 126\n-_\b1_\b2_\b8 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-129 {\n-130 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-131 }\n-132\n-_\b1_\b3_\b6 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-137 {\n-138 return _\bN_\bo_\bd_\be{_\bo_\br_\bd_\be_\br_\b_};\n-139 }\n-140\n-_\b1_\b4_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-143 {\n-144 switch (dim)\n-145 {\n-146 case 1:\n-147 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(0) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim))\n-148 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim-1));\n-149 case 2:\n-150 {\n-151 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(0) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim))\n-152 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim-1))\n-153 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(2) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n-triangle))\n-154 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(2) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n-quadrilateral));\n+128 template\n+_\b1_\b2_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+130 {\n+131 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_.size(prefix, _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n+132 }\n+133\n+_\b1_\b3_\b5 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n+136 {\n+137 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_.containerDescriptor(_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n+138 }\n+139\n+_\b1_\b4_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+142 {\n+143 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_.dimension(_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n+144 }\n+145\n+_\b1_\b4_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+148 {\n+149 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.maxNodeSize();\n+150 }\n+151\n+_\b1_\b5_\b2 const _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs() const\n+153 {\n+154 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n 155 }\n-156 case 3:\n-157 {\n-158 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(0) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim))\n-159 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(dim-1))\n-160 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(2) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n-triangle))\n-161 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(2) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n-quadrilateral))\n-162 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(3) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n-tetrahedron))\n-163 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd() * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n-pyramid))\n-164 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::prism))\n-165 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(3) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n-hexahedron));\n+156\n+_\b1_\b5_\b7 _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs()\n+158 {\n+159 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+160 }\n+161\n+162 template\n+_\b1_\b6_\b3 void _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx(MultiIndex& multiIndex) const\n+164 {\n+165 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_.transformIndex(multiIndex, _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_);\n 166 }\n-167 }\n-168 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n-available yet!\");\n-169 }\n-170\n-_\b1_\b7_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+167\n+168 template\n+_\b1_\b6_\b9 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+170 {\n+171 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node, it);\n+172 for(std::size_t i=0; i\n-_\b1_\b8_\b0 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-181 {\n-182 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0, end = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().size() ; i < end ; ++it,\n-++i)\n-183 {\n-184 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n-(i);\n-185 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-186 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+174 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx(*it);\n+175 ++it;\n+176 }\n+177 return it;\n+178 }\n+179\n+180protected:\n+_\b1_\b8_\b1 _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+_\b1_\b8_\b2 Transformation _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_;\n+183};\n+184\n+185template\n+_\b1_\b8_\b6_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(RPB&&, T&&) -> _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bs_\bt_\bd_\b:_\b:\n+_\bd_\be_\bc_\ba_\by_\b__\bt_\b<_\bR_\bP_\bB_\b>, std::decay_t>;\n 187\n-188 // The dimension of the entity that the current dof is related to\n-189 auto dofDim = dim - localKey.codim();\n+188\n+189} // end namespace Experimental\n 190\n-191 // Test for a vertex dof\n-192 // The test for k==1 is redundant, but having it here allows the compiler\n-to conclude\n-193 // at compile-time that the dofDim==0 case is the only one that will ever\n-happen.\n-194 // This leads to measurable speed-up: see\n-195 // https://gitlab.dune-project.org/staging/dune-functions/issues/30\n-196 if (k==1 || dofDim==0) {\n-197 *it = {{ (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(gridIndexSet.subIndex(element,localKey.subEntity\n-(),dim)) }};\n-198 continue;\n-199 }\n-200\n-201 if (dofDim==1)\n-202 { // edge dof\n-203 if (dim==1) // element dof -- any local numbering is fine\n-204 {\n-205 *it = {{ _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-206 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1) * ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0))\n-207 + localKey.index() }};\n-208 continue;\n-209 }\n-210 else\n-211 {\n-212 const auto refElement\n-213 = Dune::referenceElement(element.type());\n-214\n-215 // We have to reverse the numbering if the local element edge is\n-216 // not aligned with the global edge.\n-217 auto v0 = (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,refElement.subEntity\n-(localKey.subEntity(),localKey.codim(),0,dim),dim);\n-218 auto v1 = (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,refElement.subEntity\n-(localKey.subEntity(),localKey.codim(),1,dim),dim);\n-219 bool flip = (v0 > v1);\n-220 *it = {{ (flip)\n-221 ? _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-222 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1)*((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex\n-(element,localKey.subEntity(),localKey.codim()))\n-223 + (_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1)-1)-localKey.index()\n-224 : _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-225 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1)*((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex\n-(element,localKey.subEntity(),localKey.codim()))\n-226 + localKey.index() }};\n-227 continue;\n-228 }\n-229 }\n-230\n-231 if (dofDim==2)\n-232 {\n-233 if (dim==2) // element dof -- any local numbering is fine\n-234 {\n-235 if (element.type().isTriangle())\n-236 {\n-237 *it = {{ _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(2)*(\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n-238 continue;\n-239 }\n-240 else if (element.type().isQuadrilateral())\n-241 {\n-242 *it = {{ _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(2)*(\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n-243 continue;\n-244 }\n-245 else\n-246 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n-quadrilaterals\");\n-247 } else\n-248 {\n-249 const auto refElement\n-250 = Dune::referenceElement(element.type());\n-251\n-252 if (_\bo_\br_\bd_\be_\br()>3)\n-253 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids is only\n-implemented if k<=3\");\n-254\n-255 if (_\bo_\br_\bd_\be_\br()==3 and !refElement.type(localKey.subEntity(), localKey.codim\n-()).isTriangle())\n-256 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids with k==3 is\n-only implemented if the grid is a simplex grid\");\n-257\n-258 *it = {{ _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_ + ((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex\n-(element,localKey.subEntity(),localKey.codim())) }};\n-259 continue;\n-260 }\n-261 }\n-262\n-263 if (dofDim==3)\n-264 {\n-265 if (dim==3) // element dof -- any local numbering is fine\n-266 {\n-267 if (element.type().isTetrahedron())\n+191\n+192namespace BasisFactory {\n+193namespace Experimental {\n+194\n+206template\n+_\b2_\b0_\b7auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\bi_\bc_\be_\bs(\n+208 RawPreBasisFactory&& preBasisFactory,\n+209 Transformation&& transformation)\n+210{\n+211 return [\n+212 preBasisFactory=std::forward(preBasisFactory),\n+213 transformation =std::forward(transformation)\n+214 ](const auto& gridView) {\n+215 return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+(preBasisFactory(gridView), std::move(transformation));\n+216 };\n+217}\n+218\n+219\n+220\n+239template\n+_\b2_\b4_\b0class _\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+241{\n+242public:\n+243\n+_\b2_\b4_\b4 static constexpr std::size_t _\bm_\bi_\bn_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = minIS;\n+_\b2_\b4_\b5 static constexpr std::size_t _\bm_\ba_\bx_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = maxIS;\n+246\n+247 template\n+_\b2_\b4_\b8 _\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(IT_R&& _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn, SI_R&&\n+sizeImplementation, CD_R&& containerDescriptorImplementation) :\n+249 indexTransformation_(std::forward(_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn)),\n+250 sizeImplementation_(std::forward(sizeImplementation)),\n+251 containerDescriptorImplementation_(std::forward\n+(containerDescriptorImplementation))\n+252 {}\n+253\n+254 template\n+_\b2_\b5_\b5 void _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx(MultiIndex& multiIndex, const PreBasis& preBasis) const\n+256 {\n+257 indexTransformation_(multiIndex, preBasis);\n+258 }\n+259\n+260 template\n+_\b2_\b6_\b1 auto _\bs_\bi_\bz_\be(const Prefix& prefix, const PreBasis& preBasis) const\n+262 {\n+263 return sizeImplementation_(prefix, preBasis);\n+264 }\n+265\n+266 template\n+_\b2_\b6_\b7 auto _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(const PreBasis& preBasis) const\n 268 {\n-269 *it = {{ _\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(3)*(\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n-270 continue;\n-271 }\n-272 else if (element.type().isHexahedron())\n-273 {\n-274 *it = {{ _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(3)*(\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n-275 continue;\n+269 return preBasis.dimension();\n+270 }\n+271\n+272 template\n+_\b2_\b7_\b3 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br(const PreBasis& preBasis) const\n+274 {\n+275 return containerDescriptorImplementation_(preBasis);\n 276 }\n-277 else if (element.type().isPrism())\n-278 {\n-279 *it = {{ _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm()*((_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex\n-(element,0,0)) + localKey.index() }};\n-280 continue;\n-281 }\n-282 else if (element.type().isPyramid())\n-283 {\n-284 *it = {{ _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd()*(\n-(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n-285 continue;\n-286 }\n-287 else\n-288 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedra,\n-hexahedra, prisms, or pyramids\");\n-289 } else\n-290 DUNE_THROW(Dune::NotImplemented, \"Grids of dimension larger than 3 are no\n-supported\");\n-291 }\n-292 DUNE_THROW(Dune::NotImplemented, \"Grid contains elements not supported for\n-the LagrangeBasis\");\n-293 }\n-294 return it;\n-295 }\n-296\n-_\b2_\b9_\b8 unsigned int _\bo_\br_\bd_\be_\br() const\n-299 {\n-300 return (useDynamicOrder) ? _\bo_\br_\bd_\be_\br_\b_ : k;\n-301 }\n-302\n-303protected:\n-_\b3_\b0_\b4 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-305\n-306 // Run-time order, only valid if k<0\n-_\b3_\b0_\b7 unsigned int _\bo_\br_\bd_\be_\br_\b_;\n-308\n-_\b3_\b1_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(std::size_t simplexDim) const\n-311 {\n-312 return useDynamicOrder ? _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_[simplexDim] :\n-_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(simplexDim);\n-313 }\n-314\n-_\b3_\b1_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(std::size_t cubeDim) const\n-317 {\n-318 return useDynamicOrder ? _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_[cubeDim] : _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be\n-(cubeDim);\n-319 }\n-320\n-_\b3_\b2_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() const\n-322 {\n-323 return useDynamicOrder ? _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_ : _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm();\n-324 }\n-325\n-_\b3_\b2_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd() const\n-327 {\n-328 return useDynamicOrder ? _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd_\b_ : _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd();\n-329 }\n-330\n-_\b3_\b3_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx(std::size_t simplexDim) const\n-333 {\n-334 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::\n-size_t(_\bo_\br_\bd_\be_\br()-1),simplexDim);\n-335 }\n-336\n-_\b3_\b3_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(std::size_t cubeDim) const\n-339 {\n-340 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(_\bo_\br_\bd_\be_\br()-1,\n-cubeDim);\n-341 }\n-342\n-_\b3_\b4_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() const\n-344 {\n-345 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == 3 ? 1 : 0) : (_\bo_\br_\bd_\be_\br()-1)*(_\bo_\br_\bd_\be_\br()-1)*(_\bo_\br_\bd_\be_\br\n-()-2)/2;\n-346 }\n-347\n-_\b3_\b4_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd() const\n-349 {\n-350 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == 3 ? 1 : 0) : (_\bo_\br_\bd_\be_\br()-2)*(_\bo_\br_\bd_\be_\br()-1)*(2*_\bo_\br_\bd_\be_\br\n-()-3)/6;\n-351 }\n-352\n-353 // When the order is given at run-time, the following numbers are pre-\n-computed:\n-_\b3_\b5_\b4 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_;\n-_\b3_\b5_\b5 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_;\n-_\b3_\b5_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_;\n-_\b3_\b5_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd_\b_;\n-358\n-_\b3_\b5_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b6_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b6_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b6_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b6_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b6_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b6_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-367\n-368};\n-369\n-370\n-371\n-372template\n-_\b3_\b7_\b3class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be :\n-374 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-375{\n-376 // Stores LocalFiniteElement implementations with run-time order as a\n-function of GeometryType\n-377 template\n-378 class LagrangeRunTimeLFECache\n-379 {\n-380 public:\n-381 using FiniteElementType =\n-LagrangeLocalFiniteElement;\n-382\n-383 const FiniteElementType& get(GeometryType type)\n-384 {\n-385 auto i = data_.find(type);\n-386 if (i==data_.end())\n-387 i = data_.emplace(type,FiniteElementType(type,order_)).first;\n-388 return (*i).second;\n-389 }\n-390\n-391 std::map data_;\n-392 unsigned int order_;\n-393 };\n-394\n-395 static constexpr int dim = GV::dimension;\n-396 static constexpr bool useDynamicOrder = (k<0);\n-397\n-398 using FiniteElementCache = std::conditional_t<(useDynamicOrder),\n-399 LagrangeRunTimeLFECache,\n-400 LagrangeLocalFiniteElementCache\n-401 >;\n-402\n-403public:\n-404\n-_\b4_\b0_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b4_\b0_\b6 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b4_\b0_\b7 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = typename FiniteElementCache::FiniteElementType;\n-408\n-_\b4_\b1_\b0 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be() :\n-411 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-412 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n-413 {}\n-414\n-_\b4_\b1_\b6 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be(unsigned int _\bo_\br_\bd_\be_\br) :\n-417 _\bo_\br_\bd_\be_\br_\b_(_\bo_\br_\bd_\be_\br),\n-418 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-419 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n-420 {\n-421 // Only the cache for the run-time-order case (i.e., k<0), has the 'order_'\n-member\n-422 if constexpr (useDynamicOrder)\n-423 _\bc_\ba_\bc_\bh_\be_\b_.order_ = _\bo_\br_\bd_\be_\br;\n-424 }\n-425\n-_\b4_\b2_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-428 {\n-429 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-430 }\n-431\n-_\b4_\b3_\b6 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n-437 {\n-438 return *_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-439 }\n-440\n-_\b4_\b4_\b2 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-443 {\n-444 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-445 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_ = &(_\bc_\ba_\bc_\bh_\be_\b_.get(_\be_\bl_\be_\bm_\be_\bn_\bt_\b_->type()));\n-446 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_->size());\n-447 }\n-448\n-449protected:\n-450\n-_\b4_\b5_\b1 unsigned int _\bo_\br_\bd_\be_\br() const\n-452 {\n-453 return (useDynamicOrder) ? _\bo_\br_\bd_\be_\br_\b_ : k;\n-454 }\n-455\n-456 // Run-time order, only valid if k<0\n-_\b4_\b5_\b7 unsigned int _\bo_\br_\bd_\be_\br_\b_;\n-458\n-_\b4_\b5_\b9 FiniteElementCache _\bc_\ba_\bc_\bh_\be_\b_;\n-_\b4_\b6_\b0 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt* _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b4_\b6_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-462};\n-463\n-464\n-465\n-466namespace BasisFactory {\n-467\n-476template\n-_\b4_\b7_\b7auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be()\n-478{\n-479 return [](const auto& gridView) {\n-480 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k, R>(gridView);\n-481 };\n-482}\n-483\n-491template\n-_\b4_\b9_\b2auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be(int order)\n-493{\n-494 return [=](const auto& gridView) {\n-495 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, -1, R>(gridView,\n-order);\n-496 };\n-497}\n-498\n-499} // end namespace BasisFactory\n-500\n-501\n-502\n-526template\n-_\b5_\b2_\b7using _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b> >;\n-528\n-529\n-530\n-531\n-532\n-533} // end namespace Functions\n-534} // end namespace Dune\n-535\n-536\n-537#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+277\n+278private:\n+279 IndexTransformation indexTransformation_;\n+280 SizeImplementation sizeImplementation_;\n+281 ContainerDescriptorImplementation containerDescriptorImplementation_;\n+282};\n+283\n+284\n+285\n+305template\n+_\b3_\b0_\b6auto _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(IndexTransformation&& _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn,\n+307 SizeImplementation&& sizeImplementation,\n+308 ContainerDescriptorImplementation&& containerDescriptorImplementation,\n+309 Dune::index_constant,\n+310 Dune::index_constant)\n+311{\n+312 return _\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn<\n+313 std::decay_t,\n+314 std::decay_t,\n+315 std::decay_t,\n+316 minIndexSize, maxIndexSize>(\n+317 std::forward(_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn),\n+318 std::forward(sizeImplementation),\n+319 std::forward\n+(containerDescriptorImplementation));\n+320}\n+321\n+323template\n+_\b3_\b2_\b5auto _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(IndexTransformation&& indexTrafo,\n+326 SizeImplementation&& sizeImpl,\n+327 Dune::index_constant minSize,\n+328 Dune::index_constant maxSize)\n+329{\n+330 return _\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(indexTrafo, sizeImpl,\n+331 [](auto&&) { return _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn{}; },\n+332 minSize, maxSize);\n+333}\n+334\n+335} // end namespace Experimental\n+336} // end namespace BasisFactory\n+337} // end namespace Functions\n+338} // end namespace Dune\n+339\n+340\n+341#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n+_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh\n+_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n _\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be\n-auto lagrange()\n-Create a pre-basis factory that can create a Lagrange pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:477\n+_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-Global basis for given pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:375\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n-LagrangeNode(unsigned int order)\n-Constructor with a run-time order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:416\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bo_\br_\bd_\be_\br\n-unsigned int order() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:451\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:436\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n-const Element * element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:461\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return current element, throw if unbound.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:427\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bc_\ba_\bc_\bh_\be_\b_\n-FiniteElementCache cache_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:459\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename FiniteElementCache::FiniteElementType FiniteElement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:407\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind to element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:442\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename GV::template Codim< 0 >::Entity Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:406\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n-const FiniteElement * finiteElement_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:460\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bo_\br_\bd_\be_\br_\b_\n-unsigned int order_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:457\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:405\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n-LagrangeNode()\n-Constructor without order (uses the compile-time value)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:410\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-A pre-basis for a PQ-lagrange bases with given order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm\n-size_type dofsPerPrism() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:321\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:338\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:332\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm\n-size_type computeDofsPerPrism() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:343\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br_\b_\n-unsigned int order_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:307\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-size_type edgeOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:360\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_\n-std::array< size_type, dim+1 > dofsPerSimplex_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:354\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+auto indexTransformation(IndexTransformation &&indexTransformation,\n+SizeImplementation &&sizeImplementation, ContainerDescriptorImplementation\n+&&containerDescriptorImplementation, Dune::index_constant< minIndexSize >,\n+Dune::index_constant< maxIndexSize >)\n+A generic implementation of a transformation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:306\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation\n+&&transformation)\n+Create a TransformedIndexPreBasisFactory.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:207\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b:_\b:_\bU_\bn_\bk_\bn_\bo_\bw_\bn\n+Fallback container descriptor if nothing else fits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+A pre-basis transforming multi-indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:55\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n It indices(const Node &node, It it) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:180\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-size_type vertexOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:359\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:310\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:71\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-size_type pyramidOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:364\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-size_type prismOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:365\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bt_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-size_type tetrahedronOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:363\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_\n+Transformation transformation_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:182\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n void initializeIndices()\n Initialize the global indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:98\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd\n-size_type computeDofsPerPyramid() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:348\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-LagrangePreBasis(const GridView &gv, unsigned int order)\n-Constructor for a given grid view object and run-time order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:82\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd_\b_\n-size_type dofsPerPyramid_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:357\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:142\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-LagrangePreBasis(const GridView &gv)\n-Constructor for a given grid view object with compile-time order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:77\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:89\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+typename RawPreBasis::GridView GridView\n+The grid view that the FE basis is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:65\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx\n+void transformIndex(MultiIndex &multiIndex) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:163\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n+RawPreBasis rawPreBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bN_\bo_\bd_\be\n+typename RawPreBasis::Node Node\n+Template mapping root tree path to type of created tree node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:71\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:\n+_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)\n+Constructor for given child pre-basis objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:83\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+RawPreBasis & rawPreBasis()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:157\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr size_type maxMultiIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n void update(const GridView &gv)\n Update the stored grid view, to be called if the grid has changed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-The grid view that the FE basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-size_type quadrilateralOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:362\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:101\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+Node makeNode() const\n+Create tree node with given root tree path.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:116\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n const GridView & gridView() const\n Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n-GridView gridView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:304\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:136\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bo_\br_\bd_\be_\br\n-unsigned int order() const\n-Polynomial order used in the local Lagrange finite-elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:298\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_\n-std::array< size_type, dim+1 > dofsPerCube_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:355\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:95\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:129\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+RPB RawPreBasis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n size_type maxNodeSize() const\n Get the maximal number of DOFs associated to node for any element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:172\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_\n-size_type dofsPerPrism_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:356\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:316\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bl_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-size_type triangleOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:361\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-size_type hexahedronOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:366\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd\n-size_type dofsPerPyramid() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:326\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-A generic MixIn class for PreBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n-void setSize(const size_type size)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n+static constexpr size_type multiIndexBufferSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:141\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+const RawPreBasis & rawPreBasis() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr size_type minMultiIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bI_\bn_\bd_\be_\bx_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor() const\n+Return the container descriptor of the transformed pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:135\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+A generic implementation of a transformation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:241\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+GenericIndexingTransformation(IT_R &&indexTransformation, SI_R\n+&&sizeImplementation, CD_R &&containerDescriptorImplementation)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:248\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bm_\ba_\bx_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr std::size_t maxIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:245\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n+auto containerDescriptor(const PreBasis &preBasis) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:273\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+auto dimension(const PreBasis &preBasis) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:267\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bs_\bi_\bz_\be\n+auto size(const Prefix &prefix, const PreBasis &preBasis) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:261\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bm_\bi_\bn_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr std::size_t minIndexSize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:244\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bi_\bn_\bg_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx\n+void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:255\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: defaultlocalview.hh File Reference\n+dune-functions: subspacelocalview.hh File Reference\n \n \n \n \n \n \n \n@@ -72,32 +72,28 @@\n
  • dune
  • functions
  • functionspacebases
  • \n
    \n \n
    \n \n-
    defaultlocalview.hh File Reference
    \n+
    subspacelocalview.hh File Reference
    \n
    \n
    \n
    #include <tuple>
    \n-#include <optional>
    \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/typetree/childextraction.hh>
    \n #include <dune/functions/functionspacebases/concepts.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::DefaultLocalView< GB >
     The restriction of a finite element basis to a single element. More...
    class  Dune::Functions::SubspaceLocalView< RLV, PP >
     The restriction of a finite element basis to a single element. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,26 +2,22 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-defaultlocalview.hh File Reference\n+subspacelocalview.hh File Reference\n #include \n-#include \n #include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\by_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b<_\b _\bG_\bB_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b<_\b _\bR_\bL_\bV_\b,_\b _\bP_\bP_\b _\b>\n \u00a0 The restriction of a finite element basis to a single element. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\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 \n \n \n \n \n \n \n-dune-functions: defaultlocalview.hh Source File\n+dune-functions: subspacelocalview.hh Source File\n \n \n \n \n \n \n \n@@ -74,211 +74,190 @@\n \n \n \n
    \n-
    defaultlocalview.hh
    \n+
    subspacelocalview.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n
    9
    \n
    10
    \n
    11#include <tuple>
    \n-
    12#include <optional>
    \n-
    13
    \n-
    14#include <dune/common/concept.hh>
    \n-
    15#include <dune/common/hybridutilities.hh>
    \n-
    16#include <dune/common/reservedvector.hh>
    \n-
    17
    \n-\n-\n-\n-
    21
    \n-
    22
    \n+
    12
    \n+
    13#include <dune/common/concept.hh>
    \n+
    14
    \n+
    15#include <dune/typetree/childextraction.hh>
    \n+
    16
    \n+\n+
    18
    \n+
    19
    \n+
    20
    \n+
    21namespace Dune {
    \n+
    22namespace Functions {
    \n
    23
    \n-
    24namespace Dune {
    \n-
    25namespace Functions {
    \n-
    26
    \n-
    27
    \n+
    24
    \n+
    25
    \n+
    26template<class RB, class PP>
    \n+
    27class SubspaceBasis;
    \n
    28
    \n-
    30template<class GB>
    \n-
    \n-\n-
    32{
    \n-
    33public:
    \n-
    34
    \n-
    36 using GlobalBasis = GB;
    \n-
    37
    \n-
    39 using GridView = typename GlobalBasis::GridView;
    \n+
    29
    \n+
    30
    \n+
    32template<class RLV, class PP>
    \n+
    \n+\n+
    34{
    \n+
    35 using PrefixPath = PP;
    \n+
    36
    \n+
    37public:
    \n+
    38
    \n+
    39 using RootLocalView = RLV;
    \n
    40
    \n-
    42 using Element = typename GridView::template Codim<0>::Entity;
    \n+\n
    43
    \n-
    45 using size_type = std::size_t;
    \n+\n
    46
    \n-
    48 using Tree = typename GlobalBasis::PreBasis::Node;
    \n+
    48 using Element = typename GridView::template Codim<0>::Entity;
    \n
    49
    \n-
    50protected:
    \n-
    51
    \n-
    52 using PreBasis = typename GlobalBasis::PreBasis;
    \n-
    53
    \n-
    54 // Type used to store the multi indices of the basis vectors.
    \n-
    55 // In contrast to MultiIndex this always has dynamic size.
    \n-
    56 // It's guaranteed, that you can always cast it to MultiIndex
    \n-\n-
    58 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),
    \n-\n-
    60 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;
    \n+
    51 using size_type = std::size_t;
    \n+
    52
    \n+
    54 using RootTree = typename RootLocalView::Tree;
    \n+
    55
    \n+
    57 using Tree = typename TypeTree::ChildForTreePath<RootTree, PrefixPath>;
    \n+
    58
    \n+
    60 using MultiIndex = typename RootLocalView::MultiIndex;
    \n
    61
    \n-
    62public:
    \n-
    63
    \n-
    65 using MultiIndex =
    \n-
    66 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),
    \n-\n-
    68 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;
    \n+
    \n+
    63 SubspaceLocalView(const GlobalBasis& globalBasis, const PrefixPath& /*prefixPath*/) :
    \n+\n+
    65 rootLocalView_(globalBasis.rootBasis().localView())
    \n+
    66 {
    \n+
    67// static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to SubspaceLocalView does not model the BasisNode concept.");
    \n+
    68 }
    \n+
    \n
    69
    \n-
    70
    \n-
    \n-\n-\n-
    74 tree_(globalBasis_->preBasis().makeNode())
    \n-
    75 {
    \n-
    76 static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to DefaultLocalView does not model the BasisNode concept.");
    \n-\n+
    \n+
    75 void bind(const Element& e)
    \n+
    76 {
    \n+
    77 rootLocalView_.bind(e);
    \n
    78 }
    \n
    \n
    79
    \n-
    \n-
    85 void bind(const Element& e)
    \n-
    86 {
    \n-
    87 element_ = e;
    \n-\n-
    89 indices_.resize(size());
    \n-
    90 globalBasis_->preBasis().indices(tree_, indices_.begin());
    \n-
    91 }
    \n-
    \n-
    92
    \n-
    \n-
    95 bool bound() const
    \n-
    96 {
    \n-
    97 return static_cast<bool>(element_);
    \n-
    98 }
    \n-
    \n-
    99
    \n-
    \n-
    104 const Element& element() const
    \n-
    105 {
    \n-
    106 return *element_;
    \n-
    107 }
    \n-
    \n-
    108
    \n-
    \n-
    113 void unbind()
    \n-
    114 {
    \n-
    115 element_.reset();
    \n-
    116 }
    \n-
    \n-
    117
    \n-
    \n-
    122 const Tree& tree() const
    \n-
    123 {
    \n-
    124 return tree_;
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    \n-\n-
    130 {
    \n-
    131 return tree_.size();
    \n-
    132 }
    \n+
    \n+
    84 const Element& element() const
    \n+
    85 {
    \n+
    86 return rootLocalView_.element();
    \n+
    87 }
    \n+
    \n+
    88
    \n+
    \n+
    93 void unbind()
    \n+
    94 {
    \n+
    95 rootLocalView_.unbind();
    \n+
    96 }
    \n+
    \n+
    97
    \n+
    \n+
    100 bool bound() const
    \n+
    101 {
    \n+
    102 return rootLocalView_.bound();
    \n+
    103 }
    \n+
    \n+
    104
    \n+
    \n+
    109 const Tree& tree() const
    \n+
    110 {
    \n+
    111 return TypeTree::child(rootLocalView_.tree(), globalBasis_->prefixPath());
    \n+
    112 }
    \n+
    \n+
    113
    \n+
    \n+\n+
    117 {
    \n+
    118 return rootLocalView_.size();
    \n+
    119 }
    \n+
    \n+
    120
    \n+
    \n+\n+
    128 {
    \n+
    129 return rootLocalView_.maxSize();
    \n+
    130 }
    \n+
    \n+
    131
    \n+
    \n+\n+
    134 {
    \n+
    135 return rootLocalView_.index(i);
    \n+
    136 }
    \n
    \n-
    133
    \n+
    137
    \n
    \n-\n+\n
    141 {
    \n-
    142 return globalBasis_->preBasis().maxNodeSize();
    \n+
    142 return *globalBasis_;
    \n
    143 }
    \n
    \n
    144
    \n-
    \n-
    146 const MultiIndex& index(size_type i) const
    \n-
    147 {
    \n-
    148 return indices_[i];
    \n-
    149 }
    \n-
    \n-
    150
    \n-
    \n-\n-
    154 {
    \n-
    155 return *globalBasis_;
    \n-
    156 }
    \n-
    \n-
    157
    \n-
    \n-\n-
    159 {
    \n-
    160 return *this;
    \n-
    161 }
    \n-
    \n-
    162
    \n-
    163protected:
    \n-\n-
    165 std::optional<Element> element_;
    \n-\n-
    167 std::vector<MultiIndexStorage> indices_;
    \n-
    168};
    \n-
    \n-
    169
    \n-
    170
    \n-
    171
    \n-
    172} // end namespace Functions
    \n-
    173} // end namespace Dune
    \n-
    174
    \n-
    175
    \n-
    176
    \n-
    177#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n-\n-\n+
    \n+\n+
    146 {
    \n+
    147 return rootLocalView_;
    \n+
    148 }
    \n+
    \n+
    149
    \n+
    150protected:
    \n+\n+\n+
    153};
    \n+
    \n+
    154
    \n+
    155
    \n+
    156
    \n+
    157} // end namespace Functions
    \n+
    158} // end namespace Dune
    \n+
    159
    \n+
    160
    \n+
    161
    \n+
    162#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n
    Definition polynomial.hh:17
    \n-
    void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)
    Definition nodes.hh:286
    \n-
    void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)
    Definition nodes.hh:293
    \n-
    A statically sized MultiIndex type.
    Definition multiindex.hh:29
    \n-
    A dynamically sized array-like class with overflow.
    Definition overflowarray.hh:49
    \n-
    The restriction of a finite element basis to a single element.
    Definition defaultlocalview.hh:32
    \n-
    typename GlobalBasis::PreBasis PreBasis
    Definition defaultlocalview.hh:52
    \n-
    void unbind()
    Unbind from the current element.
    Definition defaultlocalview.hh:113
    \n-
    bool bound() const
    Return if the view is bound to a grid element.
    Definition defaultlocalview.hh:95
    \n-
    typename GlobalBasis::GridView GridView
    The grid view the global FE basis lives on.
    Definition defaultlocalview.hh:39
    \n-
    const MultiIndex & index(size_type i) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition defaultlocalview.hh:146
    \n-
    std::optional< Element > element_
    Definition defaultlocalview.hh:165
    \n-
    typename GridView::template Codim< 0 >::Entity Element
    Type of the grid element we are bound to.
    Definition defaultlocalview.hh:42
    \n-
    const Tree & tree() const
    Return the local ansatz tree associated to the bound entity.
    Definition defaultlocalview.hh:122
    \n-
    void bind(const Element &e)
    Bind the view to a grid element.
    Definition defaultlocalview.hh:85
    \n-
    const Element & element() const
    Return the grid element that the view is bound to.
    Definition defaultlocalview.hh:104
    \n-
    size_type size() const
    Total number of degrees of freedom on this element.
    Definition defaultlocalview.hh:129
    \n-
    GB GlobalBasis
    The global FE basis that this is a view on.
    Definition defaultlocalview.hh:36
    \n-
    Tree tree_
    Definition defaultlocalview.hh:166
    \n-
    size_type maxSize() const
    Maximum local size for any element on the GridView.
    Definition defaultlocalview.hh:140
    \n-
    std::size_t size_type
    The type used for sizes.
    Definition defaultlocalview.hh:45
    \n-
    const DefaultLocalView & rootLocalView() const
    Definition defaultlocalview.hh:158
    \n-
    std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), OverflowArray< StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, PreBasis::multiIndexBufferSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndexStorage
    Definition defaultlocalview.hh:60
    \n-
    std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex
    Type used for global numbering of the basis vectors.
    Definition defaultlocalview.hh:68
    \n-
    std::vector< MultiIndexStorage > indices_
    Definition defaultlocalview.hh:167
    \n-
    typename GlobalBasis::PreBasis::Node Tree
    Tree of local finite elements / local shape function sets.
    Definition defaultlocalview.hh:48
    \n-
    DefaultLocalView(const GlobalBasis &globalBasis)
    Construct local view for a given global finite element basis.
    Definition defaultlocalview.hh:72
    \n-
    const GlobalBasis * globalBasis_
    Definition defaultlocalview.hh:164
    \n-
    const GlobalBasis & globalBasis() const
    Return the global basis that we are a view on.
    Definition defaultlocalview.hh:153
    \n+
    SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >
    \n+
    Definition subspacebasis.hh:42
    \n+
    typename RootBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition subspacebasis.hh:52
    \n+
    const PrefixPath & prefixPath() const
    Definition subspacebasis.hh:122
    \n+
    The restriction of a finite element basis to a single element.
    Definition subspacelocalview.hh:34
    \n+
    typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree
    Tree of local finite elements / local shape function sets.
    Definition subspacelocalview.hh:57
    \n+
    void unbind()
    Unbind from the current element.
    Definition subspacelocalview.hh:93
    \n+
    const Element & element() const
    Return the grid element that the view is bound to.
    Definition subspacelocalview.hh:84
    \n+
    const GlobalBasis * globalBasis_
    Definition subspacelocalview.hh:151
    \n+
    bool bound() const
    Return if the view is bound to a grid element.
    Definition subspacelocalview.hh:100
    \n+
    typename RootLocalView::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition subspacelocalview.hh:60
    \n+
    size_type size() const
    Total number of degrees of freedom on this element.
    Definition subspacelocalview.hh:116
    \n+
    RootLocalView rootLocalView_
    Definition subspacelocalview.hh:152
    \n+
    void bind(const Element &e)
    Bind the view to a grid element.
    Definition subspacelocalview.hh:75
    \n+
    typename GlobalBasis::GridView GridView
    The grid view the global FE basis lives on.
    Definition subspacelocalview.hh:45
    \n+
    SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)
    Construct local view for a given global finite element basis.
    Definition subspacelocalview.hh:63
    \n+
    RLV RootLocalView
    Definition subspacelocalview.hh:39
    \n+
    const RootLocalView & rootLocalView() const
    Definition subspacelocalview.hh:145
    \n+
    std::size_t size_type
    The type used for sizes.
    Definition subspacelocalview.hh:51
    \n+
    typename GridView::template Codim< 0 >::Entity Element
    Type of the grid element we are bound to.
    Definition subspacelocalview.hh:48
    \n+
    const GlobalBasis & globalBasis() const
    Return the global basis that we are a view on.
    Definition subspacelocalview.hh:140
    \n+
    size_type maxSize() const
    Maximum local size for any element on the GridView.
    Definition subspacelocalview.hh:127
    \n+
    const Tree & tree() const
    Return the local ansatz tree associated to the bound entity.
    Definition subspacelocalview.hh:109
    \n+
    MultiIndex index(size_type i) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition subspacelocalview.hh:133
    \n+
    typename RootLocalView::Tree RootTree
    Tree of local finite elements / local shape function sets.
    Definition subspacelocalview.hh:54
    \n \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,267 +1,233 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-defaultlocalview.hh\n+subspacelocalview.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n 9\n 10\n 11#include \n-12#include \n-13\n-14#include \n-15#include \n-16#include \n-17\n-18#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\by_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-21\n-22\n+12\n+13#include \n+14\n+15#include \n+16\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+18\n+19\n+20\n+21namespace _\bD_\bu_\bn_\be {\n+22namespace Functions {\n 23\n-24namespace _\bD_\bu_\bn_\be {\n-25namespace Functions {\n-26\n-27\n+24\n+25\n+26template\n+27class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs;\n 28\n-30template\n-_\b3_\b1class _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-32{\n-33public:\n-34\n-_\b3_\b6 using _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs = GB;\n-37\n-_\b3_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename GlobalBasis::GridView;\n+29\n+30\n+32template\n+_\b3_\b3class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+34{\n+35 using PrefixPath = PP;\n+36\n+37public:\n+38\n+_\b3_\b9 using _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = RLV;\n 40\n-_\b4_\b2 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GridView::template Codim<0>::Entity;\n+_\b4_\b2 using _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs = _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b,\n+_\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b>;\n 43\n-_\b4_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b4_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw;\n 46\n-_\b4_\b8 using _\bT_\br_\be_\be = typename GlobalBasis::PreBasis::Node;\n+_\b4_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GridView::template Codim<0>::Entity;\n 49\n-50protected:\n-51\n-_\b5_\b2 using _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = typename GlobalBasis::PreBasis;\n-53\n-54 // Type used to store the multi indices of the basis vectors.\n-55 // In contrast to MultiIndex this always has dynamic size.\n-56 // It's guaranteed, that you can always cast it to MultiIndex\n-_\b5_\b7 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bt_\bo_\br_\ba_\bg_\be =\n-58 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n-maxMultiIndexSize),\n-59 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by<_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be_\b>,\n-PreBasis::multiIndexBufferSize>,\n-60 Dune::ReservedVector>;\n+_\b5_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+52\n+_\b5_\b4 using _\bR_\bo_\bo_\bt_\bT_\br_\be_\be = typename RootLocalView::Tree;\n+55\n+_\b5_\b7 using _\bT_\br_\be_\be = typename TypeTree::ChildForTreePath;\n+58\n+_\b6_\b0 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename RootLocalView::MultiIndex;\n 61\n-62public:\n-63\n-_\b6_\b5 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx =\n-66 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n-maxMultiIndexSize),\n-67 _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b<_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be_\b,_\b _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be_\b>,\n-68 Dune::ReservedVector>;\n+_\b6_\b3 _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs, const PrefixPath& /\n+*prefixPath*/) :\n+64 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(&_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs),\n+65 _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs.rootBasis().localView())\n+66 {\n+67// static_assert(models, Tree>(), \"Tree type\n+passed to SubspaceLocalView does not model the BasisNode concept.\");\n+68 }\n 69\n-70\n-_\b7_\b2 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs) :\n-73 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(&_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs),\n-74 _\bt_\br_\be_\be_\b_(_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().makeNode())\n-75 {\n-76 static_assert(models, _\bT_\br_\be_\be>(), \"Tree type\n-passed to DefaultLocalView does not model the BasisNode concept.\");\n-77 _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be(_\bt_\br_\be_\be_\b_);\n+_\b7_\b5 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+76 {\n+77 _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bind(e);\n 78 }\n 79\n-_\b8_\b5 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-86 {\n-87 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = e;\n-88 _\bb_\bi_\bn_\bd_\bT_\br_\be_\be(_\bt_\br_\be_\be_\b_, *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n-89 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.resize(_\bs_\bi_\bz_\be());\n-90 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().indices(_\bt_\br_\be_\be_\b_, _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.begin());\n-91 }\n-92\n-_\b9_\b5 bool _\bb_\bo_\bu_\bn_\bd() const\n-96 {\n-97 return static_cast(_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n-98 }\n-99\n-_\b1_\b0_\b4 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-105 {\n-106 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-107 }\n-108\n-_\b1_\b1_\b3 void _\bu_\bn_\bb_\bi_\bn_\bd()\n-114 {\n-115 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_.reset();\n-116 }\n-117\n-_\b1_\b2_\b2 const _\bT_\br_\be_\be& _\bt_\br_\be_\be() const\n-123 {\n-124 return _\bt_\br_\be_\be_\b_;\n-125 }\n-126\n-_\b1_\b2_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-130 {\n-131 return _\bt_\br_\be_\be_\b_.size();\n-132 }\n-133\n-_\b1_\b4_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bS_\bi_\bz_\be() const\n+_\b8_\b4 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+85 {\n+86 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.element();\n+87 }\n+88\n+_\b9_\b3 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+94 {\n+95 _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.unbind();\n+96 }\n+97\n+_\b1_\b0_\b0 bool _\bb_\bo_\bu_\bn_\bd() const\n+101 {\n+102 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bound();\n+103 }\n+104\n+_\b1_\b0_\b9 const _\bT_\br_\be_\be& _\bt_\br_\be_\be() const\n+110 {\n+111 return TypeTree::child(_\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree(), _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh());\n+112 }\n+113\n+_\b1_\b1_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+117 {\n+118 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.size();\n+119 }\n+120\n+_\b1_\b2_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bS_\bi_\bz_\be() const\n+128 {\n+129 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize();\n+130 }\n+131\n+_\b1_\b3_\b3 _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx _\bi_\bn_\bd_\be_\bx(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n+134 {\n+135 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.index(i);\n+136 }\n+137\n+_\b1_\b4_\b0 const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs() const\n 141 {\n-142 return _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().maxNodeSize();\n+142 return *_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n 143 }\n 144\n-_\b1_\b4_\b6 const _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx& _\bi_\bn_\bd_\be_\bx(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n-147 {\n-148 return _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_[i];\n-149 }\n-150\n-_\b1_\b5_\b3 const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs& _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs() const\n-154 {\n-155 return *_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n-156 }\n-157\n-_\b1_\b5_\b8 const _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw& _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n-159 {\n-160 return *this;\n-161 }\n-162\n-163protected:\n-_\b1_\b6_\b4 const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs* _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n-_\b1_\b6_\b5 std::optional _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b1_\b6_\b6 _\bT_\br_\be_\be _\bt_\br_\be_\be_\b_;\n-_\b1_\b6_\b7 std::vector _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n-168};\n-169\n-170\n-171\n-172} // end namespace Functions\n-173} // end namespace Dune\n-174\n-175\n-176\n-177#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n-_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\by_\b._\bh_\bh\n-_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n+_\b1_\b4_\b5 const _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw& _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n+146 {\n+147 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n+148 }\n+149\n+150protected:\n+_\b1_\b5_\b1 const _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs* _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n+_\b1_\b5_\b2 _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n+153};\n+154\n+155\n+156\n+157} // end namespace Functions\n+158} // end namespace Dune\n+159\n+160\n+161\n+162#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bb_\bi_\bn_\bd_\bT_\br_\be_\be\n-void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:286\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be\n-void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:293\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n-A statically sized MultiIndex type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multiindex.hh:29\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by\n-A dynamically sized array-like class with overflow.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn overflowarray.hh:49\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n+SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:42\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+typename RootBasis::GridView GridView\n+The grid view that the FE space is defined on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh\n+const PrefixPath & prefixPath() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n The restriction of a finite element basis to a single element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:32\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-typename GlobalBasis::PreBasis PreBasis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bu_\bn_\bb_\bi_\bn_\bd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:34\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bT_\br_\be_\be\n+typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree\n+Tree of local finite elements / local shape function sets.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bu_\bn_\bb_\bi_\bn_\bd\n void unbind()\n Unbind from the current element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:113\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bo_\bu_\bn_\bd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:93\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n+const Element & element() const\n+Return the grid element that the view is bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:84\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_\n+const GlobalBasis * globalBasis_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:151\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bo_\bu_\bn_\bd\n bool bound() const\n Return if the view is bound to a grid element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:95\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:100\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+typename RootLocalView::MultiIndex MultiIndex\n+Type used for global numbering of the basis vectors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Total number of degrees of freedom on this element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:116\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_\n+RootLocalView rootLocalView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind the view to a grid element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n typename GlobalBasis::GridView GridView\n The grid view the global FE basis lives on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:39\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bi_\bn_\bd_\be_\bx\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:146\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n-std::optional< Element > element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:165\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:45\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)\n+Construct local view for a given global finite element basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:63\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+RLV RootLocalView\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:39\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+const RootLocalView & rootLocalView() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:145\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+The type used for sizes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:51\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n typename GridView::template Codim< 0 >::Entity Element\n Type of the grid element we are bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:42\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bt_\br_\be_\be\n-const Tree & tree() const\n-Return the local ansatz tree associated to the bound entity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind the view to a grid element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:85\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return the grid element that the view is bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:104\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Total number of degrees of freedom on this element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-GB GlobalBasis\n-The global FE basis that this is a view on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bt_\br_\be_\be_\b_\n-Tree tree_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:166\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bm_\ba_\bx_\bS_\bi_\bz_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+const GlobalBasis & globalBasis() const\n+Return the global basis that we are a view on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:140\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bm_\ba_\bx_\bS_\bi_\bz_\be\n size_type maxSize() const\n Maximum local size for any element on the GridView.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:140\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-The type used for sizes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:45\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-const DefaultLocalView & rootLocalView() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:158\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bt_\bo_\br_\ba_\bg_\be\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_\n-std::vector< MultiIndexStorage > indices_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:167\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bT_\br_\be_\be\n-typename GlobalBasis::PreBasis::Node Tree\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:127\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bt_\br_\be_\be\n+const Tree & tree() const\n+Return the local ansatz tree associated to the bound entity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:109\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bi_\bn_\bd_\be_\bx\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:133\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bR_\bo_\bo_\bt_\bT_\br_\be_\be\n+typename RootLocalView::Tree RootTree\n Tree of local finite elements / local shape function sets.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:48\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-DefaultLocalView(const GlobalBasis &globalBasis)\n-Construct local view for a given global finite element basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:72\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_\n-const GlobalBasis * globalBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:164\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-const GlobalBasis & globalBasis() const\n-Return the global basis that we are a view on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:153\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:54\n _\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00188.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00188.html", "unified_diff": "@@ -78,15 +78,15 @@\n Namespaces
    \n
    leafprebasismixin.hh File Reference
    \n
    \n
    \n
    #include <cassert>
    \n #include <cstddef>
    \n #include <type_traits>
    \n-#include <dune/functions/functionspacebases/containerdescriptors.hh>
    \n+#include <dune/functions/functionspacebases/containerdescriptors.hh>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
    \n \n \n \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": "@@ -90,15 +90,15 @@\n
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_HH
    \n
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_HH
    \n
    9
    \n
    10#include <cassert>
    \n
    11#include <cstddef>
    \n
    12#include <type_traits>
    \n
    13
    \n-\n+\n
    15
    \n
    16namespace Dune::Functions {
    \n
    17
    \n
    34template<class Derived>
    \n
    \n \n
    36{
    \n@@ -144,15 +144,15 @@\n
    \n
    77
    \n
    78
    \n
    79} // end namespace Dune::Functions
    \n
    80
    \n
    81
    \n
    82#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_HH
    \n-\n+\n
    Definition polynomial.hh:18
    \n
    Uniform descriptor with dynamic size.
    Definition containerdescriptors.hh:168
    \n
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition leafprebasismixin.hh:53
    \n
    static constexpr size_type minMultiIndexSize
    Minimal length of global multi-indices.
    Definition leafprebasismixin.hh:45
    \n
    auto containerDescriptor() const
    Return a flat container-descriptor.
    Definition leafprebasismixin.hh:66
    \n
    static constexpr size_type maxMultiIndexSize
    Maximal length of global multi-indices.
    Definition leafprebasismixin.hh:42
    \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 \n \n \n \n \n \n \n-dune-functions: lfeprebasismixin.hh File Reference\n+dune-functions: interpolate.hh File Reference\n \n \n \n \n \n \n \n@@ -70,50 +70,55 @@\n \n \n
    \n \n-
    lfeprebasismixin.hh File Reference
    \n+
    interpolate.hh File Reference
    \n
    \n
    \n-
    #include <cassert>
    \n-#include <type_traits>
    \n+
    #include <memory>
    \n+#include <vector>
    \n #include <dune/common/exceptions.hh>
    \n-#include <dune/functions/functionspacebases/leafprebasismappermixin.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n-#include <dune/grid/common/mcmgmapper.hh>
    \n+#include <dune/common/bitsetvector.hh>
    \n+#include <dune/common/referencehelper.hh>
    \n+#include <dune/typetree/traversal.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/flatvectorview.hh>
    \n+#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Classes

    class  Dune::Functions::LeafPreBasisMixin< Derived >
     A generic MixIn class for PreBasis. More...
    \n-\n-\n-\n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::Functions::LFEPreBasisMixin< GV, LFE >
     A pre-basis mixin class parametrized with a local finite-element and a DOF layout. More...
     
    class  Dune::Functions::LFEPreBasisMixin< GV, LFE >::Node
     Leaf basis node that encapsulates a local finite-element given from the LFEPreBasisMixin of type LFE. More...
     
    \n \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n \n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class GV , class LFE >
     Dune::Functions::LFEPreBasisMixin (const GV &, const LFE &, MCMGLayout) -> LFEPreBasisMixin< GV, LFE >
     
    template<class B , class C , class F , class BV , class NTRE >
    void Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)
     Interpolate given function in discrete function space.
     
    template<class B , class C , class F , class BV >
    void Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f, const BV &bitVector)
     Interpolate given function in discrete function space.
     
    template<class B , class C , class F >
    void Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f)
     Interpolate given function in discrete function space.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,44 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-lfeprebasismixin.hh File Reference\n-#include \n-#include \n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+interpolate.hh File Reference\n+#include \n+#include \n #include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs_\b/_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bn_\bo_\bd_\be_\bt_\bo_\br_\ba_\bn_\bg_\be_\bm_\ba_\bp_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bG_\bV_\b,_\b _\bL_\bF_\bE_\b _\b>\n-\u00a0 A pre-basis mixin class parametrized with a local finite-element and a\n- DOF layout. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bG_\bV_\b,_\b _\bL_\bF_\bE_\b _\b>_\b:_\b:_\bN_\bo_\bd_\be\n-\u00a0 Leaf basis node that encapsulates a local finite-element given from the\n- _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn of type LFE. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn (const GV &, const LFE &, MCMGLayout) -\n- > _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< GV, LFE >\n+template\n+void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const B &basis, C &&coeff, const F &f,\n+ const BV &bv, const NTRE &nodeToRangeEntry)\n+\u00a0 Interpolate given function in discrete function space.\n+\u00a0\n+template\n+void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const B &basis, C &&coeff, const F &f,\n+ const BV &bitVector)\n+\u00a0 Interpolate given function in discrete function space.\n+\u00a0\n+template\n+void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const B &basis, C &&coeff, const F &f)\n+\u00a0 Interpolate given function in discrete function space.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\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 \n \n \n \n \n \n \n-dune-functions: lfeprebasismixin.hh Source File\n+dune-functions: interpolate.hh Source File\n \n \n \n \n \n \n \n@@ -74,161 +74,294 @@\n \n \n \n
    \n-
    lfeprebasismixin.hh
    \n+
    interpolate.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n
    9
    \n-
    10#include <cassert>
    \n-
    11#include <type_traits>
    \n+
    10#include <memory>
    \n+
    11#include <vector>
    \n
    12
    \n
    13#include <dune/common/exceptions.hh>
    \n-
    14
    \n-\n-\n-
    17
    \n-
    18#include <dune/grid/common/mcmgmapper.hh>
    \n-
    19
    \n-
    20namespace Dune::Functions {
    \n+
    14#include <dune/common/bitsetvector.hh>
    \n+
    15#include <dune/common/referencehelper.hh>
    \n+
    16
    \n+
    17#include <dune/typetree/traversal.hh>
    \n+
    18
    \n+\n+\n
    21
    \n-
    54template <class GV, class LFE>
    \n-
    \n-\n-
    56 public LeafPreBasisMapperMixin< GV >
    \n-
    57{
    \n-\n-
    59
    \n-
    60public:
    \n-
    61
    \n-
    63 using GridView = GV;
    \n-
    64
    \n-
    66 class Node;
    \n-
    67
    \n-
    73 template <class LFE_ = LFE,
    \n-
    74 std::enable_if_t<std::is_default_constructible_v<LFE_>, int> = 0>
    \n-
    \n-
    75 LFEPreBasisMixin (const GridView& gv, MCMGLayout layout)
    \n-
    76 : Base(gv, layout)
    \n-
    77 , lfe_{}
    \n-
    78 {}
    \n-
    \n-
    79
    \n-
    85 template <class LFE_>
    \n-
    \n-
    86 LFEPreBasisMixin (const GridView& gv, LFE_&& lfe, MCMGLayout layout)
    \n-
    87 : Base(gv, layout)
    \n-
    88 , lfe_(std::forward<LFE_>(lfe))
    \n-
    89 {}
    \n-
    \n-
    90
    \n-
    \n-
    92 Node makeNode () const
    \n-
    93 {
    \n-
    94 return Node(lfe_);
    \n-
    95 }
    \n-
    \n-
    96
    \n-
    97private:
    \n-
    98 LFE lfe_;
    \n-
    99};
    \n-
    \n-
    100
    \n-
    101// deduction guide
    \n-
    102template <class GV, class LFE>
    \n-
    103LFEPreBasisMixin(const GV&, const LFE&, MCMGLayout)
    \n-\n-
    105
    \n-
    106
    \n-
    107
    \n-
    117template <class GV, class LFE>
    \n-
    \n-
    118class LFEPreBasisMixin<GV,LFE>::Node
    \n-
    119 : public LeafBasisNode
    \n-
    120{
    \n-
    121 static constexpr int dim = GV::dimension;
    \n-
    122
    \n-
    123public:
    \n-
    124 using size_type = std::size_t;
    \n-
    125 using Element = typename GV::template Codim<0>::Entity;
    \n-
    126 using FiniteElement = LFE;
    \n-
    127
    \n-
    \n-
    129 explicit Node (const LFE& lfe)
    \n-
    130 : lfe_{&lfe}
    \n-
    131 , element_{nullptr}
    \n-
    132 {}
    \n-
    \n-
    133
    \n-
    \n-
    135 const Element& element () const
    \n-
    136 {
    \n-
    137 assert(!!element_);
    \n-
    138 return *element_;
    \n-
    139 }
    \n-
    \n-
    140
    \n-
    \n-\n-
    147 {
    \n-
    148 assert(!!lfe_);
    \n-
    149 return *lfe_;
    \n-
    150 }
    \n-
    \n-
    151
    \n-
    \n-
    153 void bind (const Element& e)
    \n-
    154 {
    \n-
    155 element_ = &e;
    \n-
    156 this->setSize(lfe_->size());
    \n-
    157 }
    \n-
    \n+\n+\n+\n+\n+
    26
    \n+
    27namespace Dune {
    \n+
    28namespace Functions {
    \n+
    29
    \n+
    30namespace Imp {
    \n+
    31
    \n+
    32struct AllTrueBitSetVector
    \n+
    33{
    \n+
    34 struct AllTrueBitSet
    \n+
    35 {
    \n+
    36 bool test(int) const { return true; }
    \n+
    37 } allTrue_;
    \n+
    38
    \n+
    39 operator bool() const
    \n+
    40 {
    \n+
    41 return true;
    \n+
    42 }
    \n+
    43
    \n+
    44 template<class I>
    \n+
    45 const AllTrueBitSetVector& operator[](const I&) const
    \n+
    46 {
    \n+
    47 return *this;
    \n+
    48 }
    \n+
    49
    \n+
    50 template<class SP>
    \n+
    51 void resize(const SP&) const
    \n+
    52 {}
    \n+
    53
    \n+
    54};
    \n+
    55
    \n+
    56
    \n+
    57
    \n+
    58// This helper function implements the restriction of some given function of type F.
    \n+
    59// The restriction is a simple callback that is applied to the values of the
    \n+
    60// function and the values of its derivative.
    \n+
    61template<class F, class Restriction>
    \n+
    62class ComponentFunction
    \n+
    63{
    \n+
    64public:
    \n+
    65
    \n+
    66 ComponentFunction(F f, Restriction restriction) :
    \n+
    67 f_(std::move(f)),
    \n+
    68 restriction_(std::move(restriction))
    \n+
    69 {}
    \n+
    70
    \n+
    71 template<class Domain>
    \n+
    72 auto operator()(const Domain& x) const
    \n+
    73 {
    \n+
    74 return restriction_(f_(x));
    \n+
    75 }
    \n+
    76
    \n+
    77 friend auto derivative(const ComponentFunction& cf)
    \n+
    78 {
    \n+
    79 // This provides support for capturing the derivative of the function by reference
    \n+
    80 // using forwardCapture for perfect forwarding capture. If the function caches its
    \n+
    81 // derivative, this saves a potentially costly copy.
    \n+
    82 auto&& df = derivative(Dune::resolveRef(cf.f_));
    \n+
    83 return [&, df=forwardCapture(std::forward<decltype(df)>(df))](auto&& x) {
    \n+
    84 return cf.restriction_(df.forward()(x));
    \n+
    85 };
    \n+
    86 }
    \n+
    87
    \n+
    88private:
    \n+
    89 F f_;
    \n+
    90 Restriction restriction_;
    \n+
    91};
    \n+
    92
    \n+
    93
    \n+
    94
    \n+
    95
    \n+
    96// This helper function implements caching of the derivative for local functions.
    \n+
    97// When using an algorithm that gets a LocalFunction and calls its derivative
    \n+
    98// on each element, this leads to a costly call of derivative(f). E.g. for a
    \n+
    99// DiscreteGlobalBasisFunction, this will allocate several buffer.
    \n+
    100// To avoid this, this helper function caches the derivative and hands
    \n+
    101// out the cached derivative by reference. To ensure that the handed out
    \n+
    102// derivative is appropriately bound, binding the function will automatically
    \n+
    103// bind the cached derivative.
    \n+
    104//
    \n+
    105// Notice that we cannot simply create the derivative in the constructor,
    \n+
    106// because this may throw for functions that do not implement the derivative.
    \n+
    107template<class F>
    \n+
    108class CachedDerivativeLocalFunction
    \n+
    109{
    \n+
    110 using Derivative = std::decay_t<decltype(derivative(Dune::resolveRef(std::declval<const F&>())))>;
    \n+
    111
    \n+
    112public:
    \n+
    113
    \n+
    114 CachedDerivativeLocalFunction(F f) :
    \n+
    115 f_(f)
    \n+
    116 {}
    \n+
    117
    \n+
    118 template<class Element>
    \n+
    119 void bind(const Element& element)
    \n+
    120 {
    \n+
    121 Dune::resolveRef(f_).bind(element);
    \n+
    122 if (derivative_)
    \n+
    123 derivative_.value().bind(element);
    \n+
    124 }
    \n+
    125
    \n+
    126 template<class X>
    \n+
    127 auto operator()(const X& x) const
    \n+
    128 {
    \n+
    129 return f_(x);
    \n+
    130 }
    \n+
    131
    \n+
    132 friend const Derivative& derivative(const CachedDerivativeLocalFunction& cdlf)
    \n+
    133 {
    \n+
    134 if (not cdlf.derivative_)
    \n+
    135 {
    \n+
    136 auto&& lf = Dune::resolveRef(cdlf.f_);
    \n+
    137 cdlf.derivative_ = derivative(lf);
    \n+
    138 if (lf.bound())
    \n+
    139 cdlf.derivative_.value().bind(lf.localContext());
    \n+
    140 }
    \n+
    141 return cdlf.derivative_.value();
    \n+
    142 }
    \n+
    143
    \n+
    144private:
    \n+
    145 F f_;
    \n+
    146 mutable std::optional<Derivative> derivative_;
    \n+
    147};
    \n+
    148
    \n+
    149
    \n+
    150
    \n+
    151template<class VectorBackend, class BitVectorBackend, class LocalFunction, class LocalView, class NodeToRangeEntry>
    \n+
    152void interpolateLocal(VectorBackend& vector, const BitVectorBackend& bitVector, const LocalFunction& localF, const LocalView& localView, const NodeToRangeEntry& nodeToRangeEntry)
    \n+
    153{
    \n+
    154 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& treePath) {
    \n+
    155 using Node = std::decay_t<decltype(node)>;
    \n+
    156 using FiniteElement = typename Node::FiniteElement;
    \n+
    157 using FiniteElementRangeField = typename FiniteElement::Traits::LocalBasisType::Traits::RangeFieldType;
    \n
    158
    \n-
    159protected:
    \n-\n-\n-
    162};
    \n-
    \n-
    163
    \n-
    164
    \n-
    165} // end namespace Dune::Functions
    \n-
    166
    \n-
    167
    \n-
    168#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH
    \n-\n-\n-
    Definition polynomial.hh:18
    \n-
    A generic MixIn class for PreBasis with flat indices computed from a mapper.
    Definition leafprebasismappermixin.hh:62
    \n-
    A pre-basis mixin class parametrized with a local finite-element and a DOF layout.
    Definition lfeprebasismixin.hh:57
    \n-
    LFEPreBasisMixin(const GridView &gv, LFE_ &&lfe, MCMGLayout layout)
    Constructor for a given grid view object, local finite-element and layout.
    Definition lfeprebasismixin.hh:86
    \n-
    LFEPreBasisMixin(const GridView &gv, MCMGLayout layout)
    Constructor for a given grid view object and layout.
    Definition lfeprebasismixin.hh:75
    \n-
    Node makeNode() const
    Create tree node.
    Definition lfeprebasismixin.hh:92
    \n-
    GV GridView
    The grid view that the FE basis is defined on.
    Definition lfeprebasismixin.hh:63
    \n-
    Leaf basis node that encapsulates a local finite-element given from the LFEPreBasisMixin of type LFE.
    Definition lfeprebasismixin.hh:120
    \n-
    LFE FiniteElement
    Definition lfeprebasismixin.hh:126
    \n-
    std::size_t size_type
    Definition lfeprebasismixin.hh:124
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to; might raise an error if unbound.
    Definition lfeprebasismixin.hh:146
    \n-
    const Element & element() const
    Return current element; might raise an error if unbound.
    Definition lfeprebasismixin.hh:135
    \n-
    const FiniteElement * lfe_
    Definition lfeprebasismixin.hh:160
    \n-
    void bind(const Element &e)
    Bind to element. Stores a pointer to the passed element reference.
    Definition lfeprebasismixin.hh:153
    \n-
    Node(const LFE &lfe)
    Constructor; stores a pointer to the passed local finite-element lfe.
    Definition lfeprebasismixin.hh:129
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition lfeprebasismixin.hh:125
    \n-
    const Element * element_
    Definition lfeprebasismixin.hh:161
    \n-
    Definition nodes.hh:191
    \n+
    159 auto interpolationCoefficients = std::vector<FiniteElementRangeField>();
    \n+
    160 auto&& fe = node.finiteElement();
    \n+
    161 auto localF_RE = ComponentFunction(std::cref(localF), [&](auto&& y) { return nodeToRangeEntry(node, treePath, y); });
    \n+
    162
    \n+
    163 fe.localInterpolation().interpolate(localF_RE, interpolationCoefficients);
    \n+
    164 for (size_t i=0; i<fe.localBasis().size(); ++i)
    \n+
    165 {
    \n+
    166 auto multiIndex = localView.index(node.localIndex(i));
    \n+
    167 if ( bitVector[multiIndex] )
    \n+
    168 vector[multiIndex] = interpolationCoefficients[i];
    \n+
    169 }
    \n+
    170 });
    \n+
    171}
    \n+
    172
    \n+
    173
    \n+
    174struct HasDerivative
    \n+
    175{
    \n+
    176 template<class F>
    \n+
    177 auto require(F&& f) -> decltype(derivative(f));
    \n+
    178};
    \n+
    179
    \n+
    180} // namespace Imp
    \n+
    181
    \n+
    182
    \n+
    183
    \n+
    184
    \n+
    202template <class B, class C, class F, class BV, class NTRE>
    \n+
    \n+
    203void interpolate(const B& basis, C&& coeff, const F& f, const BV& bv, const NTRE& nodeToRangeEntry)
    \n+
    204{
    \n+
    205 using GridView = typename B::GridView;
    \n+
    206 using Element = typename GridView::template Codim<0>::Entity;
    \n+
    207 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;
    \n+
    208
    \n+
    209 static_assert(Dune::Functions::Concept::isCallable<F, GlobalDomain>(), "Function passed to interpolate does not model the Callable<GlobalCoordinate> concept");
    \n+
    210
    \n+
    211 auto&& gridView = basis.gridView();
    \n+
    212
    \n+
    213 // Small helper functions to wrap vectors using istlVectorBackend
    \n+
    214 // if they do not already satisfy the VectorBackend interface.
    \n+
    215 auto toVectorBackend = [&](auto& v) -> decltype(auto) {
    \n+
    216 if constexpr (models<Concept::VectorBackend<B>, decltype(v)>()) {
    \n+
    217 return v;
    \n+
    218 } else {
    \n+
    219 return istlVectorBackend(v);
    \n+
    220 }
    \n+
    221 };
    \n+
    222
    \n+
    223 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {
    \n+
    224 if constexpr (models<Concept::ConstVectorBackend<B>, decltype(v)>()) {
    \n+
    225 return v;
    \n+
    226 } else {
    \n+
    227 return istlVectorBackend(v);
    \n+
    228 }
    \n+
    229 };
    \n+
    230
    \n+
    231 auto&& bitVector = toConstVectorBackend(bv);
    \n+
    232 auto&& vector = toVectorBackend(coeff);
    \n+
    233 vector.resize(basis);
    \n+
    234
    \n+
    235 // Make a grid function supporting local evaluation out of f
    \n+
    236 auto gf = makeGridViewFunction(f, gridView);
    \n+
    237
    \n+
    238 // Obtain a local view of f
    \n+
    239 // To avoid costly reconstruction of the derivative on each element,
    \n+
    240 // we use the CachedDerivativeLocalFunction wrapper if the function
    \n+
    241 // is differentiable. This wrapper will handout
    \n+
    242 // a reference to a single cached derivative object.
    \n+
    243 auto localF = [&](){
    \n+
    244 if constexpr (models<Imp::HasDerivative, decltype(localFunction(gf))>())
    \n+
    245 return Imp::CachedDerivativeLocalFunction(localFunction(gf));
    \n+
    246 else
    \n+
    247 return localFunction(gf);
    \n+
    248 }();
    \n+
    249
    \n+
    250 auto localView = basis.localView();
    \n+
    251
    \n+
    252 for (const auto& e : elements(gridView))
    \n+
    253 {
    \n+
    254 localView.bind(e);
    \n+
    255 localF.bind(e);
    \n+
    256 Imp::interpolateLocal(vector, bitVector, localF, localView, nodeToRangeEntry);
    \n+
    257 }
    \n+
    258}
    \n+
    \n+
    259
    \n+
    276template <class B, class C, class F, class BV>
    \n+
    \n+
    277void interpolate(const B& basis, C&& coeff, const F& f, const BV& bitVector)
    \n+
    278{
    \n+
    279 interpolate(basis, coeff, f, bitVector, HierarchicNodeToRangeMap());
    \n+
    280}
    \n+
    \n+
    281
    \n+
    296template <class B, class C, class F>
    \n+
    \n+
    297void interpolate(const B& basis, C&& coeff, const F& f)
    \n+
    298{
    \n+
    299 interpolate (basis, coeff, f, Imp::AllTrueBitSetVector(), HierarchicNodeToRangeMap());
    \n+
    300}
    \n+
    \n+
    301
    \n+
    302} // namespace Functions
    \n+
    303} // namespace Dune
    \n+
    304
    \n+
    305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n+\n+\n+\n+\n+\n+
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:43
    \n+
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:350
    \n+
    Definition polynomial.hh:17
    \n+
    void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)
    Interpolate given function in discrete function space.
    Definition interpolate.hh:203
    \n+
    std::decay_t< F > makeGridViewFunction(F &&f, const GridView &gridView)
    Construct a function modeling GridViewFunction from function and grid view.
    Definition gridviewfunction.hh:72
    \n+
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:376
    \n+
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:34
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,184 +1,323 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-lfeprebasismixin.hh\n+interpolate.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n 9\n-10#include \n-11#include \n+10#include \n+11#include \n 12\n 13#include \n-14\n-15#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-17\n-18#include \n-19\n-20namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+14#include \n+15#include \n+16\n+17#include \n+18\n+19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n 21\n-54template \n-_\b5_\b5class _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn :\n-56 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn< GV >\n-57{\n-58 using _\bB_\ba_\bs_\be = _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bG_\bV_\b _\b>;\n-59\n-60public:\n-61\n-_\b6_\b3 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-64\n-66 class _\bN_\bo_\bd_\be;\n-67\n-73 template , int> = 0>\n-_\b7_\b5 _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv, MCMGLayout layout)\n-76 : _\bB_\ba_\bs_\be(gv, layout)\n-77 , lfe_{}\n-78 {}\n-79\n-85 template \n-_\b8_\b6 _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv, LFE_&& lfe, MCMGLayout layout)\n-87 : _\bB_\ba_\bs_\be(gv, layout)\n-88 , lfe_(std::forward(lfe))\n-89 {}\n-90\n-_\b9_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be () const\n-93 {\n-94 return _\bN_\bo_\bd_\be(lfe_);\n-95 }\n-96\n-97private:\n-98 LFE lfe_;\n-99};\n-100\n-101// deduction guide\n-102template \n-_\b1_\b0_\b3_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn(const GV&, const LFE&, MCMGLayout)\n-104 -> _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\bG_\bV_\b,_\bL_\bF_\bE_\b>;\n-105\n-106\n-107\n-117template \n-_\b1_\b1_\b8class _\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn::_\bN_\bo_\bd_\be\n-119 : public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-120{\n-121 static constexpr int dim = GV::dimension;\n-122\n-123public:\n-_\b1_\b2_\b4 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b1_\b2_\b5 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b1_\b2_\b6 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = LFE;\n-127\n-_\b1_\b2_\b9 explicit _\bN_\bo_\bd_\be (const LFE& lfe)\n-130 : lfe_{&lfe}\n-131 , element_{nullptr}\n-132 {}\n-133\n-_\b1_\b3_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt () const\n-136 {\n-137 assert(!!element_);\n-138 return *element_;\n-139 }\n-140\n-_\b1_\b4_\b6 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt () const\n-147 {\n-148 assert(!!lfe_);\n-149 return *lfe_;\n-150 }\n-151\n-_\b1_\b5_\b3 void _\bb_\bi_\bn_\bd (const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-154 {\n-155 element_ = &e;\n-156 this->setSize(lfe_->size());\n-157 }\n+22#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs_\b/_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh>\n+24#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\b._\bh_\bh>\n+25#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bn_\bo_\bd_\be_\bt_\bo_\br_\ba_\bn_\bg_\be_\bm_\ba_\bp_\b._\bh_\bh>\n+26\n+27namespace _\bD_\bu_\bn_\be {\n+28namespace Functions {\n+29\n+30namespace Imp {\n+31\n+32struct AllTrueBitSetVector\n+33{\n+34 struct AllTrueBitSet\n+35 {\n+36 bool test(int) const { return true; }\n+37 } allTrue_;\n+38\n+39 operator bool() const\n+40 {\n+41 return true;\n+42 }\n+43\n+44 template\n+45 const AllTrueBitSetVector& operator[](const I&) const\n+46 {\n+47 return *this;\n+48 }\n+49\n+50 template\n+51 void resize(const SP&) const\n+52 {}\n+53\n+54};\n+55\n+56\n+57\n+58// This helper function implements the restriction of some given function of\n+type F.\n+59// The restriction is a simple callback that is applied to the values of the\n+60// function and the values of its derivative.\n+61template\n+62class ComponentFunction\n+63{\n+64public:\n+65\n+66 ComponentFunction(F f, Restriction restriction) :\n+67 f_(std::move(f)),\n+68 restriction_(std::move(restriction))\n+69 {}\n+70\n+71 template\n+72 auto operator()(const Domain& x) const\n+73 {\n+74 return restriction_(f_(x));\n+75 }\n+76\n+77 friend auto _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const ComponentFunction& cf)\n+78 {\n+79 // This provides support for capturing the derivative of the function by\n+reference\n+80 // using forwardCapture for perfect forwarding capture. If the function\n+caches its\n+81 // derivative, this saves a potentially costly copy.\n+82 auto&& df = _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(Dune::resolveRef(cf.f_));\n+83 return [&, df=_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(std::forward(df))](auto&& x) {\n+84 return cf.restriction_(df.forward()(x));\n+85 };\n+86 }\n+87\n+88private:\n+89 F f_;\n+90 Restriction restriction_;\n+91};\n+92\n+93\n+94\n+95\n+96// This helper function implements caching of the derivative for local\n+functions.\n+97// When using an algorithm that gets a LocalFunction and calls its derivative\n+98// on each element, this leads to a costly call of derivative(f). E.g. for a\n+99// DiscreteGlobalBasisFunction, this will allocate several buffer.\n+100// To avoid this, this helper function caches the derivative and hands\n+101// out the cached derivative by reference. To ensure that the handed out\n+102// derivative is appropriately bound, binding the function will\n+automatically\n+103// bind the cached derivative.\n+104//\n+105// Notice that we cannot simply create the derivative in the constructor,\n+106// because this may throw for functions that do not implement the\n+derivative.\n+107template\n+108class CachedDerivativeLocalFunction\n+109{\n+110 using Derivative = std::decay_t())))>;\n+111\n+112public:\n+113\n+114 CachedDerivativeLocalFunction(F f) :\n+115 f_(f)\n+116 {}\n+117\n+118 template\n+119 void bind(const Element& element)\n+120 {\n+121 Dune::resolveRef(f_).bind(element);\n+122 if (derivative_)\n+123 derivative_.value().bind(element);\n+124 }\n+125\n+126 template\n+127 auto operator()(const X& x) const\n+128 {\n+129 return f_(x);\n+130 }\n+131\n+132 friend const Derivative& _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const CachedDerivativeLocalFunction&\n+cdlf)\n+133 {\n+134 if (not cdlf.derivative_)\n+135 {\n+136 auto&& lf = Dune::resolveRef(cdlf.f_);\n+137 cdlf.derivative_ = _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(lf);\n+138 if (lf.bound())\n+139 cdlf.derivative_.value().bind(lf.localContext());\n+140 }\n+141 return cdlf.derivative_.value();\n+142 }\n+143\n+144private:\n+145 F f_;\n+146 mutable std::optional derivative_;\n+147};\n+148\n+149\n+150\n+151template\n+152void interpolateLocal(VectorBackend& vector, const BitVectorBackend&\n+bitVector, const LocalFunction& localF, const LocalView& localView, const\n+NodeToRangeEntry& nodeToRangeEntry)\n+153{\n+154 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&&\n+treePath) {\n+155 using Node = std::decay_t;\n+156 using FiniteElement = typename Node::FiniteElement;\n+157 using FiniteElementRangeField = typename FiniteElement::Traits::\n+LocalBasisType::Traits::RangeFieldType;\n 158\n-159protected:\n-_\b1_\b6_\b0 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt* _\bl_\bf_\be_\b_;\n-_\b1_\b6_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-162};\n-163\n-164\n-165} // end namespace Dune::Functions\n-166\n-167\n-168#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\ba_\bp_\bp_\be_\br_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:18\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\ba_\bp_\bp_\be_\br_\bM_\bi_\bx_\bi_\bn\n-A generic MixIn class for PreBasis with flat indices computed from a mapper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismappermixin.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-A pre-basis mixin class parametrized with a local finite-element and a DOF\n-layout.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-LFEPreBasisMixin(const GridView &gv, LFE_ &&lfe, MCMGLayout layout)\n-Constructor for a given grid view object, local finite-element and layout.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:86\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-LFEPreBasisMixin(const GridView &gv, MCMGLayout layout)\n-Constructor for a given grid view object and layout.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:92\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-The grid view that the FE basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:63\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be\n-Leaf basis node that encapsulates a local finite-element given from the\n-LFEPreBasisMixin of type LFE.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:120\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-LFE FiniteElement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:124\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to; might raise an\n-error if unbound.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:146\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return current element; might raise an error if unbound.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:135\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bl_\bf_\be_\b_\n-const FiniteElement * lfe_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:160\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind to element. Stores a pointer to the passed element reference.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:153\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bN_\bo_\bd_\be\n-Node(const LFE &lfe)\n-Constructor; stores a pointer to the passed local finite-element lfe.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename GV::template Codim< 0 >::Entity Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:125\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bF_\bE_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n-const Element * element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lfeprebasismixin.hh:161\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n+159 auto interpolationCoefficients = std::vector();\n+160 auto&& fe = node.finiteElement();\n+161 auto localF_RE = ComponentFunction(std::cref(localF), [&](auto&& y)\n+{ return nodeToRangeEntry(node, treePath, y); });\n+162\n+163 fe.localInterpolation().interpolate(localF_RE, interpolationCoefficients);\n+164 for (size_t i=0; i\n+177 auto require(F&& f) -> decltype(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f));\n+178};\n+179\n+180} // namespace Imp\n+181\n+182\n+183\n+184\n+202template \n+_\b2_\b0_\b3void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f, const BV& bv, const\n+NTRE& nodeToRangeEntry)\n+204{\n+205 using GridView = typename B::GridView;\n+206 using Element = typename GridView::template Codim<0>::Entity;\n+207 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n+208\n+209 static_assert(Dune::Functions::Concept::isCallable(),\n+\"Function passed to interpolate does not model the Callable\n+concept\");\n+210\n+211 auto&& gridView = basis.gridView();\n+212\n+213 // Small helper functions to wrap vectors using istlVectorBackend\n+214 // if they do not already satisfy the VectorBackend interface.\n+215 auto toVectorBackend = [&](auto& v) -> decltype(auto) {\n+216 if constexpr (models, decltype(v)>()) {\n+217 return v;\n+218 } else {\n+219 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n+220 }\n+221 };\n+222\n+223 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {\n+224 if constexpr (models, decltype(v)>()) {\n+225 return v;\n+226 } else {\n+227 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n+228 }\n+229 };\n+230\n+231 auto&& bitVector = toConstVectorBackend(bv);\n+232 auto&& vector = toVectorBackend(coeff);\n+233 vector.resize(basis);\n+234\n+235 // Make a grid function supporting local evaluation out of f\n+236 auto gf = _\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(f, gridView);\n+237\n+238 // Obtain a local view of f\n+239 // To avoid costly reconstruction of the derivative on each element,\n+240 // we use the CachedDerivativeLocalFunction wrapper if the function\n+241 // is differentiable. This wrapper will handout\n+242 // a reference to a single cached derivative object.\n+243 auto localF = [&](){\n+244 if constexpr (models())\n+245 return Imp::CachedDerivativeLocalFunction(localFunction(gf));\n+246 else\n+247 return localFunction(gf);\n+248 }();\n+249\n+250 auto localView = basis.localView();\n+251\n+252 for (const auto& e : elements(gridView))\n+253 {\n+254 localView.bind(e);\n+255 localF.bind(e);\n+256 Imp::interpolateLocal(vector, bitVector, localF, localView,\n+nodeToRangeEntry);\n+257 }\n+258}\n+259\n+276template \n+_\b2_\b7_\b7void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f, const BV& bitVector)\n+278{\n+279 _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(basis, coeff, f, bitVector, _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp());\n+280}\n+281\n+296template \n+_\b2_\b9_\b7void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f)\n+298{\n+299 _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (basis, coeff, f, Imp::AllTrueBitSetVector(),\n+_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp());\n+300}\n+301\n+302} // namespace Functions\n+303} // namespace Dune\n+304\n+305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n+_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh\n+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\b._\bh_\bh\n+_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bn_\bo_\bd_\be_\bt_\bo_\br_\ba_\bn_\bg_\be_\bm_\ba_\bp_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n+TrigonometricFunction< K, sinFactor, cosFactor > &f)\n+Obtain derivative of TrigonometricFunction function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn trigonometricfunction.hh:43\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd\n+auto istlVectorBackend(Vector &v)\n+Return a vector backend wrapping non-const ISTL like containers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn istlvectorbackend.hh:350\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn interpolate.hh:203\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+std::decay_t< F > makeGridViewFunction(F &&f, const GridView &gridView)\n+Construct a function modeling GridViewFunction from function and grid view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewfunction.hh:72\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be\n+auto forwardCapture(T &&t)\n+Create a capture object for perfect forwarding.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:376\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+A simple node to range map using the nested tree indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicnodetorangemap.hh:34\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00194.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00194.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: taylorhoodbasis.hh File Reference\n+dune-functions: hierarchicnodetorangemap.hh File Reference\n \n \n \n \n \n \n \n@@ -71,62 +71,38 @@\n \n \n \n
    \n \n-
    taylorhoodbasis.hh File Reference
    \n+Namespaces
    \n+
    hierarchicnodetorangemap.hh File Reference
    \n \n
    \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+
    #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
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::TaylorHoodPreBasis< GV, HI >
     Pre-basis for lowest order Taylor-Hood basis. More...
     
    class  Dune::Functions::TaylorHoodVelocityTree< GV >
     
    class  Dune::Functions::TaylorHoodBasisTree< GV >
    struct  Dune::Functions::HierarchicNodeToRangeMap
     A simple node to range map using the nested tree indices. More...
     
    \n \n \n \n \n \n-\n-\n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n-\n-\n-\n-\n-\n-

    \n-Typedefs

    template<typename GV >
    using Dune::Functions::TaylorHoodBasis = DefaultGlobalBasis< TaylorHoodPreBasis< GV > >
     Nodal basis for a lowest order Taylor-Hood Lagrangean finite element space.
     
    \n-\n-\n-\n-\n

    \n-Functions

    auto Dune::Functions::BasisFactory::taylorHood ()
     Create a pre-basis factory that can create a Taylor-Hood pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +1,26 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-taylorhoodbasis.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+hierarchicnodetorangemap.hh File Reference\n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bH_\bI_\b _\b>\n-\u00a0 Pre-basis for lowest order Taylor-Hood basis. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be_\b<_\b _\bG_\bV_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be_\b<_\b _\bG_\bV_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+\u00a0 A simple node to range map using the nested tree indices. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV > >\n-\u00a0 Nodal basis for a lowest order Taylor-Hood Lagrangean finite element\n- space.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bt_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd ()\n-\u00a0 Create a pre-basis factory that can create a Taylor-Hood pre-basis.\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00194_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00194_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: taylorhoodbasis.hh Source File\n+dune-functions: hierarchicnodetorangemap.hh Source File\n \n \n \n \n \n \n \n@@ -74,412 +74,77 @@\n \n \n
    \n
    \n-
    taylorhoodbasis.hh
    \n+
    hierarchicnodetorangemap.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n
    9
    \n-
    10#include <dune/common/exceptions.hh>
    \n-
    11#include <dune/common/reservedvector.hh>
    \n-
    12#include <dune/common/indices.hh>
    \n+
    10
    \n+
    11#include <utility>
    \n+
    12#include <type_traits>
    \n
    13
    \n-
    14#include <dune/typetree/powernode.hh>
    \n-
    15#include <dune/typetree/compositenode.hh>
    \n-
    16
    \n-\n+
    14#include <dune/common/concept.hh>
    \n+
    15
    \n+\n+\n
    18
    \n-\n-\n+
    19namespace Dune {
    \n+
    20namespace Functions {
    \n
    21
    \n-
    22namespace Dune {
    \n-
    23namespace Functions {
    \n-
    24
    \n-
    25
    \n-
    26// *****************************************************************************
    \n-
    27// This is the reusable part of the basis. It contains
    \n-
    28//
    \n-
    29// TaylorHoodPreBasis
    \n-
    30// TaylorHoodBasisTree
    \n-
    31// TaylorHoodVelocityTree
    \n-
    32//
    \n-
    33// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    34// state. These components do _not_ depend on the global basis and local view
    \n-
    35// and can be used without a global basis.
    \n-
    36// *****************************************************************************
    \n-
    37
    \n-
    38template<typename GV>
    \n-
    39class TaylorHoodVelocityTree;
    \n-
    40
    \n-
    41template<typename GV>
    \n-
    42class TaylorHoodBasisTree;
    \n-
    43
    \n-
    63template<typename GV, bool HI=false>
    \n-
    \n-\n-
    65{
    \n-
    66 static const bool useHybridIndices = HI;
    \n-
    67
    \n-
    68 static const int dim = GV::dimension;
    \n-
    69
    \n-
    70public:
    \n-
    71
    \n-
    73 using GridView = GV;
    \n-
    74
    \n-
    76 using size_type = std::size_t;
    \n-
    77
    \n-\n-
    80
    \n-
    81 static constexpr size_type maxMultiIndexSize = useHybridIndices ? 3 : 2;
    \n-
    82 static constexpr size_type minMultiIndexSize = 2;
    \n-\n-
    84
    \n-
    85private:
    \n-
    86
    \n-\n-\n-
    89
    \n-
    90public:
    \n-
    91
    \n-
    \n-\n-
    94 gridView_(gv),
    \n-
    95 pq1PreBasis_(gv),
    \n-
    96 pq2PreBasis_(gv)
    \n-
    97 {}
    \n-
    \n-
    98
    \n-
    \n-\n-
    101 {
    \n-\n-\n-
    104 }
    \n-
    \n-
    105
    \n-
    \n-
    107 const GridView& gridView() const
    \n-
    108 {
    \n-
    109 return gridView_;
    \n-
    110 }
    \n-
    \n-
    111
    \n-
    \n-
    113 void update (const GridView& gv)
    \n-
    114 {
    \n-\n-\n-
    117 }
    \n-
    \n-
    118
    \n-
    \n-\n-
    123 {
    \n-
    124 return Node{};
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    \n-\n-
    129 {
    \n-
    130 return 2;
    \n-
    131 }
    \n-
    \n-
    132
    \n-
    134 template<class SizePrefix>
    \n-
    \n-
    135 size_type size(const SizePrefix& prefix) const
    \n-
    136 {
    \n-
    137 return sizeImp<useHybridIndices>(prefix);
    \n-
    138 }
    \n-
    \n-
    139
    \n-
    140private:
    \n-
    141
    \n-
    142 template<bool hi, class SizePrefix,
    \n-
    143 std::enable_if_t<not hi,int> = 0>
    \n-
    144 size_type sizeImp(const SizePrefix& prefix) const
    \n-
    145 {
    \n-
    146 if (prefix.size() == 0)
    \n-
    147 return 2;
    \n-
    148 if (prefix.size() == 1)
    \n-
    149 {
    \n-
    150 if (prefix[0] == 0)
    \n-
    151 return dim * pq2PreBasis_.size();
    \n-
    152 if (prefix[0] == 1)
    \n-
    153 return pq1PreBasis_.size();
    \n-
    154 }
    \n-
    155 assert(prefix.size() == 2);
    \n-
    156 return 0;
    \n-
    157 }
    \n-
    158
    \n-
    159 template<bool hi, class SizePrefix,
    \n-
    160 std::enable_if_t<hi,int> = 0>
    \n-
    161 size_type sizeImp(const SizePrefix& prefix) const
    \n-
    162 {
    \n-
    163 if (prefix.size() == 0)
    \n-
    164 return 2;
    \n-
    165 if (prefix.size() == 1)
    \n-
    166 {
    \n-
    167 if (prefix[0] == 0)
    \n-
    168 return pq2PreBasis_.size();
    \n-
    169 if (prefix[0] == 1)
    \n-
    170 return pq1PreBasis_.size();
    \n-
    171 }
    \n-
    172 if (prefix.size() == 2)
    \n-
    173 {
    \n-
    174 if (prefix[0] == 0)
    \n-
    175 return dim;
    \n-
    176 if (prefix[0] == 1)
    \n-
    177 return 0;
    \n-
    178 }
    \n-
    179 assert(prefix.size() == 3);
    \n-
    180 return 0;
    \n-
    181 }
    \n-
    182
    \n-
    183public:
    \n-
    184
    \n-
    \n-\n-
    187 {
    \n-
    188 return dim * pq2PreBasis_.size() + pq1PreBasis_.size();
    \n-
    189 }
    \n-
    \n-
    190
    \n-
    \n-\n-
    193 {
    \n-\n-
    195 }
    \n-
    \n-
    196
    \n-
    197 template<typename It>
    \n-
    \n-
    198 It indices(const Node& node, It it) const
    \n-
    199 {
    \n-
    200 return indicesImp<useHybridIndices>(node, it);
    \n-
    201 }
    \n-
    \n-
    202
    \n-
    \n-\n-
    209 {
    \n-\n-
    211 if constexpr(HI)
    \n-
    212 return CD::makeDescriptor(
    \n-
    213 CD::makeUniformDescriptor(pq2PreBasis_.size(),
    \n-
    214 CD::FlatArray<GV::dimension>{}),
    \n-
    215 CD::FlatVector{pq1PreBasis_.size()});
    \n-
    216 else
    \n-
    217 return CD::Array<CD::FlatVector,2>{
    \n-
    218 CD::FlatVector{GV::dimension * pq2PreBasis_.size()},
    \n-
    219 CD::FlatVector{pq1PreBasis_.size()} };
    \n-
    220 }
    \n-
    \n-
    221
    \n-
    222protected:
    \n-
    223
    \n-
    224 template<class MultiIndex>
    \n-
    \n-
    225 static const void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n-
    226 {
    \n-
    227 M.resize(M.size()+1);
    \n-
    228 for(std::size_t i=M.size()-1; i>0; --i)
    \n-
    229 M[i] = M[i-1];
    \n-
    230 M[0] = M0;
    \n-
    231 }
    \n-
    \n-
    232
    \n-
    233 template<bool hi, class It,
    \n-
    234 std::enable_if_t<not hi,int> = 0>
    \n-
    \n-
    235 It indicesImp(const Node& node, It multiIndices) const
    \n-
    236 {
    \n-
    237 using namespace Dune::Indices;
    \n-
    238 for(std::size_t child=0; child<dim; ++child)
    \n-
    239 {
    \n-
    240 size_type subTreeSize = node.child(_0, 0).size();
    \n-
    241 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);
    \n-
    242 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    243 {
    \n-
    244 multiIndexPushFront(multiIndices[i], 0);
    \n-
    245 multiIndices[i][1] = multiIndices[i][1]*dim + child;
    \n-
    246 }
    \n-
    247 multiIndices += subTreeSize;
    \n-
    248 }
    \n-
    249 size_type subTreeSize = node.child(_1).size();
    \n-
    250 pq1PreBasis_.indices(node.child(_1), multiIndices);
    \n-
    251 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    252 multiIndexPushFront(multiIndices[i], 1);
    \n-
    253 multiIndices += subTreeSize;
    \n-
    254 return multiIndices;
    \n-
    255 }
    \n-
    \n-
    256
    \n-
    257 template<bool hi, class It,
    \n-
    258 std::enable_if_t<hi,int> = 0>
    \n-
    \n-
    259 It indicesImp(const Node& node, It multiIndices) const
    \n-
    260 {
    \n-
    261 using namespace Dune::Indices;
    \n-
    262 for(std::size_t child=0; child<dim; ++child)
    \n-
    263 {
    \n-
    264 size_type subTreeSize = node.child(_0, 0).size();
    \n-
    265 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);
    \n-
    266 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    267 {
    \n-
    268 multiIndexPushFront(multiIndices[i], 0);
    \n-
    269 multiIndices[i].push_back(i);
    \n-
    270 }
    \n-
    271 multiIndices += subTreeSize;
    \n-
    272 }
    \n-
    273 size_type subTreeSize = node.child(_1).size();
    \n-
    274 pq1PreBasis_.indices(node.child(_1), multiIndices);
    \n-
    275 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    276 multiIndexPushFront(multiIndices[i], 1);
    \n-
    277 multiIndices += subTreeSize;
    \n-
    278 return multiIndices;
    \n-
    279 }
    \n-
    \n-
    280
    \n-\n-
    282
    \n-\n-\n-
    285};
    \n-
    \n-
    286
    \n-
    287
    \n-
    288
    \n-
    289template<typename GV>
    \n-
    \n-\n-
    291 public PowerBasisNode<LagrangeNode<GV,2>, GV::dimension>
    \n-
    292{
    \n-\n-\n-
    295
    \n-
    296public:
    \n-
    \n-\n-
    298 {
    \n-
    299 for(int i=0; i<GV::dimension; ++i)
    \n-
    300 this->setChild(i, std::make_shared<PQ2Node>());
    \n-
    301 }
    \n-
    \n-
    302};
    \n-
    \n-
    303
    \n-
    304template<typename GV>
    \n-
    \n-\n-
    306 public CompositeBasisNode<
    \n-
    307 TaylorHoodVelocityTree<GV>,
    \n-
    308 LagrangeNode<GV,1>
    \n-
    309 >
    \n-
    310{
    \n-\n-\n-
    313
    \n-\n-
    315
    \n-
    316public:
    \n-
    \n-\n-
    318 {
    \n-
    319 this->template setChild<0>(std::make_shared<VelocityNode>());
    \n-
    320 this->template setChild<1>(std::make_shared<PressureNode>());
    \n-
    321 }
    \n-
    \n-
    322};
    \n-
    \n-
    323
    \n-
    324
    \n-
    325
    \n-
    326namespace BasisFactory {
    \n-
    327
    \n-
    \n-
    334inline auto taylorHood()
    \n-
    335{
    \n-
    336 return [](const auto& gridView) {
    \n-
    337 return TaylorHoodPreBasis<std::decay_t<decltype(gridView)>>(gridView);
    \n-
    338 };
    \n-
    339}
    \n-
    \n-
    340
    \n-
    341} // end namespace BasisFactory
    \n-
    342
    \n-
    343// *****************************************************************************
    \n-
    344// This is the actual global basis implementation based on the reusable parts.
    \n-
    345// *****************************************************************************
    \n-
    346
    \n-
    368template<typename GV>
    \n-\n-
    370
    \n-
    371
    \n-
    372
    \n-
    373} // end namespace Functions
    \n-
    374} // end namespace Dune
    \n-
    375
    \n-
    376
    \n-
    377#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n-\n-\n-\n-
    auto taylorHood()
    Create a pre-basis factory that can create a Taylor-Hood pre-basis.
    Definition taylorhoodbasis.hh:334
    \n+
    22
    \n+
    23
    \n+
    \n+\n+
    34{
    \n+
    35 template<class Node, class TreePath, class Range,
    \n+
    36 std::enable_if_t< models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), int> = 0>
    \n+
    \n+
    37 decltype(auto) operator()(const Node&, const TreePath& treePath, Range&& y) const
    \n+
    38 {
    \n+
    39 return resolveStaticMultiIndex(y, treePath);
    \n+
    40 }
    \n+
    \n+
    41
    \n+
    42 template<class Node, class TreePath, class Range,
    \n+
    43 std::enable_if_t<not models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), int> = 0>
    \n+
    \n+
    44 decltype(auto) operator()(const Node&, const TreePath&, Range&& y) const
    \n+
    45 {
    \n+
    46 return std::forward<Range>(y);
    \n+
    47 }
    \n+
    \n+
    48};
    \n+
    \n+
    49
    \n+
    50
    \n+
    51
    \n+
    52} // namespace Dune::Functions
    \n+
    53} // namespace Dune
    \n+
    54
    \n+
    55
    \n+
    56#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n+\n+
    constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:421
    \n
    Definition polynomial.hh:17
    \n-
    Definition containerdescriptors.hh:47
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n-
    Definition lagrangebasis.hh:375
    \n-\n-
    It indices(const Node &node, It it) const
    Definition lagrangebasis.hh:180
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition lagrangebasis.hh:98
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition lagrangebasis.hh:128
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition lagrangebasis.hh:172
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition leafprebasismixin.hh:53
    \n-
    size_type size() const
    Definition nodes.hh:147
    \n-
    Definition nodes.hh:198
    \n-\n-
    Definition taylorhoodbasis.hh:292
    \n-
    TaylorHoodVelocityTree()
    Definition taylorhoodbasis.hh:297
    \n-
    Definition taylorhoodbasis.hh:310
    \n-
    TaylorHoodBasisTree()
    Definition taylorhoodbasis.hh:317
    \n-
    Pre-basis for lowest order Taylor-Hood basis.
    Definition taylorhoodbasis.hh:65
    \n-
    TaylorHoodPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition taylorhoodbasis.hh:93
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition taylorhoodbasis.hh:107
    \n-
    static constexpr size_type minMultiIndexSize
    Definition taylorhoodbasis.hh:82
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition taylorhoodbasis.hh:135
    \n-
    GridView gridView_
    Definition taylorhoodbasis.hh:281
    \n-
    GV GridView
    The grid view that the FE basis is defined on.
    Definition taylorhoodbasis.hh:73
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition taylorhoodbasis.hh:113
    \n-
    auto containerDescriptor() const
    Return an container descriptor depending on the flag HI. Either return a Tuple if hybrid indices shou...
    Definition taylorhoodbasis.hh:208
    \n-
    PQ2PreBasis pq2PreBasis_
    Definition taylorhoodbasis.hh:284
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition taylorhoodbasis.hh:128
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition taylorhoodbasis.hh:186
    \n-
    PQ1PreBasis pq1PreBasis_
    Definition taylorhoodbasis.hh:283
    \n-
    static const void multiIndexPushFront(MultiIndex &M, size_type M0)
    Definition taylorhoodbasis.hh:225
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition taylorhoodbasis.hh:81
    \n-
    Node makeNode() const
    Create tree node.
    Definition taylorhoodbasis.hh:122
    \n-
    It indices(const Node &node, It it) const
    Definition taylorhoodbasis.hh:198
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition taylorhoodbasis.hh:83
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition taylorhoodbasis.hh:100
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition taylorhoodbasis.hh:192
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition taylorhoodbasis.hh:76
    \n-
    It indicesImp(const Node &node, It multiIndices) const
    Definition taylorhoodbasis.hh:235
    \n+
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:34
    \n+
    decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y) const
    Definition hierarchicnodetorangemap.hh:37
    \n+
    decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const
    Definition hierarchicnodetorangemap.hh:44
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,463 +1,82 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-taylorhoodbasis.hh\n+hierarchicnodetorangemap.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n 9\n-10#include \n-11#include \n-12#include \n+10\n+11#include \n+12#include \n 13\n-14#include \n-15#include \n-16\n-17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+14#include \n+15\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n 18\n-19#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+19namespace _\bD_\bu_\bn_\be {\n+20namespace Functions {\n 21\n-22namespace _\bD_\bu_\bn_\be {\n-23namespace Functions {\n-24\n-25\n-26/\n-/ *****************************************************************************\n-27// This is the reusable part of the basis. It contains\n-28//\n-29// TaylorHoodPreBasis\n-30// TaylorHoodBasisTree\n-31// TaylorHoodVelocityTree\n-32//\n-33// The pre-basis allows to create the others and is the owner of possible\n-shared\n-34// state. These components do _not_ depend on the global basis and local view\n-35// and can be used without a global basis.\n-36/\n-/ *****************************************************************************\n-37\n-38template\n-39class TaylorHoodVelocityTree;\n-40\n-41template\n-42class TaylorHoodBasisTree;\n-43\n-63template\n-_\b6_\b4class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-65{\n-66 static const bool useHybridIndices = HI;\n-67\n-68 static const int dim = GV::dimension;\n-69\n-70public:\n-71\n-_\b7_\b3 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-74\n-_\b7_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-77\n-_\b7_\b9 using _\bN_\bo_\bd_\be = _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be_\b<_\bG_\bV_\b>;\n-80\n-_\b8_\b1 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = useHybridIndices ? 3 : 2;\n-_\b8_\b2 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = 2;\n-_\b8_\b3 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be = _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be;\n-84\n-85private:\n-86\n-87 using _\bP_\bQ_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b1_\b>;\n-88 using _\bP_\bQ_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b2_\b>;\n-89\n-90public:\n-91\n-_\b9_\b3 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n-94 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n-95 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(gv),\n-96 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(gv)\n-97 {}\n-98\n-_\b1_\b0_\b0 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-101 {\n-102 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs();\n-103 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs();\n-104 }\n-105\n-_\b1_\b0_\b7 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-108 {\n-109 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-110 }\n-111\n-_\b1_\b1_\b3 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-114 {\n-115 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bu_\bp_\bd_\ba_\bt_\be(gv);\n-116 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bu_\bp_\bd_\ba_\bt_\be(gv);\n-117 }\n-118\n-_\b1_\b2_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-123 {\n-124 return _\bN_\bo_\bd_\be{};\n-125 }\n-126\n-_\b1_\b2_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-129 {\n-130 return 2;\n-131 }\n-132\n-134 template\n-_\b1_\b3_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-136 {\n-137 return sizeImp(prefix);\n-138 }\n-139\n-140private:\n-141\n-142 template = 0>\n-144 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeImp(const SizePrefix& prefix) const\n-145 {\n-146 if (prefix.size() == 0)\n-147 return 2;\n-148 if (prefix.size() == 1)\n-149 {\n-150 if (prefix[0] == 0)\n-151 return dim * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n-152 if (prefix[0] == 1)\n-153 return _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n-154 }\n-155 assert(prefix.size() == 2);\n-156 return 0;\n-157 }\n-158\n-159 template = 0>\n-161 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeImp(const SizePrefix& prefix) const\n-162 {\n-163 if (prefix.size() == 0)\n-164 return 2;\n-165 if (prefix.size() == 1)\n-166 {\n-167 if (prefix[0] == 0)\n-168 return _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n-169 if (prefix[0] == 1)\n-170 return _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n-171 }\n-172 if (prefix.size() == 2)\n-173 {\n-174 if (prefix[0] == 0)\n-175 return dim;\n-176 if (prefix[0] == 1)\n-177 return 0;\n-178 }\n-179 assert(prefix.size() == 3);\n-180 return 0;\n-181 }\n-182\n-183public:\n-184\n-_\b1_\b8_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-187 {\n-188 return dim * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be() + _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n-189 }\n-190\n-_\b1_\b9_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-193 {\n-194 return dim * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() + _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be();\n-195 }\n-196\n-197 template\n-_\b1_\b9_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-199 {\n-200 return indicesImp(node, it);\n-201 }\n-202\n-_\b2_\b0_\b8 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n-209 {\n-210 namespace CD = _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs;\n-211 if constexpr(HI)\n-212 return CD::makeDescriptor(\n-213 CD::makeUniformDescriptor(_\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be(),\n-214 CD::FlatArray{}),\n-215 CD::FlatVector{_\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be()});\n-216 else\n-217 return CD::Array{\n-218 CD::FlatVector{GV::dimension * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be()},\n-219 CD::FlatVector{_\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be()} };\n-220 }\n-221\n-222protected:\n-223\n-224 template\n-_\b2_\b2_\b5 static const void _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bu_\bs_\bh_\bF_\br_\bo_\bn_\bt(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n-226 {\n-227 M.resize(M.size()+1);\n-228 for(std::size_t i=M.size()-1; i>0; --i)\n-229 M[i] = M[i-1];\n-230 M[0] = M0;\n-231 }\n-232\n-233 template = 0>\n-_\b2_\b3_\b5 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp(const _\bN_\bo_\bd_\be& node, It multiIndices) const\n-236 {\n-237 using namespace Dune::Indices;\n-238 for(std::size_t child=0; child = 0>\n-_\b2_\b5_\b9 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp(const _\bN_\bo_\bd_\be& node, It multiIndices) const\n-260 {\n-261 using namespace Dune::Indices;\n-262 for(std::size_t child=0; child\n-_\b2_\b9_\b0class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be :\n-291 public _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be, GV::dimension>\n-292{\n-293 using _\bP_\bQ_\b2_\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b2_\b>;\n-294 using _\bB_\ba_\bs_\be = _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bP_\bQ_\b2_\bN_\bo_\bd_\be_\b,_\b _\bG_\bV_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>;\n-295\n-296public:\n-_\b2_\b9_\b7 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be()\n-298 {\n-299 for(int i=0; isetChild(i, std::make_shared());\n-301 }\n-302};\n-303\n-304template\n-_\b3_\b0_\b5class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be :\n-306 public _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be<\n-307 TaylorHoodVelocityTree,\n-308 LagrangeNode\n-309 >\n-310{\n-311 using _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bN_\bo_\bd_\be=_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be_\b<_\bG_\bV_\b>;\n-312 using _\bP_\br_\be_\bs_\bs_\bu_\br_\be_\bN_\bo_\bd_\be=_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b1_\b>;\n-313\n-314 using _\bB_\ba_\bs_\be=_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bN_\bo_\bd_\be_\b,_\b _\bP_\br_\be_\bs_\bs_\bu_\br_\be_\bN_\bo_\bd_\be_\b>;\n-315\n-316public:\n-_\b3_\b1_\b7 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be()\n-318 {\n-319 this->template setChild<0>(std::make_shared());\n-320 this->template setChild<1>(std::make_shared());\n-321 }\n-322};\n-323\n-324\n-325\n-326namespace BasisFactory {\n-327\n-_\b3_\b3_\b4inline auto _\bt_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd()\n-335{\n-336 return [](const auto& gridView) {\n-337 return _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(gridView);\n-338 };\n-339}\n-340\n-341} // end namespace BasisFactory\n-342\n-343/\n-/ *****************************************************************************\n-344// This is the actual global basis implementation based on the reusable\n-parts.\n-345/\n-/ *****************************************************************************\n-346\n-368template\n-_\b3_\b6_\b9using _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b> >;\n-370\n-371\n-372\n-373} // end namespace Functions\n-374} // end namespace Dune\n-375\n-376\n-377#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bt_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd\n-auto taylorHood()\n-Create a pre-basis factory that can create a Taylor-Hood pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:334\n+22\n+23\n+_\b3_\b3struct _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+34{\n+35 template>(), int> = 0>\n+_\b3_\b7 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Node&, const TreePath& treePath, Range&& y)\n+const\n+38 {\n+39 return _\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx(y, treePath);\n+40 }\n+41\n+42 template>(), int> = 0>\n+_\b4_\b4 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Node&, const TreePath&, Range&& y) const\n+45 {\n+46 return std::forward(y);\n+47 }\n+48};\n+49\n+50\n+51\n+52} // namespace Dune::Functions\n+53} // namespace Dune\n+54\n+55\n+56#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx\n+constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex\n+&multiIndex)\n+Provide multi-index access by chaining operator[].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexaccess.hh:421\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn containerdescriptors.hh:47\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-Global basis for given pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:375\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\b1_\b _\b>\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n-It indices(const Node &node, It it) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:180\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void initializeIndices()\n-Initialize the global indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:98\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:172\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:53\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:198\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:252\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:292\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be\n-TaylorHoodVelocityTree()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:297\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:310\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be\n-TaylorHoodBasisTree()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:317\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-Pre-basis for lowest order Taylor-Hood basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:65\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-TaylorHoodPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:93\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:107\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr size_type minMultiIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:82\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:135\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n-GridView gridView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:281\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-The grid view that the FE basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:113\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br\n-auto containerDescriptor() const\n-Return an container descriptor depending on the flag HI. Either return a Tuple\n-if hybrid indices shou...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:208\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n-PQ2PreBasis pq2PreBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:284\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:186\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_\n-PQ1PreBasis pq1PreBasis_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:283\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bP_\bu_\bs_\bh_\bF_\br_\bo_\bn_\bt\n-static const void multiIndexPushFront(MultiIndex &M, size_type M0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:225\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr size_type maxMultiIndexSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:81\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\n-It indices(const Node &node, It it) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:198\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n-static constexpr size_type multiIndexBufferSize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:83\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void initializeIndices()\n-Initialize the global indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:192\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:76\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp\n-It indicesImp(const Node &node, It multiIndices) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:235\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+A simple node to range map using the nested tree indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicnodetorangemap.hh:34\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y)\n+const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicnodetorangemap.hh:37\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicnodetorangemap.hh:44\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00197.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00197.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: raviartthomasbasis.hh File Reference\n+dune-functions: globalvaluedlocalfiniteelement.hh File Reference\n \n \n \n \n \n \n \n@@ -70,71 +70,36 @@\n \n \n
    \n \n-
    raviartthomasbasis.hh File Reference
    \n+Namespaces
    \n+
    globalvaluedlocalfiniteelement.hh File Reference
    \n \n
    \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 <dune/functions/functionspacebases/leafprebasismixin.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
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::Functions::RaviartThomasPreBasis< GV, k >
     
    class  Dune::Functions::RaviartThomasNode< GV, k >
     
    \n \n \n \n \n \n-\n-\n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    \n-\n-\n-\n-\n-\n-

    \n-Typedefs

    template<typename GV , int k>
    using Dune::Functions::RaviartThomasBasis = DefaultGlobalBasis< RaviartThomasPreBasis< GV, k > >
     Basis of a k-th-order Raviart Thomas finite element space.
     
    \n-\n-\n-\n-\n-\n

    \n-Functions

    template<std::size_t k>
    auto Dune::Functions::BasisFactory::raviartThomas ()
     Create a pre-basis factory that can create a Raviart-Thomas pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,53 +1,26 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-raviartthomasbasis.hh File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+globalvaluedlocalfiniteelement.hh File Reference\n #include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k > >\n-\u00a0 Basis of a k-th-order Raviart Thomas finite element space.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs ()\n-\u00a0 Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00197_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00197_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: raviartthomasbasis.hh Source File\n+dune-functions: globalvaluedlocalfiniteelement.hh Source File\n \n \n \n \n \n \n \n@@ -74,462 +74,327 @@\n \n \n \n
    \n-
    raviartthomasbasis.hh
    \n+
    globalvaluedlocalfiniteelement.hh
    \n
    \n
    \n Go to the documentation of this file.
    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
    \n
    4// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file AUTHORS.md
    \n
    5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
    \n
    6
    \n-
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n
    9
    \n
    10#include <array>
    \n-
    11#include <dune/common/exceptions.hh>
    \n+
    11#include <numeric>
    \n
    12
    \n-
    13#include <dune/grid/common/capabilities.hh>
    \n-
    14#include <dune/grid/common/mcmgmapper.hh>
    \n-
    15
    \n-
    16#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n-
    17#include <dune/localfunctions/raviartthomas.hh>
    \n-
    18#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>
    \n-
    19#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>
    \n-
    20#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>
    \n-
    21#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>
    \n-
    22#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>
    \n-
    23#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>
    \n-
    24#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>
    \n-
    25#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>
    \n-
    26
    \n-\n-\n-\n-\n-
    31
    \n-
    32namespace Dune {
    \n-
    33namespace Functions {
    \n-
    34
    \n-
    35namespace Impl {
    \n-
    36
    \n-
    37 template<int dim, typename D, typename R, std::size_t k>
    \n-
    38 struct RaviartThomasSimplexLocalInfo
    \n-
    39 {
    \n-
    40 // Dummy type, must be something that we can have a std::unique_ptr to
    \n-
    41 using FiniteElement = void*;
    \n-
    42 };
    \n-
    43
    \n-
    44 template<typename D, typename R>
    \n-
    45 struct RaviartThomasSimplexLocalInfo<2,D,R,0>
    \n-
    46 {
    \n-
    47 using FiniteElement = RT02DLocalFiniteElement<D,R>;
    \n-
    48 };
    \n-
    49
    \n-
    50 template<typename D, typename R>
    \n-
    51 struct RaviartThomasSimplexLocalInfo<2,D,R,1>
    \n-
    52 {
    \n-
    53 using FiniteElement = RT12DLocalFiniteElement<D,R>;
    \n-
    54 };
    \n-
    55
    \n-
    56 template<typename D, typename R>
    \n-
    57 struct RaviartThomasSimplexLocalInfo<3,D,R,0>
    \n-
    58 {
    \n-
    59 using FiniteElement = RT03DLocalFiniteElement<D,R>;
    \n-
    60 };
    \n-
    61
    \n-
    62 template<int dim, typename D, typename R, std::size_t k>
    \n-
    63 struct RaviartThomasCubeLocalInfo
    \n-
    64 {
    \n-
    65 // Dummy type, must be something that we can have a std::unique_ptr to
    \n-
    66 using FiniteElement = void*;
    \n-
    67 };
    \n-
    68
    \n-
    69 template<typename D, typename R>
    \n-
    70 struct RaviartThomasCubeLocalInfo<2,D,R,0>
    \n-
    71 {
    \n-
    72 using FiniteElement = RT0Cube2DLocalFiniteElement<D,R>;
    \n-
    73 };
    \n-
    74
    \n-
    75 template<typename D, typename R>
    \n-
    76 struct RaviartThomasCubeLocalInfo<2,D,R,1>
    \n-
    77 {
    \n-
    78 using FiniteElement = RT1Cube2DLocalFiniteElement<D,R>;
    \n-
    79 };
    \n-
    80
    \n-
    81 template<typename D, typename R>
    \n-
    82 struct RaviartThomasCubeLocalInfo<2,D,R,2>
    \n-
    83 {
    \n-
    84 using FiniteElement = RT2Cube2DLocalFiniteElement<D,R>;
    \n-
    85 };
    \n-
    86
    \n-
    87 template<typename D, typename R>
    \n-
    88 struct RaviartThomasCubeLocalInfo<3,D,R,0>
    \n-
    89 {
    \n-
    90 using FiniteElement = RT0Cube3DLocalFiniteElement<D,R>;
    \n-
    91 };
    \n-
    92
    \n-
    93 template<typename D, typename R>
    \n-
    94 struct RaviartThomasCubeLocalInfo<3,D,R,1>
    \n-
    95 {
    \n-
    96 using FiniteElement = RT1Cube3DLocalFiniteElement<D,R>;
    \n-
    97 };
    \n-
    98
    \n-
    99 template<typename GV, int dim, typename R, std::size_t k>
    \n-
    100 class RaviartThomasLocalFiniteElementMap
    \n-
    101 {
    \n-
    102 using D = typename GV::ctype;
    \n-
    103 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n+
    13#include <dune/common/fmatrix.hh>
    \n+
    14#include <dune/common/fvector.hh>
    \n+
    15#include <dune/common/math.hh>
    \n+
    16#include <dune/common/rangeutilities.hh>
    \n+
    17
    \n+
    18#include <dune/geometry/referenceelements.hh>
    \n+
    19
    \n+
    20#include <dune/localfunctions/common/localbasis.hh>
    \n+
    21#include <dune/localfunctions/common/localfiniteelementtraits.hh>
    \n+
    22
    \n+
    23namespace Dune::Functions::Impl
    \n+
    24{
    \n+
    25
    \n+
    39 struct ContravariantPiolaTransformator
    \n+
    40 {
    \n+
    45 template<typename Values, typename LocalCoordinate, typename Geometry>
    \n+
    46 static auto apply(Values& values,
    \n+
    47 const LocalCoordinate& xi,
    \n+
    48 const Geometry& geometry)
    \n+
    49 {
    \n+
    50 auto jacobianTransposed = geometry.jacobianTransposed(xi);
    \n+
    51 auto integrationElement = geometry.integrationElement(xi);
    \n+
    52
    \n+
    53 for (auto& value : values)
    \n+
    54 {
    \n+
    55 auto tmp = value;
    \n+
    56 jacobianTransposed.mtv(tmp, value);
    \n+
    57 value /= integrationElement;
    \n+
    58 }
    \n+
    59 }
    \n+
    60
    \n+
    70 template<typename Gradients, typename LocalCoordinate, typename Geometry>
    \n+
    71 static auto applyJacobian(Gradients& gradients,
    \n+
    72 const LocalCoordinate& xi,
    \n+
    73 const Geometry& geometry)
    \n+
    74 {
    \n+
    75 auto jacobianTransposed = geometry.jacobianTransposed(xi);
    \n+
    76 auto integrationElement = geometry.integrationElement(xi);
    \n+
    77 for (auto& gradient : gradients)
    \n+
    78 {
    \n+
    79 auto tmp = gradient;
    \n+
    80 gradient = 0;
    \n+
    81 for (size_t k=0; k<gradient.M(); k++)
    \n+
    82 for (size_t l=0; l<tmp.N(); l++)
    \n+
    83 // Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix
    \n+
    84 for(auto&& [jacobianTransposed_l_j, j] : sparseRange(jacobianTransposed[l]))
    \n+
    85 gradient[j][k] += jacobianTransposed_l_j * tmp[l][k];
    \n+
    86 gradient /= integrationElement;
    \n+
    87 }
    \n+
    88 }
    \n+
    89
    \n+
    97 template<class Function, class LocalCoordinate, class Element>
    \n+
    98 class LocalValuedFunction
    \n+
    99 {
    \n+
    100 const Function& f_;
    \n+
    101 const Element& element_;
    \n+
    102
    \n+
    103 using LocalValue = LocalCoordinate;
    \n
    104
    \n-
    105 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo<dim, D, R, k>::FiniteElement;
    \n-
    106 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo<dim, D, R, k>::FiniteElement;
    \n-
    107
    \n-
    108 public:
    \n-
    109
    \n-
    110 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n-
    111
    \n-
    112 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n-
    113 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n+
    105 public:
    \n+
    106
    \n+
    107 LocalValuedFunction(const Function& f, const Element& element)
    \n+
    108 : f_(f), element_(element)
    \n+
    109 {}
    \n+
    110
    \n+
    111 auto operator()(const LocalCoordinate& xi) const
    \n+
    112 {
    \n+
    113 auto globalValue = f_(xi);
    \n
    114
    \n-
    115 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n-
    116 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n-
    117 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n+
    115 // Apply the inverse Piola transform
    \n+
    116 auto jacobianInverseTransposed = element_.geometry().jacobianInverseTransposed(xi);
    \n+
    117 auto integrationElement = element_.geometry().integrationElement(xi);
    \n
    118
    \n-
    119 // Each element facet can have its orientation reversed, hence there are
    \n-
    120 // 2^#facets different variants.
    \n-
    121 static std::size_t numVariants(GeometryType type)
    \n-
    122 {
    \n-
    123 auto numFacets = referenceElement<D,dim>(type).size(1);
    \n-
    124 return power(2,numFacets);
    \n-
    125 }
    \n-
    126
    \n-
    127 RaviartThomasLocalFiniteElementMap(const GV& gv)
    \n-
    128 : elementMapper_(gv, mcmgElementLayout()),
    \n-
    129 orient_(gv.size(0))
    \n-
    130 {
    \n-
    131 if constexpr (hasFixedElementType)
    \n-
    132 {
    \n-
    133 variants_.resize(numVariants(type));
    \n-
    134 for (size_t i = 0; i < numVariants(type); i++)
    \n-
    135 variants_[i] = FiniteElement(i);
    \n-
    136 }
    \n-
    137 else
    \n-
    138 {
    \n-
    139 // for mixed grids add offset for cubes
    \n-
    140 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));
    \n-
    141 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)
    \n-
    142 variants_[i] = SimplexFiniteElement(i);
    \n-
    143 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)
    \n-
    144 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);
    \n-
    145 }
    \n-
    146
    \n-
    147 for(const auto& cell : elements(gv))
    \n-
    148 {
    \n-
    149 unsigned int myId = elementMapper_.index(cell);
    \n-
    150 orient_[myId] = 0;
    \n-
    151
    \n-
    152 for (const auto& intersection : intersections(gv,cell))
    \n-
    153 {
    \n-
    154 if (intersection.neighbor() && (elementMapper_.index(intersection.outside()) > myId))
    \n-
    155 orient_[myId] |= (1 << intersection.indexInInside());
    \n-
    156 }
    \n-
    157
    \n-
    158 // for mixed grids add offset for cubes
    \n-
    159 if constexpr (!hasFixedElementType)
    \n-
    160 if (cell.type().isCube())
    \n-
    161 orient_[myId] += numVariants(GeometryTypes::simplex(dim));
    \n-
    162 }
    \n-
    163 }
    \n-
    164
    \n-
    165 template<class EntityType>
    \n-
    166 const FiniteElement& find(const EntityType& e) const
    \n-
    167 {
    \n-
    168 return variants_[orient_[elementMapper_.index(e)]];
    \n-
    169 }
    \n-
    170
    \n-
    171 private:
    \n-
    172 std::vector<FiniteElement> variants_;
    \n-
    173 Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;
    \n-
    174 std::vector<unsigned char> orient_;
    \n-
    175 };
    \n+
    119 auto localValue = LocalValue{};
    \n+
    120 jacobianInverseTransposed.mtv(globalValue, localValue);
    \n+
    121 localValue *= integrationElement;
    \n+
    122
    \n+
    123 return localValue;
    \n+
    124 }
    \n+
    125 };
    \n+
    126 };
    \n+
    127
    \n+
    141 struct CovariantPiolaTransformator
    \n+
    142 {
    \n+
    147 template<typename Values, typename LocalCoordinate, typename Geometry>
    \n+
    148 static auto apply(Values& values,
    \n+
    149 const LocalCoordinate& xi,
    \n+
    150 const Geometry& geometry)
    \n+
    151 {
    \n+
    152 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);
    \n+
    153
    \n+
    154 for (auto& value : values)
    \n+
    155 {
    \n+
    156 auto tmp = value;
    \n+
    157 jacobianInverseTransposed.mv(tmp, value);
    \n+
    158 }
    \n+
    159 }
    \n+
    160
    \n+
    170 template<typename Gradients, typename LocalCoordinate, typename Geometry>
    \n+
    171 static auto applyJacobian(Gradients& gradients,
    \n+
    172 const LocalCoordinate& xi,
    \n+
    173 const Geometry& geometry)
    \n+
    174 {
    \n+
    175 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);
    \n
    176
    \n-
    177
    \n-
    178} // namespace Impl
    \n-
    179
    \n-
    180
    \n-
    181// *****************************************************************************
    \n-
    182// This is the reusable part of the basis. It contains
    \n-
    183//
    \n-
    184// RaviartThomasPreBasis
    \n-
    185// RaviartThomasNode
    \n-
    186//
    \n-
    187// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    188// state. These components do _not_ depend on the global basis and local view
    \n-
    189// and can be used without a global basis.
    \n-
    190// *****************************************************************************
    \n-
    191
    \n-
    192template<typename GV, int k>
    \n-
    193class RaviartThomasNode;
    \n-
    194
    \n-
    195template<typename GV, int k>
    \n-
    \n-\n-
    197 public LeafPreBasisMixin< RaviartThomasPreBasis<GV,k> >
    \n-
    198{
    \n-
    199 static const int dim = GV::dimension;
    \n-
    200 using FiniteElementMap = typename Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;
    \n+
    177 for (auto& gradient : gradients)
    \n+
    178 {
    \n+
    179 auto tmp = gradient;
    \n+
    180 gradient = 0;
    \n+
    181 for (size_t j=0; j<gradient.N(); j++)
    \n+
    182 for (size_t k=0; k<gradient.M(); k++)
    \n+
    183 // Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix
    \n+
    184 for(auto&& [jacobianInverseTransposed_j_l, l] : sparseRange(jacobianInverseTransposed[j]))
    \n+
    185 gradient[j][k] += jacobianInverseTransposed_j_l * tmp[l][k];
    \n+
    186 }
    \n+
    187 }
    \n+
    188
    \n+
    196 template<class Function, class LocalCoordinate, class Element>
    \n+
    197 class LocalValuedFunction
    \n+
    198 {
    \n+
    199 const Function& f_;
    \n+
    200 const Element& element_;
    \n
    201
    \n-
    202public:
    \n+
    202 public:
    \n
    203
    \n-
    205 using GridView = GV;
    \n-
    206 using size_type = std::size_t;
    \n+
    204 LocalValuedFunction(const Function& f, const Element& element)
    \n+
    205 : f_(f), element_(element)
    \n+
    206 {}
    \n
    207
    \n-\n-
    209
    \n-
    \n-\n-
    212 gridView_(gv),
    \n-\n-
    214 {
    \n-
    215 // Currently there are some unresolved bugs with hybrid grids and higher order Raviart-Thomas elements
    \n-
    216 if (gv.indexSet().types(0).size() > 1 and k>0)
    \n-
    217 DUNE_THROW(Dune::NotImplemented, "Raviart-Thomas basis with index k>0 is only implemented for grids with a single element type");
    \n-
    218
    \n-
    219 for(auto type : gv.indexSet().types(0))
    \n-
    220 if (!type.isSimplex() && !type.isCube())
    \n-
    221 DUNE_THROW(Dune::NotImplemented, "Raviart-Thomas elements are only implemented for grids with simplex or cube elements.");
    \n+
    208 auto operator()(const LocalCoordinate& xi) const
    \n+
    209 {
    \n+
    210 auto globalValue = f_(xi);
    \n+
    211
    \n+
    212 // Apply the inverse Piola transform
    \n+
    213 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);
    \n+
    214
    \n+
    215 auto localValue = globalValue;
    \n+
    216 jacobianTransposed.mv(globalValue, localValue);
    \n+
    217
    \n+
    218 return localValue;
    \n+
    219 }
    \n+
    220 };
    \n+
    221 };
    \n
    222
    \n-
    223 GeometryType type = gv.template begin<0>()->type();
    \n-
    224 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;
    \n-
    225 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;
    \n-
    226
    \n-
    227 dofsPerCodim_ = {{dofsPerElement, dofsPerFace}};
    \n-
    228 }
    \n-
    \n-
    229
    \n-
    \n-\n+
    229 template<class Transformator, class LocalValuedLocalBasis, class Element>
    \n+
    230 class GlobalValuedLocalBasis
    \n
    231 {
    \n-
    232 codimOffset_[0] = 0;
    \n-
    233 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);
    \n-
    234 }
    \n-
    \n-
    235
    \n-
    \n-
    238 const GridView& gridView() const
    \n-
    239 {
    \n-
    240 return gridView_;
    \n-
    241 }
    \n-
    \n+
    232 public:
    \n+
    233 using Traits = typename LocalValuedLocalBasis::Traits;
    \n+
    234
    \n+
    237 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const Element& element)
    \n+
    238 {
    \n+
    239 localValuedLocalBasis_ = &localValuedLocalBasis;
    \n+
    240 element_ = &element;
    \n+
    241 }
    \n
    242
    \n-
    243 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n-
    \n-
    244 void update (const GridView& gv)
    \n-
    245 {
    \n-
    246 gridView_ = gv;
    \n-
    247 }
    \n-
    \n-
    248
    \n-
    \n-\n-
    253 {
    \n-
    254 return Node{&finiteElementMap_};
    \n-
    255 }
    \n-
    \n-
    256
    \n-
    \n-\n-
    258 {
    \n-
    259 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] * gridView_.size(1);
    \n-
    260 }
    \n-
    \n-
    261
    \n-
    \n-\n-
    263 {
    \n-
    264 size_type result = 0;
    \n-
    265 for (auto&& type : gridView_.indexSet().types(0))
    \n-
    266 {
    \n-
    267 size_t numFaces = ReferenceElements<double,dim>::general(type).size(1);
    \n-
    268 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;
    \n-
    269 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;
    \n-
    270 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);
    \n-
    271 }
    \n-
    272
    \n-
    273 return result;
    \n-
    274 }
    \n-
    \n-
    275
    \n-
    281 template<typename It>
    \n-
    \n-
    282 It indices(const Node& node, It it) const
    \n-
    283 {
    \n-
    284 const auto& gridIndexSet = gridView().indexSet();
    \n-
    285 const auto& element = node.element();
    \n-
    286
    \n-
    287 // throw if Element is not of predefined type
    \n-
    288 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n-
    289 DUNE_THROW(Dune::NotImplemented, "RaviartThomasBasis only implemented for cube and simplex elements.");
    \n-
    290
    \n-
    291 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n-
    292 {
    \n-
    293 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    294
    \n-
    295 // The dimension of the entity that the current dof is related to
    \n-
    296 size_t subentity = localKey.subEntity();
    \n-
    297 size_t codim = localKey.codim();
    \n-
    298
    \n-
    299 if (not(codim==0 or codim==1))
    \n-
    300 DUNE_THROW(Dune::NotImplemented, "Grid contains elements not supported for the RaviartThomasBasis");
    \n+
    245 auto size() const
    \n+
    246 {
    \n+
    247 return localValuedLocalBasis_->size();
    \n+
    248 }
    \n+
    249
    \n+
    251 void evaluateFunction(const typename Traits::DomainType& x,
    \n+
    252 std::vector<typename Traits::RangeType>& out) const
    \n+
    253 {
    \n+
    254 localValuedLocalBasis_->evaluateFunction(x,out);
    \n+
    255
    \n+
    256 Transformator::apply(out, x, element_->geometry());
    \n+
    257 }
    \n+
    258
    \n+
    264 void evaluateJacobian(const typename Traits::DomainType& x,
    \n+
    265 std::vector<typename Traits::JacobianType>& out) const
    \n+
    266 {
    \n+
    267 localValuedLocalBasis_->evaluateJacobian(x,out);
    \n+
    268
    \n+
    269 Transformator::applyJacobian(out, x, element_->geometry());
    \n+
    270 }
    \n+
    271
    \n+
    278 void partial(const std::array<unsigned int,2>& order,
    \n+
    279 const typename Traits::DomainType& x,
    \n+
    280 std::vector<typename Traits::RangeType>& out) const
    \n+
    281 {
    \n+
    282 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
    \n+
    283 if (totalOrder == 0) {
    \n+
    284 evaluateFunction(x, out);
    \n+
    285 } else if (totalOrder == 1) {
    \n+
    286 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
    \n+
    287 out.resize(size());
    \n+
    288
    \n+
    289 // TODO: The following is wasteful: We compute the full Jacobian and then return
    \n+
    290 // only a part of it. While we need the full Jacobian of the underlying local-valued LFE,
    \n+
    291 // it should be possible to compute only a partial Piola transform for the requested
    \n+
    292 // partial derivatives.
    \n+
    293 std::vector<typename Traits::JacobianType> fullJacobian;
    \n+
    294 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);
    \n+
    295
    \n+
    296 Transformator::applyJacobian(fullJacobian, x, element_->geometry());
    \n+
    297
    \n+
    298 for (std::size_t i=0; i<out.size(); i++)
    \n+
    299 for (std::size_t j=0; j<out[i].size(); j++)
    \n+
    300 out[i][j] = fullJacobian[i][j][direction];
    \n
    301
    \n-
    302 *it = { codimOffset_[codim] +
    \n-
    303 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \n+
    302 } else
    \n+
    303 DUNE_THROW(NotImplemented, "Partial derivatives of order 2 or higher");
    \n
    304 }
    \n
    305
    \n-
    306 return it;
    \n-
    307 }
    \n-
    \n-
    308
    \n-
    309protected:
    \n-\n-
    311 std::array<size_t,dim+1> codimOffset_;
    \n-
    312 FiniteElementMap finiteElementMap_;
    \n-
    313 // Number of dofs per entity type depending on the entity's codimension and type
    \n-
    314 std::array<int,dim+1> dofsPerCodim_;
    \n-
    315};
    \n-
    \n-
    316
    \n-
    317
    \n-
    318
    \n-
    319template<typename GV, int k>
    \n-
    \n-\n-
    321 public LeafBasisNode
    \n-
    322{
    \n-
    323 static const int dim = GV::dimension;
    \n-
    324
    \n-
    325public:
    \n-
    326
    \n-
    327 using size_type = std::size_t;
    \n-
    328 using Element = typename GV::template Codim<0>::Entity;
    \n-
    329 using FiniteElementMap = typename Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;
    \n-
    330 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,
    \n-
    331 typename FiniteElementMap::FiniteElement,
    \n-
    332 Element>;
    \n-
    333
    \n-
    \n-
    334 RaviartThomasNode(const FiniteElementMap* finiteElementMap) :
    \n-
    335 element_(nullptr),
    \n-
    336 finiteElementMap_(finiteElementMap)
    \n-
    337 { }
    \n-
    \n-
    338
    \n-
    \n-
    340 const Element& element() const
    \n-
    341 {
    \n-
    342 return *element_;
    \n-
    343 }
    \n-
    \n-
    344
    \n-
    \n-\n-
    350 {
    \n-
    351 return finiteElement_;
    \n-
    352 }
    \n-
    \n-
    353
    \n-
    \n-
    355 void bind(const Element& e)
    \n-
    356 {
    \n-
    357 element_ = &e;
    \n-
    358 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n-
    359 this->setSize(finiteElement_.size());
    \n-
    360 }
    \n-
    \n-
    361
    \n-
    362protected:
    \n-
    363
    \n-\n-\n-\n-
    367};
    \n-
    \n-
    368
    \n-
    369namespace BasisFactory {
    \n-
    370
    \n-
    378template<std::size_t k>
    \n-
    \n-\n-
    380{
    \n-
    381 return [](const auto& gridView) {
    \n-
    382 return RaviartThomasPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n-
    383 };
    \n-
    384}
    \n-
    \n-
    385
    \n-
    386} // end namespace BasisFactory
    \n-
    387
    \n+
    307 auto order() const
    \n+
    308 {
    \n+
    309 return localValuedLocalBasis_->order();
    \n+
    310 }
    \n+
    311
    \n+
    312 const LocalValuedLocalBasis* localValuedLocalBasis_;
    \n+
    313 const Element* element_;
    \n+
    314 };
    \n+
    315
    \n+
    324 template<class Transformator, class LocalValuedLocalInterpolation, class Element>
    \n+
    325 class GlobalValuedLocalInterpolation
    \n+
    326 {
    \n+
    327 public:
    \n+
    330 void bind(const LocalValuedLocalInterpolation& localValuedLocalInterpolation, const Element& element)
    \n+
    331 {
    \n+
    332 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;
    \n+
    333 element_ = &element;
    \n+
    334 }
    \n+
    335
    \n+
    336 template<typename F, typename C>
    \n+
    337 void interpolate (const F& f, std::vector<C>& out) const
    \n+
    338 {
    \n+
    339 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;
    \n+
    340 typename Transformator::template LocalValuedFunction<F,LocalCoordinate,Element> localValuedFunction(f, *element_);
    \n+
    341 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);
    \n+
    342 }
    \n+
    343
    \n+
    344 private:
    \n+
    345 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;
    \n+
    346 const Element* element_;
    \n+
    347 };
    \n+
    348
    \n+
    349
    \n+
    356 template<class Transformator, class LocalValuedLFE, class Element>
    \n+
    357 class GlobalValuedLocalFiniteElement
    \n+
    358 {
    \n+
    359 using LocalBasis = GlobalValuedLocalBasis<Transformator,
    \n+
    360 typename LocalValuedLFE::Traits::LocalBasisType,
    \n+
    361 Element>;
    \n+
    362 using LocalInterpolation = GlobalValuedLocalInterpolation<Transformator,
    \n+
    363 typename LocalValuedLFE::Traits::LocalInterpolationType,
    \n+
    364 Element>;
    \n+
    365
    \n+
    366 public:
    \n+
    369 using Traits = LocalFiniteElementTraits<LocalBasis,
    \n+
    370 typename LocalValuedLFE::Traits::LocalCoefficientsType,
    \n+
    371 LocalInterpolation>;
    \n+
    372
    \n+
    373 GlobalValuedLocalFiniteElement() {}
    \n+
    374
    \n+
    375 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)
    \n+
    376 {
    \n+
    377 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);
    \n+
    378 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(), element);
    \n+
    379 localValuedLFE_ = &localValuedLFE;
    \n+
    380 }
    \n+
    381
    \n+
    384 const typename Traits::LocalBasisType& localBasis() const
    \n+
    385 {
    \n+
    386 return globalValuedLocalBasis_;
    \n+
    387 }
    \n
    388
    \n-
    389
    \n-
    390// *****************************************************************************
    \n-
    391// This is the actual global basis implementation based on the reusable parts.
    \n-
    392// *****************************************************************************
    \n-
    393
    \n-
    401template<typename GV, int k>
    \n-\n-
    403
    \n-
    404} // end namespace Functions
    \n-
    405} // end namespace Dune
    \n-
    406
    \n-
    407
    \n-
    408#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n-\n-\n-\n-\n-
    auto raviartThomas()
    Create a pre-basis factory that can create a Raviart-Thomas pre-basis.
    Definition raviartthomasbasis.hh:379
    \n-
    auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const IndexMergingStrategy &)
    Create a pre-basis factory that can build a PowerPreBasis.
    Definition dynamicpowerbasis.hh:409
    \n-
    Definition polynomial.hh:17
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n-
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n-
    size_type size() const
    Definition nodes.hh:147
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:169
    \n-
    Definition nodes.hh:191
    \n-
    Definition raviartthomasbasis.hh:322
    \n-
    typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap
    Definition raviartthomasbasis.hh:329
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition raviartthomasbasis.hh:355
    \n-
    Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition raviartthomasbasis.hh:332
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition raviartthomasbasis.hh:328
    \n-
    const Element * element_
    Definition raviartthomasbasis.hh:365
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition raviartthomasbasis.hh:349
    \n-
    std::size_t size_type
    Definition raviartthomasbasis.hh:327
    \n-
    RaviartThomasNode(const FiniteElementMap *finiteElementMap)
    Definition raviartthomasbasis.hh:334
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition raviartthomasbasis.hh:340
    \n-
    FiniteElement finiteElement_
    Definition raviartthomasbasis.hh:364
    \n-
    const FiniteElementMap * finiteElementMap_
    Definition raviartthomasbasis.hh:366
    \n-
    Definition raviartthomasbasis.hh:198
    \n-
    Node makeNode() const
    Create tree node.
    Definition raviartthomasbasis.hh:252
    \n-
    std::array< int, dim+1 > dofsPerCodim_
    Definition raviartthomasbasis.hh:314
    \n-
    void update(const GridView &gv)
    Definition raviartthomasbasis.hh:244
    \n-
    RaviartThomasPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition raviartthomasbasis.hh:211
    \n-
    std::size_t size_type
    Definition raviartthomasbasis.hh:206
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition raviartthomasbasis.hh:238
    \n-
    It indices(const Node &node, It it) const
    Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.
    Definition raviartthomasbasis.hh:282
    \n-
    FiniteElementMap finiteElementMap_
    Definition raviartthomasbasis.hh:312
    \n-
    size_type dimension() const
    Definition raviartthomasbasis.hh:257
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition raviartthomasbasis.hh:205
    \n-
    size_type maxNodeSize() const
    Definition raviartthomasbasis.hh:262
    \n-
    GridView gridView_
    Definition raviartthomasbasis.hh:310
    \n-
    void initializeIndices()
    Definition raviartthomasbasis.hh:230
    \n-
    std::array< size_t, dim+1 > codimOffset_
    Definition raviartthomasbasis.hh:311
    \n+
    391 const typename Traits::LocalCoefficientsType& localCoefficients() const
    \n+
    392 {
    \n+
    393 return localValuedLFE_->localCoefficients();
    \n+
    394 }
    \n+
    395
    \n+
    398 const typename Traits::LocalInterpolationType& localInterpolation() const
    \n+
    399 {
    \n+
    400 return globalValuedLocalInterpolation_;
    \n+
    401 }
    \n+
    402
    \n+
    404 std::size_t size() const
    \n+
    405 {
    \n+
    406 return localValuedLFE_->size();
    \n+
    407 }
    \n+
    408
    \n+
    411 GeometryType type() const
    \n+
    412 {
    \n+
    413 return localValuedLFE_->type();
    \n+
    414 }
    \n+
    415
    \n+
    416 private:
    \n+
    417
    \n+
    418 typename Traits::LocalBasisType globalValuedLocalBasis_;
    \n+
    419 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;
    \n+
    420 const LocalValuedLFE* localValuedLFE_;
    \n+
    421 };
    \n+
    422
    \n+
    423} // namespace Dune::Functions::Impl
    \n+
    424
    \n+
    425#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n+
    void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)
    Interpolate given function in discrete function space.
    Definition interpolate.hh:203
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,545 +1,341 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-raviartthomasbasis.hh\n+globalvaluedlocalfiniteelement.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\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\n 4// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n AUTHORS.md\n 5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR\n LGPL-3.0-or-later\n 6\n-7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n 9\n 10#include \n-11#include \n+11#include \n 12\n-13#include \n-14#include \n-15\n-16#include \n-17#include \n-18#include \n-19#include \n-20#include \n-21#include \n-22#include \n-23#include \n-24#include \n-25#include \n-26\n-27#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/\n-_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n-28#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-29#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-30#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-31\n-32namespace _\bD_\bu_\bn_\be {\n-33namespace Functions {\n-34\n-35namespace Impl {\n-36\n-37 template\n-38 struct RaviartThomasSimplexLocalInfo\n-39 {\n-40 // Dummy type, must be something that we can have a std::unique_ptr to\n-41 using FiniteElement = void*;\n-42 };\n-43\n-44 template\n-45 struct RaviartThomasSimplexLocalInfo<2,D,R,0>\n-46 {\n-47 using FiniteElement = RT02DLocalFiniteElement;\n-48 };\n-49\n-50 template\n-51 struct RaviartThomasSimplexLocalInfo<2,D,R,1>\n-52 {\n-53 using FiniteElement = RT12DLocalFiniteElement;\n-54 };\n-55\n-56 template\n-57 struct RaviartThomasSimplexLocalInfo<3,D,R,0>\n-58 {\n-59 using FiniteElement = RT03DLocalFiniteElement;\n-60 };\n-61\n-62 template\n-63 struct RaviartThomasCubeLocalInfo\n-64 {\n-65 // Dummy type, must be something that we can have a std::unique_ptr to\n-66 using FiniteElement = void*;\n-67 };\n-68\n-69 template\n-70 struct RaviartThomasCubeLocalInfo<2,D,R,0>\n-71 {\n-72 using FiniteElement = RT0Cube2DLocalFiniteElement;\n-73 };\n-74\n-75 template\n-76 struct RaviartThomasCubeLocalInfo<2,D,R,1>\n-77 {\n-78 using FiniteElement = RT1Cube2DLocalFiniteElement;\n-79 };\n-80\n-81 template\n-82 struct RaviartThomasCubeLocalInfo<2,D,R,2>\n-83 {\n-84 using FiniteElement = RT2Cube2DLocalFiniteElement;\n-85 };\n-86\n-87 template\n-88 struct RaviartThomasCubeLocalInfo<3,D,R,0>\n-89 {\n-90 using FiniteElement = RT0Cube3DLocalFiniteElement;\n-91 };\n-92\n-93 template\n-94 struct RaviartThomasCubeLocalInfo<3,D,R,1>\n-95 {\n-96 using FiniteElement = RT1Cube3DLocalFiniteElement;\n-97 };\n-98\n-99 template\n-100 class RaviartThomasLocalFiniteElementMap\n-101 {\n-102 using D = typename GV::ctype;\n-103 constexpr static bool hasFixedElementType = Capabilities::\n-hasSingleGeometryType::v;\n+13#include \n+14#include \n+15#include \n+16#include \n+17\n+18#include \n+19\n+20#include \n+21#include \n+22\n+23namespace Dune::Functions::Impl\n+24{\n+25\n+39 struct ContravariantPiolaTransformator\n+40 {\n+45 template\n+46 static auto apply(Values& values,\n+47 const LocalCoordinate& xi,\n+48 const Geometry& geometry)\n+49 {\n+50 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n+51 auto integrationElement = geometry.integrationElement(xi);\n+52\n+53 for (auto& value : values)\n+54 {\n+55 auto tmp = value;\n+56 jacobianTransposed.mtv(tmp, value);\n+57 value /= integrationElement;\n+58 }\n+59 }\n+60\n+70 template\n+71 static auto applyJacobian(Gradients& gradients,\n+72 const LocalCoordinate& xi,\n+73 const Geometry& geometry)\n+74 {\n+75 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n+76 auto integrationElement = geometry.integrationElement(xi);\n+77 for (auto& gradient : gradients)\n+78 {\n+79 auto tmp = gradient;\n+80 gradient = 0;\n+81 for (size_t k=0; k\n+98 class LocalValuedFunction\n+99 {\n+100 const Function& f_;\n+101 const Element& element_;\n+102\n+103 using LocalValue = LocalCoordinate;\n 104\n-105 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo::FiniteElement;\n-106 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo::FiniteElement;\n-107\n-108 public:\n-109\n-110 using T = LocalBasisTraits, R, dim,\n-FieldVector, FieldMatrix >;\n-111\n-112 constexpr static unsigned int topologyId = Capabilities::\n-hasSingleGeometryType::topologyId; // meaningless if\n-hasFixedElementType is false\n-113 constexpr static GeometryType type = GeometryType(topologyId, GV::\n-dimension);\n+105 public:\n+106\n+107 LocalValuedFunction(const Function& f, const Element& element)\n+108 : f_(f), element_(element)\n+109 {}\n+110\n+111 auto operator()(const LocalCoordinate& xi) const\n+112 {\n+113 auto globalValue = f_(xi);\n 114\n-115 using FiniteElement = std::conditional_t,\n-117 LocalFiniteElementVariant >;\n+115 // Apply the inverse Piola transform\n+116 auto jacobianInverseTransposed = element_.geometry\n+().jacobianInverseTransposed(xi);\n+117 auto integrationElement = element_.geometry().integrationElement(xi);\n 118\n-119 // Each element facet can have its orientation reversed, hence there are\n-120 // 2^#facets different variants.\n-121 static std::size_t numVariants(GeometryType type)\n-122 {\n-123 auto numFacets = referenceElement(type).size(1);\n-124 return _\bp_\bo_\bw_\be_\br(2,numFacets);\n-125 }\n-126\n-127 RaviartThomasLocalFiniteElementMap(const GV& gv)\n-128 : elementMapper_(gv, mcmgElementLayout()),\n-129 orient_(gv.size(0))\n-130 {\n-131 if constexpr (hasFixedElementType)\n-132 {\n-133 variants_.resize(numVariants(type));\n-134 for (size_t i = 0; i < numVariants(type); i++)\n-135 variants_[i] = FiniteElement(i);\n-136 }\n-137 else\n-138 {\n-139 // for mixed grids add offset for cubes\n-140 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n-(GeometryTypes::cube(dim)));\n-141 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n-142 variants_[i] = SimplexFiniteElement(i);\n-143 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n-144 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n-(i);\n-145 }\n-146\n-147 for(const auto& cell : elements(gv))\n-148 {\n-149 unsigned int myId = elementMapper_.index(cell);\n-150 orient_[myId] = 0;\n-151\n-152 for (const auto& intersection : intersections(gv,cell))\n-153 {\n-154 if (intersection.neighbor() && (elementMapper_.index(intersection.outside\n-()) > myId))\n-155 orient_[myId] |= (1 << intersection.indexInInside());\n-156 }\n-157\n-158 // for mixed grids add offset for cubes\n-159 if constexpr (!hasFixedElementType)\n-160 if (cell.type().isCube())\n-161 orient_[myId] += numVariants(GeometryTypes::simplex(dim));\n-162 }\n-163 }\n-164\n-165 template\n-166 const FiniteElement& find(const EntityType& e) const\n-167 {\n-168 return variants_[orient_[elementMapper_.index(e)]];\n-169 }\n-170\n-171 private:\n-172 std::vector variants_;\n-173 Dune::MultipleCodimMultipleGeomTypeMapper elementMapper_;\n-174 std::vector orient_;\n-175 };\n+119 auto localValue = LocalValue{};\n+120 jacobianInverseTransposed.mtv(globalValue, localValue);\n+121 localValue *= integrationElement;\n+122\n+123 return localValue;\n+124 }\n+125 };\n+126 };\n+127\n+141 struct CovariantPiolaTransformator\n+142 {\n+147 template\n+148 static auto apply(Values& values,\n+149 const LocalCoordinate& xi,\n+150 const Geometry& geometry)\n+151 {\n+152 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n+153\n+154 for (auto& value : values)\n+155 {\n+156 auto tmp = value;\n+157 jacobianInverseTransposed.mv(tmp, value);\n+158 }\n+159 }\n+160\n+170 template\n+171 static auto applyJacobian(Gradients& gradients,\n+172 const LocalCoordinate& xi,\n+173 const Geometry& geometry)\n+174 {\n+175 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n 176\n-177\n-178} // namespace Impl\n-179\n-180\n-181/\n-/ *****************************************************************************\n-182// This is the reusable part of the basis. It contains\n-183//\n-184// RaviartThomasPreBasis\n-185// RaviartThomasNode\n-186//\n-187// The pre-basis allows to create the others and is the owner of possible\n-shared\n-188// state. These components do _not_ depend on the global basis and local\n-view\n-189// and can be used without a global basis.\n-190/\n-/ *****************************************************************************\n-191\n-192template\n-193class RaviartThomasNode;\n-194\n-195template\n-_\b1_\b9_\b6class _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n-197 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< RaviartThomasPreBasis >\n-198{\n-199 static const int dim = GV::dimension;\n-200 using FiniteElementMap = typename Impl::\n-RaviartThomasLocalFiniteElementMap;\n+177 for (auto& gradient : gradients)\n+178 {\n+179 auto tmp = gradient;\n+180 gradient = 0;\n+181 for (size_t j=0; j\n+197 class LocalValuedFunction\n+198 {\n+199 const Function& f_;\n+200 const Element& element_;\n 201\n-202public:\n+202 public:\n 203\n-_\b2_\b0_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b2_\b0_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+204 LocalValuedFunction(const Function& f, const Element& element)\n+205 : f_(f), element_(element)\n+206 {}\n 207\n-_\b2_\b0_\b8 using _\bN_\bo_\bd_\be = _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b>;\n-209\n-_\b2_\b1_\b1 _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n-212 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n-213 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv)\n-214 {\n-215 // Currently there are some unresolved bugs with hybrid grids and higher\n-order Raviart-Thomas elements\n-216 if (gv.indexSet().types(0).size() > 1 and k>0)\n-217 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas basis with index k>0 is\n-only implemented for grids with a single element type\");\n-218\n-219 for(auto type : gv.indexSet().types(0))\n-220 if (!type.isSimplex() && !type.isCube())\n-221 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas elements are only\n-implemented for grids with simplex or cube elements.\");\n+208 auto operator()(const LocalCoordinate& xi) const\n+209 {\n+210 auto globalValue = f_(xi);\n+211\n+212 // Apply the inverse Piola transform\n+213 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);\n+214\n+215 auto localValue = globalValue;\n+216 jacobianTransposed.mv(globalValue, localValue);\n+217\n+218 return localValue;\n+219 }\n+220 };\n+221 };\n 222\n-223 GeometryType type = gv.template begin<0>()->type();\n-224 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim\n-: k*(k+1)*(k+1)*dim) : k*dim;\n-225 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n-1)*k+1 ;\n-226\n-227 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_ = {{dofsPerElement, dofsPerFace}};\n-228 }\n-229\n-_\b2_\b3_\b0 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+229 template\n+230 class GlobalValuedLocalBasis\n 231 {\n-232 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] = 0;\n-233 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[1] = _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0);\n-234 }\n-235\n-_\b2_\b3_\b8 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-239 {\n-240 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+232 public:\n+233 using Traits = typename LocalValuedLocalBasis::Traits;\n+234\n+237 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const\n+Element& element)\n+238 {\n+239 localValuedLocalBasis_ = &localValuedLocalBasis;\n+240 element_ = &element;\n 241 }\n 242\n-243 /* \\brief Update the stored grid view, to be called if the grid has changed\n-*/\n-_\b2_\b4_\b4 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-245 {\n-246 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-247 }\n-248\n-_\b2_\b5_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+245 auto size() const\n+246 {\n+247 return localValuedLocalBasis_->size();\n+248 }\n+249\n+251 void evaluateFunction(const typename Traits::DomainType& x,\n+252 std::vector& out) const\n 253 {\n-254 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n-255 }\n-256\n-_\b2_\b5_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-258 {\n-259 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[0] * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0) + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_[1] *\n-_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(1);\n-260 }\n-261\n-_\b2_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-263 {\n-264 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n-265 for (auto&& type : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0))\n+254 localValuedLocalBasis_->evaluateFunction(x,out);\n+255\n+256 Transformator::apply(out, x, element_->geometry());\n+257 }\n+258\n+264 void evaluateJacobian(const typename Traits::DomainType& x,\n+265 std::vector& out) const\n 266 {\n-267 size_t numFaces = ReferenceElements::general(type).size(1);\n-268 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim\n-: k*(k+1)*(k+1)*dim) : k*dim;\n-269 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n-1)*k+1 ;\n-270 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);\n-271 }\n-272\n-273 return result;\n-274 }\n-275\n-281 template\n-_\b2_\b8_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-283 {\n-284 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-285 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-286\n-287 // throw if Element is not of predefined type\n-288 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n-289 DUNE_THROW(Dune::NotImplemented, \"RaviartThomasBasis only implemented for\n-cube and simplex elements.\");\n-290\n-291 for(std::size_t i=0, end=node._\bs_\bi_\bz_\be(); ievaluateJacobian(x,out);\n+268\n+269 Transformator::applyJacobian(out, x, element_->geometry());\n+270 }\n+271\n+278 void partial(const std::array& order,\n+279 const typename Traits::DomainType& x,\n+280 std::vector& out) const\n+281 {\n+282 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);\n+283 if (totalOrder == 0) {\n+284 evaluateFunction(x, out);\n+285 } else if (totalOrder == 1) {\n+286 auto const direction = std::distance(order.begin(), std::find(order.begin\n+(), order.end(), 1));\n+287 out.resize(size());\n+288\n+289 // TODO: The following is wasteful: We compute the full Jacobian and then\n+return\n+290 // only a part of it. While we need the full Jacobian of the underlying\n+local-valued LFE,\n+291 // it should be possible to compute only a partial Piola transform for the\n+requested\n+292 // partial derivatives.\n+293 std::vector fullJacobian;\n+294 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);\n+295\n+296 Transformator::applyJacobian(fullJacobian, x, element_->geometry());\n+297\n+298 for (std::size_t i=0; i _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b1_\b2 FiniteElementMap _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n-313 // Number of dofs per entity type depending on the entity's codimension and\n-type\n-_\b3_\b1_\b4 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_;\n-315};\n-316\n-317\n-318\n-319template\n-_\b3_\b2_\b0class _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be :\n-321 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-322{\n-323 static const int dim = GV::dimension;\n-324\n-325public:\n-326\n-_\b3_\b2_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b3_\b2_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b3_\b2_\b9 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::\n-RaviartThomasLocalFiniteElementMap;\n-_\b3_\b3_\b0 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n-333\n-_\b3_\b3_\b4 _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be(const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* finiteElementMap) :\n-335 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-336 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n-337 { }\n-338\n-_\b3_\b4_\b0 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-341 {\n-342 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-343 }\n-344\n-_\b3_\b4_\b9 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt() const\n-350 {\n-351 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-352 }\n-353\n-_\b3_\b5_\b5 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-356 {\n-357 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-358 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.bind((_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_->find(*_\be_\bl_\be_\bm_\be_\bn_\bt_\b_)), e);\n-359 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n-360 }\n-361\n-362protected:\n-363\n-_\b3_\b6_\b4 _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b3_\b6_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b3_\b6_\b6 const _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp* _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n-367};\n-368\n-369namespace BasisFactory {\n-370\n-378template\n-_\b3_\b7_\b9auto _\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs()\n-380{\n-381 return [](const auto& gridView) {\n-382 return _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k>\n-(gridView);\n-383 };\n-384}\n-385\n-386} // end namespace BasisFactory\n-387\n+307 auto order() const\n+308 {\n+309 return localValuedLocalBasis_->order();\n+310 }\n+311\n+312 const LocalValuedLocalBasis* localValuedLocalBasis_;\n+313 const Element* element_;\n+314 };\n+315\n+324 template\n+325 class GlobalValuedLocalInterpolation\n+326 {\n+327 public:\n+330 void bind(const LocalValuedLocalInterpolation&\n+localValuedLocalInterpolation, const Element& element)\n+331 {\n+332 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;\n+333 element_ = &element;\n+334 }\n+335\n+336 template\n+337 void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const F& f, std::vector& out) const\n+338 {\n+339 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;\n+340 typename Transformator::template\n+LocalValuedFunction localValuedFunction(f,\n+*element_);\n+341 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);\n+342 }\n+343\n+344 private:\n+345 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;\n+346 const Element* element_;\n+347 };\n+348\n+349\n+356 template\n+357 class GlobalValuedLocalFiniteElement\n+358 {\n+359 using LocalBasis = GlobalValuedLocalBasis;\n+362 using LocalInterpolation = GlobalValuedLocalInterpolation;\n+365\n+366 public:\n+369 using Traits = LocalFiniteElementTraits;\n+372\n+373 GlobalValuedLocalFiniteElement() {}\n+374\n+375 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)\n+376 {\n+377 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);\n+378 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(),\n+element);\n+379 localValuedLFE_ = &localValuedLFE;\n+380 }\n+381\n+384 const typename Traits::LocalBasisType& localBasis() const\n+385 {\n+386 return globalValuedLocalBasis_;\n+387 }\n 388\n-389\n-390/\n-/ *****************************************************************************\n-391// This is the actual global basis implementation based on the reusable\n-parts.\n-392/\n-/ *****************************************************************************\n-393\n-401template\n-_\b4_\b0_\b2using _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b<_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b>\n->;\n-403\n-404} // end namespace Functions\n-405} // end namespace Dune\n-406\n-407\n-408#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n-_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs\n-auto raviartThomas()\n-Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:379\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bp_\bo_\bw_\be_\br\n-auto power(ChildPreBasisFactory &&childPreBasisFactory, std::size_t k, const\n-IndexMergingStrategy &)\n-Create a pre-basis factory that can build a PowerPreBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynamicpowerbasis.hh:409\n-_\bD_\bu_\bn_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:17\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-Global basis for given pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultglobalbasis.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-A generic MixIn class for PreBasis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\be_\bt_\bS_\bi_\bz_\be\n-void setSize(const size_type size)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:191\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:322\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp\n-typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k >\n-FiniteElementMap\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:329\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind to element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:355\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator,\n-typename FiniteElementMap::FiniteElement, Element > FiniteElement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:332\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename GV::template Codim< 0 >::Entity Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:328\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\b_\n-const Element * element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:365\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:349\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:327\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be\n-RaviartThomasNode(const FiniteElementMap *finiteElementMap)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:334\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return current element, throw if unbound.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:340\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_\n-FiniteElement finiteElement_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:364\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n-const FiniteElementMap * finiteElementMap_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:366\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:198\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n-Node makeNode() const\n-Create tree node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:252\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_\n-std::array< int, dim+1 > dofsPerCodim_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:314\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:244\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-RaviartThomasPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:211\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:206\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:238\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bd_\bi_\bc_\be_\bs\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:282\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_\n-FiniteElementMap finiteElementMap_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:312\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-size_type dimension() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:257\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-GV GridView\n-The grid view that the FE space is defined on.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:205\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be\n-size_type maxNodeSize() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:262\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n-GridView gridView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:310\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-void initializeIndices()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:230\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-std::array< size_t, dim+1 > codimOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:311\n+391 const typename Traits::LocalCoefficientsType& localCoefficients() const\n+392 {\n+393 return localValuedLFE_->localCoefficients();\n+394 }\n+395\n+398 const typename Traits::LocalInterpolationType& localInterpolation() const\n+399 {\n+400 return globalValuedLocalInterpolation_;\n+401 }\n+402\n+404 std::size_t size() const\n+405 {\n+406 return localValuedLFE_->size();\n+407 }\n+408\n+411 GeometryType type() const\n+412 {\n+413 return localValuedLFE_->type();\n+414 }\n+415\n+416 private:\n+417\n+418 typename Traits::LocalBasisType globalValuedLocalBasis_;\n+419 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;\n+420 const LocalValuedLFE* localValuedLFE_;\n+421 };\n+422\n+423} // namespace Dune::Functions::Impl\n+424\n+425#endif /\n+/ DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn interpolate.hh:203\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01055.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01055.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Functions::Polynomial< K, C > Class Template Reference
    \n \n
    \n \n

    A univariate polynomial implementation. \n More...

    \n \n-

    #include <dune/functions/analyticfunctions/polynomial.hh>

    \n+

    #include <dune/functions/analyticfunctions/polynomial.hh>

    \n \n \n \n \n \n

    \n Public Types

    using Coefficients = C
     The type of the stored coefficient container.
     
    \n@@ -299,15 +299,15 @@\n
    \n \n

    Comparison of coefficients.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01067.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01067.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::TrigonometricFunction< K, sinFactor, cosFactor > Class Template Reference
    \n \n
    \n \n

    A linear combination of trigonomic functions. \n More...

    \n \n-

    #include <dune/functions/analyticfunctions/trigonometricfunction.hh>

    \n+

    #include <dune/functions/analyticfunctions/trigonometricfunction.hh>

    \n
    \n \n \n \n \n

    \n Public Member Functions

    operator() (const K &x) const
     Evaluate function.
     
    \n@@ -131,15 +131,15 @@\n
    \n \n

    Evaluate function.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01083.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01083.html", "unified_diff": "@@ -76,19 +76,19 @@\n
    Dune::Functions::InvalidRange Class Reference
    \n \n
    \n \n

    Dummy range class to be used if no proper type is available. \n More...

    \n \n-

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n+

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n

    Detailed Description

    \n

    Dummy range class to be used if no proper type is available.

    \n

    The documentation for this class was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01087.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01087.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::DefaultDerivativeTraits< Signature > Struct Template Reference
    \n \n
    \n \n

    Default implementation for derivative traits. \n More...

    \n \n-

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n+

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n \n \n \n \n \n

    \n Public Types

    typedef InvalidRange Range
     Range of derivative for function with given signature.
     
    \n@@ -111,15 +111,15 @@\n
    \n \n

    Range of derivative for function with given signature.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01091.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01091.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::DefaultDerivativeTraits< double(double) > Struct Reference
    \n \n
    \n \n

    Default implementation for derivative traits. \n More...

    \n \n-

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n+

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n \n \n \n \n \n

    \n Public Types

    typedef double Range
     Range of derivative for function with given signature.
     
    \n@@ -108,15 +108,15 @@\n
    \n \n

    Range of derivative for function with given signature.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01095.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01095.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)> Struct Template Reference
    \n \n
    \n \n

    Default implementation for derivative traits. \n More...

    \n \n-

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n+

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n \n \n \n \n \n

    \n Public Types

    typedef FieldVector< K, n > Range
     Range of derivative for function with given signature.
     
    \n@@ -117,15 +117,15 @@\n
    \n \n

    Range of derivative for function with given signature.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01099.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01099.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)> Struct Template Reference
    \n \n
    \n \n

    Default implementation for derivative traits. \n More...

    \n \n-

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n+

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n \n \n \n \n \n

    \n Public Types

    typedef FieldMatrix< K, m, n > Range
     Range of derivative for function with given signature.
     
    \n@@ -117,15 +117,15 @@\n
    \n \n

    Range of derivative for function with given signature.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01103.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01103.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)> Struct Template Reference
    \n \n
    \n \n

    Default implementation for derivative traits. \n More...

    \n \n-

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n+

    #include <dune/functions/common/defaultderivativetraits.hh>

    \n \n \n \n \n \n

    \n Public Types

    typedef FieldMatrix< K, m, n > Range
     Range of derivative for function with given signature.
     
    \n@@ -117,15 +117,15 @@\n
    \n \n

    Range of derivative for function with given signature.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01107.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01107.html", "unified_diff": "@@ -73,17 +73,17 @@\n \n \n
    \n
    Dune::Functions::DifferentiableFunction< Signature, DerivativeTraits, bufferSize > Class Template Reference
    \n
    \n
    \n \n-

    #include <dune/functions/common/differentiablefunction.hh>

    \n+

    #include <dune/functions/common/differentiablefunction.hh>

    \n
    The documentation for this class was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01115.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01115.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize > Class Template Reference
    \n \n
    \n \n

    Class storing differentiable functions using type erasure. \n More...

    \n \n-

    #include <dune/functions/common/differentiablefunction.hh>

    \n+

    #include <dune/functions/common/differentiablefunction.hh>

    \n
    \n Inheritance diagram for Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -233,15 +233,15 @@\n
    \n \n

    Evaluation of wrapped function.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01139.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01139.html", "unified_diff": "@@ -83,15 +83,15 @@\n \n \"\"\n \"\"\n \"\"\n \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01143.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01143.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F > Class Template Reference
    \n \n
    \n \n

    Wrap a list of callable objects as derivative sequence modelling Concept::DifferentiableFunction<Range(Domain), DerivativeTraits> \n More...

    \n \n-

    #include <dune/functions/common/differentiablefunctionfromcallables.hh>

    \n+

    #include <dune/functions/common/differentiablefunctionfromcallables.hh>

    \n \n \n \n \n \n \n@@ -262,15 +262,15 @@\n
    \n \n

    Evaluate function.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01147.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01147.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... > Class Template Reference
    \n \n

    \n Public Types

    using Signature = Range(Domain)
     Signature of function.
     
    using RawSignature = typename SignatureTraits< Signature >::RawSignature
    \n \n \n \n \n \n@@ -270,15 +270,15 @@\n
    \n \n

    Evaluate function.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01151.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01151.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::Concept::Callable< Args > Struct Template Reference
    \n \n
    \n \n

    Concept objects that can be called with given argument list. \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n

    \n Public Types

    using Signature = Range(Domain)
     
    using RawSignature = typename SignatureTraits< Signature >::RawSignature
     
    \n \n \n \n \n

    \n Public Member Functions

    template<class F >
    auto require (F &&f) -> decltype(f(std::declval< Args >()...))
     
    \n@@ -120,15 +120,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \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 \n \n
    \n
    Dune::Functions::Concept::Function< Signature > Struct Template Reference
    \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01159.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01159.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::Concept::Function< Range(Domain)> Struct Template Reference
    \n \n
    \n \n

    Concept for a function mapping Domain to Range. \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n
    \n Inheritance diagram for Dune::Functions::Concept::Function< Range(Domain)>:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -131,15 +131,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01163.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01163.html", "unified_diff": "@@ -73,15 +73,15 @@\n \n \n
    \n
    Dune::Functions::Concept::DifferentiableFunction< Signature, DerivativeTraits > Struct Template Reference
    \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01167.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01167.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits > Struct Template Reference
    \n \n
    \n \n

    Concept for a differentiable function mapping Domain to Range. \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n
    \n Inheritance diagram for Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -156,15 +156,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01171.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01171.html", "unified_diff": "@@ -73,15 +73,15 @@\n \n \n
    \n
    Dune::Functions::Concept::LocalFunction< Signature, LocalContext > Struct Template Reference
    \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01175.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01175.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext > Struct Template Reference
    \n \n
    \n \n

    Concept for a local function mapping Domain to Range. \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n
    \n Inheritance diagram for Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -132,15 +132,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01179.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01179.html", "unified_diff": "@@ -73,15 +73,15 @@\n \n \n
    \n
    Dune::Functions::Concept::DifferentiableLocalFunction< Signature, LocalContext, DerivativeTraits > Struct Template Reference
    \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01183.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01183.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits > Struct Template Reference
    \n \n
    \n \n

    Concept for a differentiable local function mapping Domain to Range. \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n
    \n Inheritance diagram for Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -134,15 +134,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01187.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01187.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::Concept::EntitySet Struct Reference
    \n \n
    \n \n

    Concept for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits> \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n \n \n \n \n \n

    \n Public Member Functions

    template<class E >
    auto require (E &&f) -> decltype(requireType< typename E::Element >(), requireType< typename E::LocalCoordinate >(), requireType< typename E::GlobalCoordinate >())
     
    \n@@ -112,15 +112,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \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 \n \n
    \n
    Dune::Functions::Concept::GridFunction< Signature, EntitySet > Struct Template Reference
    \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01195.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01195.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet > Struct Template Reference
    \n \n
    \n \n

    Concept for a grid function mapping Domain to Range. \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n
    \n Inheritance diagram for Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -173,15 +173,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01199.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01199.html", "unified_diff": "@@ -73,15 +73,15 @@\n \n \n
    \n
    Dune::Functions::Concept::DifferentiableGridFunction< Signature, EntitySet, DerivativeTraits > Struct Template Reference
    \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01203.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01203.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits > Struct Template Reference
    \n \n
    \n \n

    Concept for a differentiable grid function mapping Domain to Range. \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n
    \n Inheritance diagram for Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -196,15 +196,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01207.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01207.html", "unified_diff": "@@ -73,15 +73,15 @@\n \n \n
    \n
    Dune::Functions::Concept::GridViewFunction< Signature, GridView > Struct Template Reference
    \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01211.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01211.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView > Struct Template Reference
    \n \n
    \n \n

    Concept for a grid view function mapping Domain to Range. \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n
    \n Inheritance diagram for Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -133,15 +133,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01215.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01215.html", "unified_diff": "@@ -73,15 +73,15 @@\n \n \n
    \n
    Dune::Functions::Concept::DifferentiableGridViewFunction< Signature, GridView, DerivativeTraits > Struct Template Reference
    \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01219.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01219.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits > Struct Template Reference
    \n \n
    \n \n

    Concept for a differentiable grid view function mapping Domain to Range. \n More...

    \n \n-

    #include <dune/functions/common/functionconcepts.hh>

    \n+

    #include <dune/functions/common/functionconcepts.hh>

    \n
    \n Inheritance diagram for Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -134,15 +134,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01243.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01243.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::PolymorphicType< Interface > Class Template Referenceabstract
    \n \n
    \n \n

    Base class with polymorphic type boiler plate code. \n More...

    \n \n-

    #include <dune/functions/common/interfaces.hh>

    \n+

    #include <dune/functions/common/interfaces.hh>

    \n
    \n Inheritance diagram for Dune::Functions::PolymorphicType< Interface >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -253,15 +253,15 @@\n \n

    Move object into buffer.

    \n

    move(buffer) needs to be redefined by an implementation class, with the return type covariantly adapted. This will return a copy of 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).

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01247.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01247.html", "unified_diff": "@@ -73,17 +73,17 @@\n \n \n
    \n
    Dune::Functions::LocalFunction< Signature, LocalContext, DerivativeTraits, bufferSize > Class Template Reference
    \n
    \n
    \n \n-

    #include <dune/functions/common/localfunction.hh>

    \n+

    #include <dune/functions/common/localfunction.hh>

    \n
    The documentation for this class was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01255.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01255.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize > Class Template Reference
    \n \n
    \n \n

    Class storing local functions using type erasure. \n More...

    \n \n-

    #include <dune/functions/common/localfunction.hh>

    \n+

    #include <dune/functions/common/localfunction.hh>

    \n
    \n Inheritance diagram for Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -361,15 +361,15 @@\n
    \n \n

    Unbind from local context.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01267.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01267.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::StaticMultiIndex< size_type, n > Class Template Reference
    \n \n
    \n \n

    A statically sized MultiIndex type. \n More...

    \n \n-

    #include <dune/functions/common/multiindex.hh>

    \n+

    #include <dune/functions/common/multiindex.hh>

    \n
    \n Inheritance diagram for Dune::Functions::StaticMultiIndex< size_type, n >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -225,15 +225,15 @@\n
    \n \n

    STL member.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01271.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01271.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Functions::StaticMultiIndex< size_type, 1 > Class Template Reference
    \n \n
    \n \n

    A statically sized MultiIndex type. \n More...

    \n \n-

    #include <dune/functions/common/multiindex.hh>

    \n+

    #include <dune/functions/common/multiindex.hh>

    \n
    \n Inheritance diagram for Dune::Functions::StaticMultiIndex< size_type, 1 >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -288,15 +288,15 @@\n
    \n \n

    STL member.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01275.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01275.html", "unified_diff": "@@ -73,27 +73,27 @@\n \n \n
    \n
    std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > > Struct Template Reference
    \n
    \n
    \n \n-

    #include <dune/functions/common/multiindex.hh>

    \n+

    #include <dune/functions/common/multiindex.hh>

    \n
    \n Inheritance diagram for std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n \"\"\n \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01279.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01279.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Functions::OverflowArray< BA, maxSize > Class Template Reference
    \n \n
    \n \n

    A dynamically sized array-like class with overflow. \n More...

    \n \n-

    #include <dune/functions/common/overflowarray.hh>

    \n+

    #include <dune/functions/common/overflowarray.hh>

    \n
    \n Inheritance diagram for Dune::Functions::OverflowArray< BA, maxSize >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -1067,15 +1067,15 @@\n
    \n \n

    Write container to an output stream.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01283.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01283.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::PolymorphicSmallObject< Base, bufferSize > Class Template Reference
    \n \n
    \n \n

    A wrapper providing small object optimization with polymorphic types. \n More...

    \n \n-

    #include <dune/functions/common/polymorphicsmallobject.hh>

    \n+

    #include <dune/functions/common/polymorphicsmallobject.hh>

    \n
    \n Inheritance diagram for Dune::Functions::PolymorphicSmallObject< Base, bufferSize >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -490,15 +490,15 @@\n
    \n \n

    Move assignment from other PolymorphicSmallObject.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01287.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01287.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::ReservedDeque< T, n > Class Template Reference
    \n \n
    \n \n

    A double-ended queue (deque) class with statically reserved memory. \n More...

    \n \n-

    #include <dune/functions/common/reserveddeque.hh>

    \n+

    #include <dune/functions/common/reserveddeque.hh>

    \n \n \n \n \n \n \n@@ -1029,15 +1029,15 @@\n
    \n \n

    Send ReservedDeque to an output stream.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01291.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01291.html", "unified_diff": "@@ -79,15 +79,15 @@\n \n

    Helper class to check that F is callable. \n More...

    \n

    Detailed Description

    \n
    template<typename F>
    \n struct Dune::Functions::IsCallable< F >

    Helper class to check that F is callable.

    \n

    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01295.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01295.html", "unified_diff": "@@ -76,20 +76,20 @@\n
    Dune::Functions::SignatureTraits< Signature, isCallable > Struct Template Reference
    \n \n
    \n \n

    Helper class to deduce the signature of a callable. \n More...

    \n \n-

    #include <dune/functions/common/signature.hh>

    \n+

    #include <dune/functions/common/signature.hh>

    \n

    Detailed Description

    \n
    template<class Signature, bool isCallable = IsCallable<Signature>::value>
    \n struct Dune::Functions::SignatureTraits< Signature, isCallable >

    Helper class to deduce the signature of a callable.

    \n

    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01299.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01299.html", "unified_diff": "@@ -73,15 +73,15 @@\n \n \n
    \n
    Dune::Functions::SignatureTag< Signature, DerivativeTraits > Struct Template Reference
    \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01303.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01303.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT > Struct Template Reference
    \n \n
    \n \n

    Tag-class to encapsulate signature information. \n More...

    \n \n-

    #include <dune/functions/common/signature.hh>

    \n+

    #include <dune/functions/common/signature.hh>

    \n

    \n Public Types

    typedef T value_type
     The type of object, T, stored in the vector.
     
    \n \n \n \n \n \n@@ -136,15 +136,15 @@\n \n

    \n Public Types

    using Signature = Range(Domain)
     
    template<class T >
    using DerivativeTraits = DerivativeTraitsT< T >
    \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01335.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01335.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize > Class Template Reference
    \n \n
    \n \n

    Base class for type-erased interface wrapper. \n More...

    \n \n-

    #include <dune/functions/common/typeerasure.hh>

    \n+

    #include <dune/functions/common/typeerasure.hh>

    \n
    \n Inheritance diagram for Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -306,15 +306,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01367.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01367.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::LastType< T > Struct Template Reference
    \n \n
    \n \n

    Get last entry of type list. \n More...

    \n \n-

    #include <dune/functions/common/utility.hh>

    \n+

    #include <dune/functions/common/utility.hh>

    \n \n \n \n \n

    \n Public Types

    using type = std::tuple_element_t< sizeof...(T) -1, std::tuple< T... > >
     
    \n

    Detailed Description

    \n@@ -107,15 +107,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01379.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01379.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::RotateTuple< T > Struct Template Reference
    \n \n
    \n \n

    Rotate type list by one, such that last entry is moved to first position. \n More...

    \n \n-

    #include <dune/functions/common/utility.hh>

    \n+

    #include <dune/functions/common/utility.hh>

    \n \n \n \n \n

    \n Public Types

    using type = typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence< sizeof...(T) -1 > >::type
     
    \n

    Detailed Description

    \n@@ -108,15 +108,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01395.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01395.html", "unified_diff": "@@ -76,15 +76,15 @@\n \n
    Dune::Functions::Concept::IndexMergingStrategy Struct Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/basistags.hh>

    \n+

    #include <dune/functions/functionspacebases/basistags.hh>

    \n \n \n \n \n \n

    \n Public Member Functions

    template<typename T >
    auto require (T &&t) -> decltype(registerIndexMergingStrategy(t))
     
    \n@@ -106,15 +106,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01399.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01399.html", "unified_diff": "@@ -76,15 +76,15 @@\n
    Dune::Functions::BasisFactory::IndexMergingStrategy Struct Reference
    \n \n
    \n \n

    Base class for index merging strategies to simplify detection. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/basistags.hh>

    \n+

    #include <dune/functions/functionspacebases/basistags.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BasisFactory::IndexMergingStrategy:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -96,15 +96,15 @@\n \"\"\n \"\"\n \n
    \n

    Detailed Description

    \n

    Base class for index merging strategies to simplify detection.

    \n

    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01403.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01403.html", "unified_diff": "@@ -76,15 +76,15 @@\n
    Dune::Functions::BasisFactory::FlatLexicographic Struct Reference
    \n \n
    \n \n

    Lexicographic merging of direct children without blocking. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/basistags.hh>

    \n+

    #include <dune/functions/functionspacebases/basistags.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BasisFactory::FlatLexicographic:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -128,15 +128,15 @@\n g_0 (2,k0) \n \n g_1 (3,k1) \n \n g_2 (4,k2) \n \n

    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01407.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01407.html", "unified_diff": "@@ -76,15 +76,15 @@\n
    Dune::Functions::BasisFactory::FlatInterleaved Struct Reference
    \n \n
    \n \n

    Interleaved merging of direct children without blocking. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/basistags.hh>

    \n+

    #include <dune/functions/functionspacebases/basistags.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BasisFactory::FlatInterleaved:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -128,15 +128,15 @@\n g_1 (3,i1) \n \n f_2 (4,i2) \n \n g_2 (5,i2) \n \n

    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01411.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01411.html", "unified_diff": "@@ -76,15 +76,15 @@\n
    Dune::Functions::BasisFactory::BlockedLexicographic Struct Reference
    \n \n
    \n \n

    Lexicographic merging of direct children with blocking (i.e. creating one block per direct child). \n More...

    \n \n-

    #include <dune/functions/functionspacebases/basistags.hh>

    \n+

    #include <dune/functions/functionspacebases/basistags.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BasisFactory::BlockedLexicographic:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -128,15 +128,15 @@\n g_0 (1,k0) \n \n g_1 (1,k1) \n \n g_2 (1,k2) \n \n

    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01415.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01415.html", "unified_diff": "@@ -76,15 +76,15 @@\n
    Dune::Functions::BasisFactory::BlockedInterleaved Struct Reference
    \n \n
    \n \n

    Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each). \n More...

    \n \n-

    #include <dune/functions/functionspacebases/basistags.hh>

    \n+

    #include <dune/functions/functionspacebases/basistags.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BasisFactory::BlockedInterleaved:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -128,15 +128,15 @@\n g_1 (i1,1) \n \n f_2 (i2,0) \n \n g_2 (i2,1) \n \n

    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01451.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01451.html", "unified_diff": "@@ -79,15 +79,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members \n
    Dune::Functions::BrezziDouglasMariniNode< GV, k > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/brezzidouglasmarinibasis.hh>

    \n+

    #include <dune/functions/functionspacebases/brezzidouglasmarinibasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BrezziDouglasMariniNode< GV, k >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -583,15 +583,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01455.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01455.html", "unified_diff": "@@ -79,15 +79,15 @@\n Static Public Attributes |\n Protected Attributes |\n List of all members \n
    Dune::Functions::BrezziDouglasMariniPreBasis< GV, k > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/brezzidouglasmarinibasis.hh>

    \n+

    #include <dune/functions/functionspacebases/brezzidouglasmarinibasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BrezziDouglasMariniPreBasis< GV, k >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -704,15 +704,15 @@\n
    \n \n

    Size required temporarily when constructing global multi-indices.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01459.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01459.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Functions::BSplineLocalFiniteElement< GV, R > Class Template Reference
    \n \n
    \n \n

    LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BSplineLocalFiniteElement< GV, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -559,15 +559,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01463.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01463.html", "unified_diff": "@@ -84,15 +84,15 @@\n
    Dune::Functions::BSplinePreBasis< GV > Class Template Reference
    \n \n
    \n \n

    Pre-basis for B-spline basis. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BSplinePreBasis< GV >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -1321,15 +1321,15 @@\n
    \n \n

    Order of the B-spline for each space dimension.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01467.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01467.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::BSplineLocalBasis< GV, R > Class Template Reference
    \n \n
    \n \n

    LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch to a knot span. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BSplineLocalBasis< GV, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -423,15 +423,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01471.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01471.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::BSplineLocalCoefficients< dim > Class Template Reference
    \n \n
    \n \n

    Attaches a shape function to an entity. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n \n \n \n \n \n \n@@ -192,15 +192,15 @@\n
    \n \n

    number of coefficients

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01475.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01475.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::BSplineLocalInterpolation< dim, LB > Class Template Reference
    \n \n
    \n \n

    Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BSplineLocalInterpolation< dim, LB >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -147,15 +147,15 @@\n
    \n \n

    Local interpolation of a function.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01479.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01479.html", "unified_diff": "@@ -79,15 +79,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members\n
    Dune::Functions::BSplineNode< GV > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/bsplinebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BSplineNode< GV >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -565,15 +565,15 @@\n \n

    \n Public Member Functions

    void init (const std::array< unsigned, dim > &sizes)
     
    std::size_t size () const
     number of coefficients
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01487.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01487.html", "unified_diff": "@@ -83,15 +83,15 @@\n
    Dune::Functions::CompositePreBasis< IMS, SPB > Class Template Reference
    \n \n
    \n \n

    A pre-basis for composite bases. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/compositebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/compositebasis.hh>

    \n \n \n \n \n \n \n@@ -892,15 +892,15 @@\n \n

    \n Public Types

    using SubPreBases = std::tuple< SPB... >
     Tuple of child pre-bases.
     
    template<std::size_t i>
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01543.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01543.html", "unified_diff": "@@ -76,19 +76,19 @@\n
    Dune::Functions::ContainerDescriptors::Unknown Struct Reference
    \n \n
    \n \n

    Fallback container descriptor if nothing else fits. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/containerdescriptors.hh>

    \n+

    #include <dune/functions/functionspacebases/containerdescriptors.hh>

    \n

    Detailed Description

    \n

    Fallback container descriptor if nothing else fits.

    \n

    The documentation for this struct was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01547.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01547.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::ContainerDescriptors::Value Struct Reference
    \n \n
    \n \n

    The node in the descriptor tree representing a value placeholder. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/containerdescriptors.hh>

    \n+

    #include <dune/functions/functionspacebases/containerdescriptors.hh>

    \n \n \n \n \n \n \n@@ -156,15 +156,15 @@\n
    \n \n

    A value placeholder does not have any sub-descriptors, thus its size is zero.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01551.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01551.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::ContainerDescriptors::UniformArray< Child, n > Struct Template Reference
    \n \n
    \n \n

    Descriptor for arrays with all children identical and the number of children a static size. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/containerdescriptors.hh>

    \n+

    #include <dune/functions/functionspacebases/containerdescriptors.hh>

    \n

    \n Public Member Functions

    template<class Index >
    Value operator[] (const Index &) const
     The child access method is only available for the interface, but should not be called.
     
    \n \n \n \n \n \n@@ -230,15 +230,15 @@\n
    \n \n

    The static size information, i.e., number of children.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01555.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01555.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::ContainerDescriptors::UniformVector< Child > Struct Template Reference
    \n \n
    \n \n

    Uniform descriptor with dynamic size. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/containerdescriptors.hh>

    \n+

    #include <dune/functions/functionspacebases/containerdescriptors.hh>

    \n

    \n Public Member Functions

    template<class C = Child, std::enable_if_t< std::is_default_constructible_v< C >, int > = 0>
     UniformArray ()
     Default constructor. Is enable if the child-type is default constructible.
     
    \n \n \n \n \n \n@@ -237,15 +237,15 @@\n
    \n \n

    The dynamic size information, i.e., number of children.

    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01563.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01563.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::DefaultGlobalBasis< PB > Class Template Reference
    \n \n

    \n Public Member Functions

    template<class C = Child, std::enable_if_t< std::is_default_constructible_v< C >, int > = 0>
     UniformVector (std::size_t size)
     Default constructor with size. Is enable if the child-type is default constructible.
     
    \n \n \n \n \n \n@@ -732,15 +732,15 @@\n \n

    \n Public Types

    using PreBasis = PB
     Pre-basis providing the implementation details.
     
    using PrefixPath = TypeTree::HybridTreePath<>
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01567.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01567.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Functions::DefaultLocalView< GB > Class Template Reference
    \n \n
    \n \n

    The restriction of a finite element basis to a single element. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/defaultlocalview.hh>

    \n+

    #include <dune/functions/functionspacebases/defaultlocalview.hh>

    \n \n \n \n \n \n \n@@ -748,15 +748,15 @@\n \n

    \n Public Types

    using GlobalBasis = GB
     The global FE basis that this is a view on.
     
    using GridView = typename GlobalBasis::GridView
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01571.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01571.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::DefaultNodeToRangeMap< Tree > Struct Template Reference
    \n \n
    \n \n

    A simple node to range map using lexicographic ordering. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/defaultnodetorangemap.hh>

    \n+

    #include <dune/functions/functionspacebases/defaultnodetorangemap.hh>

    \n \n \n \n \n

    \n Classes

    struct  Visitor
     
    \n \n

    \n@@ -261,15 +261,15 @@\n

    \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01575.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01575.html", "unified_diff": "@@ -77,15 +77,15 @@\n Public Member Functions |\n Public Attributes |\n List of all members \n
    Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor Struct Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/defaultnodetorangemap.hh>

    \n+

    #include <dune/functions/functionspacebases/defaultnodetorangemap.hh>

    \n
    \n Inheritance diagram for Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -210,15 +210,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01579.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01579.html", "unified_diff": "@@ -84,15 +84,15 @@\n
    Dune::Functions::DynamicPowerPreBasis< IMS, SPB > Class Template Reference
    \n \n
    \n \n

    A pre-basis for dynamic power bases. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/dynamicpowerbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/dynamicpowerbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::DynamicPowerPreBasis< IMS, SPB >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -1369,15 +1369,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01631.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01631.html", "unified_diff": "@@ -87,15 +87,15 @@\n GVThe grid view that the FE basis is defined on \n kThe polynomial order of ansatz functions, (0 < k <= 2) \n RRange field-type used for shape function values \n \n \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01635.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01635.html", "unified_diff": "@@ -79,15 +79,15 @@\n Static Public Attributes |\n Protected Attributes |\n List of all members \n
    Dune::Functions::HierarchicalLagrangePreBasis< GV, 1, R > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/hierarchicallagrangebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/hierarchicallagrangebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::HierarchicalLagrangePreBasis< GV, 1, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -690,15 +690,15 @@\n
    \n \n

    Size required temporarily when constructing global multi-indices.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01639.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01639.html", "unified_diff": "@@ -79,15 +79,15 @@\n Static Public Attributes |\n Protected Attributes |\n List of all members \n
    Dune::Functions::HierarchicalLagrangePreBasis< GV, 2, R > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/hierarchicallagrangebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/hierarchicallagrangebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::HierarchicalLagrangePreBasis< GV, 2, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -690,15 +690,15 @@\n
    \n \n

    Size required temporarily when constructing global multi-indices.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01643.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01643.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::HierarchicNodeToRangeMap Struct Reference
    \n \n
    \n \n

    A simple node to range map using the nested tree indices. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>

    \n+

    #include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>

    \n \n \n \n \n \n \n@@ -184,15 +184,15 @@\n \n

    \n Public Member Functions

    template<class Node , class TreePath , class Range , std::enable_if_t< models< Concept::HasIndexAccess, Range, Dune::index_constant< 0 > >(), int > = 0>
    decltype(auto) operator() (const Node &, const TreePath &treePath, Range &&y) const
     
    template<class Node , class TreePath , class Range , std::enable_if_t< not models< Concept::HasIndexAccess, Range, Dune::index_constant< 0 > >(), int > = 0>
    \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01663.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01663.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::HierarchicVectorWrapper< V, CO > Class Template Reference
    \n \n
    \n \n

    A wrapper providing multiindex access to vector entries. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/hierarchicvectorwrapper.hh>

    \n+

    #include <dune/functions/functionspacebases/hierarchicvectorwrapper.hh>

    \n \n \n \n \n \n \n@@ -398,15 +398,15 @@\n \n

    \n Public Types

    using Vector = V
     
    template<class MultiIndex >
    using Entry = Coefficient< MultiIndex >
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01691.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01691.html", "unified_diff": "@@ -80,15 +80,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members \n
    Dune::Functions::LagrangeNode< GV, k, R > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/lagrangebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/lagrangebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::LagrangeNode< GV, k, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -656,15 +656,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01695.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01695.html", "unified_diff": "@@ -83,15 +83,15 @@\n
    Dune::Functions::LagrangePreBasis< GV, k, R > Class Template Reference
    \n \n
    \n \n

    A pre-basis for a PQ-lagrange bases with given order. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/lagrangebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/lagrangebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::LagrangePreBasis< GV, k, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -1329,15 +1329,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01715.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01715.html", "unified_diff": "@@ -83,15 +83,15 @@\n
    Dune::Functions::LFEPreBasisMixin< GV, LFE > Class Template Reference
    \n \n
    \n \n

    A pre-basis mixin class parametrized with a local finite-element and a DOF layout. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/lfeprebasismixin.hh>

    \n+

    #include <dune/functions/functionspacebases/lfeprebasismixin.hh>

    \n
    \n Inheritance diagram for Dune::Functions::LFEPreBasisMixin< GV, LFE >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -794,15 +794,15 @@\n
    \n \n

    Size required temporarily when constructing global multi-indices.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01719.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01719.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Functions::LFEPreBasisMixin< GV, LFE >::Node Class Reference
    \n \n
    \n \n

    Leaf basis node that encapsulates a local finite-element given from the LFEPreBasisMixin of type LFE. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/lfeprebasismixin.hh>

    \n+

    #include <dune/functions/functionspacebases/lfeprebasismixin.hh>

    \n
    \n Inheritance diagram for Dune::Functions::LFEPreBasisMixin< GV, LFE >::Node:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -549,15 +549,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01727.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01727.html", "unified_diff": "@@ -79,15 +79,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members \n
    Dune::Functions::NedelecNode< GV, Range, kind, order > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/nedelecbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/nedelecbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::NedelecNode< GV, Range, kind, order >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -583,15 +583,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01731.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01731.html", "unified_diff": "@@ -79,15 +79,15 @@\n Static Public Attributes |\n Protected Attributes |\n List of all members \n
    Dune::Functions::NedelecPreBasis< GV, Range, kind, order > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/nedelecbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/nedelecbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::NedelecPreBasis< GV, Range, kind, order >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -677,15 +677,15 @@\n
    \n \n

    Size required temporarily when constructing global multi-indices.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01747.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01747.html", "unified_diff": "@@ -78,15 +78,15 @@\n Public Member Functions |\n Protected Member Functions |\n List of all members \n
    Dune::Functions::BasisNodeMixin Class Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/nodes.hh>

    \n+

    #include <dune/functions/functionspacebases/nodes.hh>

    \n
    \n Inheritance diagram for Dune::Functions::BasisNodeMixin:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -371,15 +371,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01751.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01751.html", "unified_diff": "@@ -78,15 +78,15 @@\n Public Member Functions |\n Protected Member Functions |\n List of all members \n
    Dune::Functions::LeafBasisNode Class Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/nodes.hh>

    \n+

    #include <dune/functions/functionspacebases/nodes.hh>

    \n
    \n Inheritance diagram for Dune::Functions::LeafBasisNode:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -337,15 +337,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01755.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01755.html", "unified_diff": "@@ -78,15 +78,15 @@\n Public Member Functions |\n Protected Member Functions |\n List of all members \n
    Dune::Functions::PowerBasisNode< T, n > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/nodes.hh>

    \n+

    #include <dune/functions/functionspacebases/nodes.hh>

    \n
    \n Inheritance diagram for Dune::Functions::PowerBasisNode< T, n >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -432,15 +432,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01759.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01759.html", "unified_diff": "@@ -78,15 +78,15 @@\n Public Member Functions |\n Protected Member Functions |\n List of all members \n
    Dune::Functions::DynamicPowerBasisNode< T > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/nodes.hh>

    \n+

    #include <dune/functions/functionspacebases/nodes.hh>

    \n
    \n Inheritance diagram for Dune::Functions::DynamicPowerBasisNode< T >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -429,15 +429,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01763.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01763.html", "unified_diff": "@@ -78,15 +78,15 @@\n Public Member Functions |\n Protected Member Functions |\n List of all members \n
    Dune::Functions::CompositeBasisNode< T > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/nodes.hh>

    \n+

    #include <dune/functions/functionspacebases/nodes.hh>

    \n
    \n Inheritance diagram for Dune::Functions::CompositeBasisNode< T >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -465,15 +465,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01767.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01767.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet Class Reference
    \n \n
    \n \n

    Container storing identified indices for a periodic basis. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/periodicbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/periodicbasis.hh>

    \n \n \n \n \n \n \n@@ -158,15 +158,15 @@\n \n

    Insert a pair of indices.

    \n

    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.

    \n \n \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01779.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01779.html", "unified_diff": "@@ -84,15 +84,15 @@\n
    Dune::Functions::PowerPreBasis< IMS, SPB, C > Class Template Reference
    \n \n
    \n \n

    A pre-basis for power bases. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/powerbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/powerbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::PowerPreBasis< IMS, SPB, C >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -1397,15 +1397,15 @@\n \n

    \n Public Member Functions

    void unifyIndexPair (std::size_t a, std::size_t b)
     Insert a pair of indices.
     
    const auto & indexPairSet () const
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01783.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01783.html", "unified_diff": "@@ -79,15 +79,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members \n
    Dune::Functions::RannacherTurekNode< GV > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/rannacherturekbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/rannacherturekbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::RannacherTurekNode< GV >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -538,15 +538,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01787.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01787.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Functions::RannacherTurekPreBasis< GV > Class Template Reference
    \n \n
    \n \n

    Pre-basis for a Rannacher-Turek basis. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/rannacherturekbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/rannacherturekbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::RannacherTurekPreBasis< GV >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -653,15 +653,15 @@\n
    \n \n

    Size required temporarily when constructing global multi-indices.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01835.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01835.html", "unified_diff": "@@ -79,15 +79,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members \n
    Dune::Functions::RaviartThomasNode< GV, k > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/raviartthomasbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/raviartthomasbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::RaviartThomasNode< GV, k >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -583,15 +583,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01839.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01839.html", "unified_diff": "@@ -79,15 +79,15 @@\n Static Public Attributes |\n Protected Attributes |\n List of all members \n
    Dune::Functions::RaviartThomasPreBasis< GV, k > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/raviartthomasbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/raviartthomasbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::RaviartThomasPreBasis< GV, k >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -704,15 +704,15 @@\n
    \n \n

    Size required temporarily when constructing global multi-indices.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01843.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01843.html", "unified_diff": "@@ -80,15 +80,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members \n
    Dune::Functions::RefinedLagrangeNode< GV, k, R > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/refinedlagrangebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/refinedlagrangebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::RefinedLagrangeNode< GV, k, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -591,15 +591,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01847.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01847.html", "unified_diff": "@@ -83,15 +83,15 @@\n
    Dune::Functions::RefinedLagrangePreBasis< GV, k, R > Class Template Reference
    \n \n
    \n \n

    A pre-basis for a refined Lagrange bases. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/refinedlagrangebasis.hh>

    \n+

    #include <dune/functions/functionspacebases/refinedlagrangebasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::RefinedLagrangePreBasis< GV, k, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -769,15 +769,15 @@\n
    \n \n

    Size required temporarily when constructing global multi-indices.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01851.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01851.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::SizeInfo< B > Class Template Reference
    \n \n
    \n \n

    A class encapsulating size information. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/sizeinfo.hh>

    \n+

    #include <dune/functions/functionspacebases/sizeinfo.hh>

    \n \n \n \n \n \n \n@@ -312,15 +312,15 @@\n \n

    \n Public Types

    using Basis = B
     
    using size_type = typename Basis::size_type
     
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01855.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01855.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::SubEntityDOFs< GridView > Class Template Reference
    \n \n
    \n \n

    Range of DOFs associated to sub-entity. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/subentitydofs.hh>

    \n+

    #include <dune/functions/functionspacebases/subentitydofs.hh>

    \n \n \n \n \n \n \n@@ -377,15 +377,15 @@\n
    \n \n

    Return number of contained DOFs.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01859.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01859.html", "unified_diff": "@@ -78,15 +78,15 @@\n Public Member Functions |\n Protected Attributes |\n List of all members\n
    Dune::Functions::SubspaceBasis< RB, TP > Class Template Reference
    \n \n

    \n Public Member Functions

    template<class LocalView >
    SubEntityDOFsbind (const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
     Bind SubEntityDOFs object to LocalView and sub-entity.
     
    \n \n \n \n \n \n@@ -606,15 +606,15 @@\n \n

    \n Public Types

    using RootBasis = RB
     
    using RootLocalView = typename RootBasis::LocalView
     
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01863.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01863.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::SubspaceLocalView< RLV, PP > Class Template Reference
    \n \n
    \n \n

    The restriction of a finite element basis to a single element. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/subspacelocalview.hh>

    \n+

    #include <dune/functions/functionspacebases/subspacelocalview.hh>

    \n \n \n \n \n \n \n@@ -689,15 +689,15 @@\n \n

    \n Public Types

    using RootLocalView = RLV
     
    using GlobalBasis = SubspaceBasis< typename RootLocalView::GlobalBasis, PrefixPath >
     The global FE basis that this is a view on.
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01867.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01867.html", "unified_diff": "@@ -78,15 +78,15 @@\n Public Member Functions |\n Protected Member Functions |\n List of all members \n
    Dune::Functions::TaylorHoodVelocityTree< GV > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/taylorhoodbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/taylorhoodbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::TaylorHoodVelocityTree< GV >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -409,15 +409,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01871.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01871.html", "unified_diff": "@@ -78,15 +78,15 @@\n Public Member Functions |\n Protected Member Functions |\n List of all members \n
    Dune::Functions::TaylorHoodBasisTree< GV > Class Template Reference
    \n \n
    \n \n-

    #include <dune/functions/functionspacebases/taylorhoodbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/taylorhoodbasis.hh>

    \n
    \n Inheritance diagram for Dune::Functions::TaylorHoodBasisTree< GV >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -408,15 +408,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01875.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01875.html", "unified_diff": "@@ -84,15 +84,15 @@\n
    Dune::Functions::TaylorHoodPreBasis< GV, HI > Class Template Reference
    \n \n
    \n \n

    Pre-basis for lowest order Taylor-Hood basis. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/taylorhoodbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/taylorhoodbasis.hh>

    \n \n \n \n \n \n \n@@ -844,15 +844,15 @@\n \n

    \n Public Types

    using GridView = GV
     The grid view that the FE basis is defined on.
     
    using size_type = std::size_t
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01879.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01879.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Functions::Experimental::TransformedIndexPreBasis< RPB, T > Class Template Reference
    \n \n
    \n \n

    A pre-basis transforming multi-indices. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/transformedindexbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/transformedindexbasis.hh>

    \n \n \n \n \n \n \n@@ -811,15 +811,15 @@\n \n

    \n Public Types

    using RawPreBasis = RPB
     
    using GridView = typename RawPreBasis::GridView
     The grid view that the FE basis is defined on.
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01883.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01883.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation< IndexTransformation, SizeImplementation, ContainerDescriptorImplementation, minIS, maxIS > Class Template Reference
    \n \n
    \n \n

    A generic implementation of a transformation. \n More...

    \n \n-

    #include <dune/functions/functionspacebases/transformedindexbasis.hh>

    \n+

    #include <dune/functions/functionspacebases/transformedindexbasis.hh>

    \n \n \n \n \n \n \n@@ -359,15 +359,15 @@\n \n

    \n Public Member Functions

    template<class IT_R , class SI_R , class CD_R >
     GenericIndexingTransformation (IT_R &&indexTransformation, SI_R &&sizeImplementation, CD_R &&containerDescriptorImplementation)
     
    template<class MultiIndex , class PreBasis >
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01895.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01895.html", "unified_diff": "@@ -86,15 +86,15 @@\n \n template<class F , class GridView > \n auto makeAnalyticGridViewFunction (F &&f, const GridView &gridView)\n  Create an AnalyticGridViewFunction from a function and a grid view.
    \n  \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01899.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01899.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits > Class Template Reference
    \n \n
    \n \n

    Class wrapping any differentiable function as grid function. \n More...

    \n \n-

    #include <dune/functions/gridfunctions/analyticgridviewfunction.hh>

    \n+

    #include <dune/functions/gridfunctions/analyticgridviewfunction.hh>

    \n \n \n \n \n \n \n@@ -493,15 +493,15 @@\n
    \n \n

    Construct the associated local-function.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01903.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01903.html", "unified_diff": "@@ -85,15 +85,15 @@\n
    Dune::Functions::ComposedGridFunction< OF, IF > Class Template Reference
    \n \n
    \n \n

    Composition of grid functions with another function. \n More...

    \n \n-

    #include <dune/functions/gridfunctions/composedgridfunction.hh>

    \n+

    #include <dune/functions/gridfunctions/composedgridfunction.hh>

    \n

    \n Public Types

    using Signature = Range(Domain)
     
    using RawSignature = typename SignatureTraits< Signature >::RawSignature
     
    \n \n \n \n \n \n@@ -490,15 +490,15 @@\n \n

    \n Public Types

    using EntitySet = typename InnerFunction< 0 >::EntitySet
     
    using Element = typename EntitySet::Element
     
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01939.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01939.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Functions::FaceNormalGridFunction< GV > Class Template Reference
    \n \n
    \n \n

    Grid function implementing the piecewise element face normal. \n More...

    \n \n-

    #include <dune/functions/gridfunctions/facenormalgridfunction.hh>

    \n+

    #include <dune/functions/gridfunctions/facenormalgridfunction.hh>

    \n \n \n \n \n \n \n@@ -380,15 +380,15 @@\n
    \n \n

    Return a local-function associated to FaceNormalGridFunction.

    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01947.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01947.html", "unified_diff": "@@ -73,29 +73,29 @@\n \n \n
    \n
    Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize > Class Template Reference
    \n
    \n
    \n \n-

    #include <dune/functions/gridfunctions/gridfunction.hh>

    \n+

    #include <dune/functions/gridfunctions/gridfunction.hh>

    \n
    \n Inheritance diagram for Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n \"\"\n \"\"\n \"\"\n \n
    \n
    The documentation for this class was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01955.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01955.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize > Class Template Reference
    \n \n
    \n \n

    Wrapper class for functions defined on a Grid. \n More...

    \n \n-

    #include <dune/functions/gridfunctions/gridfunction.hh>

    \n+

    #include <dune/functions/gridfunctions/gridfunction.hh>

    \n
    \n Inheritance diagram for Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -326,15 +326,15 @@\n

    Get local function of wrapped function.

    \n

    This is a free function, to be found by ADL.

    \n

    Notice that the returned LocalFunction can only be used after it has been bound to a proper local context.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01971.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01971.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::GridViewEntitySet< GV, cd > Class Template Reference
    \n \n
    \n \n

    An entity set for all entities of given codim in a grid view. \n More...

    \n \n-

    #include <dune/functions/gridfunctions/gridviewentityset.hh>

    \n+

    #include <dune/functions/gridfunctions/gridviewentityset.hh>

    \n
    \n Inheritance diagram for Dune::Functions::GridViewEntitySet< GV, cd >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -461,15 +461,15 @@\n
    \n \n

    Return number of Elements visited by an iterator.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01975.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01975.html", "unified_diff": "@@ -73,17 +73,17 @@\n \n \n
    \n
    Dune::Functions::GridViewFunction< Signature, GridView, DerivativeTraits, bufferSize > Class Template Reference
    \n
    \n
    \n \n-

    #include <dune/functions/gridfunctions/gridviewfunction.hh>

    \n+

    #include <dune/functions/gridfunctions/gridviewfunction.hh>

    \n
    The documentation for this class was generated from the following file:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01979.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01979.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize > Class Template Reference
    \n \n
    \n \n

    Wrapper class for functions defined on a GridView. \n More...

    \n \n-

    #include <dune/functions/gridfunctions/gridviewfunction.hh>

    \n+

    #include <dune/functions/gridfunctions/gridviewfunction.hh>

    \n
    \n Inheritance diagram for Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -129,15 +129,15 @@\n \n

    \n Public Types

    using GridView = GV
     
    using EntitySet = GridViewEntitySet< GridView, 0 >
     
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01983.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01983.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits > Struct Template Reference
    \n \n
    \n \n

    Derivative traits for local functions. \n More...

    \n \n-

    #include <dune/functions/gridfunctions/localderivativetraits.hh>

    \n+

    #include <dune/functions/gridfunctions/localderivativetraits.hh>

    \n \n \n \n \n \n \n@@ -135,15 +135,15 @@\n \n

    \n Classes

    struct  Traits
     
    struct  Traits< R(LocalDomain)>
     
    \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01987.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01987.html", "unified_diff": "@@ -76,15 +76,15 @@\n \n
    Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< Signature > Struct Template Reference
    \n \n
    \n \n-

    #include <dune/functions/gridfunctions/localderivativetraits.hh>

    \n+

    #include <dune/functions/gridfunctions/localderivativetraits.hh>

    \n \n \n \n \n

    \n Public Types

    typedef InvalidRange Range
     
    \n

    Member Typedef Documentation

    \n@@ -103,15 +103,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01991.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01991.html", "unified_diff": "@@ -76,15 +76,15 @@\n \n
    Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< R(LocalDomain)> Struct Template Reference
    \n \n
    \n \n-

    #include <dune/functions/gridfunctions/localderivativetraits.hh>

    \n+

    #include <dune/functions/gridfunctions/localderivativetraits.hh>

    \n \n \n \n \n

    \n Public Types

    using Range = typename DerivativeTraits< R(Domain)>::Range
     
    \n

    Member Typedef Documentation

    \n@@ -103,15 +103,15 @@\n \n \n
    \n \n
    \n \n
    The documentation for this struct was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a02939.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a02939.html", "unified_diff": "@@ -77,16 +77,16 @@\n Classes |\n Namespaces \n
    concepts.hh File Reference
    \n \n
    \n
    #include <dune/common/concept.hh>
    \n #include <dune/common/reservedvector.hh>
    \n-#include <dune/functions/common/utility.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/functions/common/utility.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a02939_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a02939_source.html", "unified_diff": "@@ -90,17 +90,17 @@\n
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
    \n
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
    \n
    9
    \n
    10
    \n
    11#include <dune/common/concept.hh>
    \n
    12#include <dune/common/reservedvector.hh>
    \n
    13
    \n-\n+\n
    15
    \n-\n+\n
    17
    \n
    18
    \n
    19namespace Dune {
    \n
    20namespace Functions {
    \n
    21namespace Concept {
    \n
    22
    \n
    23using namespace Dune::Concept;
    \n@@ -338,16 +338,16 @@\n
    231
    \n
    232} // namespace Dune::Functions::Concept
    \n
    233} // namespace Dune::Functions
    \n
    234} // namespace Dune
    \n
    235
    \n
    236
    \n
    237#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
    \n-\n-\n+\n+\n
    Definition polynomial.hh:17
    \n
    Definition functionspacebases/concepts.hh:27
    \n
    auto require(C &&c) -> decltype(c.resize(0))
    \n
    Definition functionspacebases/concepts.hh:37
    \n
    auto require(C &&c) -> decltype(c.size())
    \n
    Definition functionspacebases/concepts.hh:47
    \n
    auto require(C &&c, I &&i) -> decltype(c[i])
    \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": "@@ -69,14 +69,14 @@\n \n \n \n
    \n-

    backends → common Relation

    \n Classes

    struct  Dune::Functions::Concept::HasResize
     
    File in dune/functions/backendsIncludes file in dune/functions/common
    istlvectorbackend.hhindexaccess.hh
    \n+

    backends → common Relation

    File in dune/functions/backendsIncludes file in dune/functions/common
    istlvectorbackend.hhindexaccess.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \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": "@@ -69,14 +69,14 @@\n \n \n \n
    \n-

    backends → functionspacebases Relation

    File in dune/functions/backendsIncludes file in dune/functions/functionspacebases
    istlvectorbackend.hhfunctionspacebases/concepts.hh
    \n+

    backends → functionspacebases Relation

    File in dune/functions/backendsIncludes file in dune/functions/functionspacebases
    istlvectorbackend.hhfunctionspacebases/concepts.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000002_000007.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000002_000007.html", "unified_diff": "@@ -69,14 +69,14 @@\n \n \n \n
    \n-

    common → functionspacebases Relation

    File in dune/functions/commonIncludes file in dune/functions/functionspacebases
    staticforloop.hhfunctionspacebases/concepts.hh
    \n+

    common → functionspacebases Relation

    File in dune/functions/commonIncludes file in dune/functions/functionspacebases
    staticforloop.hhfunctionspacebases/concepts.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \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": "@@ -69,14 +69,14 @@\n \n \n \n
    \n-

    common → gridfunctions Relation

    File in dune/functions/commonIncludes file in dune/functions/gridfunctions
    functionconcepts.hhgridviewentityset.hh
    functionconcepts.hhlocalderivativetraits.hh
    \n+

    common → gridfunctions Relation

    File in dune/functions/commonIncludes file in dune/functions/gridfunctions
    functionconcepts.hhgridviewentityset.hh
    functionconcepts.hhlocalderivativetraits.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \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": "@@ -69,14 +69,14 @@\n \n \n \n
    \n-

    functionspacebases → backends Relation

    File in dune/functions/functionspacebasesIncludes file in dune/functions/backends
    interpolate.hhbackends/concepts.hh
    interpolate.hhistlvectorbackend.hh
    \n+

    functionspacebases → backends Relation

    File in dune/functions/functionspacebasesIncludes file in dune/functions/backends
    interpolate.hhbackends/concepts.hh
    interpolate.hhistlvectorbackend.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \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": "@@ -69,14 +69,14 @@\n \n \n \n \n+

    functionspacebases → common Relation

    File in dune/functions/functionspacebasesIncludes file in dune/functions/common
    compositebasis.hhstaticforloop.hh
    compositebasis.hhtype_traits.hh
    compositebasis.hhutility.hh
    containerdescriptors.hhtype_traits.hh
    defaultglobalbasis.hhtype_traits.hh
    defaultlocalview.hhmultiindex.hh
    defaultlocalview.hhoverflowarray.hh
    dynamicpowerbasis.hhtype_traits.hh
    dynamicpowerbasis.hhutility.hh
    flatmultiindex.hhmultiindex.hh
    functionspacebases/concepts.hhutility.hh
    hierarchicnodetorangemap.hhindexaccess.hh
    hierarchicvectorwrapper.hhindexaccess.hh
    hierarchicvectorwrapper.hhtype_traits.hh
    hierarchicvectorwrapper.hhutility.hh
    interpolate.hhfunctionconcepts.hh
    powerbasis.hhtype_traits.hh
    powerbasis.hhutility.hh
    subspacebasis.hhtype_traits.hh
    transformedindexbasis.hhstaticforloop.hh
    transformedindexbasis.hhtype_traits.hh
    transformedindexbasis.hhutility.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \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": "@@ -69,14 +69,14 @@\n \n \n \n
    \n-

    functionspacebases → gridfunctions Relation

    File in dune/functions/functionspacebasesIncludes file in dune/functions/gridfunctions
    interpolate.hhgridviewfunction.hh
    \n+

    functionspacebases → gridfunctions Relation

    File in dune/functions/functionspacebasesIncludes file in dune/functions/gridfunctions
    interpolate.hhgridviewfunction.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \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": "@@ -69,14 +69,14 @@\n \n \n \n
    \n-

    gridfunctions → backends Relation

    File in dune/functions/gridfunctionsIncludes file in dune/functions/backends
    discreteglobalbasisfunction.hhbackends/concepts.hh
    discreteglobalbasisfunction.hhistlvectorbackend.hh
    \n+

    gridfunctions → backends Relation

    File in dune/functions/gridfunctionsIncludes file in dune/functions/backends
    discreteglobalbasisfunction.hhbackends/concepts.hh
    discreteglobalbasisfunction.hhistlvectorbackend.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \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": "@@ -69,14 +69,14 @@\n \n \n \n \n+

    gridfunctions → common Relation

    File in dune/functions/gridfunctionsIncludes file in dune/functions/common
    analyticgridviewfunction.hhdefaultderivativetraits.hh
    analyticgridviewfunction.hhdifferentiablefunction.hh
    analyticgridviewfunction.hhdifferentiablefunction_imp.hh
    analyticgridviewfunction.hhsignature.hh
    composedgridfunction.hhdefaultderivativetraits.hh
    composedgridfunction.hhdifferentiablefunction.hh
    gridfunction.hhdefaultderivativetraits.hh
    gridfunction.hhdifferentiablefunction.hh
    gridfunction.hhfunctionconcepts.hh
    gridfunction.hhlocalfunction.hh
    gridfunction.hhtypeerasure.hh
    gridfunction_imp.hhdifferentiablefunction_imp.hh
    gridfunction_imp.hhinterfaces.hh
    gridfunction_imp.hhtype_traits.hh
    localderivativetraits.hhdefaultderivativetraits.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \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": "@@ -69,14 +69,14 @@\n \n \n \n
    \n-

    gridfunctions → functionspacebases Relation

    File in dune/functions/gridfunctionsIncludes file in dune/functions/functionspacebases
    discreteglobalbasisfunction.hhflatvectorview.hh
    discreteglobalbasisfunction.hhhierarchicnodetorangemap.hh
    \n+

    gridfunctions → functionspacebases Relation

    File in dune/functions/gridfunctionsIncludes file in dune/functions/functionspacebases
    discreteglobalbasisfunction.hhflatvectorview.hh
    discreteglobalbasisfunction.hhhierarchicnodetorangemap.hh
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \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": "@@ -90,50 +90,50 @@\n \"\"\n \"\"\n \n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n-\n+\n+\n \n-\n+\n \n-\n+\n \n \n \n-\n+\n \n-\n+\n \n

    \n Files

     defaultderivativetraits.hh
     defaultderivativetraits.hh
     
     differentiablefunction.hh
     differentiablefunction.hh
     
     differentiablefunction_imp.hh
     differentiablefunction_imp.hh
     
     differentiablefunctionfromcallables.hh
     differentiablefunctionfromcallables.hh
     
     functionconcepts.hh
     functionconcepts.hh
     
     indexaccess.hh
     indexaccess.hh
     
     interfaces.hh
     interfaces.hh
     
     localfunction.hh
     localfunction.hh
     
     localfunction_imp.hh
     localfunction_imp.hh
     
     multiindex.hh
     multiindex.hh
     
     overflowarray.hh
     overflowarray.hh
     
     polymorphicsmallobject.hh
     polymorphicsmallobject.hh
     
     reserveddeque.hh
     An stl-compliant double-ended queue which stores everything on the stack.
     reserveddeque.hh
     An stl-compliant double-ended queue which stores everything on the stack.
     
     signature.hh
     signature.hh
     
     staticforloop.hh
     staticforloop.hh
     
     type_traits.hh
     
     typeerasure.hh
     typeerasure.hh
     
     utility.hh
     utility.hh
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \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": "@@ -93,31 +93,31 @@\n \"\"\n \"\"\n \n \n \n \n-\n+\n \n-\n+\n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n

    \n Files

     analyticgridviewfunction.hh
     analyticgridviewfunction.hh
     
     composedgridfunction.hh
     composedgridfunction.hh
     
     discreteglobalbasisfunction.hh
     
     facenormalgridfunction.hh
     facenormalgridfunction.hh
     
     gridfunction.hh
     gridfunction.hh
     
     gridfunction_imp.hh
     gridfunction_imp.hh
     
     gridviewentityset.hh
     gridviewentityset.hh
     
     gridviewfunction.hh
     gridviewfunction.hh
     
     localderivativetraits.hh
     localderivativetraits.hh
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \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": "@@ -92,15 +92,15 @@\n \n \n \n \n \n \n-\n+\n \n

    \n Files

     concepts.hh
     
     istlvectorbackend.hh
     istlvectorbackend.hh
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \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": "@@ -93,86 +93,86 @@\n \"\"\n \"\"\n \n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n-\n+\n+\n \n-\n+\n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n \n \n \n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n

    \n Files

     basistags.hh
     basistags.hh
     
     boundarydofs.hh
     boundarydofs.hh
     
     brezzidouglasmarinibasis.hh
     brezzidouglasmarinibasis.hh
     
     bsplinebasis.hh
     The B-spline global function space basis.
     bsplinebasis.hh
     The B-spline global function space basis.
     
     compositebasis.hh
     compositebasis.hh
     
     concepts.hh
     
     containerdescriptors.hh
     containerdescriptors.hh
     
     defaultglobalbasis.hh
     defaultglobalbasis.hh
     
     defaultlocalview.hh
     defaultlocalview.hh
     
     defaultnodetorangemap.hh
     defaultnodetorangemap.hh
     
     dynamicpowerbasis.hh
     dynamicpowerbasis.hh
     
     flatmultiindex.hh
     flatmultiindex.hh
     
     flatvectorview.hh
     
     globalvaluedlocalfiniteelement.hh
     globalvaluedlocalfiniteelement.hh
     
     hierarchicallagrangebasis.hh
     hierarchicallagrangebasis.hh
     
     hierarchicnodetorangemap.hh
     hierarchicnodetorangemap.hh
     
     hierarchicvectorwrapper.hh
     hierarchicvectorwrapper.hh
     
     interpolate.hh
     interpolate.hh
     
     lagrangebasis.hh
     lagrangebasis.hh
     
     lagrangedgbasis.hh
     
     leafprebasismappermixin.hh
     
     leafprebasismixin.hh
     
     lfeprebasismixin.hh
     lfeprebasismixin.hh
     
     nedelecbasis.hh
     nedelecbasis.hh
     
     nodes.hh
     nodes.hh
     
     periodicbasis.hh
     periodicbasis.hh
     
     powerbasis.hh
     powerbasis.hh
     
     rannacherturekbasis.hh
     rannacherturekbasis.hh
     
     raviartthomasbasis.hh
     raviartthomasbasis.hh
     
     refinedlagrangebasis.hh
     refinedlagrangebasis.hh
     
     sizeinfo.hh
     sizeinfo.hh
     
     subentitydofs.hh
     subentitydofs.hh
     
     subspacebasis.hh
     subspacebasis.hh
     
     subspacelocalview.hh
     subspacelocalview.hh
     
     taylorhoodbasis.hh
     taylorhoodbasis.hh
     
     transformedindexbasis.hh
     transformedindexbasis.hh
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \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": "@@ -84,17 +84,17 @@\n \"\"\n \"\"\n \n \n \n \n-\n+\n \n-\n+\n \n

    \n Files

     polynomial.hh
     polynomial.hh
     
     trigonometricfunction.hh
     trigonometricfunction.hh
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \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,23 +4,23 @@\n mainpage.md\n /build/reproducible-path/dune-functions-2.10.0/doc/doxygen/\n a00203.html\n \n \n polynomial.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/analyticfunctions/\n- a00092.html\n+ a00032.html\n Dune::Functions::Polynomial\n Dune\n Dune::Functions\n \n \n trigonometricfunction.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/analyticfunctions/\n- a00089.html\n+ a00029.html\n Dune::Functions::TrigonometricFunction\n Dune\n Dune::Functions\n \n \n backends/concepts.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/backends/\n@@ -31,16 +31,16 @@\n Dune::Functions\n Dune::Functions::Concept\n \n \n functionspacebases/concepts.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n a02939.html\n- dune/functions/common/utility.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/common/utility.hh\n+ dune/functions/functionspacebases/nodes.hh\n Dune::Functions::Concept::HasResize\n Dune::Functions::Concept::HasSizeMethod\n Dune::Functions::Concept::HasIndexAccess\n Dune::Functions::Concept::BasisNode\n Dune::Functions::Concept::LeafBasisNode\n Dune::Functions::Concept::PowerBasisNode\n Dune::Functions::Concept::DynamicPowerBasisNode\n@@ -52,75 +52,75 @@\n Dune\n Dune::Functions\n Dune::Functions::Concept\n \n \n istlvectorbackend.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/backends/\n- a00002.html\n- dune/functions/common/indexaccess.hh\n+ a00035.html\n+ dune/functions/common/indexaccess.hh\n dune/functions/functionspacebases/concepts.hh\n Dune\n Dune::Functions\n \n \n defaultderivativetraits.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00035.html\n+ a00041.html\n Dune::Functions::InvalidRange\n Dune::Functions::DefaultDerivativeTraits\n Dune::Functions::DefaultDerivativeTraits< double(double) >\n Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)>\n Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)>\n Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)>\n Dune\n Dune::Functions\n \n \n differentiablefunction.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00080.html\n+ a00044.html\n dune/functions/common/type_traits.hh\n- dune/functions/common/defaultderivativetraits.hh\n- dune/functions/common/differentiablefunction_imp.hh\n- dune/functions/common/signature.hh\n- dune/functions/common/typeerasure.hh\n- dune/functions/common/functionconcepts.hh\n+ dune/functions/common/defaultderivativetraits.hh\n+ dune/functions/common/differentiablefunction_imp.hh\n+ dune/functions/common/signature.hh\n+ dune/functions/common/typeerasure.hh\n+ dune/functions/common/functionconcepts.hh\n Dune::Functions::DifferentiableFunction\n Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >\n Dune\n Dune::Functions\n \n \n differentiablefunction_imp.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00053.html\n+ a00086.html\n dune/functions/common/type_traits.hh\n Dune\n Dune::Functions\n \n \n differentiablefunctionfromcallables.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00068.html\n- dune/functions/common/signature.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/common/functionconcepts.hh\n+ a00089.html\n+ dune/functions/common/signature.hh\n+ dune/functions/common/differentiablefunction.hh\n+ dune/functions/common/functionconcepts.hh\n Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >\n Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >\n Dune\n Dune::Functions\n \n \n functionconcepts.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00056.html\n- dune/functions/common/signature.hh\n- dune/functions/gridfunctions/localderivativetraits.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n+ a00074.html\n+ dune/functions/common/signature.hh\n+ dune/functions/gridfunctions/localderivativetraits.hh\n+ dune/functions/gridfunctions/gridviewentityset.hh\n Dune::Functions::Concept::Callable\n Dune::Functions::Concept::Function< Range(Domain)>\n Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits >\n Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext >\n Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits >\n Dune::Functions::Concept::EntitySet\n Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >\n@@ -130,105 +130,105 @@\n Dune\n Dune::Functions\n Dune::Functions::Concept\n \n \n indexaccess.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00086.html\n- dune/functions/common/utility.hh\n+ a00053.html\n+ dune/functions/common/utility.hh\n Dune\n Dune::Functions\n \n \n interfaces.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00071.html\n+ a00047.html\n Dune::Functions::PolymorphicType\n Dune\n Dune::Functions\n \n \n localfunction.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00044.html\n- dune/functions/common/defaultderivativetraits.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/common/localfunction_imp.hh\n- dune/functions/common/typeerasure.hh\n- dune/functions/common/functionconcepts.hh\n+ a00071.html\n+ dune/functions/common/defaultderivativetraits.hh\n+ dune/functions/common/differentiablefunction.hh\n+ dune/functions/common/localfunction_imp.hh\n+ dune/functions/common/typeerasure.hh\n+ dune/functions/common/functionconcepts.hh\n Dune::Functions::LocalFunction\n Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >\n Dune\n Dune::Functions\n \n \n localfunction_imp.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00065.html\n+ a00092.html\n dune/functions/common/type_traits.hh\n- dune/functions/common/differentiablefunction_imp.hh\n+ dune/functions/common/differentiablefunction_imp.hh\n Dune\n Dune::Functions\n \n \n multiindex.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00059.html\n+ a00077.html\n Dune::Functions::StaticMultiIndex\n Dune::Functions::StaticMultiIndex< size_type, 1 >\n std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > >\n Dune\n Dune::Functions\n \n \n overflowarray.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00047.html\n+ a00068.html\n Dune::Functions::OverflowArray\n Dune\n Dune::Functions\n \n \n polymorphicsmallobject.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00050.html\n+ a00065.html\n Dune::Functions::PolymorphicSmallObject\n Dune\n Dune::Functions\n \n \n reserveddeque.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00041.html\n+ a00080.html\n Dune::Functions::ReservedDeque\n Dune\n Dune::Functions\n \n #define\n CHECKSIZE\n- a00041.html\n+ a00080.html\n a65543e75bc949ecdb95a25b1f4e11675\n (X)\n \n \n \n signature.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00074.html\n- dune/functions/common/defaultderivativetraits.hh\n+ a00056.html\n+ dune/functions/common/defaultderivativetraits.hh\n Dune::Functions::SignatureTraits\n Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT >\n Dune\n Dune::Functions\n \n \n staticforloop.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00077.html\n+ a00050.html\n dune/functions/common/type_traits.hh\n dune/functions/functionspacebases/concepts.hh\n Dune\n Dune::Functions\n \n \n type_traits.hh\n@@ -238,36 +238,36 @@\n Dune::Functions::StaticSizeOrZero\n Dune\n Dune::Functions\n \n \n typeerasure.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00038.html\n+ a00083.html\n dune/functions/common/type_traits.hh\n- dune/functions/common/interfaces.hh\n- dune/functions/common/polymorphicsmallobject.hh\n+ dune/functions/common/interfaces.hh\n+ dune/functions/common/polymorphicsmallobject.hh\n Dune::Functions::TypeErasureBase\n Dune\n Dune::Functions\n \n \n utility.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00083.html\n- dune/functions/common/functionconcepts.hh\n+ a00059.html\n+ dune/functions/common/functionconcepts.hh\n Dune::Functions::LastType\n Dune::Functions::RotateTuple\n Dune\n Dune::Functions\n \n \n basistags.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00113.html\n+ a00149.html\n Dune::Functions::Concept::IndexMergingStrategy\n Dune::Functions::BasisFactory::IndexMergingStrategy\n Dune::Functions::BasisFactory::FlatLexicographic\n Dune::Functions::BasisFactory::FlatInterleaved\n Dune::Functions::BasisFactory::BlockedLexicographic\n Dune::Functions::BasisFactory::BlockedInterleaved\n Dune\n@@ -275,222 +275,222 @@\n Dune::Functions::Concept\n Dune::Functions::BasisFactory\n Dune::Functions::BasisBuilder\n \n \n boundarydofs.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00149.html\n- dune/functions/functionspacebases/subentitydofs.hh\n+ a00167.html\n+ dune/functions/functionspacebases/subentitydofs.hh\n Dune\n Dune::Functions\n \n \n brezzidouglasmarinibasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00140.html\n- dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ a00164.html\n+ dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n+ dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n dune/functions/functionspacebases/leafprebasismixin.hh\n Dune::Functions::BrezziDouglasMariniPreBasis\n Dune::Functions::BrezziDouglasMariniNode\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n bsplinebasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00116.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ a00098.html\n+ dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n dune/functions/functionspacebases/leafprebasismixin.hh\n Dune::Functions::BSplineLocalBasis\n Dune::Functions::BSplineLocalCoefficients\n Dune::Functions::BSplineLocalInterpolation\n Dune::Functions::BSplineLocalFiniteElement\n Dune::Functions::BSplinePreBasis\n Dune::Functions::BSplineNode\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n compositebasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00167.html\n- dune/functions/common/staticforloop.hh\n+ a00134.html\n+ dune/functions/common/staticforloop.hh\n dune/functions/common/type_traits.hh\n- dune/functions/common/utility.hh\n- dune/functions/functionspacebases/basistags.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/common/utility.hh\n+ dune/functions/functionspacebases/basistags.hh\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/concepts.hh\n- dune/functions/functionspacebases/containerdescriptors.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ dune/functions/functionspacebases/containerdescriptors.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n Dune::Functions::CompositePreBasis\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n Dune::Functions::BasisBuilder\n \n \n containerdescriptors.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00173.html\n+ a00125.html\n dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/basistags.hh\n+ dune/functions/functionspacebases/basistags.hh\n Dune::Functions::ContainerDescriptors::Unknown\n Dune::Functions::ContainerDescriptors::Value\n Dune::Functions::ContainerDescriptors::UniformArray\n Dune::Functions::ContainerDescriptors::UniformVector\n Dune\n Dune::Functions\n Dune::Functions::ContainerDescriptors\n \n \n defaultglobalbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00119.html\n+ a00158.html\n dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/defaultlocalview.hh\n+ dune/functions/functionspacebases/defaultlocalview.hh\n dune/functions/functionspacebases/concepts.hh\n Dune::Functions::DefaultGlobalBasis\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n Dune::Functions::BasisBuilder\n \n \n defaultlocalview.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00185.html\n- dune/functions/common/overflowarray.hh\n- dune/functions/common/multiindex.hh\n+ a00179.html\n+ dune/functions/common/overflowarray.hh\n+ dune/functions/common/multiindex.hh\n dune/functions/functionspacebases/concepts.hh\n Dune::Functions::DefaultLocalView\n Dune\n Dune::Functions\n \n \n defaultnodetorangemap.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00161.html\n+ a00113.html\n dune/functions/functionspacebases/concepts.hh\n Dune::Functions::DefaultNodeToRangeMap\n Dune::Functions::DefaultNodeToRangeMap::Visitor\n Dune\n Dune::Functions\n \n \n dynamicpowerbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00104.html\n- dune/functions/common/utility.hh\n+ a00137.html\n+ dune/functions/common/utility.hh\n dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/basistags.hh\n- dune/functions/functionspacebases/containerdescriptors.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/basistags.hh\n+ dune/functions/functionspacebases/containerdescriptors.hh\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/concepts.hh\n Dune::Functions::DynamicPowerPreBasis\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n flatmultiindex.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00152.html\n- dune/functions/common/multiindex.hh\n+ a00146.html\n+ dune/functions/common/multiindex.hh\n Dune\n Dune::Functions\n \n \n flatvectorview.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n a00110.html\n dune/functions/functionspacebases/concepts.hh\n Dune\n Dune::Functions\n \n \n globalvaluedlocalfiniteelement.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00134.html\n+ a00197.html\n Dune\n Dune::Functions\n \n \n hierarchicallagrangebasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00137.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n- dune/functions/functionspacebases/lfeprebasismixin.hh\n+ a00128.html\n+ dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n+ dune/functions/functionspacebases/lfeprebasismixin.hh\n Dune::Functions::HierarchicalLagrangePreBasis< GV, 1, R >\n Dune::Functions::HierarchicalLagrangePreBasis< GV, 2, R >\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n hierarchicnodetorangemap.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00164.html\n+ a00194.html\n dune/functions/functionspacebases/concepts.hh\n- dune/functions/common/indexaccess.hh\n+ dune/functions/common/indexaccess.hh\n Dune::Functions::HierarchicNodeToRangeMap\n Dune\n Dune::Functions\n \n \n hierarchicvectorwrapper.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00098.html\n- dune/functions/common/indexaccess.hh\n- dune/functions/common/utility.hh\n+ a00131.html\n+ dune/functions/common/indexaccess.hh\n+ dune/functions/common/utility.hh\n dune/functions/common/type_traits.hh\n dune/functions/functionspacebases/concepts.hh\n Dune::Functions::HierarchicVectorWrapper\n Dune\n Dune::Functions\n \n \n interpolate.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00101.html\n- dune/functions/gridfunctions/gridviewfunction.hh\n- dune/functions/common/functionconcepts.hh\n+ a00191.html\n+ dune/functions/gridfunctions/gridviewfunction.hh\n+ dune/functions/common/functionconcepts.hh\n dune/functions/backends/concepts.hh\n- dune/functions/backends/istlvectorbackend.hh\n+ dune/functions/backends/istlvectorbackend.hh\n dune/functions/functionspacebases/flatvectorview.hh\n- dune/functions/functionspacebases/hierarchicnodetorangemap.hh\n+ dune/functions/functionspacebases/hierarchicnodetorangemap.hh\n Dune\n Dune::Functions\n \n \n lagrangebasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00182.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ a00176.html\n+ dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n dune/functions/functionspacebases/leafprebasismixin.hh\n Dune::Functions::LagrangePreBasis\n Dune::Functions::LagrangeNode\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n lagrangedgbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n a00095.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n- dune/functions/functionspacebases/lagrangebasis.hh\n+ dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n+ dune/functions/functionspacebases/lagrangebasis.hh\n dune/functions/functionspacebases/leafprebasismixin.hh\n Dune::Functions::LagrangeDGPreBasis\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n@@ -502,303 +502,303 @@\n Dune\n Dune::Functions\n \n \n leafprebasismixin.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n a00188.html\n- dune/functions/functionspacebases/containerdescriptors.hh\n+ dune/functions/functionspacebases/containerdescriptors.hh\n Dune::Functions::LeafPreBasisMixin\n Dune\n Dune::Functions\n \n \n lfeprebasismixin.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00191.html\n+ a00119.html\n dune/functions/functionspacebases/leafprebasismappermixin.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/nodes.hh\n Dune::Functions::LFEPreBasisMixin\n Dune::Functions::LFEPreBasisMixin::Node\n Dune\n Dune::Functions\n \n \n nedelecbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00125.html\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n- dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n+ a00116.html\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n+ dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n dune/functions/functionspacebases/leafprebasismixin.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/nodes.hh\n Dune::Functions::NedelecPreBasis\n Dune::Functions::NedelecNode\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n nodes.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00128.html\n+ a00104.html\n Dune::Functions::BasisNodeMixin\n Dune::Functions::LeafBasisNode\n Dune::Functions::PowerBasisNode\n Dune::Functions::DynamicPowerBasisNode\n Dune::Functions::CompositeBasisNode\n Dune\n Dune::Functions\n \n \n periodicbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00146.html\n+ a00107.html\n dune/functions/functionspacebases/concepts.hh\n- dune/functions/functionspacebases/containerdescriptors.hh\n- dune/functions/functionspacebases/transformedindexbasis.hh\n+ dune/functions/functionspacebases/containerdescriptors.hh\n+ dune/functions/functionspacebases/transformedindexbasis.hh\n Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n Dune::Functions::BasisFactory::Experimental\n \n \n powerbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00131.html\n- dune/functions/common/utility.hh\n+ a00101.html\n+ dune/functions/common/utility.hh\n dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/basistags.hh\n- dune/functions/functionspacebases/dynamicpowerbasis.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/basistags.hh\n+ dune/functions/functionspacebases/dynamicpowerbasis.hh\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/concepts.hh\n- dune/functions/functionspacebases/containerdescriptors.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ dune/functions/functionspacebases/containerdescriptors.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n Dune::Functions::PowerPreBasis\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n Dune::Functions::BasisBuilder\n \n \n rannacherturekbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00170.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ a00152.html\n+ dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n dune/functions/functionspacebases/leafprebasismixin.hh\n Dune::Functions::RannacherTurekPreBasis\n Dune::Functions::RannacherTurekNode\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n raviartthomasbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00197.html\n- dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ a00140.html\n+ dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n+ dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n dune/functions/functionspacebases/leafprebasismixin.hh\n Dune::Functions::RaviartThomasPreBasis\n Dune::Functions::RaviartThomasNode\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n refinedlagrangebasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00176.html\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ a00122.html\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n dune/functions/functionspacebases/leafprebasismappermixin.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/nodes.hh\n Dune::Functions::RefinedLagrangePreBasis\n Dune::Functions::RefinedLagrangeNode\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n sizeinfo.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00179.html\n+ a00155.html\n Dune::Functions::SizeInfo\n Dune\n Dune::Functions\n \n \n subentitydofs.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00122.html\n+ a00173.html\n Dune::Functions::SubEntityDOFs\n Dune\n Dune::Functions\n \n \n subspacebasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00107.html\n+ a00170.html\n dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/subspacelocalview.hh\n+ dune/functions/functionspacebases/subspacelocalview.hh\n dune/functions/functionspacebases/concepts.hh\n Dune::Functions::SubspaceBasis\n Dune\n Dune::Functions\n \n \n subspacelocalview.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00158.html\n+ a00185.html\n dune/functions/functionspacebases/concepts.hh\n Dune::Functions::SubspaceLocalView\n Dune\n Dune::Functions\n \n \n taylorhoodbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00194.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/lagrangebasis.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ a00161.html\n+ dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/lagrangebasis.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n Dune::Functions::TaylorHoodPreBasis\n Dune::Functions::TaylorHoodVelocityTree\n Dune::Functions::TaylorHoodBasisTree\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n transformedindexbasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00155.html\n- dune/functions/common/staticforloop.hh\n+ a00182.html\n+ dune/functions/common/staticforloop.hh\n dune/functions/common/type_traits.hh\n- dune/functions/common/utility.hh\n- dune/functions/functionspacebases/basistags.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/common/utility.hh\n+ dune/functions/functionspacebases/basistags.hh\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/concepts.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ dune/functions/functionspacebases/defaultglobalbasis.hh\n Dune::Functions::Experimental::TransformedIndexPreBasis\n Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation\n Dune\n Dune::Functions\n Dune::Functions::Experimental\n Dune::Functions::BasisFactory\n Dune::Functions::BasisFactory::Experimental\n \n \n analyticgridviewfunction.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/gridfunctions/\n- a00011.html\n- dune/functions/common/signature.hh\n- dune/functions/common/defaultderivativetraits.hh\n- dune/functions/common/differentiablefunction_imp.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n- dune/functions/gridfunctions/localderivativetraits.hh\n+ a00023.html\n+ dune/functions/common/signature.hh\n+ dune/functions/common/defaultderivativetraits.hh\n+ dune/functions/common/differentiablefunction_imp.hh\n+ dune/functions/common/differentiablefunction.hh\n+ dune/functions/gridfunctions/gridviewentityset.hh\n+ dune/functions/gridfunctions/localderivativetraits.hh\n Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >\n Dune\n Dune::Functions\n \n \n composedgridfunction.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/gridfunctions/\n- a00029.html\n- dune/functions/common/defaultderivativetraits.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/gridfunctions/gridfunction.hh\n+ a00005.html\n+ dune/functions/common/defaultderivativetraits.hh\n+ dune/functions/common/differentiablefunction.hh\n+ dune/functions/gridfunctions/gridfunction.hh\n Dune::Functions::ComposedGridFunction\n Dune\n Dune::Functions\n \n \n discreteglobalbasisfunction.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/gridfunctions/\n a00026.html\n- dune/functions/functionspacebases/hierarchicnodetorangemap.hh\n+ dune/functions/functionspacebases/hierarchicnodetorangemap.hh\n dune/functions/functionspacebases/flatvectorview.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n- dune/functions/gridfunctions/gridfunction.hh\n+ dune/functions/gridfunctions/gridviewentityset.hh\n+ dune/functions/gridfunctions/gridfunction.hh\n dune/functions/backends/concepts.hh\n- dune/functions/backends/istlvectorbackend.hh\n+ dune/functions/backends/istlvectorbackend.hh\n Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase\n Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data\n Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase\n Dune::Functions::DiscreteGlobalBasisFunction\n Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction\n Dune::Functions::DiscreteGlobalBasisFunctionDerivative\n Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction\n Dune\n Dune::Functions\n Dune::Functions::ImplDoc\n \n \n facenormalgridfunction.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/gridfunctions/\n- a00023.html\n- dune/functions/gridfunctions/gridfunction.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n+ a00020.html\n+ dune/functions/gridfunctions/gridfunction.hh\n+ dune/functions/gridfunctions/gridviewentityset.hh\n Dune::Functions::FaceNormalGridFunction\n Dune\n Dune::Functions\n \n \n gridfunction.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/gridfunctions/\n- a00017.html\n- dune/functions/common/typeerasure.hh\n- dune/functions/common/defaultderivativetraits.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/common/localfunction.hh\n- dune/functions/common/functionconcepts.hh\n- dune/functions/gridfunctions/localderivativetraits.hh\n- dune/functions/gridfunctions/gridfunction_imp.hh\n+ a00011.html\n+ dune/functions/common/typeerasure.hh\n+ dune/functions/common/defaultderivativetraits.hh\n+ dune/functions/common/differentiablefunction.hh\n+ dune/functions/common/localfunction.hh\n+ dune/functions/common/functionconcepts.hh\n+ dune/functions/gridfunctions/localderivativetraits.hh\n+ dune/functions/gridfunctions/gridfunction_imp.hh\n Dune::Functions::GridFunction\n Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >\n Dune\n Dune::Functions\n \n \n gridfunction_imp.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/gridfunctions/\n- a00020.html\n+ a00008.html\n dune/functions/common/type_traits.hh\n- dune/functions/common/interfaces.hh\n- dune/functions/common/differentiablefunction_imp.hh\n+ dune/functions/common/interfaces.hh\n+ dune/functions/common/differentiablefunction_imp.hh\n Dune\n Dune::Functions\n \n \n gridviewentityset.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/gridfunctions/\n- a00032.html\n+ a00017.html\n Dune::Functions::GridViewEntitySet\n Dune\n Dune::Functions\n \n \n gridviewfunction.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/gridfunctions/\n- a00008.html\n- dune/functions/gridfunctions/gridfunction.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n- dune/functions/gridfunctions/analyticgridviewfunction.hh\n+ a00014.html\n+ dune/functions/gridfunctions/gridfunction.hh\n+ dune/functions/gridfunctions/gridviewentityset.hh\n+ dune/functions/gridfunctions/analyticgridviewfunction.hh\n Dune::Functions::GridViewFunction\n Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize >\n Dune\n Dune::Functions\n \n \n localderivativetraits.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/gridfunctions/\n- a00014.html\n- dune/functions/common/defaultderivativetraits.hh\n+ a00002.html\n+ dune/functions/common/defaultderivativetraits.hh\n Dune::Functions::LocalDerivativeTraits\n Dune::Functions::LocalDerivativeTraits::Traits\n Dune::Functions::LocalDerivativeTraits::Traits< R(LocalDomain)>\n Dune\n Dune::Functions\n \n \n"}]}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/files.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/files.html", "unified_diff": "@@ -75,85 +75,85 @@\n
    Here is a list of all files with brief descriptions:
    \n
    [detail level 1234]
    \n \n \n \n \n \n-\n-\n+\n+\n \n \n-\n+\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n-\n-\n+\n+\n \n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n \n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n-\n-\n+\n+\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n
      doc
     doxygen
      dune
      functions
      analyticfunctions
     polynomial.hh
     trigonometricfunction.hh
     polynomial.hh
     trigonometricfunction.hh
      backends
     concepts.hh
     istlvectorbackend.hh
     istlvectorbackend.hh
      common
     defaultderivativetraits.hh
     differentiablefunction.hh
     differentiablefunction_imp.hh
     differentiablefunctionfromcallables.hh
     functionconcepts.hh
     indexaccess.hh
     interfaces.hh
     localfunction.hh
     localfunction_imp.hh
     multiindex.hh
     overflowarray.hh
     polymorphicsmallobject.hh
     reserveddeque.hhAn stl-compliant double-ended queue which stores everything on the stack
     signature.hh
     staticforloop.hh
     defaultderivativetraits.hh
     differentiablefunction.hh
     differentiablefunction_imp.hh
     differentiablefunctionfromcallables.hh
     functionconcepts.hh
     indexaccess.hh
     interfaces.hh
     localfunction.hh
     localfunction_imp.hh
     multiindex.hh
     overflowarray.hh
     polymorphicsmallobject.hh
     reserveddeque.hhAn stl-compliant double-ended queue which stores everything on the stack
     signature.hh
     staticforloop.hh
     type_traits.hh
     typeerasure.hh
     utility.hh
     typeerasure.hh
     utility.hh
      functionspacebases
     basistags.hh
     boundarydofs.hh
     brezzidouglasmarinibasis.hh
     bsplinebasis.hhThe B-spline global function space basis
     compositebasis.hh
     basistags.hh
     boundarydofs.hh
     brezzidouglasmarinibasis.hh
     bsplinebasis.hhThe B-spline global function space basis
     compositebasis.hh
     concepts.hh
     containerdescriptors.hh
     defaultglobalbasis.hh
     defaultlocalview.hh
     defaultnodetorangemap.hh
     dynamicpowerbasis.hh
     flatmultiindex.hh
     containerdescriptors.hh
     defaultglobalbasis.hh
     defaultlocalview.hh
     defaultnodetorangemap.hh
     dynamicpowerbasis.hh
     flatmultiindex.hh
     flatvectorview.hh
     globalvaluedlocalfiniteelement.hh
     hierarchicallagrangebasis.hh
     hierarchicnodetorangemap.hh
     hierarchicvectorwrapper.hh
     interpolate.hh
     lagrangebasis.hh
     globalvaluedlocalfiniteelement.hh
     hierarchicallagrangebasis.hh
     hierarchicnodetorangemap.hh
     hierarchicvectorwrapper.hh
     interpolate.hh
     lagrangebasis.hh
     lagrangedgbasis.hh
     leafprebasismappermixin.hh
     leafprebasismixin.hh
     lfeprebasismixin.hh
     nedelecbasis.hh
     nodes.hh
     periodicbasis.hh
     powerbasis.hh
     rannacherturekbasis.hh
     raviartthomasbasis.hh
     refinedlagrangebasis.hh
     sizeinfo.hh
     subentitydofs.hh
     subspacebasis.hh
     subspacelocalview.hh
     taylorhoodbasis.hh
     transformedindexbasis.hh
     lfeprebasismixin.hh
     nedelecbasis.hh
     nodes.hh
     periodicbasis.hh
     powerbasis.hh
     rannacherturekbasis.hh
     raviartthomasbasis.hh
     refinedlagrangebasis.hh
     sizeinfo.hh
     subentitydofs.hh
     subspacebasis.hh
     subspacelocalview.hh
     taylorhoodbasis.hh
     transformedindexbasis.hh
      gridfunctions
     analyticgridviewfunction.hh
     composedgridfunction.hh
     analyticgridviewfunction.hh
     composedgridfunction.hh
     discreteglobalbasisfunction.hh
     facenormalgridfunction.hh
     gridfunction.hh
     gridfunction_imp.hh
     gridviewentityset.hh
     gridviewfunction.hh
     localderivativetraits.hh
     facenormalgridfunction.hh
     gridfunction.hh
     gridfunction_imp.hh
     gridviewentityset.hh
     gridviewfunction.hh
     localderivativetraits.hh
    \n
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/globals.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/globals.html", "unified_diff": "@@ -66,15 +66,15 @@\n \n \n \n \n \n
    \n
    Here is a list of all file members with links to the files they belong to:
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \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": "@@ -66,15 +66,15 @@\n \n \n \n \n \n
    \n
    Here is a list of all macros with links to the files they belong to:
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00038.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00005.html", "comments": ["Files 76% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: typeerasure.hh File Reference\n+dune-functions: composedgridfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,44 +65,57 @@\n \n \n \n \n \n \n \n
    \n \n-
    typeerasure.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    composedgridfunction.hh File Reference
    \n \n
    \n-
    #include <typeinfo>
    \n+
    #include <type_traits>
    \n+#include <tuple>
    \n+#include <dune/common/referencehelper.hh>
    \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+#include <dune/functions/common/defaultderivativetraits.hh>
    \n+#include <dune/functions/common/differentiablefunction.hh>
    \n+#include <dune/functions/gridfunctions/gridfunction.hh>
    \n
    \n-

    Go to the source code of this file.

    \n+

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize >
     Base class for type-erased interface wrapper. More...
    class  Dune::Functions::ComposedGridFunction< OF, IF >
     Composition of grid functions with another function. More...
     
    \n \n \n \n \n \n+

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    template<class OF , class... IF>
     Dune::Functions::ComposedGridFunction (const OF &, const IF &...) -> ComposedGridFunction< OF, IF... >
     
    template<class OF , class... IF>
    auto Dune::Functions::makeComposedGridFunction (OF &&outerFunction, IF &&... innerFunction)
     Create a ComposedGridFunction that composes grid-functions with another function.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,39 @@\n dune-functions\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-typeerasure.hh File Reference\n-#include \n+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+composedgridfunction.hh File Reference\n+#include \n+#include \n+#include \n #include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bs_\bm_\ba_\bl_\bl_\bo_\bb_\bj_\be_\bc_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be_\b<_\b _\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b,_\b _\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be\n- _\b>\n-\u00a0 Base class for type-erased interface wrapper. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bO_\bF_\b,_\b _\bI_\bF_\b _\b>\n+\u00a0 Composition of grid functions with another function. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (const OF &, const IF &...) -\n+ > _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< OF, IF... >\n+\u00a0\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (OF &&outerFunction, IF &&...\n+ innerFunction)\n+\u00a0 Create a _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn that composes grid-functions with another\n+ function.\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}]}]}]}]}