{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.BDkF3Qj9/b1/dune-functions_2.10.0-2_i386.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.BDkF3Qj9/b2/dune-functions_2.10.0-2_i386.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,3 +1,3 @@\n \n b89e72e88add5aeb871160ffef6d5297 91620 libdevel optional libdune-functions-dev_2.10.0-2_i386.deb\n- fef08cfb33916203754b41a2221d04bb 2609220 doc optional libdune-functions-doc_2.10.0-2_all.deb\n+ 59078a552e321c5990b325d37e0cb733 2609248 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 13812 2024-11-18 22:19:43.000000 control.tar.xz\n--rw-r--r-- 0 0 0 2595216 2024-11-18 22:19:43.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 13848 2024-11-18 22:19:43.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 2595208 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": "@@ -55,30 +55,30 @@\n usr/share/doc/libdune-functions-doc/doxygen/a00077_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00080.html\n usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00083.html\n usr/share/doc/libdune-functions-doc/doxygen/a00083_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00086.html\n usr/share/doc/libdune-functions-doc/doxygen/a00086_source.html\n+usr/share/doc/libdune-functions-doc/doxygen/a00089.html\n+usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00092.html\n usr/share/doc/libdune-functions-doc/doxygen/a00092_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00095.html\n usr/share/doc/libdune-functions-doc/doxygen/a00095_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00098.html\n usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00101.html\n usr/share/doc/libdune-functions-doc/doxygen/a00101_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00104.html\n usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00107.html\n usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00110.html\n usr/share/doc/libdune-functions-doc/doxygen/a00110_source.html\n-usr/share/doc/libdune-functions-doc/doxygen/a00113.html\n-usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00116.html\n usr/share/doc/libdune-functions-doc/doxygen/a00116_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00119.html\n usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00122.html\n usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00125.html\n"}]}]}]}, {"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) 15790 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) 50423 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) 6896 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) 48771 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) 6290 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) 23469 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) 6160 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) 28132 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) 10246 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) 53025 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) 8790 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) 13441 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) 7848 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) 16631 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) 4592 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) 18943 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) 5333 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) 52266 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) 5525 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) 27268 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) 6961 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) 20704 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) 6394 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) 11402 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) 9887 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) 38530 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) 7865 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) 28322 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) 6290 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) 23469 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) 23371 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) 71415 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) 6896 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) 48771 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) 5078 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) 11203 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) 8790 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) 13441 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) 6961 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) 20704 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) 7848 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) 16631 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) 15790 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) 50423 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) 4585 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) 14592 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) 5657 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) 12836 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) 5078 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) 11203 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) 7865 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) 28322 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) 23371 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) 71415 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) 7754 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) 29915 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) 6394 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) 11402 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) 9887 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) 38530 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) 7754 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) 29915 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) 5525 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) 27268 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) 5657 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) 12836 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) 5333 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) 52266 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) 5268 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) 31670 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) 4592 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) 18943 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) 4706 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) 14586 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) 8068 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) 48738 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) 5683 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) 37242 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) 10144 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) 136554 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) 6406 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) 29529 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) 8235 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) 17577 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) 5683 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) 37242 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) 8068 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) 48738 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) 5103 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) 23183 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) 8235 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) 17577 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) 10144 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) 136554 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) 7538 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) 39745 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) 5103 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) 23183 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) 5920 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) 13339 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) 8254 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) 54827 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) 5461 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) 13550 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) 5920 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) 13339 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) 6406 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) 29529 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) 7058 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) 85683 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) 8357 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) 22357 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) 8829 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) 40245 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) 6442 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) 31003 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) 8697 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) 44628 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) 8522 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) 48874 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) 10935 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) 221442 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) 8657 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) 71257 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) 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) 7186 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) 31410 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) 8153 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) 47706 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) 5363 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) 36356 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) 5314 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) 17886 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) 5908 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) 18136 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) 5545 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) 8490 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) 9035 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) 36744 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) 8627 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) 55489 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) 8829 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) 40245 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) 8625 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) 60013 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) 8482 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) 96437 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) 15549 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) 51686 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) 13368 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) 24023 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) 8655 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) 73204 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) 8080 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) 27402 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) 7169 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) 28654 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) 7430 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) 35449 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) 8228 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) 47104 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) 5699 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) 41452 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) 9102 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) 73644 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) 5702 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) 17641 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) 7058 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) 85683 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) 8654 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) 39119 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) 4939 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) 50087 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) 8357 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) 22357 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) 9300 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) 82142 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) 9395 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) 117378 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) 12007 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) 66376 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) 7169 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) 28654 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) 5314 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) 17886 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) 5908 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) 18136 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) 8080 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) 27402 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) 8482 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) 96437 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) 8627 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) 55489 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) 9395 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) 117378 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) 9035 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) 36744 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) 5699 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) 41452 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) 8228 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) 47104 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) 8657 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) 71257 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) 4939 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) 50087 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) 7323 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) 24861 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) 5545 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) 8490 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) 9102 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) 73644 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) 8697 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) 44628 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) 7186 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) 31410 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) 13368 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) 24023 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) 9300 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) 82142 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) 12007 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) 66376 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) 5461 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) 13550 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) 8153 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) 47706 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) 10935 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) 221442 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) 15549 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) 51686 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) 8625 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) 60013 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) 8655 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) 73204 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) 8522 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) 48874 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) 8654 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) 39119 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) 5363 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) 36356 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) 8254 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) 54827 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) 9899 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) 25768 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) 2965 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) 54538 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) 54547 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: utility.hh File Reference\n+dune-functions: trigonometricfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,97 +65,48 @@\n \n \n \n \n \n
\n \n+
  • dune
  • functions
  • analyticfunctions
  • \n
    \n \n
    \n
    \n Classes |\n Namespaces |\n-Typedefs |\n Functions
    \n-
    utility.hh File Reference
    \n+
    trigonometricfunction.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 <cmath>
    \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::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-

    \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

    \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.
     
    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,92 +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- * _\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+ * _\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+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-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_\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-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+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/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: utility.hh Source File\n+dune-functions: trigonometricfunction.hh Source File\n \n \n \n \n \n \n \n@@ -70,312 +70,71 @@\n
    \n \n \n \n \n
    \n \n+
  • dune
  • functions
  • analyticfunctions
  • \n
    \n \n
    \n-
    utility.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_COMMON_UTILITY_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n
    9
    \n-
    10
    \n-
    11#include <utility>
    \n-
    12#include <type_traits>
    \n-
    13
    \n-
    14#include <dune/common/overloadset.hh>
    \n-
    15#include <dune/common/indices.hh>
    \n+
    10#include <cmath>
    \n+
    11
    \n+
    12namespace Dune {
    \n+
    13namespace Functions {
    \n+
    14
    \n+
    15
    \n
    16
    \n-\n-
    18
    \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+
    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-
    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+
    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-
    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-
    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-
    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+
    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+
    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
    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 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,353 +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-utility.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_COMMON_UTILITY_HH\n-8#define DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n+8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n 9\n-10\n-11#include \n-12#include \n-13\n-14#include \n-15#include \n+10#include \n+11\n+12namespace _\bD_\bu_\bn_\be {\n+13namespace Functions {\n+14\n+15\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-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+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-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-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-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-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+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+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 _\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:_\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/a00005.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00005.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: reserveddeque.hh File Reference\n+dune-functions: polynomial.hh File Reference\n \n \n \n \n \n \n \n@@ -65,75 +65,68 @@\n
    \n
    \n \n \n \n
    \n \n+
  • dune
  • functions
  • analyticfunctions
  • \n
    \n \n
    \n \n-
    reserveddeque.hh File Reference
    \n+Functions
    \n+
    polynomial.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 <cmath>
    \n #include <initializer_list>
    \n-#include <dune/common/genericiterator.hh>
    \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::ReservedDeque< T, n >
     A double-ended queue (deque) class with statically reserved memory. 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+\n+\n

    \n-Macros

    #define CHECKSIZE(X)   {}
     

    \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-

    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,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- * _\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+ * _\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+#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:_\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-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(X)\u00a0\u00a0\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-*\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/a00005_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00005_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: polynomial.hh Source File\n \n \n \n \n \n \n \n@@ -70,285 +70,236 @@\n
    \n \n \n \n \n
    \n \n+
  • dune
  • functions
  • analyticfunctions
  • \n
    \n \n
    \n-
    reserveddeque.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_COMMON_RESERVEDDEQUE_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n+
    8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n
    9
    \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-
    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+
    10#include <cmath>
    \n+
    11#include <initializer_list>
    \n+
    12#include <vector>
    \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+
    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-
    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+\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 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+\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-
    \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+
    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#undef CHECKSIZE
    \n+
    248
    \n
    249
    \n-
    250#endif // DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n-
    #define CHECKSIZE(X)
    Definition reserveddeque.hh:24
    \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-
    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+
    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,324 +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- * _\bc_\bo_\bm_\bm_\bo_\bn\n-reserveddeque.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_COMMON_RESERVEDDEQUE_HH\n-8#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n+7#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n 9\n-14#include \n-15#include \n-16#include \n-17#include \n-18\n-19#include \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-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+11#include \n+12#include \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+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_\b0 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn(){\n-141 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n-142 }\n-143\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+_\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 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk()\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 _\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+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-_\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\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#undef CHECKSIZE\n+248\n 249\n-250#endif // DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n-_\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE\n-#define CHECKSIZE(X)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:24\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:_\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+_\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/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: differentiablefunction.hh File Reference\n+dune-functions: signature.hh File Reference\n \n \n \n \n \n \n \n@@ -71,43 +71,51 @@\n \n \n \n
    \n \n-
    differentiablefunction.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    signature.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

    \n Classes

    class  Dune::Functions::DifferentiableFunction< Signature, DerivativeTraits, bufferSize >
    struct  Dune::Functions::SignatureTraits< Signature, isCallable >
     Helper class to deduce the signature of a callable. More...
     
    class  Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >
     Class storing differentiable functions using type erasure. More...
    struct  Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT >
     Tag-class to encapsulate signature information. 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 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": "@@ -1,33 +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 * _\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+_\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/_\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/_\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 _\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+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-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+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+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+\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: differentiablefunction.hh Source File\n+dune-functions: signature.hh Source File\n \n \n \n \n \n \n \n@@ -74,142 +74,168 @@\n \n \n \n
    \n-
    differentiablefunction.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_DIFFERENTIABLE_FUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_SIGNATURE_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-
    20
    \n-
    21namespace Dune {
    \n-
    22namespace Functions {
    \n-
    23
    \n-
    24
    \n+
    11#include <tuple>
    \n+
    12
    \n+\n+
    14
    \n+
    15namespace Dune {
    \n+
    16namespace Functions {
    \n+
    17
    \n+
    23template<typename F>
    \n+\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+
    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-
    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+
    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+
    59template<class Signature, bool isCallable = IsCallable<Signature>::value >
    \n+\n
    61
    \n-
    63 template<class B>
    \n-
    64 using Model = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n-
    65 };
    \n-
    66}
    \n-
    67
    \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-
    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+
    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 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+
    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 SignatureTag<Range(Domain), DerivativeTraitsT>
    \n+
    119{
    \n+
    120 using Signature = Range(Domain);
    \n+
    121
    \n+
    122 template<class T>
    \n+
    123 using DerivativeTraits = DerivativeTraitsT<T>;
    \n+
    124};
    \n
    \n+
    125
    \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+
    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+
    142
    \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+
    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+
    175
    \n+
    176
    \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
    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 check that F is callable.
    Definition signature.hh:24
    \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+
    Definition signature.hh:106
    \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,157 +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-differentiablefunction.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_DIFFERENTIABLE_FUNCTION_HH\n-8#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n+8#define DUNE_FUNCTIONS_COMMON_SIGNATURE_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-20\n-21namespace _\bD_\bu_\bn_\be {\n-22namespace Functions {\n-23\n-24\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/*\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+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-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+47template\n+48struct IsCallable\n+49{\n+50 enum { value = true };\n+51};\n+52#endif\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-63 template\n-64 using Model = DifferentiableFunctionWrapperImplementation;\n-65 };\n-66}\n-67\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-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+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 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+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 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\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-_\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+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-145\n-146#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\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+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_\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_\be_\br_\ba_\bs_\bu_\br_\be_\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_\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 DifferentiableFunction &t)\n-Get derivative of wrapped function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn differentiablefunction.hh:134\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_\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 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:_\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:_\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:_\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 ===============================================================================\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: 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/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: 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-_\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+144\n+145\n+146#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\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+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\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__\bi_\bm_\bp_\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:_\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+_\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/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: indexaccess.hh File Reference\n+dune-functions: functionconcepts.hh File Reference\n \n \n \n \n \n \n \n@@ -70,61 +70,124 @@\n \n
    \n
    \n \n-
    indexaccess.hh File Reference
    \n+
    functionconcepts.hh File Reference
    \n
    \n
    \n-
    #include <utility>
    \n-#include <type_traits>
    \n-#include <dune/common/typetraits.hh>
    \n+
    #include <dune/common/typelist.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/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+Classes

    struct  Dune::Functions::Concept::Callable< Args >
     Concept objects that can be called with given argument list. 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+\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[].
     
    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": "@@ -1,56 +1,136 @@\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+_\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 \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/_\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:_\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:_\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, 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+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/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: indexaccess.hh Source File\n+dune-functions: functionconcepts.hh Source File\n \n \n \n \n \n \n \n@@ -74,339 +74,370 @@\n \n \n \n
    \n-
    indexaccess.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_INDEX_ACCESS_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_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-
    19
    \n+
    10#include <dune/common/typelist.hh>
    \n+
    11#include <dune/common/concept.hh>
    \n+
    12
    \n+\n+\n+\n+
    16
    \n+
    17namespace Dune {
    \n+
    18namespace Functions {
    \n+
    19namespace Concept {
    \n
    20
    \n-
    21
    \n-
    22namespace Dune {
    \n-
    23namespace Functions {
    \n+
    21using namespace Dune::Concept;
    \n+
    22
    \n+
    23
    \n
    24
    \n-
    25
    \n-
    26namespace Imp {
    \n+
    25// Callable concept ############################################################
    \n+
    26
    \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-
    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+
    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+
    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-
    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
    \n-
    104namespace Imp {
    \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-
    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+
    117template<class Range, class Domain, template<class> class DerivativeTraits>
    \n+
    \n+
    118struct DifferentiableFunction<Range(Domain), DerivativeTraits> : Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n+
    119{
    \n+\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+
    \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+
    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-
    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+
    169template<class F, class Signature, class LocalContext>
    \n+
    \n+
    170static constexpr bool isLocalFunction()
    \n+
    171{ return models<Concept::LocalFunction<Signature, LocalContext>, F>(); }
    \n+
    \n+
    172
    \n+
    173
    \n+
    174// DifferentiableLocalFunction concept ##############################################
    \n+
    175template<class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+\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+
    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-
    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+
    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-
    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+
    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 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+
    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} // 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+
    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-
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:376
    \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+
    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,371 +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-indexaccess.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_INDEX_ACCESS_HH\n-8#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+8#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_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-19\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-21\n-22namespace _\bD_\bu_\bn_\be {\n-23namespace Functions {\n+21using namespace Dune::Concept;\n+22\n+23\n 24\n-25\n-26namespace Imp {\n+25// Callable concept\n+############################################################\n+26\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-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\n-104namespace Imp {\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+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-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+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 _\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 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+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-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+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-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+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-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+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-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+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 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+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} // 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+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+_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\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+_\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+_\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:_\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:_\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:_\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/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: type_traits.hh File Reference\n+dune-functions: reserveddeque.hh File Reference\n \n \n \n \n \n \n \n@@ -72,59 +72,68 @@\n
  • dune
  • functions
  • common
  • \n \n \n
    \n \n-
    type_traits.hh File Reference
    \n+Macros
    \n+
    reserveddeque.hh File Reference
    \n \n
    \n-
    #include <type_traits>
    \n-#include <dune/common/hybridutilities.hh>
    \n-#include <dune/common/typeutilities.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

    \n Classes

    struct  Dune::Functions::HasStaticSize< T >
     Check if type is a statically sized container. More...
     
    struct  Dune::Functions::StaticSizeOrZero< T >
     Obtain size of statically sized container, or 0 if dynamic size. 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-\n-\n-\n-\n-\n-

    \n-Typedefs

    template<class T , class... Args>
    using Dune::Functions::enableIfConstructible = std::enable_if_t< std::is_constructible_v< T, Args... >, int >
     Helper to constrain forwarding constructors.
     
    template<class T >
    using Dune::Functions::StaticSize = std::enable_if_t< HasStaticSize_v< T >, decltype(Dune::Hybrid::size(std::declval< T >()))>
     Obtain size of statically sized container as integral_constant, or fail.
     
    \n-\n-\n-\n-\n-\n+\n+\n+\n

    \n-Variables

    template<class T >
    constexpr bool Dune::Functions::HasStaticSize_v = HasStaticSize<T>::value
     A variable template representing the value of HasStaticSize.
     

    \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,44 +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 | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-type_traits.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 | _\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-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 Check if type is a statically sized container. _\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_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\bO_\br_\bZ_\be_\br_\bo_\b<_\b _\bT_\b _\b>\n-\u00a0 Obtain size of statically sized container, or 0 if dynamic size.\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:_\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-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:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be = std::enable_if_t< std::\n- is_constructible_v< T, Args... >, int >\n-\u00a0 Helper to constrain forwarding constructors.\n-\u00a0\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be = std::enable_if_t< _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b__\bv< T >,\n- decltype(Dune::Hybrid::size(std::declval< T >()))>\n-\u00a0 Obtain size of statically sized container as integral_constant, or fail.\n-\u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\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_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b__\bv = _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be::value\n-\u00a0 A variable template representing the value of _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be.\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/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: type_traits.hh Source File\n+dune-functions: reserveddeque.hh Source File\n \n \n \n \n \n \n \n@@ -74,75 +74,281 @@\n \n \n
    \n
    \n-
    type_traits.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_TYPE_TRAITS_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_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/hybridutilities.hh>
    \n-
    13#include <dune/common/typeutilities.hh>
    \n-
    14
    \n-
    15namespace Dune {
    \n-
    16namespace Functions {
    \n-
    17
    \n+
    14#include <algorithm>
    \n+
    15#include <iostream>
    \n+
    16#include <cstddef>
    \n+
    17#include <initializer_list>
    \n
    18
    \n-
    29template<class T, class... Args>
    \n-
    30using enableIfConstructible = std::enable_if_t<
    \n-
    31 std::is_constructible_v<T, Args...>, int>;
    \n-
    32
    \n-
    33
    \n-
    34
    \n-
    42template<class T>
    \n-
    \n-\n-
    44 public IsIntegralConstant<decltype(Dune::Hybrid::size(std::declval<T>()))>
    \n-
    45{};
    \n-
    \n-
    46
    \n-
    48template<class T>
    \n-\n-
    50
    \n+
    19#include <dune/common/genericiterator.hh>
    \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-
    59template<class T>
    \n-
    \n-\n-
    61 public std::conditional_t<HasStaticSize_v<T>,
    \n-
    62 decltype(Dune::Hybrid::size(std::declval<T>())),
    \n-
    63 std::integral_constant<std::size_t,0>>
    \n-
    64{};
    \n-
    \n-
    65
    \n-
    70template<class T>
    \n-
    71using StaticSize = std::enable_if_t<HasStaticSize_v<T>,
    \n-
    72 decltype(Dune::Hybrid::size(std::declval<T>()))>;
    \n-
    73
    \n-
    74
    \n-
    75}} // namespace Dune::Functions
    \n-
    76
    \n-
    77#endif // DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH
    \n-
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n-
    std::enable_if_t< HasStaticSize_v< T >, decltype(Dune::Hybrid::size(std::declval< T >()))> StaticSize
    Obtain size of statically sized container as integral_constant, or fail.
    Definition type_traits.hh:72
    \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+
    \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-
    constexpr bool HasStaticSize_v
    A variable template representing the value of HasStaticSize.
    Definition type_traits.hh:49
    \n-
    Check if type is a statically sized container.
    Definition type_traits.hh:45
    \n-
    Obtain size of statically sized container, or 0 if dynamic size.
    Definition type_traits.hh:64
    \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,83 +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-type_traits.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_TYPE_TRAITS_HH\n-8#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_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#include \n-14\n-15namespace _\bD_\bu_\bn_\be {\n-16namespace Functions {\n-17\n+14#include \n+15#include \n+16#include \n+17#include \n 18\n-29template\n-_\b3_\b0using _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be = std::enable_if_t<\n-31 std::is_constructible_v, int>;\n-32\n-33\n-34\n-42template\n-_\b4_\b3struct _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be :\n-44 public IsIntegralConstant()))>\n-45{};\n-46\n-48template\n-_\b4_\b9inline constexpr bool _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b__\bv = _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n-50\n+19#include \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+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-59template\n-_\b6_\b0struct _\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\bO_\br_\bZ_\be_\br_\bo :\n-61 public std::conditional_t,\n-62 decltype(Dune::Hybrid::size(std::declval())),\n-63 std::integral_constant>\n-64{};\n-65\n-70template\n-_\b7_\b1using _\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be = std::enable_if_t,\n-72 decltype(Dune::Hybrid::size(std::declval()))>;\n-73\n-74\n-75}} // namespace Dune::Functions\n-76\n-77#endif // DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\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_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be\n-std::enable_if_t< HasStaticSize_v< T >, decltype(Dune::Hybrid::size(std::\n-declval< T >()))> StaticSize\n-Obtain size of statically sized container as integral_constant, or fail.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:72\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_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 ===============================================================================\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: defaultderivativetraits.hh File Reference\n+dune-functions: interfaces.hh File Reference\n \n \n \n \n \n \n \n@@ -72,43 +72,25 @@\n
  • dune
  • functions
  • common
  • \n \n \n
    \n \n-
    defaultderivativetraits.hh File Reference
    \n+
    interfaces.hh File Reference
    \n
    \n
    \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::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...
    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,40 +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-defaultderivativetraits.hh File Reference\n+interfaces.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:_\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+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/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: defaultderivativetraits.hh Source File\n+dune-functions: interfaces.hh Source File\n \n \n \n \n \n \n \n@@ -74,97 +74,64 @@\n \n \n \n
    \n-
    defaultderivativetraits.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_DEFAULT_DERIVATIVE_TRAITS_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n
    9
    \n
    10#include <type_traits>
    \n-
    11#include <utility>
    \n+
    11
    \n
    12
    \n-
    13#include <dune/common/fvector.hh>
    \n-
    14#include <dune/common/fmatrix.hh>
    \n+
    13namespace Dune {
    \n+
    14namespace Functions {
    \n
    15
    \n-
    16namespace Dune {
    \n-
    17namespace Functions {
    \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+
    16
    \n+
    17
    \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-
    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-
    113#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \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
    \n+
    70
    \n+
    71}} // namespace Dune::Functions
    \n+
    72
    \n+
    73#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH
    \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+
    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,103 +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-defaultderivativetraits.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_DEFAULT_DERIVATIVE_TRAITS_HH\n-8#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_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+11\n 12\n-13#include \n-14#include \n+13namespace _\bD_\bu_\bn_\be {\n+14namespace Functions {\n 15\n-16namespace _\bD_\bu_\bn_\be {\n-17namespace Functions {\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+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+35\n+_\b4_\b4 virtual Interface* _\bc_\bl_\bo_\bn_\be() const = 0;\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-113#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\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+69\n+70\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:_\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:_\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/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: differentiablefunction_imp.hh File Reference\n+dune-functions: type_traits.hh File Reference\n \n \n \n \n \n \n \n@@ -70,30 +70,60 @@\n \n
    \n
    \n \n-
    differentiablefunction_imp.hh File Reference
    \n+Classes |\n+Namespaces |\n+Typedefs |\n+Variables
    \n+
    type_traits.hh File Reference
    \n \n
    \n-
    #include <dune/common/exceptions.hh>
    \n-#include <dune/common/concept.hh>
    \n-#include <dune/functions/common/type_traits.hh>
    \n+
    #include <type_traits>
    \n+#include <dune/common/hybridutilities.hh>
    \n+#include <dune/common/typeutilities.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+Classes

    struct  Dune::Functions::HasStaticSize< T >
     Check if type is a statically sized container. More...
     
    struct  Dune::Functions::StaticSizeOrZero< T >
     Obtain size of statically sized container, or 0 if dynamic size. 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+Typedefs

    template<class T , class... Args>
    using Dune::Functions::enableIfConstructible = std::enable_if_t< std::is_constructible_v< T, Args... >, int >
     Helper to constrain forwarding constructors.
     
    template<class T >
    using Dune::Functions::StaticSize = std::enable_if_t< HasStaticSize_v< T >, decltype(Dune::Hybrid::size(std::declval< T >()))>
     Obtain size of statically sized container as integral_constant, or fail.
     
    \n+\n+\n+\n+\n+\n

    \n+Variables

    template<class T >
    constexpr bool Dune::Functions::HasStaticSize_v = HasStaticSize<T>::value
     A variable template representing the value of HasStaticSize.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +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-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-differentiablefunction_imp.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+_\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 | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+type_traits.hh File Reference\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+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b<_\b _\bT_\b _\b>\n+\u00a0 Check if type is a statically sized container. _\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_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\bO_\br_\bZ_\be_\br_\bo_\b<_\b _\bT_\b _\b>\n+\u00a0 Obtain size of statically sized container, or 0 if dynamic size.\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+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:_\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be = std::enable_if_t< std::\n+ is_constructible_v< T, Args... >, int >\n+\u00a0 Helper to constrain forwarding constructors.\n+\u00a0\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be = std::enable_if_t< _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b__\bv< T >,\n+ decltype(Dune::Hybrid::size(std::declval< T >()))>\n+\u00a0 Obtain size of statically sized container as integral_constant, or fail.\n+\u00a0\n+V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\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_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b__\bv = _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be::value\n+\u00a0 A variable template representing the value of _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be.\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: differentiablefunction_imp.hh Source File\n+dune-functions: type_traits.hh Source File\n \n \n \n \n \n \n \n@@ -74,120 +74,75 @@\n \n \n \n
    \n-
    differentiablefunction_imp.hh
    \n+
    type_traits.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_TYPE_TRAITS_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH
    \n
    9
    \n-
    10#include <dune/common/exceptions.hh>
    \n-
    11#include <dune/common/concept.hh>
    \n-
    12
    \n-\n+
    10#include <type_traits>
    \n+
    11
    \n+
    12#include <dune/common/hybridutilities.hh>
    \n+
    13#include <dune/common/typeutilities.hh>
    \n
    14
    \n-
    15
    \n-
    16namespace Dune {
    \n-
    17namespace Functions {
    \n-
    18namespace Imp {
    \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+
    15namespace Dune {
    \n+
    16namespace Functions {
    \n+
    17
    \n+
    18
    \n+
    29template<class T, class... Args>
    \n+
    30using enableIfConstructible = std::enable_if_t<
    \n+
    31 std::is_constructible_v<T, Args...>, int>;
    \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+
    33
    \n+
    34
    \n+
    42template<class T>
    \n+
    \n+\n+
    44 public IsIntegralConstant<decltype(Dune::Hybrid::size(std::declval<T>()))>
    \n+
    45{};
    \n+
    \n+
    46
    \n+
    48template<class T>
    \n+\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-
    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+
    59template<class T>
    \n+
    \n+\n+
    61 public std::conditional_t<HasStaticSize_v<T>,
    \n+
    62 decltype(Dune::Hybrid::size(std::declval<T>())),
    \n+
    63 std::integral_constant<std::size_t,0>>
    \n+
    64{};
    \n+
    \n+
    65
    \n+
    70template<class T>
    \n+
    71using StaticSize = std::enable_if_t<HasStaticSize_v<T>,
    \n+
    72 decltype(Dune::Hybrid::size(std::declval<T>()))>;
    \n+
    73
    \n+
    74
    \n+
    75}} // namespace Dune::Functions
    \n+
    76
    \n+
    77#endif // DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH
    \n+
    std::enable_if_t< std::is_constructible_v< T, Args... >, int > enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:31
    \n+
    std::enable_if_t< HasStaticSize_v< T >, decltype(Dune::Hybrid::size(std::declval< T >()))> StaticSize
    Obtain size of statically sized container as integral_constant, or fail.
    Definition type_traits.hh:72
    \n
    Definition polynomial.hh:17
    \n+
    constexpr bool HasStaticSize_v
    A variable template representing the value of HasStaticSize.
    Definition type_traits.hh:49
    \n+
    Check if type is a statically sized container.
    Definition type_traits.hh:45
    \n+
    Obtain size of statically sized container, or 0 if dynamic size.
    Definition type_traits.hh:64
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,124 +1,83 @@\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+type_traits.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_TYPE_TRAITS_HH\n+8#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_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+10#include \n+11\n+12#include \n+13#include \n 14\n-15\n-16namespace _\bD_\bu_\bn_\be {\n-17namespace Functions {\n-18namespace Imp {\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+15namespace _\bD_\bu_\bn_\be {\n+16namespace Functions {\n+17\n+18\n+29template\n+_\b3_\b0using _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be = std::enable_if_t<\n+31 std::is_constructible_v, int>;\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+33\n+34\n+42template\n+_\b4_\b3struct _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be :\n+44 public IsIntegralConstant()))>\n+45{};\n+46\n+48template\n+_\b4_\b9inline constexpr bool _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b__\bv = _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\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-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+59template\n+_\b6_\b0struct _\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\bO_\br_\bZ_\be_\br_\bo :\n+61 public std::conditional_t,\n+62 decltype(Dune::Hybrid::size(std::declval())),\n+63 std::integral_constant>\n+64{};\n+65\n+70template\n+_\b7_\b1using _\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be = std::enable_if_t,\n+72 decltype(Dune::Hybrid::size(std::declval()))>;\n+73\n+74\n+75}} // namespace Dune::Functions\n+76\n+77#endif // DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\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_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be\n+std::enable_if_t< HasStaticSize_v< T >, decltype(Dune::Hybrid::size(std::\n+declval< T >()))> StaticSize\n+Obtain size of statically sized container as integral_constant, or fail.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:72\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_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b__\bv\n+constexpr bool HasStaticSize_v\n+A variable template representing the value of HasStaticSize.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:49\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be\n+Check if type is a statically sized container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:45\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\bO_\br_\bZ_\be_\br_\bo\n+Obtain size of statically sized container, or 0 if dynamic size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:64\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": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: overflowarray.hh File Reference\n+dune-functions: multiindex.hh File Reference\n \n \n \n \n \n \n \n@@ -71,39 +71,49 @@\n \n \n \n
    \n \n-
    overflowarray.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    multiindex.hh File Reference
    \n \n
    \n-
    #include <algorithm>
    \n-#include <iostream>
    \n-#include <cstddef>
    \n+
    #include <cstddef>
    \n #include <array>
    \n-#include <initializer_list>
    \n-#include <dune/common/genericiterator.hh>
    \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 \n

    \n Classes

    class  Dune::Functions::OverflowArray< BA, maxSize >
     A dynamically sized array-like class with overflow. More...
    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+Functions

    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,27 +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-_\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+_\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+#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:_\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:_\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+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/a00026_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00026_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: multiindex.hh Source File\n \n \n \n \n \n \n \n@@ -74,282 +74,123 @@\n \n \n
    \n
    \n-
    overflowarray.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_OVERFLOWARRAY_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_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 <cstddef>
    \n+
    11#include <array>
    \n+
    12#include <iostream>
    \n+
    13
    \n+
    14#include <dune/common/hash.hh>
    \n
    15
    \n-
    16#include <dune/common/genericiterator.hh>
    \n-
    17
    \n+
    16
    \n+
    17namespace Dune::Functions {
    \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+
    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+
    \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-
    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+
    69 operator size_type& () {
    \n+
    70 return (*this)[0];
    \n+
    71 }
    \n+
    \n+
    72
    \n+
    73};
    \n
    \n+
    74
    \n+
    75
    \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+
    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-
    \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+
    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
    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+
    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,317 +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-overflowarray.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_OVERFLOWARRAY_HH\n-8#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+8#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n 9\n-10#include \n-11#include \n-12#include \n-13#include \n-14#include \n+10#include \n+11#include \n+12#include \n+13\n+14#include \n 15\n-16#include \n-17\n+16\n+17namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\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+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+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 _\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+_\b6_\b9 operator size_type& () {\n+70 return (*this)[0];\n+71 }\n+72\n+73};\n+74\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+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-_\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+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 _\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+_\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/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: typeerasure.hh File Reference\n+dune-functions: defaultderivativetraits.hh File Reference\n \n \n \n \n \n \n \n@@ -72,29 +72,43 @@\n
  • dune
  • functions
  • common
  • \n
    \n
    \n
    \n \n-
    typeerasure.hh File Reference
    \n+
    defaultderivativetraits.hh File Reference
    \n
    \n
    \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+
    #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::TypeErasureBase< Interface, Implementation, bufferSize >
     Base class for type-erased interface wrapper. 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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,25 +2,40 @@\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-#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+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:_\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:_\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 ===============================================================================\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: typeerasure.hh Source File\n+dune-functions: defaultderivativetraits.hh Source File\n \n \n \n \n \n \n \n@@ -74,173 +74,97 @@\n \n \n \n
    \n-
    typeerasure.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_TYPEERASURE_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n
    9
    \n-
    10#include <typeinfo>
    \n-
    11
    \n-
    12#include <dune/common/typeutilities.hh>
    \n-
    13
    \n-\n-\n-\n-
    17
    \n-
    18namespace Dune {
    \n-
    19namespace Functions {
    \n-
    20namespace Imp {
    \n-
    21
    \n-
    22
    \n-
    23
    \n-
    37template<class Interface>
    \n-
    38class TypeErasureWrapperInterface :
    \n-
    39 public Interface,
    \n-
    40 public PolymorphicType<TypeErasureWrapperInterface<Interface>>
    \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
    \n+
    20
    \n+
    \n+\n+
    27{};
    \n+
    \n+
    28
    \n+
    29
    \n+
    39template<class Signature>
    \n+
    \n+\n
    41{
    \n-
    42public:
    \n-
    43 virtual const std::type_info& target_type() const = 0;
    \n+\n
    44};
    \n+
    \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-
    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-
    86protected:
    \n-
    87 using Wrapped = T;
    \n-
    88 Wrapped wrapped_;
    \n-
    89};
    \n-
    90
    \n-
    91
    \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-
    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-
    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
    \n-
    156
    \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-
    199protected:
    \n-\n-
    201};
    \n-
    \n-
    202
    \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+
    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+
    113#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n
    Definition polynomial.hh:17
    \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+
    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,185 +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-typeerasure.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_TYPEERASURE_HH\n-8#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+8#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_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/_\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-37template\n-38class TypeErasureWrapperInterface :\n-39 public Interface,\n-40 public PolymorphicType>\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\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-42public:\n-43 virtual const std::type_info& target_type() const = 0;\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-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-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-86protected:\n-87 using Wrapped = T;\n-88 Wrapped wrapped_;\n-89};\n-90\n-91\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-116template class Implementation, class T>\n-117class TypeErasureWrapperImplementation :\n-118 public Implementation >\n-119{\n-120public:\n-121\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\n-156\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-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\n-204}} // namespace Dune::Functions\n-205\n-206\n-207\n-208#endif // DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\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-_\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+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+113#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_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:_\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+_\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/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: 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 Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
    \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/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: 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/a00035.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00035.html", "unified_diff": "@@ -74,16 +74,16 @@\n
    \n
    \n \n
    localfunction_imp.hh File Reference
    \n
    \n
    \n-
    #include <dune/functions/common/type_traits.hh>
    \n-#include <dune/functions/common/differentiablefunction_imp.hh>
    \n+\n

    Go to the source code of this file.

    \n \n \n \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html", "unified_diff": "@@ -86,16 +86,16 @@\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
    9
    \n-\n-\n+\n+\n
    12
    \n
    13
    \n
    14
    \n
    15namespace Dune {
    \n
    16namespace Functions {
    \n
    17namespace Imp {
    \n
    18
    \n@@ -149,16 +149,16 @@\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+\n+\n
    Definition polynomial.hh:17
    \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/a00038.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: staticforloop.hh File Reference\n+dune-functions: differentiablefunctionfromcallables.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+
    differentiablefunctionfromcallables.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 <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 Namespaces

    namespace  Dune
     
    \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...
     
    \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<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<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,25 +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 * _\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+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:_\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-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 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/a00038_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00038_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: differentiablefunctionfromcallables.hh Source File\n \n \n \n \n \n \n \n@@ -74,81 +74,163 @@\n \n \n
    \n
    \n-
    staticforloop.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_COMMON_STATICFORLOOP_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n
    9
    \n
    10
    \n-
    11#include <dune/common/concept.hh>
    \n-
    12
    \n-\n-\n+
    11#include <dune/common/typeutilities.hh>
    \n+
    12#include <dune/common/hybridutilities.hh>
    \n+
    13
    \n+\n
    15
    \n-
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n+\n+\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-
    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-
    66} // namespace Dune::Functions
    \n-
    67} // namespace Dune
    \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+
    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-
    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+
    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-\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,81 +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 * _\bc_\bo_\bm_\bm_\bo_\bn\n-staticforloop.hh\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_COMMON_STATICFORLOOP_HH\n-8#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n+8#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_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+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-17namespace _\bD_\bu_\bn_\be {\n-18namespace 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-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-66} // namespace Dune::Functions\n-67} // namespace Dune\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+_\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-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+_\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+_\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+_\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-_\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\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/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: interfaces.hh File Reference\n+dune-functions: typeerasure.hh File Reference\n \n \n \n \n \n \n \n@@ -72,25 +72,29 @@\n
  • dune
  • functions
  • common
  • \n \n \n
    \n \n-
    interfaces.hh File Reference
    \n+
    typeerasure.hh File Reference
    \n
    \n
    \n-
    #include <type_traits>
    \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 Classes

    class  Dune::Functions::PolymorphicType< Interface >
     Base class with polymorphic type boiler plate code. More...
    class  Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize >
     Base class for type-erased interface wrapper. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,20 +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 * _\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-#include \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-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:_\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 ===============================================================================\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: interfaces.hh Source File\n+dune-functions: typeerasure.hh Source File\n \n \n \n \n \n \n \n@@ -74,64 +74,173 @@\n \n \n \n
    \n-
    interfaces.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_INTERFACES_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n+
    10#include <typeinfo>
    \n
    11
    \n-
    12
    \n-
    13namespace Dune {
    \n-
    14namespace Functions {
    \n-
    15
    \n-
    16
    \n+
    12#include <dune/common/typeutilities.hh>
    \n+
    13
    \n+\n+\n+\n
    17
    \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+
    18namespace Dune {
    \n+
    19namespace Functions {
    \n+
    20namespace Imp {
    \n+
    21
    \n+
    22
    \n+
    23
    \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-
    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
    \n-
    70
    \n-
    71}} // namespace Dune::Functions
    \n-
    72
    \n-
    73#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH
    \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+
    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+
    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+
    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
    \n+
    156
    \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+
    199protected:
    \n+\n+
    201};
    \n+
    \n+
    202
    \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-
    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+
    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,68 +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-interfaces.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_INTERFACES_HH\n-8#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+8#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n 9\n-10#include \n+10#include \n 11\n-12\n-13namespace _\bD_\bu_\bn_\be {\n-14namespace Functions {\n-15\n-16\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/_\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-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+18namespace _\bD_\bu_\bn_\be {\n+19namespace Functions {\n+20namespace Imp {\n+21\n+22\n+23\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-_\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-69\n-70\n-71}} // namespace Dune::Functions\n-72\n-73#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH\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+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+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+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\n+156\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+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\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:_\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:_\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/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: signature.hh File Reference\n+dune-functions: localfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -71,51 +71,42 @@\n \n \n \n
    \n \n-
    signature.hh File Reference
    \n+Namespaces
    \n+
    localfunction.hh File Reference
    \n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
    \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...
    class  Dune::Functions::LocalFunction< Signature, LocalContext, DerivativeTraits, bufferSize >
     
    struct  Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT >
     Tag-class to encapsulate signature information. More...
    class  Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >
     Class storing local functions using type erasure. 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 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": "@@ -1,40 +1,32 @@\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-signature.hh File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+localfunction.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/_\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-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+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-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+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-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-\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/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: signature.hh Source File\n+dune-functions: localfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,168 +74,174 @@\n \n \n
    \n
    \n-
    signature.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_SIGNATURE_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_SIGNATURE_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#include <tuple>
    \n-
    12
    \n-\n-
    14
    \n-
    15namespace Dune {
    \n-
    16namespace Functions {
    \n-
    17
    \n-
    23template<typename F>
    \n-\n+
    11
    \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#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+
    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+
    36
    \n
    37
    \n-
    38 enum { value = (sizeof(test<F>(0)) == sizeof(yes)) };
    \n-
    39};
    \n+
    38namespace Imp
    \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-
    59template<class Signature, bool isCallable = IsCallable<Signature>::value >
    \n-\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-
    62#ifndef DOXYGEN
    \n-
    64template<class T>
    \n-
    65struct SignatureTraits<T, true>
    \n-
    66 : public SignatureTraits<decltype(&T::operator()), true>
    \n-
    67{};
    \n+
    63 template<class B>
    \n+
    64 using Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L, B>;
    \n+
    65 };
    \n+
    66}
    \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+
    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+
    97
    \n+\n+
    99
    \n+
    100 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n+
    101
    \n+
    102public:
    \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 SignatureTag<Range(Domain), DerivativeTraitsT>
    \n-
    119{
    \n-
    120 using Signature = Range(Domain);
    \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 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 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-
    142
    \n
    143
    \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-
    \n-
    175
    \n-
    176
    \n-
    177
    \n-
    178} // namespace Functions
    \n-
    179} // namespace Dune
    \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#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+
    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-
    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-
    DerivativeTraitsT< T > DerivativeTraits
    Definition signature.hh:123
    \n-\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,184 +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-signature.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_SIGNATURE_HH\n-8#define DUNE_FUNCTIONS_COMMON_SIGNATURE_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#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+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+20\n+21\n+22namespace _\bD_\bu_\bn_\be {\n+23namespace Functions {\n+24\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+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+36\n 37\n-38 enum { value = (sizeof(test(0)) == sizeof(yes)) };\n-39};\n+38namespace Imp\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-59template::value >\n-_\b6_\b0struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs {};\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-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+63 template\n+64 using Model = LocalFunctionWrapperImplementation;\n+65 };\n+66}\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+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::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-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 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\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-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+_\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-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-177\n-178} // namespace Functions\n-179} // namespace Dune\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#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n+181}} // namespace Dune::Functions\n+182\n+183\n+184\n+185#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_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+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\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_\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+_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\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:_\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:_\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_\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/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: functionconcepts.hh File Reference\n+dune-functions: staticforloop.hh File Reference\n \n \n \n \n \n \n \n@@ -70,124 +70,38 @@\n \n
    \n
    \n \n-
    functionconcepts.hh File Reference
    \n+
    staticforloop.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 <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-\n-\n-\n-\n-\n-\n-\n-\n-\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::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 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<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,136 +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 | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-functionconcepts.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+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/_\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+#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-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:_\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\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\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/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: functionconcepts.hh Source File\n+dune-functions: staticforloop.hh Source File\n \n \n \n \n \n \n \n@@ -74,370 +74,81 @@\n \n \n
    \n
    \n-
    functionconcepts.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_FUNCTIONCONCEPT_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n
    9
    \n-
    10#include <dune/common/typelist.hh>
    \n+
    10
    \n
    11#include <dune/common/concept.hh>
    \n
    12
    \n-\n-\n-\n+\n+\n+
    15
    \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+
    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-
    50template<class F, class... Args>
    \n-
    \n-
    51static constexpr auto isCallable()
    \n-
    52{ return models<Concept::Callable<Args...>, F>(); }
    \n-
    \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+
    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-
    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 DifferentiableFunction<Range(Domain), DerivativeTraits> : Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n-
    119{
    \n-\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-
    \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-
    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-
    172
    \n-
    173
    \n-
    174// DifferentiableLocalFunction concept ##############################################
    \n-
    175template<class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-\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+
    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-
    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-
    Derivative traits for local functions.
    Definition localderivativetraits.hh:32
    \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,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-functionconcepts.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_FUNCTIONCONCEPT_HH\n-8#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n+8#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n 9\n-10#include \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/_\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+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-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+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-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-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+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-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 _\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 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-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-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-_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\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-_\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-_\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+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:_\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:_\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+_\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/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: overflowarray.hh File Reference\n \n \n \n \n \n \n \n@@ -72,28 +72,30 @@\n
  • dune
  • functions
  • common
  • \n
    \n \n
    \n \n-
    polymorphicsmallobject.hh File Reference
    \n+
    overflowarray.hh File Reference
    \n
    \n
    \n-
    #include <cstddef>
    \n-#include <utility>
    \n-#include <type_traits>
    \n-#include <algorithm>
    \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 Classes

    class  Dune::Functions::PolymorphicSmallObject< Base, bufferSize >
     A wrapper providing small object optimization with polymorphic types. More...
    class  Dune::Functions::OverflowArray< BA, maxSize >
     A dynamically sized array-like class with overflow. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,24 +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 * _\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+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:_\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+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 ===============================================================================\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: overflowarray.hh Source File\n \n \n \n \n \n \n \n@@ -74,203 +74,282 @@\n \n \n \n
    \n-
    polymorphicsmallobject.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_POLYMORPHICSMALLOBJECT_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_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+
    10#include <algorithm>
    \n+
    11#include <iostream>
    \n+
    12#include <cstddef>
    \n+
    13#include <array>
    \n+
    14#include <initializer_list>
    \n+
    15
    \n+
    16#include <dune/common/genericiterator.hh>
    \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+
    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 // 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+
    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+
    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+
    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-
    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+
    \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-
    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+\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-
    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+
    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,209 +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-polymorphicsmallobject.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_POLYMORPHICSMALLOBJECT_HH\n-8#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+8#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_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+10#include \n+11#include \n+12#include \n+13#include \n+14#include \n+15\n+16#include \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+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-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+_\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+_\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-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+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-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+_\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 (iclone(&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+_\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-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+_\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/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: differentiablefunctionfromcallables.hh File Reference\n+dune-functions: indexaccess.hh File Reference\n \n \n \n \n \n \n \n@@ -70,50 +70,61 @@\n \n
    \n
    \n \n-
    differentiablefunctionfromcallables.hh File Reference
    \n+
    indexaccess.hh File Reference
    \n
    \n
    \n-
    #include <dune/common/typeutilities.hh>
    \n+
    #include <utility>
    \n+#include <type_traits>
    \n+#include <dune/common/typetraits.hh>
    \n+#include <dune/common/concept.hh>
    \n #include <dune/common/hybridutilities.hh>
    \n-#include <dune/functions/common/signature.hh>
    \n-#include <dune/functions/common/differentiablefunction.hh>
    \n-#include <dune/functions/common/functionconcepts.hh>
    \n+#include <dune/functions/common/utility.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-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...
     
    \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+\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.
     
    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,46 +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-_\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+_\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 \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+#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-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-\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+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: differentiablefunctionfromcallables.hh Source File\n+dune-functions: indexaccess.hh Source File\n \n \n \n \n \n \n \n@@ -74,163 +74,339 @@\n \n \n
    \n
    \n-
    differentiablefunctionfromcallables.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_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n-
    8#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n
    9
    \n
    10
    \n-
    11#include <dune/common/typeutilities.hh>
    \n-
    12#include <dune/common/hybridutilities.hh>
    \n+
    11#include <utility>
    \n+
    12#include <type_traits>
    \n
    13
    \n-\n-
    15
    \n-\n-\n-
    18
    \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
    20
    \n-
    21namespace Dune {
    \n-
    22namespace Functions {
    \n-
    23
    \n+
    21
    \n+
    22namespace Dune {
    \n+
    23namespace Functions {
    \n
    24
    \n
    25
    \n-
    26template<class Signature, template<class> class DerivativeTraits, class... Callables>
    \n-\n-
    28
    \n+
    26namespace Imp {
    \n+
    27
    \n+
    28namespace Concept {
    \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+
    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-
    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+
    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+
    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
    \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+
    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-
    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+
    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-
    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+
    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,196 +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-differentiablefunctionfromcallables.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_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n-8#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+8#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n 9\n 10\n-11#include \n-12#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/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\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-18\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 20\n-21namespace _\bD_\bu_\bn_\be {\n-22namespace Functions {\n-23\n+21\n+22namespace _\bD_\bu_\bn_\be {\n+23namespace Functions {\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+26namespace Imp {\n+27\n+28namespace Concept {\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+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-_\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+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+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\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+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-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+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:_\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+_\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: trigonometricfunction.hh File Reference\n+dune-functions: polymorphicsmallobject.hh File Reference\n \n \n \n \n \n \n \n@@ -65,48 +65,43 @@\n \n \n \n \n \n \n \n
    \n \n-
    trigonometricfunction.hh File Reference
    \n+Namespaces
    \n+
    polymorphicsmallobject.hh File Reference
    \n \n
    \n-
    #include <cmath>
    \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 \n

    \n Classes

    class  Dune::Functions::TrigonometricFunction< K, sinFactor, cosFactor >
     A linear combination of trigonomic functions. More...
    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<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,30 +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- * _\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-trigonometricfunction.hh File Reference\n-#include \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 _\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:_\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-_\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/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: trigonometricfunction.hh Source File\n+dune-functions: polymorphicsmallobject.hh Source File\n \n \n \n \n \n \n \n@@ -70,71 +70,207 @@\n
    \n \n \n \n \n \n \n
    \n-
    trigonometricfunction.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_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n+
    8#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n
    9
    \n-
    10#include <cmath>
    \n-
    11
    \n-
    12namespace Dune {
    \n-
    13namespace Functions {
    \n+
    10#include <cstddef>
    \n+
    11#include <utility>
    \n+
    12#include <type_traits>
    \n+
    13#include <algorithm>
    \n
    14
    \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-
    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+
    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+
    \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 linear combination of trigonomic functions.
    Definition trigonometricfunction.hh:31
    \n-
    K operator()(const K &x) const
    Evaluate function.
    Definition trigonometricfunction.hh:34
    \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,68 +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- * _\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+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_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n-8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+8#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n 9\n-10#include \n-11\n-12namespace _\bD_\bu_\bn_\be {\n-13namespace Functions {\n+10#include \n+11#include \n+12#include \n+13#include \n 14\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-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+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+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:_\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:_\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/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: polynomial.hh File Reference\n+dune-functions: differentiablefunction_imp.hh File Reference\n \n \n \n \n \n \n \n@@ -65,67 +65,35 @@\n \n \n \n \n \n \n \n
    \n \n-
    polynomial.hh File Reference
    \n+Namespaces
    \n+
    differentiablefunction_imp.hh File Reference
    \n \n
    \n-
    #include <cmath>
    \n-#include <initializer_list>
    \n-#include <vector>
    \n-#include <dune/common/hybridutilities.hh>
    \n+
    #include <dune/common/exceptions.hh>
    \n+#include <dune/common/concept.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-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,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- * _\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+differentiablefunction_imp.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 _\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/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: polynomial.hh Source File\n+dune-functions: differentiablefunction_imp.hh Source File\n \n \n \n \n \n \n \n@@ -70,236 +70,124 @@\n
    \n \n \n \n \n \n \n
    \n-
    polynomial.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_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n-
    8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_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#include <cmath>
    \n-
    11#include <initializer_list>
    \n-
    12#include <vector>
    \n-
    13
    \n+
    10#include <dune/common/exceptions.hh>
    \n+
    11#include <dune/common/concept.hh>
    \n+
    12
    \n+\n
    14
    \n-
    15#include <dune/common/hybridutilities.hh>
    \n-
    16
    \n-
    \n-
    17namespace Dune {
    \n-
    \n-
    18namespace Functions {
    \n+
    15
    \n+
    16namespace Dune {
    \n+
    17namespace Functions {
    \n+
    18namespace Imp {
    \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+
    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+
    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#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 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,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- * _\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+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_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n-8#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_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#include \n-11#include \n-12#include \n-13\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#include \n-16\n-_\b1_\b7namespace _\bD_\bu_\bn_\be {\n-_\b1_\b8namespace Functions {\n+15\n+16namespace _\bD_\bu_\bn_\be {\n+17namespace Functions {\n+18namespace Imp {\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+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+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\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+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#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:_\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/a00062.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00062.html", "unified_diff": "@@ -74,17 +74,17 @@\n \n
    \n \n
    gridfunction_imp.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+\n

    Go to the source code of this file.

    \n \n \n \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00062_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00062_source.html", "unified_diff": "@@ -86,17 +86,17 @@\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
    9
    \n-\n-\n-\n+\n+\n+\n
    13
    \n
    14
    \n
    15
    \n
    16namespace Dune {
    \n
    17namespace Functions {
    \n
    18namespace Imp {
    \n
    19
    \n@@ -148,17 +148,17 @@\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+\n+\n+\n
    Definition polynomial.hh:17
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -82,14 +82,14 @@\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-_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\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 ===============================================================================\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: analyticgridviewfunction.hh File Reference\n+dune-functions: facenormalgridfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -71,54 +71,41 @@\n \n \n \n
    \n \n-
    analyticgridviewfunction.hh File Reference
    \n+Namespaces
    \n+
    facenormalgridfunction.hh File Reference
    \n \n
    \n
    #include <type_traits>
    \n #include <optional>
    \n-#include <dune/common/copyableoptional.hh>
    \n+#include <dune/common/exceptions.hh>
    \n #include <dune/common/typeutilities.hh>
    \n-#include <dune/functions/common/signature.hh>
    \n-#include <dune/functions/common/defaultderivativetraits.hh>
    \n-#include <dune/functions/common/differentiablefunction_imp.hh>
    \n-#include <dune/functions/common/differentiablefunction.hh>
    \n-#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n-#include <dune/functions/gridfunctions/localderivativetraits.hh>
    \n+#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
     
    \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::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-\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,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-_\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+facenormalgridfunction.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/_\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 \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/_\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:_\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:_\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-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/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: analyticgridviewfunction.hh Source File\n+dune-functions: facenormalgridfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,257 +74,209 @@\n \n \n
    \n
    \n-
    analyticgridviewfunction.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_ANALYTICGRIDVIEWFUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n
    9
    \n
    10#include <type_traits>
    \n
    11#include <optional>
    \n
    12
    \n-
    13#include <dune/common/copyableoptional.hh>
    \n+
    13#include <dune/common/exceptions.hh>
    \n
    14#include <dune/common/typeutilities.hh>
    \n-
    15
    \n-\n-\n-\n-\n-\n-\n-
    22
    \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 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+
    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-
    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+
    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 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+
    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-
    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+
    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-
    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+
    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-
    \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+
    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-
    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 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+
    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-
    Derivative traits for local functions.
    Definition localderivativetraits.hh:32
    \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,329 +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-analyticgridviewfunction.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_ANALYTICGRIDVIEWFUNCTION_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n 9\n 10#include \n 11#include \n 12\n-13#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/_\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+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 _\bD_\bu_\bn_\be {\n-25namespace Functions {\n-26\n-27namespace Imp {\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-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+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 = 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+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 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-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+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-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+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-_\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+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-_\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-_\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_\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+195\n+196} // namespace Dune::Functions\n+197\n+198#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n _\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\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._\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_\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+_\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 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+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 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+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:_\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_\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/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: 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/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: 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+_\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_\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 _\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\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 _\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/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: discreteglobalbasisfunction.hh File Reference\n+dune-functions: gridviewentityset.hh File Reference\n \n \n \n \n \n \n \n@@ -71,68 +71,34 @@\n \n
    \n \n
    \n \n-
    discreteglobalbasisfunction.hh File Reference
    \n+Namespaces
    \n+
    gridviewentityset.hh File Reference
    \n \n
    \n
    #include <memory>
    \n-#include <optional>
    \n-#include <dune/common/typetraits.hh>
    \n-#include <dune/grid/utility/hierarchicsearch.hh>
    \n-#include <dune/typetree/treecontainer.hh>
    \n-#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>
    \n-#include <dune/functions/functionspacebases/flatvectorview.hh>
    \n-#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n-#include <dune/functions/gridfunctions/gridfunction.hh>
    \n-#include <dune/functions/backends/concepts.hh>
    \n-#include <dune/functions/backends/istlvectorbackend.hh>
    \n
    \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::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >
     
    struct  Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::Data
     
    class  Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::LocalFunctionBase
     
    class  Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >
     A grid function induced by a global basis and a coefficient vector. More...
     
    class  Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >::LocalFunction
     
    class  Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >
     Derivative of a DiscreteGlobalBasisFunction More...
     
    class  Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >::LocalFunction
     local function evaluating the derivative in reference coordinates 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 \n-\n-\n-

    \n Namespaces

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

    \n-Functions

    template<typename R , typename B , typename V >
    auto Dune::Functions::makeDiscreteGlobalBasisFunction (B &&basis, V &&vector)
     Generate a DiscreteGlobalBasisFunction.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,60 +1,22 @@\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-discreteglobalbasisfunction.hh File Reference\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-#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/_\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-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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/_\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/_\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/_\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 _\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_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\b _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE\n- _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\b _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE\n- _\b>_\b:_\b:_\bD_\ba_\bt_\ba\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\b _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE\n- _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-\u00a0\n- class \u00a0 _\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 _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE_\b,_\b _\bR_\b _\b>\n-\u00a0 A grid function induced by a global basis and a coefficient vector.\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_\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 _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE_\b,_\b _\bR_\b _\b>_\b:_\b:\n- _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-\u00a0\n- class \u00a0 _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b<_\b _\bD_\bG_\bB_\bF_\b _\b>\n-\u00a0 Derivative of a _\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 _\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_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b<_\b _\bD_\bG_\bB_\bF_\b _\b>_\b:_\b:\n- _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-\u00a0 local function evaluating the derivative in reference coordinates\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:_\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-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc\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:_\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 (B &&basis, V &&vector)\n-\u00a0 Generate a _\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-\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/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: discreteglobalbasisfunction.hh Source File\n+dune-functions: gridviewentityset.hh Source File\n \n \n \n \n \n \n \n@@ -74,691 +74,123 @@\n \n \n \n
    \n-
    discreteglobalbasisfunction.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_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n
    9
    \n
    10#include <memory>
    \n-
    11#include <optional>
    \n+
    11
    \n
    12
    \n-
    13#include <dune/common/typetraits.hh>
    \n+
    13namespace Dune {
    \n
    14
    \n-
    15#include <dune/grid/utility/hierarchicsearch.hh>
    \n+
    15namespace Functions {
    \n
    16
    \n-
    17#include <dune/typetree/treecontainer.hh>
    \n-
    18
    \n-\n-\n-\n-\n-\n-\n-
    25
    \n-
    26namespace Dune {
    \n-
    27namespace Functions {
    \n-
    28
    \n+
    17
    \n+
    25template<class GV, int cd>
    \n+
    \n+\n+
    27{
    \n+
    28public:
    \n
    29
    \n-
    \n-
    30namespace ImplDoc {
    \n-
    31
    \n-
    32template<typename B, typename V, typename NTRE>
    \n-
    \n-\n-
    34{
    \n-
    35public:
    \n-
    36 using Basis = B;
    \n-
    37 using Vector = V;
    \n-
    38
    \n-
    39 // In order to make the cache work for proxy-references
    \n-
    40 // we have to use AutonomousValue<T> instead of std::decay_t<T>
    \n-
    41 using Coefficient = Dune::AutonomousValue<decltype(std::declval<Vector>()[std::declval<typename Basis::MultiIndex>()])>;
    \n-
    42
    \n-
    43 using GridView = typename Basis::GridView;
    \n-\n-
    45 using Tree = typename Basis::LocalView::Tree;
    \n-
    46 using NodeToRangeEntry = NTRE;
    \n-
    47
    \n-\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-
    51 using Element = typename EntitySet::Element;
    \n-
    52
    \n-
    53protected:
    \n+
    \n+\n+
    52 gv_(gv)
    \n+
    53 {}
    \n+
    \n
    54
    \n-
    55 // This collects all data that is shared by all related
    \n-
    56 // global and local functions. This way we don't need to
    \n-
    57 // keep track of it individually.
    \n-
    \n-
    58 struct Data
    \n-
    59 {
    \n-\n-
    61 std::shared_ptr<const Basis> basis;
    \n-
    62 std::shared_ptr<const Vector> coefficients;
    \n-
    63 std::shared_ptr<const NodeToRangeEntry> nodeToRangeEntry;
    \n-
    64 };
    \n-
    \n-
    65
    \n-
    66public:
    \n-
    \n-\n-
    68 {
    \n-
    69 using LocalView = typename Basis::LocalView;
    \n-
    70 using size_type = typename Tree::size_type;
    \n-
    71
    \n-
    72 public:
    \n-\n-
    74 using Element = typename EntitySet::Element;
    \n-
    75
    \n-
    76 protected:
    \n-
    \n-
    77 LocalFunctionBase(const std::shared_ptr<const Data>& data)
    \n-
    78 : data_(data)
    \n-
    79 , localView_(data_->basis->localView())
    \n-
    80 {
    \n-
    81 localDoFs_.reserve(localView_.maxSize());
    \n-
    82 }
    \n-
    \n-
    83
    \n-
    \n-\n-
    91 : data_(other.data_)
    \n-
    92 , localView_(other.localView_)
    \n-
    93 {
    \n-
    94 localDoFs_.reserve(localView_.maxSize());
    \n-
    95 if (bound())
    \n-
    96 localDoFs_ = other.localDoFs_;
    \n-
    97 }
    \n-
    \n-
    98
    \n-
    \n-\n-
    107 {
    \n-
    108 data_ = other.data_;
    \n-
    109 localView_ = other.localView_;
    \n-
    110 if (bound())
    \n-
    111 localDoFs_ = other.localDoFs_;
    \n-
    112 return *this;
    \n-
    113 }
    \n-
    \n-
    114
    \n-
    115 public:
    \n-
    \n-
    122 void bind(const Element& element)
    \n-
    123 {
    \n-
    124 localView_.bind(element);
    \n-
    125 // Use cache of full local view size. For a subspace basis,
    \n-
    126 // this may be larger than the number of local DOFs in the
    \n-
    127 // tree. In this case only cache entries associated to local
    \n-
    128 // DOFs in the subspace are filled. Cache entries associated
    \n-
    129 // to local DOFs which are not contained in the subspace will
    \n-
    130 // not be touched.
    \n-
    131 //
    \n-
    132 // Alternatively one could use a cache that exactly fits
    \n-
    133 // the size of the tree. However, this would require to
    \n-
    134 // subtract an offset from localIndex(i) on each cache
    \n-
    135 // access in operator().
    \n-
    136 localDoFs_.resize(localView_.size());
    \n-
    137 const auto& dofs = *data_->coefficients;
    \n-
    138 for (size_type i = 0; i < localView_.tree().size(); ++i)
    \n-
    139 {
    \n-
    140 // For a subspace basis the index-within-tree i
    \n-
    141 // is not the same as the localIndex within the
    \n-
    142 // full local view.
    \n-
    143 size_t localIndex = localView_.tree().localIndex(i);
    \n-
    144 localDoFs_[localIndex] = dofs[localView_.index(localIndex)];
    \n-
    145 }
    \n-
    146 }
    \n-
    \n-
    147
    \n-
    \n-
    149 void unbind()
    \n-
    150 {
    \n-
    151 localView_.unbind();
    \n-
    152 }
    \n-
    \n-
    153
    \n-
    \n-
    155 bool bound() const
    \n-
    156 {
    \n-
    157 return localView_.bound();
    \n-
    158 }
    \n-
    \n-
    159
    \n-
    \n-
    161 const Element& localContext() const
    \n-
    162 {
    \n-
    163 return localView_.element();
    \n-
    164 }
    \n-
    \n-
    165
    \n-
    166 protected:
    \n-
    167
    \n-
    168 template<class To, class From>
    \n-
    \n-
    169 void assignWith(To& to, const From& from) const
    \n-
    170 {
    \n-
    171 auto from_flat = flatVectorView(from);
    \n-
    172 auto to_flat = flatVectorView(to);
    \n-
    173 assert(from_flat.size() == to_flat.size());
    \n-
    174 for (size_type i = 0; i < to_flat.size(); ++i)
    \n-
    175 to_flat[i] = from_flat[i];
    \n-
    176 }
    \n-
    \n-
    177
    \n-
    178 template<class Node, class TreePath, class Range>
    \n-
    \n-
    179 decltype(auto) nodeToRangeEntry(const Node& node, const TreePath& treePath, Range& y) const
    \n-
    180 {
    \n-
    181 return (*data_->nodeToRangeEntry)(node, treePath, y);
    \n-
    182 }
    \n-
    \n-
    183
    \n-
    184 std::shared_ptr<const Data> data_;
    \n-
    185 LocalView localView_;
    \n-
    186 std::vector<Coefficient> localDoFs_;
    \n-
    187 };
    \n-
    \n-
    188
    \n-
    189protected:
    \n-
    \n-
    190 DiscreteGlobalBasisFunctionBase(const std::shared_ptr<const Data>& data)
    \n-
    191 : data_(data)
    \n-
    192 {
    \n-
    193 /* Nothing. */
    \n-
    194 }
    \n-
    \n-
    195
    \n-
    196public:
    \n-
    197
    \n-
    \n-
    199 const Basis& basis() const
    \n-
    200 {
    \n-
    201 return *data_->basis;
    \n-
    202 }
    \n-
    \n-
    203
    \n-
    \n-
    205 const Vector& dofs() const
    \n-
    206 {
    \n-
    207 return *data_->coefficients;
    \n-
    208 }
    \n-
    \n-
    209
    \n-
    \n-\n-
    212 {
    \n-
    213 return *data_->nodeToRangeEntry;
    \n-
    214 }
    \n-
    \n-
    215
    \n-
    \n-
    217 const EntitySet& entitySet() const
    \n-
    218 {
    \n-
    219 return data_->entitySet;
    \n-
    220 }
    \n-
    \n-
    221
    \n-
    222protected:
    \n-
    223 std::shared_ptr<const Data> data_;
    \n-
    224};
    \n-
    \n-
    225
    \n-
    226} // namespace ImplDoc
    \n-
    \n-
    227
    \n-
    228
    \n-
    229
    \n-
    230template<typename DGBF>
    \n-\n-
    232
    \n-
    276template<typename B, typename V,
    \n-
    277 typename NTRE = HierarchicNodeToRangeMap,
    \n-
    278 typename R = typename V::value_type>
    \n-
    \n-\n-\n-
    281{
    \n-\n-
    283 using Data = typename Base::Data;
    \n-
    284
    \n-
    285public:
    \n-
    286 using Basis = typename Base::Basis;
    \n-
    287 using Vector = typename Base::Vector;
    \n-
    288
    \n-
    289 using Domain = typename Base::Domain;
    \n-
    290 using Range = R;
    \n-
    291
    \n-
    292 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16>;
    \n-
    293
    \n-
    294private:
    \n-
    295
    \n-
    296 template<class Node>
    \n-
    297 using LocalBasisRange = typename Node::FiniteElement::Traits::LocalBasisType::Traits::RangeType;
    \n-
    298 template<class Node>
    \n-
    299 using NodeData = typename std::vector<LocalBasisRange<Node>>;
    \n-
    300 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData, typename Base::Tree>;
    \n-
    301
    \n-
    302public:
    \n-
    \n-\n-\n-
    305 {
    \n-
    306 using LocalBase = typename Base::LocalFunctionBase;
    \n-
    307 using size_type = typename Base::Tree::size_type;
    \n-
    308 using LocalBase::nodeToRangeEntry;
    \n-
    309
    \n-
    310 public:
    \n-
    311
    \n-\n-
    313 using Domain = typename LocalBase::Domain;
    \n-\n-
    315 using Element = typename LocalBase::Element;
    \n-
    316
    \n-
    \n-\n-
    319 : LocalBase(globalFunction.data_)
    \n-
    320 , evaluationBuffer_(this->localView_.tree())
    \n-
    321 {
    \n-
    322 /* Nothing. */
    \n-
    323 }
    \n-
    \n-
    324
    \n-
    \n-
    334 Range operator()(const Domain& x) const
    \n-
    335 {
    \n-
    336 Range y;
    \n-
    337 istlVectorBackend(y) = 0;
    \n-
    338
    \n-
    339 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&& treePath) {
    \n-
    340 const auto& fe = node.finiteElement();
    \n-
    341 const auto& localBasis = fe.localBasis();
    \n-
    342 auto& shapeFunctionValues = evaluationBuffer_[treePath];
    \n-
    343
    \n-
    344 localBasis.evaluateFunction(x, shapeFunctionValues);
    \n-
    345
    \n-
    346 // Compute linear combinations of basis function jacobian.
    \n-
    347 // Non-scalar coefficients of dimension coeffDim are handled by
    \n-
    348 // processing the coeffDim linear combinations independently
    \n-
    349 // and storing them as entries of an array.
    \n-
    350 using Value = LocalBasisRange< std::decay_t<decltype(node)> >;
    \n-
    351 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;
    \n-
    352 auto values = std::array<Value, coeffDim>{};
    \n-
    353 istlVectorBackend(values) = 0;
    \n-
    354 for (size_type i = 0; i < localBasis.size(); ++i)
    \n-
    355 {
    \n-
    356 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);
    \n-
    357 for (std::size_t j = 0; j < coeffDim; ++j)
    \n-
    358 values[j].axpy(c[j], shapeFunctionValues[i]);
    \n-
    359 }
    \n-
    360
    \n-
    361 // Assign computed values to node entry of range.
    \n-
    362 // Types are matched using the lexicographic ordering provided by flatVectorView.
    \n-
    363 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), values);
    \n-
    364 });
    \n-
    365
    \n-
    366 return y;
    \n-
    367 }
    \n-
    \n-
    368
    \n-
    \n-\n-
    371 {
    \n-\n-
    373 if (lf.bound())
    \n-
    374 dlf.bind(lf.localContext());
    \n-
    375 return dlf;
    \n-
    376 }
    \n-
    \n-
    377
    \n-
    378 private:
    \n-
    379 mutable PerNodeEvaluationBuffer evaluationBuffer_;
    \n-
    380 };
    \n-
    \n-
    381
    \n-
    383 template<class B_T, class V_T, class NTRE_T>
    \n-
    \n-
    384 DiscreteGlobalBasisFunction(B_T && basis, V_T && coefficients, NTRE_T&& nodeToRangeEntry)
    \n-
    385 : Base(std::make_shared<Data>(Data{{basis.gridView()}, wrap_or_move(std::forward<B_T>(basis)), wrap_or_move(std::forward<V_T>(coefficients)), wrap_or_move(std::forward<NTRE_T>(nodeToRangeEntry))}))
    \n-
    386 {}
    \n-
    \n-
    387
    \n-
    \n-
    389 DiscreteGlobalBasisFunction(std::shared_ptr<const Basis> basis, std::shared_ptr<const V> coefficients, std::shared_ptr<const typename Base::NodeToRangeEntry> nodeToRangeEntry)
    \n-
    390 : Base(std::make_shared<Data>(Data{{basis->gridView()}, basis, coefficients, nodeToRangeEntry}))
    \n-
    391 {}
    \n-
    \n-
    392
    \n-
    \n-
    398 Range operator() (const Domain& x) const
    \n-
    399 {
    \n-
    400 HierarchicSearch search(this->data_->basis->gridView().grid(), this->data_->basis->gridView().indexSet());
    \n-
    401
    \n-
    402 const auto e = search.findEntity(x);
    \n-
    403 auto localThis = localFunction(*this);
    \n-
    404 localThis.bind(e);
    \n-
    405 return localThis(e.geometry().local(x));
    \n-
    406 }
    \n-
    \n-
    407
    \n-\n-
    413
    \n-
    \n-\n-
    423 {
    \n-
    424 return LocalFunction(t);
    \n-
    425 }
    \n-
    \n-
    426};
    \n-
    \n-
    427
    \n-
    428
    \n-
    453template<typename R, typename B, typename V>
    \n-
    \n-
    454auto makeDiscreteGlobalBasisFunction(B&& basis, V&& vector)
    \n-
    455{
    \n-
    456 using Basis = std::decay_t<B>;
    \n-
    457 using NTREM = HierarchicNodeToRangeMap;
    \n-
    458
    \n-
    459 // Small helper functions to wrap vectors using istlVectorBackend
    \n-
    460 // if they do not already satisfy the VectorBackend interface.
    \n-
    461 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {
    \n-
    462 if constexpr (models<Concept::ConstVectorBackend<Basis>, decltype(v)>()) {
    \n-
    463 return std::forward<decltype(v)>(v);
    \n-
    464 } else {
    \n-
    465 return istlVectorBackend(v);
    \n-
    466 }
    \n-
    467 };
    \n-
    468
    \n-
    469 using Vector = std::decay_t<decltype(toConstVectorBackend(std::forward<V>(vector)))>;
    \n-\n-
    471 std::forward<B>(basis),
    \n-
    472 toConstVectorBackend(std::forward<V>(vector)),
    \n-\n-
    474}
    \n-
    \n-
    475
    \n-
    476
    \n-
    491template<typename DGBF>
    \n-
    \n-\n-
    493 : public ImplDoc::DiscreteGlobalBasisFunctionBase<typename DGBF::Basis, typename DGBF::Vector, typename DGBF::NodeToRangeEntry>
    \n-
    494{
    \n-\n-
    496 using Data = typename Base::Data;
    \n-
    497
    \n-
    498public:
    \n-\n-
    500
    \n-
    501 using Basis = typename Base::Basis;
    \n-
    502 using Vector = typename Base::Vector;
    \n-
    503
    \n-
    504 using Domain = typename Base::Domain;
    \n-\n-
    506
    \n-
    507 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16>;
    \n-
    508
    \n-
    509private:
    \n-
    510
    \n-
    511 template<class Node>
    \n-
    512 using LocalBasisRange = typename Node::FiniteElement::Traits::LocalBasisType::Traits::JacobianType;
    \n-
    513 template<class Node>
    \n-
    514 using NodeData = typename std::vector< LocalBasisRange<Node> >;
    \n-
    515 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData, typename Base::Tree>;
    \n-
    516
    \n-
    517public:
    \n-
    518
    \n-
    \n-\n-\n-
    528 {
    \n-
    529 using LocalBase = typename Base::LocalFunctionBase;
    \n-
    530 using size_type = typename Base::Tree::size_type;
    \n-
    531 using LocalBase::nodeToRangeEntry;
    \n-
    532
    \n-
    533 public:
    \n-\n-
    535 using Domain = typename LocalBase::Domain;
    \n-\n-
    537 using Element = typename LocalBase::Element;
    \n-
    538
    \n-
    \n-
    540 LocalFunction(const GlobalFunction& globalFunction)
    \n-
    541 : LocalBase(globalFunction.data_)
    \n-
    542 , evaluationBuffer_(this->localView_.tree())
    \n-
    543 {
    \n-
    544 /* Nothing. */
    \n-
    545 }
    \n-
    \n-
    546
    \n-
    \n-
    553 void bind(const Element& element)
    \n-
    554 {
    \n-
    555 LocalBase::bind(element);
    \n-
    556 geometry_.emplace(element.geometry());
    \n-
    557 }
    \n-
    \n-
    558
    \n-
    \n-
    560 void unbind()
    \n-
    561 {
    \n-
    562 geometry_.reset();
    \n-
    563 LocalBase::unbind();
    \n-
    564 }
    \n-
    \n-
    565
    \n-
    \n-
    579 Range operator()(const Domain& x) const
    \n-
    580 {
    \n-
    581 Range y;
    \n-
    582 istlVectorBackend(y) = 0;
    \n-
    583
    \n-
    584 const auto& jacobianInverse = geometry_->jacobianInverse(x);
    \n-
    585
    \n-
    586 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&& treePath) {
    \n-
    587 const auto& fe = node.finiteElement();
    \n-
    588 const auto& localBasis = fe.localBasis();
    \n-
    589 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];
    \n-
    590
    \n-
    591 localBasis.evaluateJacobian(x, shapeFunctionJacobians);
    \n-
    592
    \n-
    593 // Compute linear combinations of basis function jacobian.
    \n-
    594 // Non-scalar coefficients of dimension coeffDim are handled by
    \n-
    595 // processing the coeffDim linear combinations independently
    \n-
    596 // and storing them as entries of an array.
    \n-
    597 using RefJacobian = LocalBasisRange< std::decay_t<decltype(node)> >;
    \n-
    598 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;
    \n-
    599 auto refJacobians = std::array<RefJacobian, coeffDim>{};
    \n-
    600 istlVectorBackend(refJacobians) = 0;
    \n-
    601 for (size_type i = 0; i < localBasis.size(); ++i)
    \n-
    602 {
    \n-
    603 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);
    \n-
    604 for (std::size_t j = 0; j < coeffDim; ++j)
    \n-
    605 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);
    \n-
    606 }
    \n-
    607
    \n-
    608 // Transform Jacobians form local to global coordinates.
    \n-
    609 using Jacobian = decltype(refJacobians[0] * jacobianInverse);
    \n-
    610 auto jacobians = std::array<Jacobian, coeffDim>{};
    \n-
    611 std::transform(
    \n-
    612 refJacobians.begin(), refJacobians.end(), jacobians.begin(),
    \n-
    613 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });
    \n-
    614
    \n-
    615 // Assign computed Jacobians to node entry of range.
    \n-
    616 // Types are matched using the lexicographic ordering provided by flatVectorView.
    \n-
    617 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);
    \n-
    618 });
    \n-
    619
    \n-
    620 return y;
    \n-
    621 }
    \n-
    \n-
    622
    \n-
    \n-\n-
    625 {
    \n-
    626 DUNE_THROW(NotImplemented, "derivative of derivative is not implemented");
    \n-
    627 }
    \n-
    \n-
    628
    \n-
    629 private:
    \n-
    630 mutable PerNodeEvaluationBuffer evaluationBuffer_;
    \n-
    631 std::optional<typename Element::Geometry> geometry_;
    \n-
    632 };
    \n-
    \n-
    633
    \n-
    \n-
    640 DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr<const Data>& data)
    \n-
    641 : Base(data)
    \n-
    642 {
    \n-
    643 /* Nothing. */
    \n-
    644 }
    \n-
    \n-
    645
    \n-
    \n-
    651 Range operator()(const Domain& x) const
    \n-
    652 {
    \n-
    653 HierarchicSearch search(this->data_->basis->gridView().grid(), this->data_->basis->gridView().indexSet());
    \n-
    654
    \n-
    655 const auto e = search.findEntity(x);
    \n-
    656 auto localThis = localFunction(*this);
    \n-
    657 localThis.bind(e);
    \n-
    658 return localThis(e.geometry().local(x));
    \n-
    659 }
    \n-
    \n-
    660
    \n-
    \n-\n-
    662 {
    \n-
    663 DUNE_THROW(NotImplemented, "derivative of derivative is not implemented");
    \n-
    664 }
    \n-
    \n-
    665
    \n-
    \n-\n-
    668 {
    \n-
    669 return LocalFunction(f);
    \n-
    670 }
    \n-
    \n-
    671};
    \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-
    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+
    \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
    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-
    Definition discreteglobalbasisfunction.hh:34
    \n-
    std::shared_ptr< const Data > data_
    Definition discreteglobalbasisfunction.hh:223
    \n-
    const Vector & dofs() const
    Return the coefficients of this discrete function by reference.
    Definition discreteglobalbasisfunction.hh:205
    \n-
    B Basis
    Definition discreteglobalbasisfunction.hh:36
    \n-
    typename Basis::LocalView::Tree Tree
    Definition discreteglobalbasisfunction.hh:45
    \n-
    V Vector
    Definition discreteglobalbasisfunction.hh:37
    \n-
    typename EntitySet::Element Element
    Definition discreteglobalbasisfunction.hh:51
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition discreteglobalbasisfunction.hh:50
    \n-
    const NodeToRangeEntry & nodeToRangeEntry() const
    Return the stored node-to-range map.
    Definition discreteglobalbasisfunction.hh:211
    \n-
    NTRE NodeToRangeEntry
    Definition discreteglobalbasisfunction.hh:46
    \n-
    DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)
    Definition discreteglobalbasisfunction.hh:190
    \n-
    typename Basis::GridView GridView
    Definition discreteglobalbasisfunction.hh:43
    \n-
    const Basis & basis() const
    Return a const reference to the stored basis.
    Definition discreteglobalbasisfunction.hh:199
    \n-
    GridViewEntitySet< GridView, 0 > EntitySet
    Definition discreteglobalbasisfunction.hh:44
    \n-
    const EntitySet & entitySet() const
    Get associated set of entities the local-function can be bound to.
    Definition discreteglobalbasisfunction.hh:217
    \n-
    typename EntitySet::GlobalCoordinate Domain
    Definition discreteglobalbasisfunction.hh:48
    \n-
    Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename Basis::MultiIndex >()])> Coefficient
    Definition discreteglobalbasisfunction.hh:41
    \n-
    Definition discreteglobalbasisfunction.hh:59
    \n-
    EntitySet entitySet
    Definition discreteglobalbasisfunction.hh:60
    \n-
    std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry
    Definition discreteglobalbasisfunction.hh:63
    \n-
    std::shared_ptr< const Basis > basis
    Definition discreteglobalbasisfunction.hh:61
    \n-
    std::shared_ptr< const Vector > coefficients
    Definition discreteglobalbasisfunction.hh:62
    \n-\n-
    LocalFunctionBase & operator=(const LocalFunctionBase &other)
    Copy-assignment of the local-function.
    Definition discreteglobalbasisfunction.hh:106
    \n-
    bool bound() const
    Check if LocalFunction is already bound to an element.
    Definition discreteglobalbasisfunction.hh:155
    \n-
    void bind(const Element &element)
    Bind LocalFunction to grid element.
    Definition discreteglobalbasisfunction.hh:122
    \n-
    typename EntitySet::Element Element
    Definition discreteglobalbasisfunction.hh:74
    \n-
    const Element & localContext() const
    Return the element the local-function is bound to.
    Definition discreteglobalbasisfunction.hh:161
    \n-
    LocalFunctionBase(const LocalFunctionBase &other)
    Copy-construct the local-function.
    Definition discreteglobalbasisfunction.hh:90
    \n-
    std::vector< Coefficient > localDoFs_
    Definition discreteglobalbasisfunction.hh:186
    \n-
    void assignWith(To &to, const From &from) const
    Definition discreteglobalbasisfunction.hh:169
    \n-
    std::shared_ptr< const Data > data_
    Definition discreteglobalbasisfunction.hh:184
    \n-
    decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath, Range &y) const
    Definition discreteglobalbasisfunction.hh:179
    \n-
    LocalView localView_
    Definition discreteglobalbasisfunction.hh:185
    \n-
    void unbind()
    Unbind the local-function.
    Definition discreteglobalbasisfunction.hh:149
    \n-
    LocalDomain Domain
    Definition discreteglobalbasisfunction.hh:73
    \n-
    LocalFunctionBase(const std::shared_ptr< const Data > &data)
    Definition discreteglobalbasisfunction.hh:77
    \n-
    Derivative of a DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:494
    \n-
    typename Base::Basis Basis
    Definition discreteglobalbasisfunction.hh:501
    \n-
    friend Traits::DerivativeInterface derivative(const DiscreteGlobalBasisFunctionDerivative &f)
    Definition discreteglobalbasisfunction.hh:661
    \n-
    Range operator()(const Domain &x) const
    Evaluate the discrete grid-function derivative in global coordinates.
    Definition discreteglobalbasisfunction.hh:651
    \n-
    typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::DerivativeInterface >::Range Range
    Definition discreteglobalbasisfunction.hh:505
    \n-
    friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative &f)
    Construct local function from a DiscreteGlobalBasisFunctionDerivative
    Definition discreteglobalbasisfunction.hh:667
    \n-
    DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data > &data)
    create object from DiscreateGlobalBasisFunction data
    Definition discreteglobalbasisfunction.hh:640
    \n-
    DGBF DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:499
    \n-
    typename Base::Vector Vector
    Definition discreteglobalbasisfunction.hh:502
    \n-
    Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits
    Definition discreteglobalbasisfunction.hh:507
    \n-
    typename Base::Domain Domain
    Definition discreteglobalbasisfunction.hh:504
    \n-
    A grid function induced by a global basis and a coefficient vector.
    Definition discreteglobalbasisfunction.hh:281
    \n-
    friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction > derivative(const DiscreteGlobalBasisFunction &f)
    Derivative of the DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:409
    \n-
    DiscreteGlobalBasisFunction(B_T &&basis, V_T &&coefficients, NTRE_T &&nodeToRangeEntry)
    Create a grid-function, by wrapping the arguments in std::shared_ptr.
    Definition discreteglobalbasisfunction.hh:384
    \n-
    DiscreteGlobalBasisFunction(std::shared_ptr< const Basis > basis, std::shared_ptr< const V > coefficients, std::shared_ptr< const typename Base::NodeToRangeEntry > nodeToRangeEntry)
    Create a grid-function, by moving the arguments in std::shared_ptr.
    Definition discreteglobalbasisfunction.hh:389
    \n-
    friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)
    Construct local function from a DiscreteGlobalBasisFunction.
    Definition discreteglobalbasisfunction.hh:422
    \n-
    typename Base::Basis Basis
    Definition discreteglobalbasisfunction.hh:286
    \n-
    Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits
    Definition discreteglobalbasisfunction.hh:292
    \n-
    R Range
    Definition discreteglobalbasisfunction.hh:290
    \n-
    typename Base::Vector Vector
    Definition discreteglobalbasisfunction.hh:287
    \n-
    typename Base::Domain Domain
    Definition discreteglobalbasisfunction.hh:289
    \n-
    Definition discreteglobalbasisfunction.hh:305
    \n-
    GlobalFunction::Range Range
    Definition discreteglobalbasisfunction.hh:314
    \n-
    typename LocalBase::Domain Domain
    Definition discreteglobalbasisfunction.hh:313
    \n-
    LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)
    Create a local-function from the associated grid-function.
    Definition discreteglobalbasisfunction.hh:318
    \n-
    friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::LocalFunction derivative(const LocalFunction &lf)
    Local function of the derivative.
    Definition discreteglobalbasisfunction.hh:370
    \n-
    Range operator()(const Domain &x) const
    Evaluate this local-function in coordinates x in the bound element.
    Definition discreteglobalbasisfunction.hh:334
    \n-
    typename LocalBase::Element Element
    Definition discreteglobalbasisfunction.hh:315
    \n-
    local function evaluating the derivative in reference coordinates
    Definition discreteglobalbasisfunction.hh:528
    \n-
    Range operator()(const Domain &x) const
    Evaluate this local-function in coordinates x in the bound element.
    Definition discreteglobalbasisfunction.hh:579
    \n-
    typename LocalBase::Domain Domain
    Definition discreteglobalbasisfunction.hh:535
    \n-
    typename LocalBase::Element Element
    Definition discreteglobalbasisfunction.hh:537
    \n-
    friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction &)
    Not implemented.
    Definition discreteglobalbasisfunction.hh:624
    \n-
    GlobalFunction::Range Range
    Definition discreteglobalbasisfunction.hh:536
    \n-
    void unbind()
    Unbind the local-function.
    Definition discreteglobalbasisfunction.hh:560
    \n-
    LocalFunction(const GlobalFunction &globalFunction)
    Create a local function from the associated grid function.
    Definition discreteglobalbasisfunction.hh:540
    \n-
    void bind(const Element &element)
    Bind LocalFunction to grid element.
    Definition discreteglobalbasisfunction.hh:553
    \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+
    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,871 +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-discreteglobalbasisfunction.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_DISCRETEGLOBALBASISFUNCTIONS_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n 9\n 10#include \n-11#include \n+11\n 12\n-13#include \n+13namespace _\bD_\bu_\bn_\be {\n 14\n-15#include \n+15namespace Functions {\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/_\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-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/_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\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/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n-22#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-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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-24#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-25\n-26namespace _\bD_\bu_\bn_\be {\n-27namespace Functions {\n-28\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_\b0namespace ImplDoc {\n-31\n-32template\n-_\b3_\b3class _\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_\bB_\ba_\bs_\be\n-34{\n-35public:\n-_\b3_\b6 using _\bB_\ba_\bs_\bi_\bs = B;\n-_\b3_\b7 using _\bV_\be_\bc_\bt_\bo_\br = V;\n-38\n-39 // In order to make the cache work for proxy-references\n-40 // we have to use AutonomousValue instead of std::decay_t\n-_\b4_\b1 using _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt = Dune::AutonomousValue()\n-[std::declval()])>;\n-42\n-_\b4_\b3 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename Basis::GridView;\n-_\b4_\b4 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-_\b4_\b5 using _\bT_\br_\be_\be = typename Basis::LocalView::Tree;\n-_\b4_\b6 using _\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by = NTRE;\n-47\n-_\b4_\b8 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+_\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_\b0 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-_\b5_\b1 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-52\n-53protected:\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-55 // This collects all data that is shared by all related\n-56 // global and local functions. This way we don't need to\n-57 // keep track of it individually.\n-_\b5_\b8 struct _\bD_\ba_\bt_\ba\n-59 {\n-_\b6_\b0 _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt;\n-_\b6_\b1 std::shared_ptr _\bb_\ba_\bs_\bi_\bs;\n-_\b6_\b2 std::shared_ptr _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs;\n-_\b6_\b3 std::shared_ptr _\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by;\n-64 };\n-65\n-66public:\n-_\b6_\b7 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-68 {\n-69 using LocalView = typename Basis::LocalView;\n-70 using size_type = typename Tree::size_type;\n-71\n-72 public:\n-_\b7_\b3 using _\bD_\bo_\bm_\ba_\bi_\bn = _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn;\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-76 protected:\n-_\b7_\b7 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be(const std::shared_ptr& data)\n-78 : _\bd_\ba_\bt_\ba_\b_(data)\n-79 , _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(_\bd_\ba_\bt_\ba_\b_->_\bb_\ba_\bs_\bi_\bs->localView())\n-80 {\n-81 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.reserve(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize());\n-82 }\n-83\n-_\b9_\b0 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be(const _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be& other)\n-91 : _\bd_\ba_\bt_\ba_\b_(other._\bd_\ba_\bt_\ba_\b_)\n-92 , _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(other._\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_)\n-93 {\n-94 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.reserve(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize());\n-95 if (_\bb_\bo_\bu_\bn_\bd())\n-96 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n-97 }\n-98\n-_\b1_\b0_\b6 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be& other)\n-107 {\n-108 _\bd_\ba_\bt_\ba_\b_ = other._\bd_\ba_\bt_\ba_\b_;\n-109 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n-110 if (_\bb_\bo_\bu_\bn_\bd())\n-111 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n-112 return *this;\n-113 }\n-114\n-115 public:\n-_\b1_\b2_\b2 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n-123 {\n-124 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bind(element);\n-125 // Use cache of full local view size. For a subspace basis,\n-126 // this may be larger than the number of local DOFs in the\n-127 // tree. In this case only cache entries associated to local\n-128 // DOFs in the subspace are filled. Cache entries associated\n-129 // to local DOFs which are not contained in the subspace will\n-130 // not be touched.\n-131 //\n-132 // Alternatively one could use a cache that exactly fits\n-133 // the size of the tree. However, this would require to\n-134 // subtract an offset from localIndex(i) on each cache\n-135 // access in operator().\n-136 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.resize(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.size());\n-137 const auto& _\bd_\bo_\bf_\bs = *_\bd_\ba_\bt_\ba_\b_->coefficients;\n-138 for (size_type i = 0; i < _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree().size(); ++i)\n-139 {\n-140 // For a subspace basis the index-within-tree i\n-141 // is not the same as the localIndex within the\n-142 // full local view.\n-143 size_t localIndex = _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree().localIndex(i);\n-144 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_[localIndex] = _\bd_\bo_\bf_\bs[_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.index(localIndex)];\n-145 }\n-146 }\n-147\n-_\b1_\b4_\b9 void _\bu_\bn_\bb_\bi_\bn_\bd()\n-150 {\n-151 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.unbind();\n-152 }\n-153\n-_\b1_\b5_\b5 bool _\bb_\bo_\bu_\bn_\bd() const\n-156 {\n-157 return _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bound();\n-158 }\n-159\n-_\b1_\b6_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt() const\n-162 {\n-163 return _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.element();\n-164 }\n-165\n-166 protected:\n-167\n-168 template\n-_\b1_\b6_\b9 void _\ba_\bs_\bs_\bi_\bg_\bn_\bW_\bi_\bt_\bh(To& to, const From& from) const\n-170 {\n-171 auto from_flat = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(from);\n-172 auto to_flat = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(to);\n-173 assert(from_flat.size() == to_flat.size());\n-174 for (size_type i = 0; i < to_flat.size(); ++i)\n-175 to_flat[i] = from_flat[i];\n-176 }\n-177\n-178 template\n-_\b1_\b7_\b9 decltype(auto) _\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by(const Node& node, const TreePath& treePath,\n-Range& y) const\n-180 {\n-181 return (*_\bd_\ba_\bt_\ba_\b_->nodeToRangeEntry)(node, treePath, y);\n-182 }\n-183\n-_\b1_\b8_\b4 std::shared_ptr _\bd_\ba_\bt_\ba_\b_;\n-_\b1_\b8_\b5 LocalView _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n-_\b1_\b8_\b6 std::vector _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n-187 };\n-188\n-189protected:\n-_\b1_\b9_\b0 _\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_\bB_\ba_\bs_\be(const std::shared_ptr& data)\n-191 : _\bd_\ba_\bt_\ba_\b_(data)\n-192 {\n-193 /* Nothing. */\n-194 }\n-195\n-196public:\n-197\n-_\b1_\b9_\b9 const _\bB_\ba_\bs_\bi_\bs& _\bb_\ba_\bs_\bi_\bs() const\n-200 {\n-201 return *_\bd_\ba_\bt_\ba_\b_->basis;\n-202 }\n-203\n-_\b2_\b0_\b5 const _\bV_\be_\bc_\bt_\bo_\br& _\bd_\bo_\bf_\bs() const\n-206 {\n-207 return *_\bd_\ba_\bt_\ba_\b_->coefficients;\n-208 }\n-209\n-_\b2_\b1_\b1 const _\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by& _\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by() const\n-212 {\n-213 return *_\bd_\ba_\bt_\ba_\b_->nodeToRangeEntry;\n-214 }\n-215\n-_\b2_\b1_\b7 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-218 {\n-219 return _\bd_\ba_\bt_\ba_\b_->entitySet;\n-220 }\n-221\n-222protected:\n-_\b2_\b2_\b3 std::shared_ptr _\bd_\ba_\bt_\ba_\b_;\n-224};\n-225\n-226} // namespace ImplDoc\n-227\n-228\n-229\n-230template\n-231class _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be;\n-232\n-276template\n-_\b2_\b7_\b9class _\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-280 : public _\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be\n-281{\n-282 using _\bB_\ba_\bs_\be = _\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE_\b>;\n-283 using Data = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba;\n-284\n-285public:\n-_\b2_\b8_\b6 using _\bB_\ba_\bs_\bi_\bs = typename _\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs;\n-_\b2_\b8_\b7 using _\bV_\be_\bc_\bt_\bo_\br = typename _\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br;\n-288\n-_\b2_\b8_\b9 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n-_\b2_\b9_\b0 using _\bR_\ba_\bn_\bg_\be = R;\n-291\n-_\b2_\b9_\b2 using _\bT_\br_\ba_\bi_\bt_\bs = Imp::GridFunctionTraits<_\bR_\ba_\bn_\bg_\be(_\bD_\bo_\bm_\ba_\bi_\bn), typename _\bB_\ba_\bs_\be_\b:_\b:\n-_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt, _\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-293\n-294private:\n-295\n-296 template\n-297 using LocalBasisRange = typename Node::FiniteElement::Traits::\n-LocalBasisType::Traits::RangeType;\n-298 template\n-299 using NodeData = typename std::vector>;\n-300 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer;\n-301\n-302public:\n-_\b3_\b0_\b3 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-304 : public _\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-305 {\n-306 using LocalBase = typename _\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be;\n-307 using size_type = typename Base::Tree::size_type;\n-308 using LocalBase::nodeToRangeEntry;\n-309\n-310 public:\n-311\n-_\b3_\b1_\b2 using _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn = _\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-_\b3_\b1_\b3 using _\bD_\bo_\bm_\ba_\bi_\bn = typename LocalBase::Domain;\n-_\b3_\b1_\b4 using _\bR_\ba_\bn_\bg_\be = _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n-_\b3_\b1_\b5 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename LocalBase::Element;\n-316\n-_\b3_\b1_\b8 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\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& globalFunction)\n-319 : LocalBase(globalFunction._\bd_\ba_\bt_\ba_\b_)\n-320 , evaluationBuffer_(this->_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree())\n-321 {\n-322 /* Nothing. */\n-323 }\n-324\n-_\b3_\b3_\b4 _\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-335 {\n-336 _\bR_\ba_\bn_\bg_\be y;\n-337 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(y) = 0;\n-338\n-339 TypeTree::forEachLeafNode(this->_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree(), [&](auto&& node, auto&&\n-treePath) {\n-340 const auto& fe = node.finiteElement();\n-341 const auto& localBasis = fe.localBasis();\n-342 auto& shapeFunctionValues = evaluationBuffer_[treePath];\n-343\n-344 localBasis.evaluateFunction(x, shapeFunctionValues);\n-345\n-346 // Compute linear combinations of basis function jacobian.\n-347 // Non-scalar coefficients of dimension coeffDim are handled by\n-348 // processing the coeffDim linear combinations independently\n-349 // and storing them as entries of an array.\n-350 using Value = LocalBasisRange< std::decay_t >;\n-351 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n-[node.localIndex(0)]).size())::value;\n-352 auto values = std::array{};\n-353 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(values) = 0;\n-354 for (size_type i = 0; i < localBasis.size(); ++i)\n-355 {\n-356 auto c = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(this->_\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_[node.localIndex(i)]);\n-357 for (std::size_t j = 0; j < coeffDim; ++j)\n-358 values[j].axpy(c[j], shapeFunctionValues[i]);\n-359 }\n-360\n-361 // Assign computed values to node entry of range.\n-362 // Types are matched using the lexicographic ordering provided by\n-flatVectorView.\n-363 LocalBase::assignWith(_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by(node, treePath, y), values);\n-364 });\n-365\n-366 return y;\n-367 }\n-368\n-_\b3_\b7_\b0 friend typename\n-_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\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:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& lf)\n-371 {\n-372 auto dlf = _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-(_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\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>(lf._\bd_\ba_\bt_\ba_\b_));\n-373 if (lf._\bb_\bo_\bu_\bn_\bd())\n-374 dlf.bind(lf._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt());\n-375 return dlf;\n-376 }\n-377\n-378 private:\n-379 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n-380 };\n-381\n-383 template\n-_\b3_\b8_\b4 _\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_T && basis, V_T && coefficients, NTRE_T&&\n-nodeToRangeEntry)\n-385 : _\bB_\ba_\bs_\be(std::make_shared(Data{{basis.gridView()}, wrap_or_move(std::\n-forward(basis)), wrap_or_move(std::forward(coefficients)),\n-wrap_or_move(std::forward(nodeToRangeEntry))}))\n-386 {}\n-387\n-_\b3_\b8_\b9 _\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(std::shared_ptr basis, std::\n-shared_ptr coefficients, std::shared_ptr nodeToRangeEntry)\n-390 : _\bB_\ba_\bs_\be(std::make_shared(Data{{basis->gridView()}, basis,\n-coefficients, nodeToRangeEntry}))\n-391 {}\n-392\n-_\b3_\b9_\b8 _\bR_\ba_\bn_\bg_\be operator() (const _\bD_\bo_\bm_\ba_\bi_\bn& x) const\n-399 {\n-400 HierarchicSearch search(this->data_->basis->gridView().grid(), this->data_-\n->basis->gridView().indexSet());\n-401\n-402 const auto e = search.findEntity(x);\n-403 auto localThis = localFunction(*this);\n-404 localThis.bind(e);\n-405 return localThis(e.geometry().local(x));\n-406 }\n-407\n-_\b4_\b0_\b9 friend _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\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>\n-_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\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& f)\n-410 {\n-411 return _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\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>\n-(f._\bd_\ba_\bt_\ba_\b_);\n-412 }\n-413\n-_\b4_\b2_\b2 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 _\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& t)\n-423 {\n-424 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(t);\n-425 }\n-426};\n-427\n-428\n-453template\n-_\b4_\b5_\b4auto _\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(B&& basis, V&& vector)\n-455{\n-456 using _\bB_\ba_\bs_\bi_\bs = std::decay_t;\n-457 using NTREM = _\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-458\n-459 // Small helper functions to wrap vectors using istlVectorBackend\n-460 // if they do not already satisfy the VectorBackend interface.\n-461 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {\n-462 if constexpr (models, decltype(v)>()) {\n-463 return std::forward(v);\n-464 } else {\n-465 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n-466 }\n-467 };\n-468\n-469 using _\bV_\be_\bc_\bt_\bo_\br = std::decay_t\n-(vector)))>;\n-470 return _\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<_\bB_\ba_\bs_\bi_\bs_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b,_\b _\bN_\bT_\bR_\bE_\bM_\b,_\b _\bR_\b>(\n-471 std::forward(basis),\n-472 toConstVectorBackend(std::forward(vector)),\n-473 _\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-474}\n-475\n-476\n-491template\n-_\b4_\b9_\b2class _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-493 : public _\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be\n-494{\n-495 using _\bB_\ba_\bs_\be = _\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\bG_\bB_\bF_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b,\n-_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\bG_\bB_\bF_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\bG_\bB_\bF_\b:_\b:_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by_\b>;\n-496 using Data = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba;\n-497\n-498public:\n-_\b4_\b9_\b9 using _\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 = DGBF;\n-500\n-_\b5_\b0_\b1 using _\bB_\ba_\bs_\bi_\bs = typename _\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs;\n-_\b5_\b0_\b2 using _\bV_\be_\bc_\bt_\bo_\br = typename _\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br;\n-503\n-_\b5_\b0_\b4 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n-_\b5_\b0_\b5 using _\bR_\ba_\bn_\bg_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be\n-_\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:_\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_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n-506\n-_\b5_\b0_\b7 using _\bT_\br_\ba_\bi_\bt_\bs = Imp::GridFunctionTraits<_\bR_\ba_\bn_\bg_\be(_\bD_\bo_\bm_\ba_\bi_\bn), typename _\bB_\ba_\bs_\be_\b:_\b:\n-_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt, _\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-508\n-509private:\n-510\n-511 template\n-512 using LocalBasisRange = typename Node::FiniteElement::Traits::\n-LocalBasisType::Traits::JacobianType;\n-513 template\n-514 using NodeData = typename std::vector< LocalBasisRange >;\n-515 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer;\n-516\n-517public:\n-518\n-_\b5_\b2_\b6 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-527 : public _\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-528 {\n-529 using LocalBase = typename _\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be;\n-530 using size_type = typename Base::Tree::size_type;\n-531 using LocalBase::nodeToRangeEntry;\n-532\n-533 public:\n-_\b5_\b3_\b4 using _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn = _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be;\n-_\b5_\b3_\b5 using _\bD_\bo_\bm_\ba_\bi_\bn = typename LocalBase::Domain;\n-_\b5_\b3_\b6 using _\bR_\ba_\bn_\bg_\be = _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n-_\b5_\b3_\b7 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename LocalBase::Element;\n-538\n-_\b5_\b4_\b0 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& globalFunction)\n-541 : LocalBase(globalFunction.data_)\n-542 , evaluationBuffer_(this->localView_.tree())\n-543 {\n-544 /* Nothing. */\n-545 }\n-546\n-_\b5_\b5_\b3 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n-554 {\n-555 LocalBase::bind(element);\n-556 geometry_.emplace(element.geometry());\n-557 }\n-558\n-_\b5_\b6_\b0 void _\bu_\bn_\bb_\bi_\bn_\bd()\n-561 {\n-562 geometry_.reset();\n-563 LocalBase::unbind();\n-564 }\n-565\n-_\b5_\b7_\b9 _\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-580 {\n-581 _\bR_\ba_\bn_\bg_\be y;\n-582 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(y) = 0;\n-583\n-584 const auto& jacobianInverse = geometry_->jacobianInverse(x);\n-585\n-586 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&&\n-treePath) {\n-587 const auto& fe = node.finiteElement();\n-588 const auto& localBasis = fe.localBasis();\n-589 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];\n-590\n-591 localBasis.evaluateJacobian(x, shapeFunctionJacobians);\n-592\n-593 // Compute linear combinations of basis function jacobian.\n-594 // Non-scalar coefficients of dimension coeffDim are handled by\n-595 // processing the coeffDim linear combinations independently\n-596 // and storing them as entries of an array.\n-597 using RefJacobian = LocalBasisRange< std::decay_t >;\n-598 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n-[node.localIndex(0)]).size())::value;\n-599 auto refJacobians = std::array{};\n-600 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(refJacobians) = 0;\n-601 for (size_type i = 0; i < localBasis.size(); ++i)\n-602 {\n-603 auto c = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(this->localDoFs_[node.localIndex(i)]);\n-604 for (std::size_t j = 0; j < coeffDim; ++j)\n-605 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);\n-606 }\n-607\n-608 // Transform Jacobians form local to global coordinates.\n-609 using Jacobian = decltype(refJacobians[0] * jacobianInverse);\n-610 auto jacobians = std::array{};\n-611 std::transform(\n-612 refJacobians.begin(), refJacobians.end(), jacobians.begin(),\n-613 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });\n-614\n-615 // Assign computed Jacobians to node entry of range.\n-616 // Types are matched using the lexicographic ordering provided by\n-flatVectorView.\n-617 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);\n-618 });\n-619\n-620 return y;\n-621 }\n-622\n-_\b6_\b2_\b4 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 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn&)\n-625 {\n-626 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n-627 }\n-628\n-629 private:\n-630 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n-631 std::optional geometry_;\n-632 };\n-633\n-_\b6_\b4_\b0 _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const std::shared_ptr&\n-data)\n-641 : _\bB_\ba_\bs_\be(data)\n-642 {\n-643 /* Nothing. */\n-644 }\n-645\n-_\b6_\b5_\b1 _\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-652 {\n-653 HierarchicSearch search(this->data_->basis->gridView().grid(), this->data_-\n->basis->gridView().indexSet());\n-654\n-655 const auto e = search.findEntity(x);\n-656 auto localThis = localFunction(*this);\n-657 localThis.bind(e);\n-658 return localThis(e.geometry().local(x));\n-659 }\n-660\n-_\b6_\b6_\b1 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-_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be& f)\n-662 {\n-663 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n-664 }\n-665\n-_\b6_\b6_\b7 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\n-_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be& f)\n-668 {\n-669 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(f);\n-670 }\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-_\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-_\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-_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\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:_\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-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+_\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 _\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_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw\n-auto flatVectorView(T &t)\n-Create flat vector view of passed mutable container.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn flatvectorview.hh:183\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:_\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:_\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:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:34\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bd_\ba_\bt_\ba_\b_\n-std::shared_ptr< const Data > data_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:223\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bd_\bo_\bf_\bs\n-const Vector & dofs() const\n-Return the coefficients of this discrete function by reference.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:205\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs\n-B Basis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bT_\br_\be_\be\n-typename Basis::LocalView::Tree Tree\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:45\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n-V Vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:37\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\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 discreteglobalbasisfunction.hh:51\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\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 discreteglobalbasisfunction.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by\n-const NodeToRangeEntry & nodeToRangeEntry() const\n-Return the stored node-to-range map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:211\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by\n-NTRE NodeToRangeEntry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:46\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:\n-_\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_\bB_\ba_\bs_\be\n-DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:190\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n-typename Basis::GridView GridView\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:43\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bb_\ba_\bs_\bi_\bs\n-const Basis & basis() const\n-Return a const reference to the stored basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:199\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\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 discreteglobalbasisfunction.hh:44\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-const EntitySet & entitySet() const\n-Get associated set of entities the local-function can be bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:217\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\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 discreteglobalbasisfunction.hh:48\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt\n-Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename\n-Basis::MultiIndex >()])> Coefficient\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:41\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:59\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-EntitySet entitySet\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba_\b:_\b:\n-_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by\n-std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:63\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba_\b:_\b:_\bb_\ba_\bs_\bi_\bs\n-std::shared_ptr< const Basis > basis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba_\b:_\b:_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n-std::shared_ptr< const Vector > coefficients\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-LocalFunctionBase & operator=(const LocalFunctionBase &other)\n-Copy-assignment of the local-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bb_\bo_\bu_\bn_\bd\n-bool bound() const\n-Check if LocalFunction is already bound to an element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:155\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bb_\bi_\bn_\bd\n-void bind(const Element &element)\n-Bind LocalFunction to grid element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename EntitySet::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt\n-const Element & localContext() const\n-Return the element the local-function is bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:161\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-LocalFunctionBase(const LocalFunctionBase &other)\n-Copy-construct the local-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:90\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_\n-std::vector< Coefficient > localDoFs_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:186\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\ba_\bs_\bs_\bi_\bg_\bn_\bW_\bi_\bt_\bh\n-void assignWith(To &to, const From &from) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bd_\ba_\bt_\ba_\b_\n-std::shared_ptr< const Data > data_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:184\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by\n-decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath,\n-Range &y) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:179\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_\n-LocalView localView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:185\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bu_\bn_\bb_\bi_\bn_\bd\n-void unbind()\n-Unbind the local-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:149\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bD_\bo_\bm_\ba_\bi_\bn\n-LocalDomain Domain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-LocalFunctionBase(const std::shared_ptr< const Data > &data)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:77\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-Derivative of a DiscreteGlobalBasisFunction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:494\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs\n-typename Base::Basis Basis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:501\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend Traits::DerivativeInterface derivative(const\n-DiscreteGlobalBasisFunctionDerivative &f)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:661\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-Range operator()(const Domain &x) const\n-Evaluate the discrete grid-function derivative in global coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:651\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::\n-DerivativeInterface >::Range Range\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:505\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative\n-&f)\n-Construct local function from a DiscreteGlobalBasisFunctionDerivative\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:667\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:\n-_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data >\n-&data)\n-create object from DiscreateGlobalBasisFunction data\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:640\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:\n-_\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-DGBF DiscreteGlobalBasisFunction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:499\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n-typename Base::Vector Vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:502\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs\n-Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet,\n-DefaultDerivativeTraits, 16 > Traits\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:507\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n-typename Base::Domain Domain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:504\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\n-A grid function induced by a global basis and a coefficient vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:281\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:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >\n-derivative(const DiscreteGlobalBasisFunction &f)\n-Derivative of the DiscreteGlobalBasisFunction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:409\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:_\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-DiscreteGlobalBasisFunction(B_T &&basis, V_T &&coefficients, NTRE_T\n-&&nodeToRangeEntry)\n-Create a grid-function, by wrapping the arguments in std::shared_ptr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:384\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:_\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-DiscreteGlobalBasisFunction(std::shared_ptr< const Basis > basis, std::\n-shared_ptr< const V > coefficients, std::shared_ptr< const typename Base::\n-NodeToRangeEntry > nodeToRangeEntry)\n-Create a grid-function, by moving the arguments in std::shared_ptr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:389\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:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)\n-Construct local function from a DiscreteGlobalBasisFunction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:422\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:_\bB_\ba_\bs_\bi_\bs\n-typename Base::Basis Basis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:286\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:_\bT_\br_\ba_\bi_\bt_\bs\n-Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet,\n-DefaultDerivativeTraits, 16 > Traits\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:292\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:_\bR_\ba_\bn_\bg_\be\n-R Range\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:290\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:_\bV_\be_\bc_\bt_\bo_\br\n-typename Base::Vector Vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:287\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:_\bD_\bo_\bm_\ba_\bi_\bn\n-typename Base::Domain Domain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:289\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:_\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 discreteglobalbasisfunction.hh:305\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-GlobalFunction::Range Range\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:314\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n-typename LocalBase::Domain Domain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:313\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)\n-Create a local-function from the associated grid-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:318\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::\n-LocalFunction derivative(const LocalFunction &lf)\n-Local function of the derivative.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:370\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:_\bL_\bo_\bc_\ba_\bl_\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-Evaluate this local-function in coordinates x in the bound element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:334\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename LocalBase::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:315\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-local function evaluating the derivative in reference coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:528\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br\n-_\b(_\b)\n-Range operator()(const Domain &x) const\n-Evaluate this local-function in coordinates x in the bound element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:579\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n-typename LocalBase::Domain Domain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:535\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename LocalBase::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:537\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const\n-LocalFunction &)\n-Not implemented.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:624\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-GlobalFunction::Range Range\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:536\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bu_\bn_\bb_\bi_\bn_\bd\n-void unbind()\n-Unbind the local-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:560\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:\n-_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-LocalFunction(const GlobalFunction &globalFunction)\n-Create a local function from the associated grid function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:540\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &element)\n-Bind LocalFunction to grid element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:553\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+_\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 _\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+_\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 _\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+_\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-_\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:_\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/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: gridfunction.hh File Reference\n+dune-functions: gridviewfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -71,44 +71,52 @@\n \n \n \n
    \n \n-
    gridfunction.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    gridviewfunction.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+\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::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize >
    class  Dune::Functions::GridViewFunction< Signature, GridView, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >
     Wrapper class for functions defined on a Grid. More...
    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,34 +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-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+_\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-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+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_\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+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 Grid. _\bM_\bo_\br_\be_\b._\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/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: gridfunction.hh Source File\n+dune-functions: gridviewfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,179 +74,103 @@\n \n \n
    \n
    \n-
    gridfunction.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_GRID_FUNCTION_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n+
    10#include <memory>
    \n
    11
    \n-
    12#include <dune/common/typeutilities.hh>
    \n+
    12#include <dune/common/concept.hh>
    \n
    13
    \n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+
    17
    \n+
    18
    \n+
    19namespace Dune {
    \n+
    20namespace Functions {
    \n
    21
    \n
    22
    \n
    23
    \n-
    24namespace Dune {
    \n-
    25namespace Functions {
    \n-
    26
    \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-
    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-
    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+
    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-
    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+
    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-
    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+
    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-
    Definition localfunction.hh:34
    \n-
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:169
    \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-
    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+
    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,203 +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-gridfunction.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_GRID_FUNCTION_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n 9\n-10#include \n+10#include \n 11\n-12#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_\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+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-24namespace _\bD_\bu_\bn_\be {\n-25namespace Functions {\n-26\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-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-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+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-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+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-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-_\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-_\bl_\bo_\bc_\ba_\bl_\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-_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\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-_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\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+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_\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._\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:_\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:_\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_\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_\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/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: gridviewfunction.hh File Reference\n+dune-functions: discreteglobalbasisfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -73,50 +73,66 @@\n \n \n
    \n \n-
    gridviewfunction.hh File Reference
    \n+
    discreteglobalbasisfunction.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+#include <optional>
    \n+#include <dune/common/typetraits.hh>
    \n+#include <dune/grid/utility/hierarchicsearch.hh>
    \n+#include <dune/typetree/treecontainer.hh>
    \n+#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>
    \n+#include <dune/functions/functionspacebases/flatvectorview.hh>
    \n+#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n+#include <dune/functions/gridfunctions/gridfunction.hh>
    \n+#include <dune/functions/backends/concepts.hh>
    \n+#include <dune/functions/backends/istlvectorbackend.hh>
    \n
    \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::GridViewFunction< Signature, GridView, DerivativeTraits, bufferSize >
    class  Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >
     
    class  Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize >
     Wrapper class for functions defined on a GridView. More...
    struct  Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::Data
     
    class  Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::LocalFunctionBase
     
    class  Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >
     A grid function induced by a global basis and a coefficient vector. More...
     
    class  Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >::LocalFunction
     
    class  Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >
     Derivative of a DiscreteGlobalBasisFunction More...
     
    class  Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >::LocalFunction
     local function evaluating the derivative in reference coordinates More...
     
    \n \n \n \n \n \n+\n+\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::ImplDoc
     
    \n \n-\n-\n-\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.
     
    template<typename R , typename B , typename V >
    auto Dune::Functions::makeDiscreteGlobalBasisFunction (B &&basis, V &&vector)
     Generate a DiscreteGlobalBasisFunction.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,45 +2,59 @@\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+discreteglobalbasisfunction.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 \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/_\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+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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/_\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+#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/_\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 _\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+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\b _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE\n+ _\b>\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\b _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE\n+ _\b>_\b:_\b:_\bD_\ba_\bt_\ba\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\b _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE\n+ _\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\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+ class \u00a0 _\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 _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE_\b,_\b _\bR_\b _\b>\n+\u00a0 A grid function induced by a global basis and a coefficient vector.\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_\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 _\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE_\b,_\b _\bR_\b _\b>_\b:_\b:\n+ _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+\u00a0\n+ class \u00a0 _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b<_\b _\bD_\bG_\bB_\bF_\b _\b>\n+\u00a0 Derivative of a _\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 _\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_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b<_\b _\bD_\bG_\bB_\bF_\b _\b>_\b:_\b:\n+ _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+\u00a0 local function evaluating the derivative in reference coordinates\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+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc\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+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_\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 &&basis, V &&vector)\n+\u00a0 Generate a _\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 \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: gridviewfunction.hh Source File\n+dune-functions: discreteglobalbasisfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,103 +74,691 @@\n \n \n \n
    \n-
    gridviewfunction.hh
    \n+
    discreteglobalbasisfunction.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_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n
    9
    \n
    10#include <memory>
    \n-
    11
    \n-
    12#include <dune/common/concept.hh>
    \n-
    13
    \n-\n-\n-\n-
    17
    \n+
    11#include <optional>
    \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-
    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+\n+\n+\n+\n+\n+\n+
    25
    \n+
    26namespace Dune {
    \n+
    27namespace Functions {
    \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+
    \n+
    30namespace ImplDoc {
    \n+
    31
    \n+
    32template<typename B, typename V, typename NTRE>
    \n+
    \n+\n+
    34{
    \n+
    35public:
    \n+
    36 using Basis = B;
    \n+
    37 using Vector = V;
    \n+
    38
    \n+
    39 // In order to make the cache work for proxy-references
    \n+
    40 // we have to use AutonomousValue<T> instead of std::decay_t<T>
    \n+
    41 using Coefficient = Dune::AutonomousValue<decltype(std::declval<Vector>()[std::declval<typename Basis::MultiIndex>()])>;
    \n+
    42
    \n+
    43 using GridView = typename Basis::GridView;
    \n+\n+
    45 using Tree = typename Basis::LocalView::Tree;
    \n+
    46 using NodeToRangeEntry = NTRE;
    \n+
    47
    \n+\n+
    49
    \n+\n+
    51 using Element = typename EntitySet::Element;
    \n+
    52
    \n+
    53protected:
    \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+
    55 // This collects all data that is shared by all related
    \n+
    56 // global and local functions. This way we don't need to
    \n+
    57 // keep track of it individually.
    \n+
    \n+
    58 struct Data
    \n+
    59 {
    \n+\n+
    61 std::shared_ptr<const Basis> basis;
    \n+
    62 std::shared_ptr<const Vector> coefficients;
    \n+
    63 std::shared_ptr<const NodeToRangeEntry> nodeToRangeEntry;
    \n+
    64 };
    \n+
    \n+
    65
    \n+
    66public:
    \n+
    \n+\n+
    68 {
    \n+
    69 using LocalView = typename Basis::LocalView;
    \n+
    70 using size_type = typename Tree::size_type;
    \n+
    71
    \n+
    72 public:
    \n+\n+
    74 using Element = typename EntitySet::Element;
    \n+
    75
    \n+
    76 protected:
    \n+
    \n+
    77 LocalFunctionBase(const std::shared_ptr<const Data>& data)
    \n+
    78 : data_(data)
    \n+
    79 , localView_(data_->basis->localView())
    \n+
    80 {
    \n+
    81 localDoFs_.reserve(localView_.maxSize());
    \n+
    82 }
    \n+
    \n+
    83
    \n+
    \n+\n+
    91 : data_(other.data_)
    \n+
    92 , localView_(other.localView_)
    \n+
    93 {
    \n+
    94 localDoFs_.reserve(localView_.maxSize());
    \n+
    95 if (bound())
    \n+
    96 localDoFs_ = other.localDoFs_;
    \n+
    97 }
    \n+
    \n+
    98
    \n+
    \n+\n+
    107 {
    \n+
    108 data_ = other.data_;
    \n+
    109 localView_ = other.localView_;
    \n+
    110 if (bound())
    \n+
    111 localDoFs_ = other.localDoFs_;
    \n+
    112 return *this;
    \n+
    113 }
    \n+
    \n+
    114
    \n+
    115 public:
    \n+
    \n+
    122 void bind(const Element& element)
    \n+
    123 {
    \n+
    124 localView_.bind(element);
    \n+
    125 // Use cache of full local view size. For a subspace basis,
    \n+
    126 // this may be larger than the number of local DOFs in the
    \n+
    127 // tree. In this case only cache entries associated to local
    \n+
    128 // DOFs in the subspace are filled. Cache entries associated
    \n+
    129 // to local DOFs which are not contained in the subspace will
    \n+
    130 // not be touched.
    \n+
    131 //
    \n+
    132 // Alternatively one could use a cache that exactly fits
    \n+
    133 // the size of the tree. However, this would require to
    \n+
    134 // subtract an offset from localIndex(i) on each cache
    \n+
    135 // access in operator().
    \n+
    136 localDoFs_.resize(localView_.size());
    \n+
    137 const auto& dofs = *data_->coefficients;
    \n+
    138 for (size_type i = 0; i < localView_.tree().size(); ++i)
    \n+
    139 {
    \n+
    140 // For a subspace basis the index-within-tree i
    \n+
    141 // is not the same as the localIndex within the
    \n+
    142 // full local view.
    \n+
    143 size_t localIndex = localView_.tree().localIndex(i);
    \n+
    144 localDoFs_[localIndex] = dofs[localView_.index(localIndex)];
    \n+
    145 }
    \n+
    146 }
    \n+
    \n+
    147
    \n+
    \n+
    149 void unbind()
    \n+
    150 {
    \n+
    151 localView_.unbind();
    \n+
    152 }
    \n+
    \n+
    153
    \n+
    \n+
    155 bool bound() const
    \n+
    156 {
    \n+
    157 return localView_.bound();
    \n+
    158 }
    \n+
    \n+
    159
    \n+
    \n+
    161 const Element& localContext() const
    \n+
    162 {
    \n+
    163 return localView_.element();
    \n+
    164 }
    \n+
    \n+
    165
    \n+
    166 protected:
    \n+
    167
    \n+
    168 template<class To, class From>
    \n+
    \n+
    169 void assignWith(To& to, const From& from) const
    \n+
    170 {
    \n+
    171 auto from_flat = flatVectorView(from);
    \n+
    172 auto to_flat = flatVectorView(to);
    \n+
    173 assert(from_flat.size() == to_flat.size());
    \n+
    174 for (size_type i = 0; i < to_flat.size(); ++i)
    \n+
    175 to_flat[i] = from_flat[i];
    \n+
    176 }
    \n+
    \n+
    177
    \n+
    178 template<class Node, class TreePath, class Range>
    \n+
    \n+
    179 decltype(auto) nodeToRangeEntry(const Node& node, const TreePath& treePath, Range& y) const
    \n+
    180 {
    \n+
    181 return (*data_->nodeToRangeEntry)(node, treePath, y);
    \n+
    182 }
    \n+
    \n+
    183
    \n+
    184 std::shared_ptr<const Data> data_;
    \n+
    185 LocalView localView_;
    \n+
    186 std::vector<Coefficient> localDoFs_;
    \n+
    187 };
    \n+
    \n+
    188
    \n+
    189protected:
    \n+
    \n+
    190 DiscreteGlobalBasisFunctionBase(const std::shared_ptr<const Data>& data)
    \n+
    191 : data_(data)
    \n+
    192 {
    \n+
    193 /* Nothing. */
    \n+
    194 }
    \n+
    \n+
    195
    \n+
    196public:
    \n+
    197
    \n+
    \n+
    199 const Basis& basis() const
    \n+
    200 {
    \n+
    201 return *data_->basis;
    \n+
    202 }
    \n+
    \n+
    203
    \n+
    \n+
    205 const Vector& dofs() const
    \n+
    206 {
    \n+
    207 return *data_->coefficients;
    \n+
    208 }
    \n+
    \n+
    209
    \n+
    \n+\n+
    212 {
    \n+
    213 return *data_->nodeToRangeEntry;
    \n+
    214 }
    \n+
    \n+
    215
    \n+
    \n+
    217 const EntitySet& entitySet() const
    \n+
    218 {
    \n+
    219 return data_->entitySet;
    \n+
    220 }
    \n+
    \n+
    221
    \n+
    222protected:
    \n+
    223 std::shared_ptr<const Data> data_;
    \n+
    224};
    \n+
    \n+
    225
    \n+
    226} // namespace ImplDoc
    \n+
    \n+
    227
    \n+
    228
    \n+
    229
    \n+
    230template<typename DGBF>
    \n+\n+
    232
    \n+
    276template<typename B, typename V,
    \n+
    277 typename NTRE = HierarchicNodeToRangeMap,
    \n+
    278 typename R = typename V::value_type>
    \n+
    \n+\n+\n+
    281{
    \n+\n+
    283 using Data = typename Base::Data;
    \n+
    284
    \n+
    285public:
    \n+
    286 using Basis = typename Base::Basis;
    \n+
    287 using Vector = typename Base::Vector;
    \n+
    288
    \n+
    289 using Domain = typename Base::Domain;
    \n+
    290 using Range = R;
    \n+
    291
    \n+
    292 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16>;
    \n+
    293
    \n+
    294private:
    \n+
    295
    \n+
    296 template<class Node>
    \n+
    297 using LocalBasisRange = typename Node::FiniteElement::Traits::LocalBasisType::Traits::RangeType;
    \n+
    298 template<class Node>
    \n+
    299 using NodeData = typename std::vector<LocalBasisRange<Node>>;
    \n+
    300 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData, typename Base::Tree>;
    \n+
    301
    \n+
    302public:
    \n+
    \n+\n+\n+
    305 {
    \n+
    306 using LocalBase = typename Base::LocalFunctionBase;
    \n+
    307 using size_type = typename Base::Tree::size_type;
    \n+
    308 using LocalBase::nodeToRangeEntry;
    \n+
    309
    \n+
    310 public:
    \n+
    311
    \n+\n+
    313 using Domain = typename LocalBase::Domain;
    \n+\n+
    315 using Element = typename LocalBase::Element;
    \n+
    316
    \n+
    \n+\n+
    319 : LocalBase(globalFunction.data_)
    \n+
    320 , evaluationBuffer_(this->localView_.tree())
    \n+
    321 {
    \n+
    322 /* Nothing. */
    \n+
    323 }
    \n+
    \n+
    324
    \n+
    \n+
    334 Range operator()(const Domain& x) const
    \n+
    335 {
    \n+
    336 Range y;
    \n+
    337 istlVectorBackend(y) = 0;
    \n+
    338
    \n+
    339 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&& treePath) {
    \n+
    340 const auto& fe = node.finiteElement();
    \n+
    341 const auto& localBasis = fe.localBasis();
    \n+
    342 auto& shapeFunctionValues = evaluationBuffer_[treePath];
    \n+
    343
    \n+
    344 localBasis.evaluateFunction(x, shapeFunctionValues);
    \n+
    345
    \n+
    346 // Compute linear combinations of basis function jacobian.
    \n+
    347 // Non-scalar coefficients of dimension coeffDim are handled by
    \n+
    348 // processing the coeffDim linear combinations independently
    \n+
    349 // and storing them as entries of an array.
    \n+
    350 using Value = LocalBasisRange< std::decay_t<decltype(node)> >;
    \n+
    351 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;
    \n+
    352 auto values = std::array<Value, coeffDim>{};
    \n+
    353 istlVectorBackend(values) = 0;
    \n+
    354 for (size_type i = 0; i < localBasis.size(); ++i)
    \n+
    355 {
    \n+
    356 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);
    \n+
    357 for (std::size_t j = 0; j < coeffDim; ++j)
    \n+
    358 values[j].axpy(c[j], shapeFunctionValues[i]);
    \n+
    359 }
    \n+
    360
    \n+
    361 // Assign computed values to node entry of range.
    \n+
    362 // Types are matched using the lexicographic ordering provided by flatVectorView.
    \n+
    363 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), values);
    \n+
    364 });
    \n+
    365
    \n+
    366 return y;
    \n+
    367 }
    \n+
    \n+
    368
    \n+
    \n+\n+
    371 {
    \n+\n+
    373 if (lf.bound())
    \n+
    374 dlf.bind(lf.localContext());
    \n+
    375 return dlf;
    \n+
    376 }
    \n+
    \n+
    377
    \n+
    378 private:
    \n+
    379 mutable PerNodeEvaluationBuffer evaluationBuffer_;
    \n+
    380 };
    \n+
    \n+
    381
    \n+
    383 template<class B_T, class V_T, class NTRE_T>
    \n+
    \n+
    384 DiscreteGlobalBasisFunction(B_T && basis, V_T && coefficients, NTRE_T&& nodeToRangeEntry)
    \n+
    385 : Base(std::make_shared<Data>(Data{{basis.gridView()}, wrap_or_move(std::forward<B_T>(basis)), wrap_or_move(std::forward<V_T>(coefficients)), wrap_or_move(std::forward<NTRE_T>(nodeToRangeEntry))}))
    \n+
    386 {}
    \n+
    \n+
    387
    \n+
    \n+
    389 DiscreteGlobalBasisFunction(std::shared_ptr<const Basis> basis, std::shared_ptr<const V> coefficients, std::shared_ptr<const typename Base::NodeToRangeEntry> nodeToRangeEntry)
    \n+
    390 : Base(std::make_shared<Data>(Data{{basis->gridView()}, basis, coefficients, nodeToRangeEntry}))
    \n+
    391 {}
    \n+
    \n+
    392
    \n+
    \n+
    398 Range operator() (const Domain& x) const
    \n+
    399 {
    \n+
    400 HierarchicSearch search(this->data_->basis->gridView().grid(), this->data_->basis->gridView().indexSet());
    \n+
    401
    \n+
    402 const auto e = search.findEntity(x);
    \n+
    403 auto localThis = localFunction(*this);
    \n+
    404 localThis.bind(e);
    \n+
    405 return localThis(e.geometry().local(x));
    \n+
    406 }
    \n+
    \n+
    407
    \n+\n+
    413
    \n+
    \n+\n+
    423 {
    \n+
    424 return LocalFunction(t);
    \n+
    425 }
    \n+
    \n+
    426};
    \n+
    \n+
    427
    \n+
    428
    \n+
    453template<typename R, typename B, typename V>
    \n+
    \n+
    454auto makeDiscreteGlobalBasisFunction(B&& basis, V&& vector)
    \n+
    455{
    \n+
    456 using Basis = std::decay_t<B>;
    \n+
    457 using NTREM = HierarchicNodeToRangeMap;
    \n+
    458
    \n+
    459 // Small helper functions to wrap vectors using istlVectorBackend
    \n+
    460 // if they do not already satisfy the VectorBackend interface.
    \n+
    461 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {
    \n+
    462 if constexpr (models<Concept::ConstVectorBackend<Basis>, decltype(v)>()) {
    \n+
    463 return std::forward<decltype(v)>(v);
    \n+
    464 } else {
    \n+
    465 return istlVectorBackend(v);
    \n+
    466 }
    \n+
    467 };
    \n+
    468
    \n+
    469 using Vector = std::decay_t<decltype(toConstVectorBackend(std::forward<V>(vector)))>;
    \n+\n+
    471 std::forward<B>(basis),
    \n+
    472 toConstVectorBackend(std::forward<V>(vector)),
    \n+\n+
    474}
    \n+
    \n+
    475
    \n+
    476
    \n+
    491template<typename DGBF>
    \n+
    \n+\n+
    493 : public ImplDoc::DiscreteGlobalBasisFunctionBase<typename DGBF::Basis, typename DGBF::Vector, typename DGBF::NodeToRangeEntry>
    \n+
    494{
    \n+\n+
    496 using Data = typename Base::Data;
    \n+
    497
    \n+
    498public:
    \n+\n+
    500
    \n+
    501 using Basis = typename Base::Basis;
    \n+
    502 using Vector = typename Base::Vector;
    \n+
    503
    \n+
    504 using Domain = typename Base::Domain;
    \n+\n+
    506
    \n+
    507 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16>;
    \n+
    508
    \n+
    509private:
    \n+
    510
    \n+
    511 template<class Node>
    \n+
    512 using LocalBasisRange = typename Node::FiniteElement::Traits::LocalBasisType::Traits::JacobianType;
    \n+
    513 template<class Node>
    \n+
    514 using NodeData = typename std::vector< LocalBasisRange<Node> >;
    \n+
    515 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData, typename Base::Tree>;
    \n+
    516
    \n+
    517public:
    \n+
    518
    \n+
    \n+\n+\n+
    528 {
    \n+
    529 using LocalBase = typename Base::LocalFunctionBase;
    \n+
    530 using size_type = typename Base::Tree::size_type;
    \n+
    531 using LocalBase::nodeToRangeEntry;
    \n+
    532
    \n+
    533 public:
    \n+\n+
    535 using Domain = typename LocalBase::Domain;
    \n+\n+
    537 using Element = typename LocalBase::Element;
    \n+
    538
    \n+
    \n+
    540 LocalFunction(const GlobalFunction& globalFunction)
    \n+
    541 : LocalBase(globalFunction.data_)
    \n+
    542 , evaluationBuffer_(this->localView_.tree())
    \n+
    543 {
    \n+
    544 /* Nothing. */
    \n+
    545 }
    \n+
    \n+
    546
    \n+
    \n+
    553 void bind(const Element& element)
    \n+
    554 {
    \n+
    555 LocalBase::bind(element);
    \n+
    556 geometry_.emplace(element.geometry());
    \n+
    557 }
    \n+
    \n+
    558
    \n+
    \n+
    560 void unbind()
    \n+
    561 {
    \n+
    562 geometry_.reset();
    \n+
    563 LocalBase::unbind();
    \n+
    564 }
    \n+
    \n+
    565
    \n+
    \n+
    579 Range operator()(const Domain& x) const
    \n+
    580 {
    \n+
    581 Range y;
    \n+
    582 istlVectorBackend(y) = 0;
    \n+
    583
    \n+
    584 const auto& jacobianInverse = geometry_->jacobianInverse(x);
    \n+
    585
    \n+
    586 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&& treePath) {
    \n+
    587 const auto& fe = node.finiteElement();
    \n+
    588 const auto& localBasis = fe.localBasis();
    \n+
    589 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];
    \n+
    590
    \n+
    591 localBasis.evaluateJacobian(x, shapeFunctionJacobians);
    \n+
    592
    \n+
    593 // Compute linear combinations of basis function jacobian.
    \n+
    594 // Non-scalar coefficients of dimension coeffDim are handled by
    \n+
    595 // processing the coeffDim linear combinations independently
    \n+
    596 // and storing them as entries of an array.
    \n+
    597 using RefJacobian = LocalBasisRange< std::decay_t<decltype(node)> >;
    \n+
    598 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;
    \n+
    599 auto refJacobians = std::array<RefJacobian, coeffDim>{};
    \n+
    600 istlVectorBackend(refJacobians) = 0;
    \n+
    601 for (size_type i = 0; i < localBasis.size(); ++i)
    \n+
    602 {
    \n+
    603 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);
    \n+
    604 for (std::size_t j = 0; j < coeffDim; ++j)
    \n+
    605 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);
    \n+
    606 }
    \n+
    607
    \n+
    608 // Transform Jacobians form local to global coordinates.
    \n+
    609 using Jacobian = decltype(refJacobians[0] * jacobianInverse);
    \n+
    610 auto jacobians = std::array<Jacobian, coeffDim>{};
    \n+
    611 std::transform(
    \n+
    612 refJacobians.begin(), refJacobians.end(), jacobians.begin(),
    \n+
    613 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });
    \n+
    614
    \n+
    615 // Assign computed Jacobians to node entry of range.
    \n+
    616 // Types are matched using the lexicographic ordering provided by flatVectorView.
    \n+
    617 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);
    \n+
    618 });
    \n+
    619
    \n+
    620 return y;
    \n+
    621 }
    \n+
    \n+
    622
    \n+
    \n+\n+
    625 {
    \n+
    626 DUNE_THROW(NotImplemented, "derivative of derivative is not implemented");
    \n+
    627 }
    \n+
    \n+
    628
    \n+
    629 private:
    \n+
    630 mutable PerNodeEvaluationBuffer evaluationBuffer_;
    \n+
    631 std::optional<typename Element::Geometry> geometry_;
    \n+
    632 };
    \n+
    \n+
    633
    \n+
    \n+
    640 DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr<const Data>& data)
    \n+
    641 : Base(data)
    \n+
    642 {
    \n+
    643 /* Nothing. */
    \n+
    644 }
    \n+
    \n+
    645
    \n+
    \n+
    651 Range operator()(const Domain& x) const
    \n+
    652 {
    \n+
    653 HierarchicSearch search(this->data_->basis->gridView().grid(), this->data_->basis->gridView().indexSet());
    \n+
    654
    \n+
    655 const auto e = search.findEntity(x);
    \n+
    656 auto localThis = localFunction(*this);
    \n+
    657 localThis.bind(e);
    \n+
    658 return localThis(e.geometry().local(x));
    \n+
    659 }
    \n+
    \n+
    660
    \n+
    \n+\n+
    662 {
    \n+
    663 DUNE_THROW(NotImplemented, "derivative of derivative is not implemented");
    \n+
    664 }
    \n+
    \n+
    665
    \n+
    \n+\n+
    668 {
    \n+
    669 return LocalFunction(f);
    \n+
    670 }
    \n+
    \n+
    671};
    \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+
    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-
    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 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+
    Definition discreteglobalbasisfunction.hh:34
    \n+
    std::shared_ptr< const Data > data_
    Definition discreteglobalbasisfunction.hh:223
    \n+
    const Vector & dofs() const
    Return the coefficients of this discrete function by reference.
    Definition discreteglobalbasisfunction.hh:205
    \n+
    B Basis
    Definition discreteglobalbasisfunction.hh:36
    \n+
    typename Basis::LocalView::Tree Tree
    Definition discreteglobalbasisfunction.hh:45
    \n+
    V Vector
    Definition discreteglobalbasisfunction.hh:37
    \n+
    typename EntitySet::Element Element
    Definition discreteglobalbasisfunction.hh:51
    \n+
    typename EntitySet::LocalCoordinate LocalDomain
    Definition discreteglobalbasisfunction.hh:50
    \n+
    const NodeToRangeEntry & nodeToRangeEntry() const
    Return the stored node-to-range map.
    Definition discreteglobalbasisfunction.hh:211
    \n+
    NTRE NodeToRangeEntry
    Definition discreteglobalbasisfunction.hh:46
    \n+
    DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)
    Definition discreteglobalbasisfunction.hh:190
    \n+
    typename Basis::GridView GridView
    Definition discreteglobalbasisfunction.hh:43
    \n+
    const Basis & basis() const
    Return a const reference to the stored basis.
    Definition discreteglobalbasisfunction.hh:199
    \n+
    GridViewEntitySet< GridView, 0 > EntitySet
    Definition discreteglobalbasisfunction.hh:44
    \n+
    const EntitySet & entitySet() const
    Get associated set of entities the local-function can be bound to.
    Definition discreteglobalbasisfunction.hh:217
    \n+
    typename EntitySet::GlobalCoordinate Domain
    Definition discreteglobalbasisfunction.hh:48
    \n+
    Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename Basis::MultiIndex >()])> Coefficient
    Definition discreteglobalbasisfunction.hh:41
    \n+
    Definition discreteglobalbasisfunction.hh:59
    \n+
    EntitySet entitySet
    Definition discreteglobalbasisfunction.hh:60
    \n+
    std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry
    Definition discreteglobalbasisfunction.hh:63
    \n+
    std::shared_ptr< const Basis > basis
    Definition discreteglobalbasisfunction.hh:61
    \n+
    std::shared_ptr< const Vector > coefficients
    Definition discreteglobalbasisfunction.hh:62
    \n+\n+
    LocalFunctionBase & operator=(const LocalFunctionBase &other)
    Copy-assignment of the local-function.
    Definition discreteglobalbasisfunction.hh:106
    \n+
    bool bound() const
    Check if LocalFunction is already bound to an element.
    Definition discreteglobalbasisfunction.hh:155
    \n+
    void bind(const Element &element)
    Bind LocalFunction to grid element.
    Definition discreteglobalbasisfunction.hh:122
    \n+
    typename EntitySet::Element Element
    Definition discreteglobalbasisfunction.hh:74
    \n+
    const Element & localContext() const
    Return the element the local-function is bound to.
    Definition discreteglobalbasisfunction.hh:161
    \n+
    LocalFunctionBase(const LocalFunctionBase &other)
    Copy-construct the local-function.
    Definition discreteglobalbasisfunction.hh:90
    \n+
    std::vector< Coefficient > localDoFs_
    Definition discreteglobalbasisfunction.hh:186
    \n+
    void assignWith(To &to, const From &from) const
    Definition discreteglobalbasisfunction.hh:169
    \n+
    std::shared_ptr< const Data > data_
    Definition discreteglobalbasisfunction.hh:184
    \n+
    decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath, Range &y) const
    Definition discreteglobalbasisfunction.hh:179
    \n+
    LocalView localView_
    Definition discreteglobalbasisfunction.hh:185
    \n+
    void unbind()
    Unbind the local-function.
    Definition discreteglobalbasisfunction.hh:149
    \n+
    LocalDomain Domain
    Definition discreteglobalbasisfunction.hh:73
    \n+
    LocalFunctionBase(const std::shared_ptr< const Data > &data)
    Definition discreteglobalbasisfunction.hh:77
    \n+
    Derivative of a DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:494
    \n+
    typename Base::Basis Basis
    Definition discreteglobalbasisfunction.hh:501
    \n+
    friend Traits::DerivativeInterface derivative(const DiscreteGlobalBasisFunctionDerivative &f)
    Definition discreteglobalbasisfunction.hh:661
    \n+
    Range operator()(const Domain &x) const
    Evaluate the discrete grid-function derivative in global coordinates.
    Definition discreteglobalbasisfunction.hh:651
    \n+
    typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::DerivativeInterface >::Range Range
    Definition discreteglobalbasisfunction.hh:505
    \n+
    friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative &f)
    Construct local function from a DiscreteGlobalBasisFunctionDerivative
    Definition discreteglobalbasisfunction.hh:667
    \n+
    DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data > &data)
    create object from DiscreateGlobalBasisFunction data
    Definition discreteglobalbasisfunction.hh:640
    \n+
    DGBF DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:499
    \n+
    typename Base::Vector Vector
    Definition discreteglobalbasisfunction.hh:502
    \n+
    Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits
    Definition discreteglobalbasisfunction.hh:507
    \n+
    typename Base::Domain Domain
    Definition discreteglobalbasisfunction.hh:504
    \n+
    A grid function induced by a global basis and a coefficient vector.
    Definition discreteglobalbasisfunction.hh:281
    \n+
    friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction > derivative(const DiscreteGlobalBasisFunction &f)
    Derivative of the DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:409
    \n+
    DiscreteGlobalBasisFunction(B_T &&basis, V_T &&coefficients, NTRE_T &&nodeToRangeEntry)
    Create a grid-function, by wrapping the arguments in std::shared_ptr.
    Definition discreteglobalbasisfunction.hh:384
    \n+
    DiscreteGlobalBasisFunction(std::shared_ptr< const Basis > basis, std::shared_ptr< const V > coefficients, std::shared_ptr< const typename Base::NodeToRangeEntry > nodeToRangeEntry)
    Create a grid-function, by moving the arguments in std::shared_ptr.
    Definition discreteglobalbasisfunction.hh:389
    \n+
    friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)
    Construct local function from a DiscreteGlobalBasisFunction.
    Definition discreteglobalbasisfunction.hh:422
    \n+
    typename Base::Basis Basis
    Definition discreteglobalbasisfunction.hh:286
    \n+
    Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits
    Definition discreteglobalbasisfunction.hh:292
    \n+
    R Range
    Definition discreteglobalbasisfunction.hh:290
    \n+
    typename Base::Vector Vector
    Definition discreteglobalbasisfunction.hh:287
    \n+
    typename Base::Domain Domain
    Definition discreteglobalbasisfunction.hh:289
    \n+
    Definition discreteglobalbasisfunction.hh:305
    \n+
    GlobalFunction::Range Range
    Definition discreteglobalbasisfunction.hh:314
    \n+
    typename LocalBase::Domain Domain
    Definition discreteglobalbasisfunction.hh:313
    \n+
    LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)
    Create a local-function from the associated grid-function.
    Definition discreteglobalbasisfunction.hh:318
    \n+
    friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::LocalFunction derivative(const LocalFunction &lf)
    Local function of the derivative.
    Definition discreteglobalbasisfunction.hh:370
    \n+
    Range operator()(const Domain &x) const
    Evaluate this local-function in coordinates x in the bound element.
    Definition discreteglobalbasisfunction.hh:334
    \n+
    typename LocalBase::Element Element
    Definition discreteglobalbasisfunction.hh:315
    \n+
    local function evaluating the derivative in reference coordinates
    Definition discreteglobalbasisfunction.hh:528
    \n+
    Range operator()(const Domain &x) const
    Evaluate this local-function in coordinates x in the bound element.
    Definition discreteglobalbasisfunction.hh:579
    \n+
    typename LocalBase::Domain Domain
    Definition discreteglobalbasisfunction.hh:535
    \n+
    typename LocalBase::Element Element
    Definition discreteglobalbasisfunction.hh:537
    \n+
    friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction &)
    Not implemented.
    Definition discreteglobalbasisfunction.hh:624
    \n+
    GlobalFunction::Range Range
    Definition discreteglobalbasisfunction.hh:536
    \n+
    void unbind()
    Unbind the local-function.
    Definition discreteglobalbasisfunction.hh:560
    \n+
    LocalFunction(const GlobalFunction &globalFunction)
    Create a local function from the associated grid function.
    Definition discreteglobalbasisfunction.hh:540
    \n+
    void bind(const Element &element)
    Bind LocalFunction to grid element.
    Definition discreteglobalbasisfunction.hh:553
    \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+
    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
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,109 +1,871 @@\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+discreteglobalbasisfunction.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_DISCRETEGLOBALBASISFUNCTIONS_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_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/_\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+11#include \n+12\n+13#include \n+14\n+15#include \n+16\n+17#include \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+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/_\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+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/_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\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/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+22#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+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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+24#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+25\n+26namespace _\bD_\bu_\bn_\be {\n+27namespace Functions {\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+_\b3_\b0namespace ImplDoc {\n+31\n+32template\n+_\b3_\b3class _\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_\bB_\ba_\bs_\be\n+34{\n+35public:\n+_\b3_\b6 using _\bB_\ba_\bs_\bi_\bs = B;\n+_\b3_\b7 using _\bV_\be_\bc_\bt_\bo_\br = V;\n+38\n+39 // In order to make the cache work for proxy-references\n+40 // we have to use AutonomousValue instead of std::decay_t\n+_\b4_\b1 using _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt = Dune::AutonomousValue()\n+[std::declval()])>;\n+42\n+_\b4_\b3 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename Basis::GridView;\n+_\b4_\b4 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+_\b4_\b5 using _\bT_\br_\be_\be = typename Basis::LocalView::Tree;\n+_\b4_\b6 using _\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by = NTRE;\n+47\n+_\b4_\b8 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+49\n+_\b5_\b0 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+_\b5_\b1 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+52\n+53protected:\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-_\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+55 // This collects all data that is shared by all related\n+56 // global and local functions. This way we don't need to\n+57 // keep track of it individually.\n+_\b5_\b8 struct _\bD_\ba_\bt_\ba\n+59 {\n+_\b6_\b0 _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt;\n+_\b6_\b1 std::shared_ptr _\bb_\ba_\bs_\bi_\bs;\n+_\b6_\b2 std::shared_ptr _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs;\n+_\b6_\b3 std::shared_ptr _\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by;\n+64 };\n+65\n+66public:\n+_\b6_\b7 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+68 {\n+69 using LocalView = typename Basis::LocalView;\n+70 using size_type = typename Tree::size_type;\n+71\n+72 public:\n+_\b7_\b3 using _\bD_\bo_\bm_\ba_\bi_\bn = _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn;\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+76 protected:\n+_\b7_\b7 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be(const std::shared_ptr& data)\n+78 : _\bd_\ba_\bt_\ba_\b_(data)\n+79 , _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(_\bd_\ba_\bt_\ba_\b_->_\bb_\ba_\bs_\bi_\bs->localView())\n+80 {\n+81 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.reserve(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize());\n+82 }\n+83\n+_\b9_\b0 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be(const _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be& other)\n+91 : _\bd_\ba_\bt_\ba_\b_(other._\bd_\ba_\bt_\ba_\b_)\n+92 , _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(other._\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_)\n+93 {\n+94 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.reserve(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize());\n+95 if (_\bb_\bo_\bu_\bn_\bd())\n+96 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n+97 }\n+98\n+_\b1_\b0_\b6 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be& other)\n+107 {\n+108 _\bd_\ba_\bt_\ba_\b_ = other._\bd_\ba_\bt_\ba_\b_;\n+109 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n+110 if (_\bb_\bo_\bu_\bn_\bd())\n+111 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n+112 return *this;\n+113 }\n+114\n+115 public:\n+_\b1_\b2_\b2 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n+123 {\n+124 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bind(element);\n+125 // Use cache of full local view size. For a subspace basis,\n+126 // this may be larger than the number of local DOFs in the\n+127 // tree. In this case only cache entries associated to local\n+128 // DOFs in the subspace are filled. Cache entries associated\n+129 // to local DOFs which are not contained in the subspace will\n+130 // not be touched.\n+131 //\n+132 // Alternatively one could use a cache that exactly fits\n+133 // the size of the tree. However, this would require to\n+134 // subtract an offset from localIndex(i) on each cache\n+135 // access in operator().\n+136 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.resize(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.size());\n+137 const auto& _\bd_\bo_\bf_\bs = *_\bd_\ba_\bt_\ba_\b_->coefficients;\n+138 for (size_type i = 0; i < _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree().size(); ++i)\n+139 {\n+140 // For a subspace basis the index-within-tree i\n+141 // is not the same as the localIndex within the\n+142 // full local view.\n+143 size_t localIndex = _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree().localIndex(i);\n+144 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_[localIndex] = _\bd_\bo_\bf_\bs[_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.index(localIndex)];\n+145 }\n+146 }\n+147\n+_\b1_\b4_\b9 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+150 {\n+151 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.unbind();\n+152 }\n+153\n+_\b1_\b5_\b5 bool _\bb_\bo_\bu_\bn_\bd() const\n+156 {\n+157 return _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bound();\n+158 }\n+159\n+_\b1_\b6_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt() const\n+162 {\n+163 return _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.element();\n+164 }\n+165\n+166 protected:\n+167\n+168 template\n+_\b1_\b6_\b9 void _\ba_\bs_\bs_\bi_\bg_\bn_\bW_\bi_\bt_\bh(To& to, const From& from) const\n+170 {\n+171 auto from_flat = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(from);\n+172 auto to_flat = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(to);\n+173 assert(from_flat.size() == to_flat.size());\n+174 for (size_type i = 0; i < to_flat.size(); ++i)\n+175 to_flat[i] = from_flat[i];\n+176 }\n+177\n+178 template\n+_\b1_\b7_\b9 decltype(auto) _\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by(const Node& node, const TreePath& treePath,\n+Range& y) const\n+180 {\n+181 return (*_\bd_\ba_\bt_\ba_\b_->nodeToRangeEntry)(node, treePath, y);\n+182 }\n+183\n+_\b1_\b8_\b4 std::shared_ptr _\bd_\ba_\bt_\ba_\b_;\n+_\b1_\b8_\b5 LocalView _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n+_\b1_\b8_\b6 std::vector _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n+187 };\n+188\n+189protected:\n+_\b1_\b9_\b0 _\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_\bB_\ba_\bs_\be(const std::shared_ptr& data)\n+191 : _\bd_\ba_\bt_\ba_\b_(data)\n+192 {\n+193 /* Nothing. */\n+194 }\n+195\n+196public:\n+197\n+_\b1_\b9_\b9 const _\bB_\ba_\bs_\bi_\bs& _\bb_\ba_\bs_\bi_\bs() const\n+200 {\n+201 return *_\bd_\ba_\bt_\ba_\b_->basis;\n+202 }\n+203\n+_\b2_\b0_\b5 const _\bV_\be_\bc_\bt_\bo_\br& _\bd_\bo_\bf_\bs() const\n+206 {\n+207 return *_\bd_\ba_\bt_\ba_\b_->coefficients;\n+208 }\n+209\n+_\b2_\b1_\b1 const _\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by& _\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by() const\n+212 {\n+213 return *_\bd_\ba_\bt_\ba_\b_->nodeToRangeEntry;\n+214 }\n+215\n+_\b2_\b1_\b7 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n+218 {\n+219 return _\bd_\ba_\bt_\ba_\b_->entitySet;\n+220 }\n+221\n+222protected:\n+_\b2_\b2_\b3 std::shared_ptr _\bd_\ba_\bt_\ba_\b_;\n+224};\n+225\n+226} // namespace ImplDoc\n+227\n+228\n+229\n+230template\n+231class _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be;\n+232\n+276template\n+_\b2_\b7_\b9class _\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+280 : public _\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be\n+281{\n+282 using _\bB_\ba_\bs_\be = _\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\bB_\b,_\b _\bV_\b,_\b _\bN_\bT_\bR_\bE_\b>;\n+283 using Data = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba;\n+284\n+285public:\n+_\b2_\b8_\b6 using _\bB_\ba_\bs_\bi_\bs = typename _\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs;\n+_\b2_\b8_\b7 using _\bV_\be_\bc_\bt_\bo_\br = typename _\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br;\n+288\n+_\b2_\b8_\b9 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n+_\b2_\b9_\b0 using _\bR_\ba_\bn_\bg_\be = R;\n+291\n+_\b2_\b9_\b2 using _\bT_\br_\ba_\bi_\bt_\bs = Imp::GridFunctionTraits<_\bR_\ba_\bn_\bg_\be(_\bD_\bo_\bm_\ba_\bi_\bn), typename _\bB_\ba_\bs_\be_\b:_\b:\n+_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt, _\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+293\n+294private:\n+295\n+296 template\n+297 using LocalBasisRange = typename Node::FiniteElement::Traits::\n+LocalBasisType::Traits::RangeType;\n+298 template\n+299 using NodeData = typename std::vector>;\n+300 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer;\n+301\n+302public:\n+_\b3_\b0_\b3 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+304 : public _\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+305 {\n+306 using LocalBase = typename _\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be;\n+307 using size_type = typename Base::Tree::size_type;\n+308 using LocalBase::nodeToRangeEntry;\n+309\n+310 public:\n+311\n+_\b3_\b1_\b2 using _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn = _\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+_\b3_\b1_\b3 using _\bD_\bo_\bm_\ba_\bi_\bn = typename LocalBase::Domain;\n+_\b3_\b1_\b4 using _\bR_\ba_\bn_\bg_\be = _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n+_\b3_\b1_\b5 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename LocalBase::Element;\n+316\n+_\b3_\b1_\b8 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\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& globalFunction)\n+319 : LocalBase(globalFunction._\bd_\ba_\bt_\ba_\b_)\n+320 , evaluationBuffer_(this->_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree())\n+321 {\n+322 /* Nothing. */\n+323 }\n+324\n+_\b3_\b3_\b4 _\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+335 {\n+336 _\bR_\ba_\bn_\bg_\be y;\n+337 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(y) = 0;\n+338\n+339 TypeTree::forEachLeafNode(this->_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree(), [&](auto&& node, auto&&\n+treePath) {\n+340 const auto& fe = node.finiteElement();\n+341 const auto& localBasis = fe.localBasis();\n+342 auto& shapeFunctionValues = evaluationBuffer_[treePath];\n+343\n+344 localBasis.evaluateFunction(x, shapeFunctionValues);\n+345\n+346 // Compute linear combinations of basis function jacobian.\n+347 // Non-scalar coefficients of dimension coeffDim are handled by\n+348 // processing the coeffDim linear combinations independently\n+349 // and storing them as entries of an array.\n+350 using Value = LocalBasisRange< std::decay_t >;\n+351 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n+[node.localIndex(0)]).size())::value;\n+352 auto values = std::array{};\n+353 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(values) = 0;\n+354 for (size_type i = 0; i < localBasis.size(); ++i)\n+355 {\n+356 auto c = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(this->_\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_[node.localIndex(i)]);\n+357 for (std::size_t j = 0; j < coeffDim; ++j)\n+358 values[j].axpy(c[j], shapeFunctionValues[i]);\n+359 }\n+360\n+361 // Assign computed values to node entry of range.\n+362 // Types are matched using the lexicographic ordering provided by\n+flatVectorView.\n+363 LocalBase::assignWith(_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by(node, treePath, y), values);\n+364 });\n+365\n+366 return y;\n+367 }\n+368\n+_\b3_\b7_\b0 friend typename\n+_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\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:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& lf)\n+371 {\n+372 auto dlf = _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+(_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\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>(lf._\bd_\ba_\bt_\ba_\b_));\n+373 if (lf._\bb_\bo_\bu_\bn_\bd())\n+374 dlf.bind(lf._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt());\n+375 return dlf;\n+376 }\n+377\n+378 private:\n+379 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n+380 };\n+381\n+383 template\n+_\b3_\b8_\b4 _\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_T && basis, V_T && coefficients, NTRE_T&&\n+nodeToRangeEntry)\n+385 : _\bB_\ba_\bs_\be(std::make_shared(Data{{basis.gridView()}, wrap_or_move(std::\n+forward(basis)), wrap_or_move(std::forward(coefficients)),\n+wrap_or_move(std::forward(nodeToRangeEntry))}))\n+386 {}\n+387\n+_\b3_\b8_\b9 _\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(std::shared_ptr basis, std::\n+shared_ptr coefficients, std::shared_ptr nodeToRangeEntry)\n+390 : _\bB_\ba_\bs_\be(std::make_shared(Data{{basis->gridView()}, basis,\n+coefficients, nodeToRangeEntry}))\n+391 {}\n+392\n+_\b3_\b9_\b8 _\bR_\ba_\bn_\bg_\be operator() (const _\bD_\bo_\bm_\ba_\bi_\bn& x) const\n+399 {\n+400 HierarchicSearch search(this->data_->basis->gridView().grid(), this->data_-\n+>basis->gridView().indexSet());\n+401\n+402 const auto e = search.findEntity(x);\n+403 auto localThis = localFunction(*this);\n+404 localThis.bind(e);\n+405 return localThis(e.geometry().local(x));\n+406 }\n+407\n+_\b4_\b0_\b9 friend _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\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>\n+_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\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& f)\n+410 {\n+411 return _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\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>\n+(f._\bd_\ba_\bt_\ba_\b_);\n+412 }\n+413\n+_\b4_\b2_\b2 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 _\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& t)\n+423 {\n+424 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(t);\n+425 }\n+426};\n+427\n+428\n+453template\n+_\b4_\b5_\b4auto _\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(B&& basis, V&& vector)\n+455{\n+456 using _\bB_\ba_\bs_\bi_\bs = std::decay_t;\n+457 using NTREM = _\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+458\n+459 // Small helper functions to wrap vectors using istlVectorBackend\n+460 // if they do not already satisfy the VectorBackend interface.\n+461 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {\n+462 if constexpr (models, decltype(v)>()) {\n+463 return std::forward(v);\n+464 } else {\n+465 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n+466 }\n+467 };\n+468\n+469 using _\bV_\be_\bc_\bt_\bo_\br = std::decay_t\n+(vector)))>;\n+470 return _\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<_\bB_\ba_\bs_\bi_\bs_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b,_\b _\bN_\bT_\bR_\bE_\bM_\b,_\b _\bR_\b>(\n+471 std::forward(basis),\n+472 toConstVectorBackend(std::forward(vector)),\n+473 _\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+474}\n+475\n+476\n+491template\n+_\b4_\b9_\b2class _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+493 : public _\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be\n+494{\n+495 using _\bB_\ba_\bs_\be = _\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\bG_\bB_\bF_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b,\n+_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\bG_\bB_\bF_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\bG_\bB_\bF_\b:_\b:_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by_\b>;\n+496 using Data = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba;\n+497\n+498public:\n+_\b4_\b9_\b9 using _\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 = DGBF;\n+500\n+_\b5_\b0_\b1 using _\bB_\ba_\bs_\bi_\bs = typename _\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs;\n+_\b5_\b0_\b2 using _\bV_\be_\bc_\bt_\bo_\br = typename _\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br;\n+503\n+_\b5_\b0_\b4 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n+_\b5_\b0_\b5 using _\bR_\ba_\bn_\bg_\be = typename _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be\n+_\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:_\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_\b>_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n+506\n+_\b5_\b0_\b7 using _\bT_\br_\ba_\bi_\bt_\bs = Imp::GridFunctionTraits<_\bR_\ba_\bn_\bg_\be(_\bD_\bo_\bm_\ba_\bi_\bn), typename _\bB_\ba_\bs_\be_\b:_\b:\n+_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt, _\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+508\n+509private:\n+510\n+511 template\n+512 using LocalBasisRange = typename Node::FiniteElement::Traits::\n+LocalBasisType::Traits::JacobianType;\n+513 template\n+514 using NodeData = typename std::vector< LocalBasisRange >;\n+515 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer;\n+516\n+517public:\n+518\n+_\b5_\b2_\b6 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+527 : public _\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+528 {\n+529 using LocalBase = typename _\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be;\n+530 using size_type = typename Base::Tree::size_type;\n+531 using LocalBase::nodeToRangeEntry;\n+532\n+533 public:\n+_\b5_\b3_\b4 using _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn = _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be;\n+_\b5_\b3_\b5 using _\bD_\bo_\bm_\ba_\bi_\bn = typename LocalBase::Domain;\n+_\b5_\b3_\b6 using _\bR_\ba_\bn_\bg_\be = _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n+_\b5_\b3_\b7 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename LocalBase::Element;\n+538\n+_\b5_\b4_\b0 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bG_\bl_\bo_\bb_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& globalFunction)\n+541 : LocalBase(globalFunction.data_)\n+542 , evaluationBuffer_(this->localView_.tree())\n+543 {\n+544 /* Nothing. */\n+545 }\n+546\n+_\b5_\b5_\b3 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n+554 {\n+555 LocalBase::bind(element);\n+556 geometry_.emplace(element.geometry());\n+557 }\n+558\n+_\b5_\b6_\b0 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+561 {\n+562 geometry_.reset();\n+563 LocalBase::unbind();\n+564 }\n+565\n+_\b5_\b7_\b9 _\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+580 {\n+581 _\bR_\ba_\bn_\bg_\be y;\n+582 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(y) = 0;\n+583\n+584 const auto& jacobianInverse = geometry_->jacobianInverse(x);\n+585\n+586 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&&\n+treePath) {\n+587 const auto& fe = node.finiteElement();\n+588 const auto& localBasis = fe.localBasis();\n+589 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];\n+590\n+591 localBasis.evaluateJacobian(x, shapeFunctionJacobians);\n+592\n+593 // Compute linear combinations of basis function jacobian.\n+594 // Non-scalar coefficients of dimension coeffDim are handled by\n+595 // processing the coeffDim linear combinations independently\n+596 // and storing them as entries of an array.\n+597 using RefJacobian = LocalBasisRange< std::decay_t >;\n+598 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n+[node.localIndex(0)]).size())::value;\n+599 auto refJacobians = std::array{};\n+600 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(refJacobians) = 0;\n+601 for (size_type i = 0; i < localBasis.size(); ++i)\n+602 {\n+603 auto c = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(this->localDoFs_[node.localIndex(i)]);\n+604 for (std::size_t j = 0; j < coeffDim; ++j)\n+605 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);\n+606 }\n+607\n+608 // Transform Jacobians form local to global coordinates.\n+609 using Jacobian = decltype(refJacobians[0] * jacobianInverse);\n+610 auto jacobians = std::array{};\n+611 std::transform(\n+612 refJacobians.begin(), refJacobians.end(), jacobians.begin(),\n+613 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });\n+614\n+615 // Assign computed Jacobians to node entry of range.\n+616 // Types are matched using the lexicographic ordering provided by\n+flatVectorView.\n+617 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);\n+618 });\n+619\n+620 return y;\n+621 }\n+622\n+_\b6_\b2_\b4 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 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn&)\n+625 {\n+626 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n+627 }\n+628\n+629 private:\n+630 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n+631 std::optional geometry_;\n+632 };\n+633\n+_\b6_\b4_\b0 _\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const std::shared_ptr&\n+data)\n+641 : _\bB_\ba_\bs_\be(data)\n+642 {\n+643 /* Nothing. */\n+644 }\n+645\n+_\b6_\b5_\b1 _\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+652 {\n+653 HierarchicSearch search(this->data_->basis->gridView().grid(), this->data_-\n+>basis->gridView().indexSet());\n+654\n+655 const auto e = search.findEntity(x);\n+656 auto localThis = localFunction(*this);\n+657 localThis.bind(e);\n+658 return localThis(e.geometry().local(x));\n+659 }\n+660\n+_\b6_\b6_\b1 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+_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be& f)\n+662 {\n+663 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n+664 }\n+665\n+_\b6_\b6_\b7 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\n+_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be& f)\n+668 {\n+669 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(f);\n+670 }\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 _\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+_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\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+_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\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+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:_\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_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw\n+auto flatVectorView(T &t)\n+Create flat vector view of passed mutable container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn flatvectorview.hh:183\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:_\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:_\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:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:34\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bd_\ba_\bt_\ba_\b_\n+std::shared_ptr< const Data > data_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:223\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bd_\bo_\bf_\bs\n+const Vector & dofs() const\n+Return the coefficients of this discrete function by reference.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:205\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs\n+B Basis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bT_\br_\be_\be\n+typename Basis::LocalView::Tree Tree\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:45\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n+V Vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:37\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\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 discreteglobalbasisfunction.hh:51\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\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 discreteglobalbasisfunction.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by\n+const NodeToRangeEntry & nodeToRangeEntry() const\n+Return the stored node-to-range map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:211\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by\n+NTRE NodeToRangeEntry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:46\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:\n+_\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_\bB_\ba_\bs_\be\n+DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:190\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw\n+typename Basis::GridView GridView\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:43\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bb_\ba_\bs_\bi_\bs\n+const Basis & basis() const\n+Return a const reference to the stored basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:199\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\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 discreteglobalbasisfunction.hh:44\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+const EntitySet & entitySet() const\n+Get associated set of entities the local-function can be bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:217\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\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 discreteglobalbasisfunction.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt\n+Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename\n+Basis::MultiIndex >()])> Coefficient\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:41\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:59\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+EntitySet entitySet\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba_\b:_\b:\n+_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by\n+std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:63\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba_\b:_\b:_\bb_\ba_\bs_\bi_\bs\n+std::shared_ptr< const Basis > basis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:61\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba_\b:_\b:_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n+std::shared_ptr< const Vector > coefficients\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+LocalFunctionBase & operator=(const LocalFunctionBase &other)\n+Copy-assignment of the local-function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:106\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bb_\bo_\bu_\bn_\bd\n+bool bound() const\n+Check if LocalFunction is already bound to an element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:155\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bb_\bi_\bn_\bd\n+void bind(const Element &element)\n+Bind LocalFunction to grid element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename EntitySet::Element Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt\n+const Element & localContext() const\n+Return the element the local-function is bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:161\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+LocalFunctionBase(const LocalFunctionBase &other)\n+Copy-construct the local-function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:90\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_\n+std::vector< Coefficient > localDoFs_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:186\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\ba_\bs_\bs_\bi_\bg_\bn_\bW_\bi_\bt_\bh\n+void assignWith(To &to, const From &from) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bd_\ba_\bt_\ba_\b_\n+std::shared_ptr< const Data > data_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:184\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by\n+decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath,\n+Range &y) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:179\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_\n+LocalView localView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:185\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bu_\bn_\bb_\bi_\bn_\bd\n+void unbind()\n+Unbind the local-function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:149\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bD_\bo_\bm_\ba_\bi_\bn\n+LocalDomain Domain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bm_\bp_\bl_\bD_\bo_\bc_\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_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+LocalFunctionBase(const std::shared_ptr< const Data > &data)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:77\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+Derivative of a DiscreteGlobalBasisFunction\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:494\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs\n+typename Base::Basis Basis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:501\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend Traits::DerivativeInterface derivative(const\n+DiscreteGlobalBasisFunctionDerivative &f)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:661\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+Range operator()(const Domain &x) const\n+Evaluate the discrete grid-function derivative in global coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:651\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::\n+DerivativeInterface >::Range Range\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:505\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative\n+&f)\n+Construct local function from a DiscreteGlobalBasisFunctionDerivative\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:667\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:\n+_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data >\n+&data)\n+create object from DiscreateGlobalBasisFunction data\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:640\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:\n+_\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+DGBF DiscreteGlobalBasisFunction\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:499\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n+typename Base::Vector Vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:502\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bT_\br_\ba_\bi_\bt_\bs\n+Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet,\n+DefaultDerivativeTraits, 16 > Traits\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:507\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n+typename Base::Domain Domain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:504\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\n+A grid function induced by a global basis and a coefficient vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:281\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:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >\n+derivative(const DiscreteGlobalBasisFunction &f)\n+Derivative of the DiscreteGlobalBasisFunction\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:409\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:_\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+DiscreteGlobalBasisFunction(B_T &&basis, V_T &&coefficients, NTRE_T\n+&&nodeToRangeEntry)\n+Create a grid-function, by wrapping the arguments in std::shared_ptr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:384\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:_\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+DiscreteGlobalBasisFunction(std::shared_ptr< const Basis > basis, std::\n+shared_ptr< const V > coefficients, std::shared_ptr< const typename Base::\n+NodeToRangeEntry > nodeToRangeEntry)\n+Create a grid-function, by moving the arguments in std::shared_ptr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:389\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:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)\n+Construct local function from a DiscreteGlobalBasisFunction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:422\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:_\bB_\ba_\bs_\bi_\bs\n+typename Base::Basis Basis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:286\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:_\bT_\br_\ba_\bi_\bt_\bs\n+Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet,\n+DefaultDerivativeTraits, 16 > Traits\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:292\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:_\bR_\ba_\bn_\bg_\be\n+R Range\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:290\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:_\bV_\be_\bc_\bt_\bo_\br\n+typename Base::Vector Vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:287\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:_\bD_\bo_\bm_\ba_\bi_\bn\n+typename Base::Domain Domain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:289\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:_\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 discreteglobalbasisfunction.hh:305\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+GlobalFunction::Range Range\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:314\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n+typename LocalBase::Domain Domain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:313\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)\n+Create a local-function from the associated grid-function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:318\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::\n+LocalFunction derivative(const LocalFunction &lf)\n+Local function of the derivative.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:370\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:_\bL_\bo_\bc_\ba_\bl_\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+Evaluate this local-function in coordinates x in the bound element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:334\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:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename LocalBase::Element Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:315\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+local function evaluating the derivative in reference coordinates\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:528\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br\n+_\b(_\b)\n+Range operator()(const Domain &x) const\n+Evaluate this local-function in coordinates x in the bound element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:579\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n+typename LocalBase::Domain Domain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:535\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename LocalBase::Element Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:537\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const\n+LocalFunction &)\n+Not implemented.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:624\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+GlobalFunction::Range Range\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:536\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bu_\bn_\bb_\bi_\bn_\bd\n+void unbind()\n+Unbind the local-function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:560\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:\n+_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+LocalFunction(const GlobalFunction &globalFunction)\n+Create a local function from the associated grid function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:540\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &element)\n+Bind LocalFunction to grid element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:553\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+_\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+_\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/a00080.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00080.html", "unified_diff": "@@ -80,17 +80,17 @@\n
    composedgridfunction.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 <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 \n \n \n \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": "@@ -92,17 +92,17 @@\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
    15
    \n-\n-\n-\n+\n+\n+\n
    19
    \n
    20
    \n
    21namespace Dune {
    \n
    22namespace Functions {
    \n
    23
    \n
    24
    \n
    25
    \n@@ -259,17 +259,17 @@\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+\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 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"}, {"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: gridviewentityset.hh File Reference\n+dune-functions: localderivativetraits.hh File Reference\n \n \n \n \n \n \n \n@@ -72,25 +72,29 @@\n
  • dune
  • functions
  • gridfunctions
  • \n \n \n
    \n \n-
    gridviewentityset.hh File Reference
    \n+
    localderivativetraits.hh File Reference
    \n
    \n

    \n Classes

    class  Dune::Functions::ComposedGridFunction< OF, IF >
     Composition of grid functions with another function. More...
    \n \n-\n-\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...
    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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,20 +2,26 @@\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+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 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+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+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 \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/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: gridviewentityset.hh Source File\n+dune-functions: localderivativetraits.hh Source File\n \n \n \n \n \n \n \n@@ -74,123 +74,72 @@\n \n \n \n
    \n-
    gridviewentityset.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_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n
    9
    \n-
    10#include <memory>
    \n-
    11
    \n+
    10
    \n+\n
    12
    \n-
    13namespace Dune {
    \n-
    14
    \n+
    13
    \n+
    14namespace Dune {
    \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-
    39 typedef typename Element::Geometry::LocalCoordinate LocalCoordinate;
    \n-
    40 typedef typename Element::Geometry::GlobalCoordinate GlobalCoordinate;
    \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-\n-
    43
    \n-
    45 typedef typename GridView::template Codim<codim>::Iterator const_iterator;
    \n-
    46
    \n-\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-
    \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+
    50}} // namespace Dune::Functions
    \n+
    51
    \n+
    52#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n+\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+
    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,146 +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 * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-gridviewentityset.hh\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_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_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\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-13namespace _\bD_\bu_\bn_\be {\n-14\n+13\n+14namespace _\bD_\bu_\bn_\be {\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-_\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+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-_\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+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-_\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+50}} // namespace Dune::Functions\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 _\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:_\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/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: localderivativetraits.hh File Reference\n+dune-functions: gridfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -72,29 +72,35 @@\n
  • dune
  • functions
  • gridfunctions
  • \n \n \n
    \n \n-
    localderivativetraits.hh File Reference
    \n+
    gridfunction.hh File Reference
    \n
    \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
    \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::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize >
     
    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< Signature >
     
    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< R(LocalDomain)>
    class  Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >
     Wrapper class for functions defined on a Grid. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,26 +2,32 @@\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+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 _\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_\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-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_\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 ===============================================================================\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: localderivativetraits.hh Source File\n+dune-functions: gridfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,72 +74,179 @@\n \n \n \n
    \n-
    localderivativetraits.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_LOCALDERIVATIVE_TRAITS_HH
    \n-
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n+
    8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n
    9
    \n-
    10
    \n-\n-
    12
    \n+
    10#include <type_traits>
    \n+
    11
    \n+
    12#include <dune/common/typeutilities.hh>
    \n
    13
    \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-
    47};
    \n-
    \n-
    48
    \n-
    49
    \n-
    50}} // namespace Dune::Functions
    \n-
    51
    \n-
    52#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n-\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+
    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+
    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+
    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
    Definition polynomial.hh:17
    \n-
    Dummy range class to be used if no proper type is available.
    Definition defaultderivativetraits.hh:27
    \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-
    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,77 +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-localderivativetraits.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_LOCALDERIVATIVE_TRAITS_HH\n-8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n+7#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+8#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_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-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-51\n-52#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\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+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+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+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+_\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 _\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+_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\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 _\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_\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:_\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/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: istlvectorbackend.hh File Reference\n+dune-functions: hierarchicallagrangebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -65,61 +65,65 @@\n \n \n \n \n \n \n \n
    \n \n-
    istlvectorbackend.hh File Reference
    \n+
    hierarchicallagrangebasis.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+
    #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 Namespaces

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

    \n+Classes

    class  Dune::Functions::HierarchicalLagrangePreBasis< GV, 1, R >
     
    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-\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.
     
    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,44 +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- * _\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+ * _\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-#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+#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:_\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+\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-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+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/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: istlvectorbackend.hh Source File\n+dune-functions: hierarchicallagrangebasis.hh Source File\n \n \n \n \n \n \n \n@@ -70,352 +70,132 @@\n \n \n \n \n \n \n \n
    \n-
    istlvectorbackend.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_ISTLVECTORBACKEND_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n
    9
    \n-
    10#include <cstddef>
    \n-
    11#include <utility>
    \n-
    12#include <type_traits>
    \n+
    10#include <type_traits>
    \n+
    11
    \n+
    12#include <dune/common/exceptions.hh>
    \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+
    14#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>
    \n+
    15
    \n+\n+\n+\n+
    19
    \n+
    20#include <dune/geometry/type.hh>
    \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+
    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+
    \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-
    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+
    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 template<class C>
    \n-
    116 using resizeMethod_t = decltype(std::declval<C>().resize(0));
    \n+
    115 } // end namespace Functions
    \n+
    116} // end namespace Dune
    \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+
    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-
    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+
    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,372 +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- * _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs\n-istlvectorbackend.hh\n+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\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_ISTLVECTORBACKEND_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_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#include \n+10#include \n+11\n+12#include \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+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-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+22namespace _\bD_\bu_\bn_\be {\n+23 namespace Functions {\n+24\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+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-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+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 template\n-116 using resizeMethod_t = decltype(std::declval().resize(0));\n+115 } // end namespace Functions\n+116} // end namespace Dune\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+118#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\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+_\bn_\bo_\bd_\be_\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:_\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:_\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/a00095.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00095.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: hierarchicnodetorangemap.hh File Reference\n+dune-functions: subspacebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,38 +71,55 @@\n \n \n \n
    \n \n-
    hierarchicnodetorangemap.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    subspacebasis.hh File Reference
    \n \n
    \n-
    #include <utility>
    \n-#include <type_traits>
    \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-#include <dune/functions/common/indexaccess.hh>
    \n
    \n

    Go to the source code of this file.

    \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::SubspaceBasis< RB, TP >
     
    \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+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)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +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\n-hierarchicnodetorangemap.hh File Reference\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+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-#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-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:_\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+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+\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/a00095_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00095_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: subspacebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,76 +74,210 @@\n \n \n
    \n
    \n-
    hierarchicnodetorangemap.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_HIERARCHICNODETORANGEMAP_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n
    9
    \n-
    10
    \n-
    11#include <utility>
    \n-
    12#include <type_traits>
    \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/common/concept.hh>
    \n-
    15
    \n+\n+\n \n-\n+
    17
    \n
    18
    \n-
    19namespace Dune {
    \n-
    20namespace Functions {
    \n-
    21
    \n+
    19
    \n+
    20namespace Dune {
    \n+
    21namespace Functions {
    \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+
    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+
    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-
    48};
    \n+
    70
    \n+
    76 template<class RootRootBasis, class InnerTP, class OuterTP>
    \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+
    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+
    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+
    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-
    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+
    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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,82 +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-hierarchicnodetorangemap.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_HIERARCHICNODETORANGEMAP_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_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+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#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+17\n 18\n-19namespace _\bD_\bu_\bn_\be {\n-20namespace Functions {\n-21\n+19\n+20namespace _\bD_\bu_\bn_\be {\n+21namespace Functions {\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+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+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-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+_\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+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 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+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+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:_\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+_\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 _\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/a00098.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00098.html", "unified_diff": "@@ -77,15 +77,15 @@\n Classes |\n Namespaces |\n Functions
    \n
    leafprebasismappermixin.hh File Reference
    \n
    \n
    \n
    #include <dune/common/rangeutilities.hh>
    \n-#include <dune/functions/functionspacebases/leafprebasismixin.hh>
    \n+#include <dune/functions/functionspacebases/leafprebasismixin.hh>
    \n #include <dune/geometry/referenceelements.hh>
    \n #include <dune/grid/common/mcmgmapper.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html", "unified_diff": "@@ -88,15 +88,15 @@\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_LEAFPREBASISMAPPERMIXIN_HH
    \n
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMAPPERMIXIN_HH
    \n
    9
    \n
    10#include <dune/common/rangeutilities.hh>
    \n
    11
    \n-\n+\n
    13
    \n
    14#include <dune/geometry/referenceelements.hh>
    \n
    15
    \n
    16#include <dune/grid/common/mcmgmapper.hh>
    \n
    17
    \n
    18
    \n
    19
    \n@@ -211,15 +211,15 @@\n \n
    136
    \n
    137
    \n
    138
    \n
    139} // end namespace Dune::Functions
    \n
    140
    \n
    141#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMAPPERMIXIN_HH
    \n-\n+\n
    Definition polynomial.hh:18
    \n
    auto subIndexRange(const Dune::MultipleCodimMultipleGeomTypeMapper< GridView > &mapper, const typename GridView::template Codim< 0 >::Entity &element, const LocalCoefficients &localCoefficients)
    Definition leafprebasismappermixin.hh:31
    \n
    A generic MixIn class for PreBasis with flat indices computed from a mapper.
    Definition leafprebasismappermixin.hh:62
    \n
    const GridView & gridView() const
    Export the stored GridView.
    Definition leafprebasismappermixin.hh:95
    \n
    size_type dimension() const
    Return total number of basis functions.
    Definition leafprebasismappermixin.hh:108
    \n
    std::size_t maxNodeSize_
    Definition leafprebasismappermixin.hh:134
    \n
    Dune::MultipleCodimMultipleGeomTypeMapper< GridView > mapper_
    Definition leafprebasismappermixin.hh:133
    \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: 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 Classes

    \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/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: 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+_\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+_\bn_\bo_\bd_\be_\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:_\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/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: rannacherturekbasis.hh File Reference\n+dune-functions: leafprebasismixin.hh File Reference\n \n \n \n \n \n \n \n@@ -71,61 +71,37 @@\n \n
    \n
    \n
    \n \n-
    rannacherturekbasis.hh File Reference
    \n+Namespaces
    \n+
    leafprebasismixin.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 <cassert>
    \n+#include <cstddef>
    \n+#include <type_traits>
    \n+#include <dune/functions/functionspacebases/containerdescriptors.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::RannacherTurekPreBasis< GV >
     Pre-basis for a Rannacher-Turek basis. More...
     
    class  Dune::Functions::RannacherTurekNode< GV >
    class  Dune::Functions::LeafPreBasisMixin< Derived >
     A generic MixIn class for PreBasis. 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::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,44 +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 * _\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\n+leafprebasismixin.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_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\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:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bD_\be_\br_\bi_\bv_\be_\bd_\b _\b>\n+\u00a0 A generic MixIn class for PreBasis. _\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:_\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/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: rannacherturekbasis.hh Source File\n+dune-functions: leafprebasismixin.hh Source File\n \n \n \n \n \n \n \n@@ -74,268 +74,95 @@\n \n \n
    \n
    \n-
    rannacherturekbasis.hh
    \n+
    leafprebasismixin.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_LEAFPREBASISMIXIN_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_HH
    \n
    9
    \n-
    10#include <dune/common/exceptions.hh>
    \n-
    11
    \n-
    12#include <dune/grid/common/capabilities.hh>
    \n+
    10#include <cassert>
    \n+
    11#include <cstddef>
    \n+
    12#include <type_traits>
    \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+
    15
    \n+
    16namespace Dune::Functions {
    \n
    17
    \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-
    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+
    34template<class Derived>
    \n+
    \n+\n+
    36{
    \n+
    37public:
    \n+
    39 using size_type = std::size_t;
    \n+
    40
    \n+
    42 static constexpr size_type maxMultiIndexSize = 1;
    \n+
    43
    \n+
    45 static constexpr size_type minMultiIndexSize = 1;
    \n+
    46
    \n+
    48 static constexpr size_type multiIndexBufferSize = 1;
    \n+
    49
    \n+
    51 template<class SizePrefix,
    \n+
    52 decltype(std::declval<SizePrefix>().size(), bool{}) = true>
    \n+
    \n+
    53 size_type size(const SizePrefix& prefix) const
    \n+
    54 {
    \n+
    55 assert(prefix.size() == 0 || prefix.size() == 1);
    \n+
    56 return (prefix.size() == 0) ? derived().dimension() : 0;
    \n+
    57 }
    \n+
    \n+
    58
    \n+
    \n+\n+
    61 {
    \n+
    62 return derived().dimension();
    \n+
    63 }
    \n+
    \n+
    64
    \n+
    \n+\n+
    67 {
    \n+\n+
    69 }
    \n+
    \n+
    70
    \n+
    71private:
    \n+
    72 const Derived& derived() const
    \n+
    73 {
    \n+
    74 return static_cast<const Derived&>(*this);
    \n+
    75 }
    \n+
    76};
    \n+
    \n+
    77
    \n+
    78
    \n+
    79} // end namespace Dune::Functions
    \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-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:50
    \n+
    81
    \n+
    82#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_HH
    \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
    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+
    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+
    size_type size() const
    Get the total dimension of the space spanned by this basis.
    Definition leafprebasismixin.hh:60
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition leafprebasismixin.hh:39
    \n+
    static constexpr size_type multiIndexBufferSize
    Size required temporarily when constructing global multi-indices.
    Definition leafprebasismixin.hh:48
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,317 +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-rannacherturekbasis.hh\n+leafprebasismixin.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_LEAFPREBASISMIXIN_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_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/_\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+15\n+16namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\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-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-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+34template\n+_\b3_\b5class _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n+36{\n+37public:\n+_\b3_\b9 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+40\n+_\b4_\b2 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 = 1;\n+43\n+_\b4_\b5 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 = 1;\n+46\n+_\b4_\b8 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 = 1;\n+49\n+51 template().size(), bool{}) = true>\n+_\b5_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+54 {\n+55 assert(prefix.size() == 0 || prefix.size() == 1);\n+56 return (prefix.size() == 0) ? derived().dimension() : 0;\n+57 }\n+58\n+_\b6_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+61 {\n+62 return derived().dimension();\n+63 }\n+64\n+_\b6_\b6 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n+67 {\n+68 return _\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{_\bs_\bi_\bz_\be()};\n+69 }\n+70\n+71private:\n+72 const Derived& derived() const\n+73 {\n+74 return static_cast(*this);\n+75 }\n+76};\n+77\n+78\n+79} // end namespace Dune::Functions\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-_\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-_\bn_\bo_\bd_\be_\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_\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:_\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+81\n+82#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_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+_\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_\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:_\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:_\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:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\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+Minimal length of global multi-indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:45\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:_\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 a flat container-descriptor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:66\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:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n+static constexpr size_type maxMultiIndexSize\n+Maximal length of global multi-indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:42\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\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+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:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:39\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:_\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+Size required temporarily when constructing global multi-indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.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/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: bsplinebasis.hh File Reference\n+dune-functions: sizeinfo.hh File Reference\n \n \n \n \n \n \n \n@@ -72,80 +72,41 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    bsplinebasis.hh File Reference
    \n+
    sizeinfo.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/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-\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::BSplineNode< GV >
    class  Dune::Functions::SizeInfo< B >
     A class encapsulating size information. 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::BSplineBasis = DefaultGlobalBasis< BSplinePreBasis< GV > >
     A global B-spline basis.
     
    \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<class Basis >
    SizeInfo< Basis > Dune::Functions::sizeInfo (const Basis &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": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,65 +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-bsplinebasis.hh File Reference\n-The B-spline global function space basis. _\bM_\bo_\br_\be_\b._\b._\b.\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-#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:_\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+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:_\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-\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+_\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-*\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/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: bsplinebasis.hh Source File\n+dune-functions: sizeinfo.hh Source File\n \n \n \n \n \n \n \n@@ -74,1284 +74,104 @@\n \n \n \n
    \n-
    bsplinebasis.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+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_SIZEINFO_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n
    9
    \n-
    14#include <array>
    \n-
    15#include <numeric>
    \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-
    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-
    39
    \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
    40
    \n-
    49template<class GV, class R>
    \n-
    \n-\n-
    51{
    \n-
    52 friend class BSplineLocalFiniteElement<GV,R>;
    \n-
    53
    \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-
    \n-\n-\n-
    68 : preBasis_(preBasis),
    \n-
    69 lFE_(lFE)
    \n-
    70 {}
    \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-
    \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-
    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-
    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-
    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-
    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+
    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
    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-
    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+
    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,1476 +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-bsplinebasis.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-_\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_SIZEINFO_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n 9\n-14#include \n-15#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-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-39\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 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 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-_\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+_\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-_\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\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; 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 // 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-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-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-_\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-_\bn_\bo_\bd_\be_\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:_\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+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 _\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-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+_\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 ===============================================================================\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/a00110.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00110.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: nedelecbasis.hh File Reference\n+dune-functions: subentitydofs.hh File Reference\n \n \n \n \n \n \n \n@@ -72,61 +72,51 @@\n
  • dune
  • functions
  • functionspacebases
  • \n
    \n
    \n
    \n \n-
    nedelecbasis.hh File Reference
    \n+
    subentitydofs.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 <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 Classes

    class  Dune::Functions::NedelecPreBasis< GV, Range, kind, order >
     
    class  Dune::Functions::NedelecNode< GV, Range, kind, order >
    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::BasisFactory
     
    \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.
     
    \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 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": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +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-nedelecbasis.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+_\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 _\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-\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+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:_\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:_\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-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:_\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/a00110_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00110_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: subentitydofs.hh Source File\n \n \n \n \n \n \n \n@@ -74,398 +74,174 @@\n \n \n
    \n
    \n-
    nedelecbasis.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_NEDELECBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_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 <dune/common/exceptions.hh>
    \n-
    12
    \n-
    13#include <dune/grid/common/capabilities.hh>
    \n-
    14#include <dune/grid/common/mcmgmapper.hh>
    \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/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
    \n+
    17namespace Dune {
    \n+
    18namespace Functions {
    \n+
    19
    \n+
    20
    \n+
    21
    \n+
    44template<class GridView>
    \n+
    \n+\n+
    46{
    \n+
    47 static const int dim = GridView::dimension;
    \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 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-
    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-
    120
    \n-
    121
    \n-
    122} // namespace Impl
    \n-
    123
    \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+
    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-
    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+
    \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+
    \n+
    148
    \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-
    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+
    150
    \n+
    163template<class T>
    \n+
    \n+
    164auto subEntityDOFs(const T&)
    \n+
    165{
    \n+\n+
    167}
    \n+
    \n+
    168
    \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-
    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-
    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+
    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#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,481 +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-nedelecbasis.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_NEDELECBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_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\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\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\n+17namespace _\bD_\bu_\bn_\be {\n+18namespace Functions {\n+19\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-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 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-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-120\n-121\n-122} // namespace Impl\n-123\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+_\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-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+_\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+148\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-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+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 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-_\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-_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\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-_\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 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+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#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/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: flatvectorview.hh File Reference\n+dune-functions: dynamicpowerbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -70,48 +70,57 @@\n \n \n
    \n \n-
    flatvectorview.hh File Reference
    \n+
    dynamicpowerbasis.hh File Reference
    \n
    \n
    \n-
    #include <array>
    \n-#include <dune/common/concept.hh>
    \n-#include <dune/common/hybridutilities.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+Classes

    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-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class T >
    auto Dune::Functions::flatVectorView (T &t)
     Create flat vector view of passed mutable container.
     
    template<class T >
    auto Dune::Functions::flatVectorView (const T &t)
     Create flat vector view of passed const container.
     
    template<class T >
    auto Dune::Functions::flatVectorView (T &&t)
     Create flat vector view of passed container temporary.
     
    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,35 +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-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-flatvectorview.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/_\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_\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 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_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw (T &t)\n-\u00a0 Create flat vector view of passed mutable container.\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_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw (const T &t)\n-\u00a0 Create flat vector view of passed const container.\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_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw (T &&t)\n-\u00a0 Create flat vector view of passed container temporary.\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/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: flatvectorview.hh Source File\n+dune-functions: dynamicpowerbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,218 +74,512 @@\n \n \n
    \n
    \n-
    flatvectorview.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_FLATVECTORVIEW_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH
    \n
    9
    \n-
    10
    \n-
    11#include <array>
    \n-
    12
    \n-
    13#include <dune/common/concept.hh>
    \n-
    14#include <dune/common/hybridutilities.hh>
    \n-
    15#include <dune/common/indices.hh>
    \n-
    16
    \n-\n-
    18
    \n-
    19
    \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
    21
    \n-
    22namespace Dune {
    \n-
    23namespace Functions {
    \n-
    24namespace Impl {
    \n+
    22
    \n+
    23namespace Dune {
    \n+
    24namespace Functions {
    \n
    25
    \n
    26
    \n-
    27template<class V>
    \n-
    28struct FlatVectorBackend
    \n-
    29{
    \n-
    30
    \n-
    31 template<class VV, class Index,
    \n-
    32 std::enable_if_t< models<Concept::HasIndexAccess, VV, Index>(), int> = 0>
    \n-
    33 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n-
    34 {
    \n-
    35 return v[i];
    \n-
    36 }
    \n-
    37
    \n-
    38 template<class VV, class Index,
    \n-
    39 std::enable_if_t< not models<Concept::HasIndexAccess, VV, Index>(), int> = 0>
    \n-
    40 static decltype(auto) getEntry(VV&& v, const Index&)
    \n-
    41 {
    \n-
    42 return std::forward<VV>(v);
    \n-
    43 }
    \n-
    44
    \n-
    45 template<class VV,
    \n-
    46 std::enable_if_t< models<Concept::HasSizeMethod, VV>(), int> = 0>
    \n-
    47 static auto size(VV&& v)
    \n-
    48 {
    \n-
    49 return Dune::Hybrid::size(v);
    \n-
    50 }
    \n-
    51
    \n-
    52 template<class VV,
    \n-
    53 std::enable_if_t< not models<Concept::HasSizeMethod, VV>(), int>type = 0>
    \n-
    54 static auto size(VV&&)
    \n-
    55 {
    \n-
    56 return Dune::index_constant<1>{};
    \n-
    57 }
    \n-
    58};
    \n-
    59
    \n-
    60
    \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+
    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-
    62
    \n-
    63template<class K, int n, int m>
    \n-
    64struct FlatVectorBackend<typename Dune::FieldMatrix<K, n, m> >
    \n-
    65{
    \n-
    66
    \n-
    67 template<class VV, class Index>
    \n-
    68 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n-
    69 {
    \n-
    70 return v[i/m][i%m];
    \n-
    71 }
    \n-
    72
    \n-
    73 template<class VV>
    \n-
    74 static auto size(VV&& v)
    \n-
    75 {
    \n-
    76 return Dune::index_constant<n*m>{};
    \n-
    77 }
    \n-
    78};
    \n-
    79
    \n-
    80
    \n-
    81
    \n-
    82template<class K, std::size_t n>
    \n-
    83struct FlatVectorBackend< std::array<K, n> >
    \n-
    84{
    \n-
    85
    \n-
    86 template<class VV, class Index>
    \n-
    87 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n-
    88 {
    \n-
    89 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;
    \n-
    90 return FlatVectorBackend<K>::getEntry(v[i/innerSize], i%innerSize);
    \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-
    93 template<class VV>
    \n-
    94 static auto size(VV&& v)
    \n-
    95 {
    \n-
    96 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;
    \n-
    97 return Dune::index_constant<n*innerSize>{};
    \n-
    98 }
    \n-
    99
    \n-
    100};
    \n-
    101
    \n-
    102
    \n-
    103
    \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-
    105template<class T>
    \n-
    106class FlatVectorView
    \n-
    107{
    \n-
    108 using Backend = FlatVectorBackend<std::decay_t<T>>;
    \n-
    109public:
    \n-
    110 FlatVectorView(T& t) :
    \n-
    111 t_(&t)
    \n-
    112 {}
    \n-
    113
    \n-
    114 auto size() const
    \n-
    115 {
    \n-
    116 return Backend::size(*t_);
    \n-
    117 }
    \n-
    118
    \n-
    119 template<class Index>
    \n-
    120 decltype(auto) operator[](const Index& i) const
    \n-
    121 {
    \n-
    122 return Backend::getEntry(*t_, i);
    \n-
    123 }
    \n-
    124
    \n-
    125 template<class Index>
    \n-
    126 decltype(auto) operator[](const Index& i)
    \n-
    127 {
    \n-
    128 return Backend::getEntry(*t_, i);
    \n-
    129 }
    \n-
    130
    \n-
    131private:
    \n-
    132 T* t_;
    \n-
    133};
    \n-
    134
    \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-
    136template<class T>
    \n-
    137class FlatVectorView<T&&>
    \n-
    138{
    \n-
    139 using Backend = FlatVectorBackend<std::decay_t<T>>;
    \n-
    140public:
    \n-
    141 FlatVectorView(T&& t) :
    \n-
    142 t_(std::move(t))
    \n-
    143 {}
    \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 auto size() const
    \n-
    146 {
    \n-
    147 return Backend::size(t_);
    \n-
    148 }
    \n-
    149
    \n-
    150 template<class Index>
    \n-
    151 decltype(auto) operator[](const Index& i) const
    \n-
    152 {
    \n-
    153 return Backend::getEntry(t_, i);
    \n-
    154 }
    \n-
    155
    \n-
    156 template<class Index>
    \n-
    157 decltype(auto) operator[](const Index& i)
    \n-
    158 {
    \n-
    159 return Backend::getEntry(t_, i);
    \n-
    160 }
    \n-
    161
    \n-
    162private:
    \n-
    163 T t_;
    \n-
    164};
    \n-
    165
    \n-
    166} // namespace Impl
    \n-
    167
    \n-
    168
    \n-
    169
    \n-
    182template<class T>
    \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 return Impl::FlatVectorView<T>(t);
    \n-
    186}
    \n-
    \n-
    187
    \n-
    200template<class T>
    \n-
    \n-
    201auto flatVectorView(const T& t)
    \n-
    202{
    \n-
    203 return Impl::FlatVectorView<const T>(t);
    \n-
    204}
    \n-
    \n-
    205
    \n-
    218template<class T>
    \n-
    \n-
    219auto flatVectorView(T&& t)
    \n-
    220{
    \n-
    221 return Impl::FlatVectorView<T&&>(std::move(t));
    \n-
    222}
    \n-
    \n-
    223
    \n-
    224
    \n-
    225} // namespace Dune::Functions
    \n-
    226} // namespace Dune
    \n-
    227
    \n-
    228
    \n-
    229#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH
    \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-
    auto flatVectorView(T &t)
    Create flat vector view of passed mutable container.
    Definition flatvectorview.hh:183
    \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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,214 +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-flatvectorview.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_FLATVECTORVIEW_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_HH\n 9\n-10\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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-18\n-19\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 21\n-22namespace _\bD_\bu_\bn_\be {\n-23namespace Functions {\n-24namespace Impl {\n+22\n+23namespace _\bD_\bu_\bn_\be {\n+24namespace Functions {\n 25\n 26\n-27template\n-28struct FlatVectorBackend\n-29{\n-30\n-31 template(), int> = 0>\n-33 static decltype(auto) getEntry(VV&& v, const Index& i)\n-34 {\n-35 return v[i];\n-36 }\n-37\n-38 template(), int> =\n-0>\n-40 static decltype(auto) getEntry(VV&& v, const Index&)\n-41 {\n-42 return std::forward(v);\n-43 }\n-44\n-45 template(), int> = 0>\n-47 static auto size(VV&& v)\n-48 {\n-49 return Dune::Hybrid::size(v);\n-50 }\n-51\n-52 template(), int>type = 0>\n-54 static auto size(VV&&)\n-55 {\n-56 return Dune::index_constant<1>{};\n-57 }\n-58};\n-59\n-60\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+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-62\n-63template\n-64struct FlatVectorBackend >\n-65{\n-66\n-67 template\n-68 static decltype(auto) getEntry(VV&& v, const Index& i)\n-69 {\n-70 return v[i/m][i%m];\n-71 }\n-72\n-73 template\n-74 static auto size(VV&& v)\n-75 {\n-76 return Dune::index_constant{};\n-77 }\n-78};\n-79\n-80\n-81\n-82template\n-83struct FlatVectorBackend< std::array >\n-84{\n-85\n-86 template\n-87 static decltype(auto) getEntry(VV&& v, const Index& i)\n-88 {\n-89 const auto innerSize = decltype(FlatVectorBackend::size(v[0]))::value;\n-90 return FlatVectorBackend::getEntry(v[i/innerSize], i%innerSize);\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-93 template\n-94 static auto size(VV&& v)\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 const auto innerSize = decltype(FlatVectorBackend::size(v[0]))::value;\n-97 return Dune::index_constant{};\n-98 }\n-99\n-100};\n-101\n-102\n-103\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-105template\n-106class FlatVectorView\n-107{\n-108 using Backend = FlatVectorBackend>;\n-109public:\n-110 FlatVectorView(T& t) :\n-111 t_(&t)\n-112 {}\n-113\n-114 auto size() const\n-115 {\n-116 return Backend::size(*t_);\n-117 }\n-118\n-119 template\n-120 decltype(auto) operator[](const Index& i) const\n-121 {\n-122 return Backend::getEntry(*t_, i);\n-123 }\n-124\n-125 template\n-126 decltype(auto) operator[](const Index& i)\n-127 {\n-128 return Backend::getEntry(*t_, i);\n-129 }\n-130\n-131private:\n-132 T* t_;\n-133};\n-134\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-136template\n-137class FlatVectorView\n-138{\n-139 using Backend = FlatVectorBackend>;\n-140public:\n-141 FlatVectorView(T&& t) :\n-142 t_(std::move(t))\n-143 {}\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 auto size() const\n-146 {\n-147 return Backend::size(t_);\n-148 }\n-149\n-150 template\n-151 decltype(auto) operator[](const Index& i) const\n-152 {\n-153 return Backend::getEntry(t_, i);\n-154 }\n-155\n-156 template\n-157 decltype(auto) operator[](const Index& i)\n-158 {\n-159 return Backend::getEntry(t_, i);\n-160 }\n-161\n-162private:\n-163 T t_;\n-164};\n-165\n-166} // namespace Impl\n-167\n-168\n-169\n-182template\n-_\b1_\b8_\b3auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(T& t)\n-184{\n-185 return Impl::FlatVectorView(t);\n-186}\n-187\n-200template\n-_\b2_\b0_\b1auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(const T& t)\n-202{\n-203 return Impl::FlatVectorView(t);\n-204}\n-205\n-218template\n-_\b2_\b1_\b9auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(T&& t)\n-220{\n-221 return Impl::FlatVectorView(std::move(t));\n-222}\n-223\n-224\n-225} // namespace Dune::Functions\n-226} // namespace Dune\n-227\n-228\n-229#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\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+_\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+_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh\n+_\bn_\bo_\bd_\be_\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:_\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw\n-auto flatVectorView(T &t)\n-Create flat vector view of passed mutable container.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn flatvectorview.hh:183\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/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: hierarchicvectorwrapper.hh File Reference\n+dune-functions: lagrangedgbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,52 +72,59 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    hierarchicvectorwrapper.hh File Reference
    \n+
    lagrangedgbasis.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+
    #include <array>
    \n+#include <dune/common/exceptions.hh>
    \n+#include <dune/common/math.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n+#include <dune/functions/functionspacebases/lagrangebasis.hh>
    \n+#include <dune/functions/functionspacebases/leafprebasismixin.hh>
    \n
    \n

    Go to the source code of this file.

    \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::LagrangeDGPreBasis< 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+Typedefs

    template<typename GV , int k>
    using Dune::Functions::LagrangeDGNode = LagrangeNode< GV, k >
     
    template<typename GV , int k>
    using Dune::Functions::LagrangeDGBasis = DefaultGlobalBasis< LagrangeDGPreBasis< GV, k > >
     Basis of a scalar k-th-order Lagrangean-DG finite element space.
     
    \n \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)
     
    template<std::size_t k>
    auto Dune::Functions::BasisFactory::lagrangeDG ()
     Create a pre-basis factory that can create a LagrangeDG pre-basis.
     
    \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 | _\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+lagrangedgbasis.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_\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/_\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:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\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-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+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_\bD_\bG_\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be< GV, k >\n+\u00a0\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_\bD_\bG_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k > >\n+\u00a0 Basis of a scalar k-th-order Lagrangean-DG finite element space.\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+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_\bD_\bG ()\n+\u00a0 Create a pre-basis factory that can create a LagrangeDG 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/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: hierarchicvectorwrapper.hh Source File\n+dune-functions: lagrangedgbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,294 +74,291 @@\n \n \n
    \n
    \n-
    hierarchicvectorwrapper.hh
    \n+
    lagrangedgbasis.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_HIERARCHICVECTORWRAPPER_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_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+
    10#include <array>
    \n+
    11#include <dune/common/exceptions.hh>
    \n+
    12#include <dune/common/math.hh>
    \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+\n+\n+\n+\n+
    18
    \n+
    19
    \n+
    20
    \n+
    21
    \n+
    22namespace Dune {
    \n+
    23namespace Functions {
    \n+
    24
    \n+
    25
    \n
    26
    \n-
    27
    \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+
    27// *****************************************************************************
    \n+
    28// This is the reusable part of the basis. It contains
    \n+
    29//
    \n+
    30// LagrangeDGPreBasis
    \n+
    31// LagrangeDGNode
    \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, int k>
    \n+\n+
    40
    \n+
    41template<typename GV, int k>
    \n+
    \n+\n+
    43 public LeafPreBasisMixin< LagrangeDGPreBasis<GV,k> >
    \n+
    44{
    \n+
    45 static const int dim = GV::dimension;
    \n+
    46
    \n+
    47public:
    \n+
    48
    \n+
    50 using GridView = GV;
    \n+
    51 using size_type = std::size_t;
    \n
    52
    \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-
    61
    \n+
    54 // Precompute the number of dofs per entity type
    \n+
    55 const static int dofsPerEdge = k+1;
    \n+
    56 const static int dofsPerTriangle = (k+1)*(k+2)/2;
    \n+
    57 const static int dofsPerQuad = (k+1)*(k+1);
    \n+
    58 const static int dofsPerTetrahedron = (k+1)*(k+2)*(k+3)/6;
    \n+
    59 const static int dofsPerPrism = (k+1)*(k+1)*(k+2)/2;
    \n+
    60 const static int dofsPerHexahedron = (k+1)*(k+1)*(k+1);
    \n+
    61 const static int dofsPerPyramid = (k+1)*(k+2)*(2*k+3)/6;
    \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+\n+
    65
    \n+
    \n+\n+
    68 gridView_(gv)
    \n+
    69 {}
    \n+
    \n+
    70
    \n+
    71
    \n+
    \n+\n+
    73 {
    \n+
    74 switch (dim)
    \n+
    75 {
    \n+
    76 case 1:
    \n+
    77 {
    \n+
    78 break;
    \n+
    79 }
    \n+
    80 case 2:
    \n+
    81 {
    \n+
    82 quadrilateralOffset_ = dofsPerTriangle * gridView_.size(Dune::GeometryTypes::triangle);
    \n+
    83 break;
    \n+
    84 }
    \n+
    85 case 3:
    \n+
    86 {
    \n+
    87 prismOffset_ = dofsPerTetrahedron * gridView_.size(Dune::GeometryTypes::tetrahedron);
    \n+
    88
    \n+
    89 hexahedronOffset_ = prismOffset_ + dofsPerPrism * gridView_.size(Dune::GeometryTypes::prism);
    \n+
    90
    \n+
    91 pyramidOffset_ = hexahedronOffset_ + dofsPerHexahedron * gridView_.size(Dune::GeometryTypes::hexahedron);
    \n+
    92 break;
    \n+
    93 }
    \n+
    94 }
    \n+
    95 }
    \n+
    \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 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+
    \n+
    99 const GridView& gridView() const
    \n+
    100 {
    \n+
    101 return gridView_;
    \n+
    102 }
    \n+
    \n+
    103
    \n+
    \n+
    104 void update(const GridView& gv)
    \n+
    105 {
    \n+
    106 gridView_ = gv;
    \n+
    107 }
    \n+
    \n+
    108
    \n+
    \n+\n+
    113 {
    \n+
    114 return Node{};
    \n+
    115 }
    \n+
    \n+
    116
    \n+
    \n+\n+
    118 {
    \n+
    119 switch (dim)
    \n+
    120 {
    \n+
    121 case 1:
    \n+
    122 return dofsPerEdge*gridView_.size(0);
    \n+
    123 case 2:
    \n+
    124 {
    \n+
    125 return dofsPerTriangle*gridView_.size(Dune::GeometryTypes::triangle) + dofsPerQuad*gridView_.size(Dune::GeometryTypes::quadrilateral);
    \n+
    126 }
    \n+
    127 case 3:
    \n+
    128 {
    \n+
    129 return dofsPerTetrahedron*gridView_.size(Dune::GeometryTypes::tetrahedron)
    \n+
    130 + dofsPerPyramid*gridView_.size(Dune::GeometryTypes::pyramid)
    \n+
    131 + dofsPerPrism*gridView_.size(Dune::GeometryTypes::prism)
    \n+
    132 + dofsPerHexahedron*gridView_.size(Dune::GeometryTypes::hexahedron);
    \n+
    133 }
    \n+
    134 }
    \n+
    135 DUNE_THROW(Dune::NotImplemented, "No size method for " << dim << "d grids available yet!");
    \n+
    136 }
    \n+
    \n+
    137
    \n+
    \n+\n+
    139 {
    \n+
    140 return Dune::power(k+1, int(GV::dimension));
    \n+
    141 }
    \n+
    \n+
    142
    \n+
    143 template<typename It>
    \n+
    \n+
    144 It indices(const Node& node, It it) const
    \n+
    145 {
    \n+
    146 const auto& gridIndexSet = gridView().indexSet();
    \n+
    147 const auto& element = node.element();
    \n+
    148
    \n+
    149 size_type offset = 0;
    \n+
    150 if constexpr (dim==1)
    \n+
    151 offset = dofsPerEdge*gridIndexSet.subIndex(element,0,0);
    \n+
    152 else if constexpr (dim==2)
    \n+
    153 {
    \n+
    154 if (element.type().isTriangle())
    \n+
    155 offset = dofsPerTriangle*gridIndexSet.subIndex(element,0,0);
    \n+
    156 else if (element.type().isQuadrilateral())
    \n+
    157 offset = quadrilateralOffset_ + dofsPerQuad*gridIndexSet.subIndex(element,0,0);
    \n+
    158 else
    \n+
    159 DUNE_THROW(Dune::NotImplemented, "2d elements have to be triangles or quadrilaterals");
    \n+
    160 }
    \n+
    161 else if constexpr (dim==3)
    \n+
    162 {
    \n+
    163 if (element.type().isTetrahedron())
    \n+
    164 offset = dofsPerTetrahedron*gridIndexSet.subIndex(element,0,0);
    \n+
    165 else if (element.type().isPrism())
    \n+
    166 offset = prismOffset_ + dofsPerPrism*gridIndexSet.subIndex(element,0,0);
    \n+
    167 else if (element.type().isHexahedron())
    \n+
    168 offset = hexahedronOffset_ + dofsPerHexahedron*gridIndexSet.subIndex(element,0,0);
    \n+
    169 else if (element.type().isPyramid())
    \n+
    170 offset = pyramidOffset_ + dofsPerPyramid*gridIndexSet.subIndex(element,0,0);
    \n+
    171 else
    \n+
    172 DUNE_THROW(Dune::NotImplemented, "3d elements have to be tetrahedrons, prisms, hexahedrons or pyramids");
    \n+
    173 }
    \n+
    174 else
    \n+
    175 DUNE_THROW(Dune::NotImplemented, "No index method for " << dim << "d grids available yet!");
    \n+
    176 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n+
    177 *it = {offset + i};
    \n+
    178 return it;
    \n+
    179 }
    \n+
    \n+
    180
    \n+
    \n+
    182 unsigned int order() const
    \n+
    183 {
    \n+
    184 return k;
    \n+
    185 }
    \n+
    \n+
    186
    \n+
    187protected:
    \n+\n+
    189
    \n+\n+\n+\n+\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+
    196
    \n+
    197
    \n+
    198namespace BasisFactory {
    \n+
    199
    \n+
    207template<std::size_t k>
    \n+
    \n+\n+
    209{
    \n+
    210 return [](const auto& gridView) {
    \n+
    211 return LagrangeDGPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n+
    212 };
    \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+
    215} // end namespace BasisFactory
    \n+
    216
    \n+
    217
    \n+
    218
    \n+
    219// *****************************************************************************
    \n+
    220// This is the actual global basis implementation based on the reusable parts.
    \n+
    221// *****************************************************************************
    \n+
    222
    \n+
    230template<typename GV, int k>
    \n+\n+
    232
    \n+
    233
    \n+
    234
    \n+
    235} // end namespace Functions
    \n+
    236} // end namespace Dune
    \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+
    238
    \n+
    239#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \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-
    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+
    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+
    It indices(const Node &node, It it) const
    Definition lagrangedgbasis.hh:144
    \n+
    size_type maxNodeSize() const
    Definition lagrangedgbasis.hh:138
    \n+
    unsigned int order() const
    Polynomial order used in the local Lagrange finite-elements.
    Definition lagrangedgbasis.hh:182
    \n+
    void update(const GridView &gv)
    Definition lagrangedgbasis.hh:104
    \n+
    size_t hexahedronOffset_
    Definition lagrangedgbasis.hh:193
    \n+
    Node makeNode() const
    Create tree node.
    Definition lagrangedgbasis.hh:112
    \n+
    static const int dofsPerHexahedron
    Definition lagrangedgbasis.hh:60
    \n+
    LagrangeDGPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition lagrangedgbasis.hh:67
    \n+
    size_t pyramidOffset_
    Definition lagrangedgbasis.hh:191
    \n+
    static const int dofsPerTetrahedron
    Definition lagrangedgbasis.hh:58
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition lagrangedgbasis.hh:50
    \n+
    void initializeIndices()
    Definition lagrangedgbasis.hh:72
    \n+
    size_t quadrilateralOffset_
    Definition lagrangedgbasis.hh:190
    \n+
    static const int dofsPerEdge
    Definition lagrangedgbasis.hh:55
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition lagrangedgbasis.hh:99
    \n+
    static const int dofsPerQuad
    Definition lagrangedgbasis.hh:57
    \n+
    static const int dofsPerTriangle
    Definition lagrangedgbasis.hh:56
    \n+
    static const int dofsPerPyramid
    Definition lagrangedgbasis.hh:61
    \n+
    GridView gridView_
    Definition lagrangedgbasis.hh:188
    \n+
    std::size_t size_type
    Definition lagrangedgbasis.hh:51
    \n+
    size_type dimension() const
    Definition lagrangedgbasis.hh:117
    \n+
    size_t prismOffset_
    Definition lagrangedgbasis.hh:192
    \n+
    static const int dofsPerPrism
    Definition lagrangedgbasis.hh:59
    \n+
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n+
    size_type size() const
    Definition nodes.hh:147
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,320 +1,349 @@\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+lagrangedgbasis.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_HIERARCHICVECTORWRAPPER_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_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+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/_\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+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/_\bn_\bo_\bd_\be_\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/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\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/_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\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/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n+18\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\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+27/\n+/ *****************************************************************************\n+28// This is the reusable part of the basis. It contains\n+29//\n+30// LagrangeDGPreBasis\n+31// LagrangeDGNode\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+_\b3_\b9using _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b>;\n+40\n+41template\n+_\b4_\b2class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n+43 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< LagrangeDGPreBasis >\n+44{\n+45 static const int dim = GV::dimension;\n+46\n+47public:\n+48\n+_\b5_\b0 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b5_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n 52\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-61\n+54 // Precompute the number of dofs per entity type\n+_\b5_\b5 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be = k+1;\n+_\b5_\b6 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be = (k+1)*(k+2)/2;\n+_\b5_\b7 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bQ_\bu_\ba_\bd = (k+1)*(k+1);\n+_\b5_\b8 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn = (k+1)*(k+2)*(k+3)/6;\n+_\b5_\b9 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm = (k+1)*(k+1)*(k+2)/2;\n+_\b6_\b0 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn = (k+1)*(k+1)*(k+1);\n+_\b6_\b1 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd = (k+1)*(k+2)*(2*k+3)/6;\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+_\b6_\b4 using _\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b>;\n+65\n+_\b6_\b7 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n+68 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv)\n+69 {}\n+70\n+71\n+_\b7_\b2 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+73 {\n+74 switch (dim)\n+75 {\n+76 case 1:\n+77 {\n+78 break;\n+79 }\n+80 case 2:\n+81 {\n+82 _\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_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::\n+GeometryTypes::triangle);\n+83 break;\n+84 }\n+85 case 3:\n+86 {\n+87 _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n+tetrahedron);\n+88\n+89 _\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 * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::\n+GeometryTypes::prism);\n+90\n+91 _\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_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size\n+(Dune::GeometryTypes::hexahedron);\n+92 break;\n+93 }\n+94 }\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 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+_\b9_\b9 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+100 {\n+101 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+102 }\n+103\n+_\b1_\b0_\b4 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+105 {\n+106 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+107 }\n+108\n+_\b1_\b1_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+113 {\n+114 return _\bN_\bo_\bd_\be{};\n+115 }\n+116\n+_\b1_\b1_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+118 {\n+119 switch (dim)\n+120 {\n+121 case 1:\n+122 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0);\n+123 case 2:\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+125 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::triangle) +\n+_\bd_\bo_\bf_\bs_\bP_\be_\br_\bQ_\bu_\ba_\bd*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::quadrilateral);\n+126 }\n+127 case 3:\n+128 {\n+129 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::tetrahedron)\n+130 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::pyramid)\n+131 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::prism)\n+132 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::hexahedron);\n+133 }\n+134 }\n+135 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n+available yet!\");\n+136 }\n+137\n+_\b1_\b3_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+139 {\n+140 return Dune::power(k+1, int(GV::dimension));\n+141 }\n+142\n+143 template\n+_\b1_\b4_\b4 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\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 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+146 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n+147 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+148\n+149 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be offset = 0;\n+150 if constexpr (dim==1)\n+151 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be*gridIndexSet.subIndex(element,0,0);\n+152 else if constexpr (dim==2)\n+153 {\n+154 if (element.type().isTriangle())\n+155 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be*gridIndexSet.subIndex(element,0,0);\n+156 else if (element.type().isQuadrilateral())\n+157 offset = _\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_\bQ_\bu_\ba_\bd*gridIndexSet.subIndex\n+(element,0,0);\n+158 else\n+159 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n+quadrilaterals\");\n+160 }\n+161 else if constexpr (dim==3)\n+162 {\n+163 if (element.type().isTetrahedron())\n+164 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn*gridIndexSet.subIndex(element,0,0);\n+165 else if (element.type().isPrism())\n+166 offset = _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm*gridIndexSet.subIndex(element,0,0);\n+167 else if (element.type().isHexahedron())\n+168 offset = _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn*gridIndexSet.subIndex\n+(element,0,0);\n+169 else if (element.type().isPyramid())\n+170 offset = _\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*gridIndexSet.subIndex\n+(element,0,0);\n+171 else\n+172 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedrons,\n+prisms, hexahedrons or pyramids\");\n+173 }\n+174 else\n+175 DUNE_THROW(Dune::NotImplemented, \"No index method for \" << dim << \"d grids\n+available yet!\");\n+176 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0, end = node._\bs_\bi_\bz_\be() ; i < end ; ++i, ++it)\n+177 *it = {offset + i};\n+178 return it;\n+179 }\n+180\n+_\b1_\b8_\b2 unsigned int _\bo_\br_\bd_\be_\br() const\n+183 {\n+184 return k;\n+185 }\n+186\n+187protected:\n+_\b1_\b8_\b8 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+189\n+_\b1_\b9_\b0 size_t _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b1_\b9_\b1 size_t _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b1_\b9_\b2 size_t _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b1_\b9_\b3 size_t _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_;\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+196\n+197\n+198namespace BasisFactory {\n+199\n+207template\n+_\b2_\b0_\b8auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG()\n+209{\n+210 return [](const auto& gridView) {\n+211 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k>(gridView);\n+212 };\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+215} // end namespace BasisFactory\n+216\n+217\n+218\n+219/\n+/ *****************************************************************************\n+220// This is the actual global basis implementation based on the reusable\n+parts.\n+221/\n+/ *****************************************************************************\n+222\n+230template\n+_\b2_\b3_\b1using _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b> >;\n+232\n+233\n+234\n+235} // end namespace Functions\n+236} // end namespace Dune\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-_\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-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+238\n+239#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n+_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh\n+_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\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+_\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 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:_\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:_\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:44\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_\bD_\bG_\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 lagrangedgbasis.hh:144\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_\bD_\bG_\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 lagrangedgbasis.hh:138\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_\bD_\bG_\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 lagrangedgbasis.hh:182\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_\bD_\bG_\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 lagrangedgbasis.hh:104\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_\bD_\bG_\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_t hexahedronOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:193\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_\bD_\bG_\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 lagrangedgbasis.hh:112\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn\n+static const int dofsPerHexahedron\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:60\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+LagrangeDGPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:67\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_\bD_\bG_\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_t pyramidOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:191\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn\n+static const int dofsPerTetrahedron\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:58\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_\bD_\bG_\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 lagrangedgbasis.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_\bD_\bG_\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 lagrangedgbasis.hh:72\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_\bD_\bG_\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_t quadrilateralOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:190\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be\n+static const int dofsPerEdge\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:55\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_\bD_\bG_\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 lagrangedgbasis.hh:99\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bQ_\bu_\ba_\bd\n+static const int dofsPerQuad\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:57\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be\n+static const int dofsPerTriangle\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:56\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_\bD_\bG_\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+static const int dofsPerPyramid\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.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_\bD_\bG_\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 lagrangedgbasis.hh:188\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_\bD_\bG_\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 lagrangedgbasis.hh:51\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_\bD_\bG_\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 lagrangedgbasis.hh:117\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+size_t prismOffset_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:192\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm\n+static const int dofsPerPrism\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:59\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 ===============================================================================\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: subspacelocalview.hh File Reference\n+dune-functions: lagrangebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,37 +71,65 @@\n \n
    \n
    \n
    \n \n-
    subspacelocalview.hh File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    lagrangebasis.hh File Reference
    \n \n
    \n-
    #include <tuple>
    \n-#include <dune/common/concept.hh>
    \n-#include <dune/typetree/childextraction.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \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
    \n

    Go to the source code of this file.

    \n \n \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::LagrangePreBasis< GV, k, R >
     A pre-basis for a PQ-lagrange bases with given order. More...
     
    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+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.
     
    \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.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +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-_\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-#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+_\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+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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:_\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:_\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:_\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:_\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:_\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/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: subspacelocalview.hh Source File\n+dune-functions: lagrangebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,191 +74,590 @@\n \n \n
    \n
    \n-
    subspacelocalview.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_SUBSPACELOCALVIEW_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n
    9
    \n-
    10
    \n-
    11#include <tuple>
    \n+
    10#include <type_traits>
    \n+
    11#include <dune/common/exceptions.hh>
    \n
    12
    \n-
    13#include <dune/common/concept.hh>
    \n-
    14
    \n-
    15#include <dune/typetree/childextraction.hh>
    \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-
    18
    \n-
    19
    \n+\n+\n+\n
    20
    \n-
    21namespace Dune {
    \n-
    22namespace Functions {
    \n-
    23
    \n+
    21
    \n+
    22namespace Dune {
    \n+
    23namespace Functions {
    \n
    24
    \n-
    25
    \n-
    26template<class RB, class PP>
    \n-
    27class SubspaceBasis;
    \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+
    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-
    39 using RootLocalView = RLV;
    \n-
    40
    \n-\n+
    39template<typename GV, int k, typename R=double>
    \n+
    40class LagrangePreBasis;
    \n+
    41
    \n+
    42
    \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+
    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-
    \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+
    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 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
    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+
    \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+
    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+
    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 // 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
    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-\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
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,233 +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-subspacelocalview.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_SUBSPACELOCALVIEW_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n 9\n-10\n-11#include \n+10#include \n+11#include \n 12\n-13#include \n-14\n-15#include \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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-18\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/_\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-21namespace _\bD_\bu_\bn_\be {\n-22namespace Functions {\n-23\n+21\n+22namespace _\bD_\bu_\bn_\be {\n+23namespace Functions {\n 24\n-25\n-26template\n-27class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs;\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+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-_\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+39template\n+40class LagrangePreBasis;\n+41\n+42\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+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_\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+_\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 _\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 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+_\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 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 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 // 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+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+_\bl_\be_\ba_\bf_\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+_\bn_\bo_\bd_\be_\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:_\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:_\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 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+_\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 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-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+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 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+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-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-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\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 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/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: leafprebasismixin.hh File Reference\n+dune-functions: powerbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,37 +71,60 @@\n \n
    \n \n
    \n \n-
    leafprebasismixin.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    powerbasis.hh File Reference
    \n \n
    \n-
    #include <cassert>
    \n-#include <cstddef>
    \n-#include <type_traits>
    \n-#include <dune/functions/functionspacebases/containerdescriptors.hh>
    \n+\n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::LeafPreBasisMixin< Derived >
     A generic MixIn class for PreBasis. More...
    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+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.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +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-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-leafprebasismixin.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+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:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b<_\b _\bD_\be_\br_\bi_\bv_\be_\bd_\b _\b>\n-\u00a0 A generic MixIn class for PreBasis. _\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_\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+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/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: leafprebasismixin.hh Source File\n+dune-functions: powerbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,95 +74,197 @@\n \n \n
    \n
    \n-
    leafprebasismixin.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_LEAFPREBASISMIXIN_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n
    9
    \n-
    10#include <cassert>
    \n-
    11#include <cstddef>
    \n-
    12#include <type_traits>
    \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-
    15
    \n-
    16namespace Dune::Functions {
    \n-
    17
    \n-
    34template<class Derived>
    \n-
    \n-\n-
    36{
    \n-
    37public:
    \n-
    39 using size_type = std::size_t;
    \n-
    40
    \n-
    42 static constexpr size_type maxMultiIndexSize = 1;
    \n-
    43
    \n-
    45 static constexpr size_type minMultiIndexSize = 1;
    \n-
    46
    \n-
    48 static constexpr size_type multiIndexBufferSize = 1;
    \n-
    49
    \n-
    51 template<class SizePrefix,
    \n-
    52 decltype(std::declval<SizePrefix>().size(), bool{}) = true>
    \n-
    \n-
    53 size_type size(const SizePrefix& prefix) const
    \n-
    54 {
    \n-
    55 assert(prefix.size() == 0 || prefix.size() == 1);
    \n-
    56 return (prefix.size() == 0) ? derived().dimension() : 0;
    \n-
    57 }
    \n-
    \n-
    58
    \n-
    \n-\n-
    61 {
    \n-
    62 return derived().dimension();
    \n-
    63 }
    \n-
    \n-
    64
    \n-
    \n-\n-
    67 {
    \n-\n-
    69 }
    \n-
    \n-
    70
    \n-
    71private:
    \n-
    72 const Derived& derived() const
    \n-
    73 {
    \n-
    74 return static_cast<const Derived&>(*this);
    \n-
    75 }
    \n-
    76};
    \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-
    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-
    size_type size() const
    Get the total dimension of the space spanned by this basis.
    Definition leafprebasismixin.hh:60
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition leafprebasismixin.hh:39
    \n-
    static constexpr size_type multiIndexBufferSize
    Size required temporarily when constructing global multi-indices.
    Definition leafprebasismixin.hh:48
    \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+
    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+
    58 using SubPreBasis = SPB;
    \n+
    59
    \n+\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+
    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+
    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+\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+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,109 +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-leafprebasismixin.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_LEAFPREBASISMIXIN_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_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#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_\bt_\ba_\bi_\bn_\be_\br_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs_\b._\bh_\bh>\n-15\n-16namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n-17\n-34template\n-_\b3_\b5class _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn\n-36{\n-37public:\n-_\b3_\b9 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-40\n-_\b4_\b2 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 = 1;\n-43\n-_\b4_\b5 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 = 1;\n-46\n-_\b4_\b8 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 = 1;\n-49\n-51 template().size(), bool{}) = true>\n-_\b5_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-54 {\n-55 assert(prefix.size() == 0 || prefix.size() == 1);\n-56 return (prefix.size() == 0) ? derived().dimension() : 0;\n-57 }\n-58\n-_\b6_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-61 {\n-62 return derived().dimension();\n-63 }\n-64\n-_\b6_\b6 auto _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br() const\n-67 {\n-68 return _\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{_\bs_\bi_\bz_\be()};\n-69 }\n-70\n-71private:\n-72 const Derived& derived() const\n-73 {\n-74 return static_cast(*this);\n-75 }\n-76};\n-77\n-78\n-79} // end namespace Dune::Functions\n-80\n-81\n-82#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LEAFPREBASISMIXIN_HH\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+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+_\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+_\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+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+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+_\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+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\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\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_\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:_\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:_\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:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\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-Minimal length of global multi-indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:45\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:_\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 a flat container-descriptor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:66\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:_\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be\n-static constexpr size_type maxMultiIndexSize\n-Maximal length of global multi-indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:42\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\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:_\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+_\bn_\bo_\bd_\be_\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:_\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 leafprebasismixin.hh:39\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:_\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-Size required temporarily when constructing global multi-indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn leafprebasismixin.hh:48\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/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: 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/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: 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+_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n+_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\by_\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/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: flatmultiindex.hh File Reference\n+dune-functions: interpolate.hh File Reference\n \n \n \n \n \n \n \n@@ -71,36 +71,54 @@\n \n \n \n
    \n \n-
    flatmultiindex.hh File Reference
    \n+Functions
    \n+
    interpolate.hh File Reference
    \n \n
    \n-
    #include <array>
    \n-#include <dune/functions/common/multiindex.hh>
    \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

    \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-Typedefs

    template<class size_type >
    using Dune::Functions::FlatMultiIndex = StaticMultiIndex< size_type, 1 >
     A multi-index class with only one level.
     

    \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.
     
    \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+_\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 _\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-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+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 \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: flatmultiindex.hh Source File\n+dune-functions: interpolate.hh Source File\n \n \n \n \n \n \n \n@@ -74,48 +74,294 @@\n \n \n
    \n
    \n-
    flatmultiindex.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_FLATMULTIINDEX_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n
    9
    \n-
    10#include <array>
    \n-
    11
    \n-\n-
    13
    \n-
    14namespace Dune {
    \n-
    15namespace Functions {
    \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
    \n+
    17#include <dune/typetree/traversal.hh>
    \n
    18
    \n-
    34template<class size_type>
    \n-\n-
    36
    \n-
    37
    \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
    38
    \n-
    39} // end namespace Functions
    \n-
    40} // end namespace Dune
    \n-
    41
    \n-
    42#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n-\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+
    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-
    A statically sized MultiIndex type.
    Definition multiindex.hh:29
    \n-
    A statically sized MultiIndex type.
    Definition multiindex.hh:54
    \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,49 +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-flatmultiindex.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_FLATMULTIINDEX_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_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/_\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+10#include \n+11#include \n+12\n+13#include \n+14#include \n+15#include \n 16\n-17\n+17#include \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+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 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+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+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+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\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_\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+_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\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:_\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:_\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/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: powerbasis.hh File Reference\n+dune-functions: nedelecbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,59 +72,61 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    powerbasis.hh File Reference
    \n+
    nedelecbasis.hh File Reference
    \n
    \n
    \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/dynamicpowerbasis.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 <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
    \n

    Go to the source code of this file.

    \n \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::NedelecPreBasis< GV, Range, kind, order >
     
    class  Dune::Functions::NedelecNode< GV, Range, kind, order >
     
    \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+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.
     
    \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<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
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\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": "@@ -1,48 +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-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+_\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+#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 _\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:_\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:_\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-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+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 \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+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 ===============================================================================\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: powerbasis.hh Source File\n+dune-functions: nedelecbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,197 +74,398 @@\n \n \n
    \n
    \n-
    powerbasis.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
    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_NEDELECBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_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-\n-\n-
    22
    \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-
    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-
    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-
    58 using SubPreBasis = SPB;
    \n-
    59
    \n-\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+
    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+
    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 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+
    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-
    \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+
    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-
    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+
    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+
    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}
    \n-
    175
    \n+
    174 if (order>1)
    \n+
    175 DUNE_THROW(NotImplemented, "Only first-order elements are implemented");
    \n
    176
    \n-
    177} // end namespace Functions
    \n-
    178} // end namespace Dune
    \n-
    179
    \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-
    181#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n-\n-\n-\n-\n-\n-\n-\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+
    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-
    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-\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+
    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
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,243 +1,481 @@\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+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 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_NEDELECBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_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/_\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+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-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-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-_\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-_\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+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+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 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+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-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+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 ( (localV0globalV1) || (localV0>localV1 &&\n+globalV0 = 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+107 }\n+108\n+109 template\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-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+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+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}\n-175\n+174 if (order>1)\n+175 DUNE_THROW(NotImplemented, \"Only first-order elements are implemented\");\n 176\n-177} // end namespace Functions\n-178} // end namespace Dune\n-179\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-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+_\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+_\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+_\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_\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_\by_\bn_\ba_\bm_\bi_\bc_\bp_\bo_\bw_\be_\br_\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-_\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:_\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+_\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-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+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 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+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 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+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 ===============================================================================\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: lagrangedgbasis.hh File Reference\n+dune-functions: globalvaluedlocalfiniteelement.hh File Reference\n \n \n \n \n \n \n \n@@ -70,61 +70,36 @@\n \n \n
    \n \n-
    lagrangedgbasis.hh File Reference
    \n+Namespaces
    \n+
    globalvaluedlocalfiniteelement.hh File Reference
    \n \n
    \n
    #include <array>
    \n-#include <dune/common/exceptions.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/functions/functionspacebases/nodes.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n-#include <dune/functions/functionspacebases/lagrangebasis.hh>
    \n-#include <dune/functions/functionspacebases/leafprebasismixin.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-Classes

    class  Dune::Functions::LagrangeDGPreBasis< 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-Typedefs

    template<typename GV , int k>
    using Dune::Functions::LagrangeDGNode = LagrangeNode< GV, k >
     
    template<typename GV , int k>
    using Dune::Functions::LagrangeDGBasis = DefaultGlobalBasis< LagrangeDGPreBasis< GV, k > >
     Basis of a scalar k-th-order Lagrangean-DG finite element space.
     
    \n-\n-\n-\n-\n-\n

    \n-Functions

    template<std::size_t k>
    auto Dune::Functions::BasisFactory::lagrangeDG ()
     Create a pre-basis factory that can create a LagrangeDG pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,43 +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-lagrangedgbasis.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 <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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_\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/_\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 _\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\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:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be< GV, k >\n-\u00a0\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_\bD_\bG_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k > >\n-\u00a0 Basis of a scalar k-th-order Lagrangean-DG 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:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG ()\n-\u00a0 Create a pre-basis factory that can create a LagrangeDG 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/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: lagrangedgbasis.hh Source File\n+dune-functions: globalvaluedlocalfiniteelement.hh Source File\n \n \n \n \n \n \n \n@@ -74,291 +74,327 @@\n \n \n \n
    \n-
    lagrangedgbasis.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_LAGRANGEDGBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_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-
    12#include <dune/common/math.hh>
    \n-
    13
    \n-\n-\n-\n-\n-
    18
    \n+
    11#include <numeric>
    \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
    19
    \n-
    20
    \n-
    21
    \n-
    22namespace Dune {
    \n-
    23namespace Functions {
    \n-
    24
    \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-
    26
    \n-
    27// *****************************************************************************
    \n-
    28// This is the reusable part of the basis. It contains
    \n-
    29//
    \n-
    30// LagrangeDGPreBasis
    \n-
    31// LagrangeDGNode
    \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, int k>
    \n-\n-
    40
    \n-
    41template<typename GV, int k>
    \n-
    \n-\n-
    43 public LeafPreBasisMixin< LagrangeDGPreBasis<GV,k> >
    \n-
    44{
    \n-
    45 static const int dim = GV::dimension;
    \n-
    46
    \n-
    47public:
    \n-
    48
    \n-
    50 using GridView = GV;
    \n-
    51 using size_type = std::size_t;
    \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
    \n-
    54 // Precompute the number of dofs per entity type
    \n-
    55 const static int dofsPerEdge = k+1;
    \n-
    56 const static int dofsPerTriangle = (k+1)*(k+2)/2;
    \n-
    57 const static int dofsPerQuad = (k+1)*(k+1);
    \n-
    58 const static int dofsPerTetrahedron = (k+1)*(k+2)*(k+3)/6;
    \n-
    59 const static int dofsPerPrism = (k+1)*(k+1)*(k+2)/2;
    \n-
    60 const static int dofsPerHexahedron = (k+1)*(k+1)*(k+1);
    \n-
    61 const static int dofsPerPyramid = (k+1)*(k+2)*(2*k+3)/6;
    \n-
    62
    \n-
    63
    \n-\n-
    65
    \n-
    \n-\n-
    68 gridView_(gv)
    \n-
    69 {}
    \n-
    \n-
    70
    \n-
    71
    \n-
    \n-\n-
    73 {
    \n-
    74 switch (dim)
    \n-
    75 {
    \n-
    76 case 1:
    \n-
    77 {
    \n-
    78 break;
    \n-
    79 }
    \n-
    80 case 2:
    \n-
    81 {
    \n-
    82 quadrilateralOffset_ = dofsPerTriangle * gridView_.size(Dune::GeometryTypes::triangle);
    \n-
    83 break;
    \n-
    84 }
    \n-
    85 case 3:
    \n-
    86 {
    \n-
    87 prismOffset_ = dofsPerTetrahedron * gridView_.size(Dune::GeometryTypes::tetrahedron);
    \n-
    88
    \n-
    89 hexahedronOffset_ = prismOffset_ + dofsPerPrism * gridView_.size(Dune::GeometryTypes::prism);
    \n-
    90
    \n-
    91 pyramidOffset_ = hexahedronOffset_ + dofsPerHexahedron * gridView_.size(Dune::GeometryTypes::hexahedron);
    \n-
    92 break;
    \n-
    93 }
    \n-
    94 }
    \n-
    95 }
    \n-
    \n-
    96
    \n-
    \n-
    99 const GridView& gridView() const
    \n-
    100 {
    \n-
    101 return gridView_;
    \n-
    102 }
    \n-
    \n-
    103
    \n-
    \n-
    104 void update(const GridView& gv)
    \n-
    105 {
    \n-
    106 gridView_ = gv;
    \n-
    107 }
    \n-
    \n-
    108
    \n-
    \n-\n-
    113 {
    \n-
    114 return Node{};
    \n-
    115 }
    \n-
    \n-
    116
    \n-
    \n-\n-
    118 {
    \n-
    119 switch (dim)
    \n-
    120 {
    \n-
    121 case 1:
    \n-
    122 return dofsPerEdge*gridView_.size(0);
    \n-
    123 case 2:
    \n-
    124 {
    \n-
    125 return dofsPerTriangle*gridView_.size(Dune::GeometryTypes::triangle) + dofsPerQuad*gridView_.size(Dune::GeometryTypes::quadrilateral);
    \n-
    126 }
    \n-
    127 case 3:
    \n-
    128 {
    \n-
    129 return dofsPerTetrahedron*gridView_.size(Dune::GeometryTypes::tetrahedron)
    \n-
    130 + dofsPerPyramid*gridView_.size(Dune::GeometryTypes::pyramid)
    \n-
    131 + dofsPerPrism*gridView_.size(Dune::GeometryTypes::prism)
    \n-
    132 + dofsPerHexahedron*gridView_.size(Dune::GeometryTypes::hexahedron);
    \n-
    133 }
    \n-
    134 }
    \n-
    135 DUNE_THROW(Dune::NotImplemented, "No size method for " << dim << "d grids available yet!");
    \n-
    136 }
    \n-
    \n-
    137
    \n-
    \n-\n-
    139 {
    \n-
    140 return Dune::power(k+1, int(GV::dimension));
    \n-
    141 }
    \n-
    \n-
    142
    \n-
    143 template<typename It>
    \n-
    \n-
    144 It indices(const Node& node, It it) const
    \n-
    145 {
    \n-
    146 const auto& gridIndexSet = gridView().indexSet();
    \n-
    147 const auto& element = node.element();
    \n-
    148
    \n-
    149 size_type offset = 0;
    \n-
    150 if constexpr (dim==1)
    \n-
    151 offset = dofsPerEdge*gridIndexSet.subIndex(element,0,0);
    \n-
    152 else if constexpr (dim==2)
    \n-
    153 {
    \n-
    154 if (element.type().isTriangle())
    \n-
    155 offset = dofsPerTriangle*gridIndexSet.subIndex(element,0,0);
    \n-
    156 else if (element.type().isQuadrilateral())
    \n-
    157 offset = quadrilateralOffset_ + dofsPerQuad*gridIndexSet.subIndex(element,0,0);
    \n-
    158 else
    \n-
    159 DUNE_THROW(Dune::NotImplemented, "2d elements have to be triangles or quadrilaterals");
    \n-
    160 }
    \n-
    161 else if constexpr (dim==3)
    \n-
    162 {
    \n-
    163 if (element.type().isTetrahedron())
    \n-
    164 offset = dofsPerTetrahedron*gridIndexSet.subIndex(element,0,0);
    \n-
    165 else if (element.type().isPrism())
    \n-
    166 offset = prismOffset_ + dofsPerPrism*gridIndexSet.subIndex(element,0,0);
    \n-
    167 else if (element.type().isHexahedron())
    \n-
    168 offset = hexahedronOffset_ + dofsPerHexahedron*gridIndexSet.subIndex(element,0,0);
    \n-
    169 else if (element.type().isPyramid())
    \n-
    170 offset = pyramidOffset_ + dofsPerPyramid*gridIndexSet.subIndex(element,0,0);
    \n-
    171 else
    \n-
    172 DUNE_THROW(Dune::NotImplemented, "3d elements have to be tetrahedrons, prisms, hexahedrons or pyramids");
    \n-
    173 }
    \n-
    174 else
    \n-
    175 DUNE_THROW(Dune::NotImplemented, "No index method for " << dim << "d grids available yet!");
    \n-
    176 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n-
    177 *it = {offset + i};
    \n-
    178 return it;
    \n-
    179 }
    \n-
    \n-
    180
    \n-
    \n-
    182 unsigned int order() const
    \n-
    183 {
    \n-
    184 return k;
    \n-
    185 }
    \n-
    \n-
    186
    \n-
    187protected:
    \n-\n-
    189
    \n-\n-\n-\n-\n-
    194};
    \n-
    \n-
    195
    \n-
    196
    \n-
    197
    \n-
    198namespace BasisFactory {
    \n-
    199
    \n-
    207template<std::size_t k>
    \n-
    \n-\n-
    209{
    \n-
    210 return [](const auto& gridView) {
    \n-
    211 return LagrangeDGPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n-
    212 };
    \n-
    213}
    \n-
    \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 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 // 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+
    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} // end namespace BasisFactory
    \n-
    216
    \n+
    215 auto localValue = globalValue;
    \n+
    216 jacobianTransposed.mv(globalValue, localValue);
    \n
    217
    \n-
    218
    \n-
    219// *****************************************************************************
    \n-
    220// This is the actual global basis implementation based on the reusable parts.
    \n-
    221// *****************************************************************************
    \n+
    218 return localValue;
    \n+
    219 }
    \n+
    220 };
    \n+
    221 };
    \n
    222
    \n-
    230template<typename GV, int k>
    \n-\n-
    232
    \n-
    233
    \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
    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-
    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-
    It indices(const Node &node, It it) const
    Definition lagrangedgbasis.hh:144
    \n-
    size_type maxNodeSize() const
    Definition lagrangedgbasis.hh:138
    \n-
    unsigned int order() const
    Polynomial order used in the local Lagrange finite-elements.
    Definition lagrangedgbasis.hh:182
    \n-
    void update(const GridView &gv)
    Definition lagrangedgbasis.hh:104
    \n-
    size_t hexahedronOffset_
    Definition lagrangedgbasis.hh:193
    \n-
    Node makeNode() const
    Create tree node.
    Definition lagrangedgbasis.hh:112
    \n-
    static const int dofsPerHexahedron
    Definition lagrangedgbasis.hh:60
    \n-
    LagrangeDGPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition lagrangedgbasis.hh:67
    \n-
    size_t pyramidOffset_
    Definition lagrangedgbasis.hh:191
    \n-
    static const int dofsPerTetrahedron
    Definition lagrangedgbasis.hh:58
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition lagrangedgbasis.hh:50
    \n-
    void initializeIndices()
    Definition lagrangedgbasis.hh:72
    \n-
    size_t quadrilateralOffset_
    Definition lagrangedgbasis.hh:190
    \n-
    static const int dofsPerEdge
    Definition lagrangedgbasis.hh:55
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition lagrangedgbasis.hh:99
    \n-
    static const int dofsPerQuad
    Definition lagrangedgbasis.hh:57
    \n-
    static const int dofsPerTriangle
    Definition lagrangedgbasis.hh:56
    \n-
    static const int dofsPerPyramid
    Definition lagrangedgbasis.hh:61
    \n-
    GridView gridView_
    Definition lagrangedgbasis.hh:188
    \n-
    std::size_t size_type
    Definition lagrangedgbasis.hh:51
    \n-
    size_type dimension() const
    Definition lagrangedgbasis.hh:117
    \n-
    size_t prismOffset_
    Definition lagrangedgbasis.hh:192
    \n-
    static const int dofsPerPrism
    Definition lagrangedgbasis.hh:59
    \n-
    A generic MixIn class for PreBasis.
    Definition leafprebasismixin.hh:36
    \n-
    size_type size() const
    Definition nodes.hh:147
    \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+
    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+
    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+
    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,349 +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-lagrangedgbasis.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_LAGRANGEDGBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_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-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/_\bn_\bo_\bd_\be_\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/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\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/_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\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/_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\b._\bh_\bh>\n-18\n+11#include \n+12\n+13#include \n+14#include \n+15#include \n+16#include \n+17\n+18#include \n 19\n-20\n-21\n-22namespace _\bD_\bu_\bn_\be {\n-23namespace Functions {\n-24\n+20#include \n+21#include \n+22\n+23namespace Dune::Functions::Impl\n+24{\n 25\n-26\n-27/\n-/ *****************************************************************************\n-28// This is the reusable part of the basis. It contains\n-29//\n-30// LagrangeDGPreBasis\n-31// LagrangeDGNode\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-_\b3_\b9using _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b>;\n-40\n-41template\n-_\b4_\b2class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs :\n-43 public _\bL_\be_\ba_\bf_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\bM_\bi_\bx_\bi_\bn< LagrangeDGPreBasis >\n-44{\n-45 static const int dim = GV::dimension;\n-46\n-47public:\n-48\n-_\b5_\b0 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b5_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\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\n-54 // Precompute the number of dofs per entity type\n-_\b5_\b5 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be = k+1;\n-_\b5_\b6 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be = (k+1)*(k+2)/2;\n-_\b5_\b7 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bQ_\bu_\ba_\bd = (k+1)*(k+1);\n-_\b5_\b8 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn = (k+1)*(k+2)*(k+3)/6;\n-_\b5_\b9 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm = (k+1)*(k+1)*(k+2)/2;\n-_\b6_\b0 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn = (k+1)*(k+1)*(k+1);\n-_\b6_\b1 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd = (k+1)*(k+2)*(2*k+3)/6;\n-62\n-63\n-_\b6_\b4 using _\bN_\bo_\bd_\be = _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b>;\n-65\n-_\b6_\b7 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) :\n-68 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv)\n-69 {}\n-70\n-71\n-_\b7_\b2 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-73 {\n-74 switch (dim)\n-75 {\n-76 case 1:\n-77 {\n-78 break;\n-79 }\n-80 case 2:\n-81 {\n-82 _\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_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::\n-GeometryTypes::triangle);\n-83 break;\n-84 }\n-85 case 3:\n-86 {\n-87 _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::\n-tetrahedron);\n-88\n-89 _\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 * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::\n-GeometryTypes::prism);\n-90\n-91 _\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_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn * _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size\n-(Dune::GeometryTypes::hexahedron);\n-92 break;\n-93 }\n-94 }\n-95 }\n-96\n-_\b9_\b9 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-100 {\n-101 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-102 }\n-103\n-_\b1_\b0_\b4 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-105 {\n-106 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-107 }\n-108\n-_\b1_\b1_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-113 {\n-114 return _\bN_\bo_\bd_\be{};\n-115 }\n-116\n-_\b1_\b1_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-118 {\n-119 switch (dim)\n-120 {\n-121 case 1:\n-122 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0);\n-123 case 2:\n-124 {\n-125 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::triangle) +\n-_\bd_\bo_\bf_\bs_\bP_\be_\br_\bQ_\bu_\ba_\bd*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::quadrilateral);\n-126 }\n-127 case 3:\n-128 {\n-129 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::tetrahedron)\n-130 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\by_\br_\ba_\bm_\bi_\bd*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::pyramid)\n-131 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::prism)\n-132 + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(Dune::GeometryTypes::hexahedron);\n-133 }\n-134 }\n-135 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n-available yet!\");\n-136 }\n-137\n-_\b1_\b3_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-139 {\n-140 return Dune::power(k+1, int(GV::dimension));\n-141 }\n-142\n-143 template\n-_\b1_\b4_\b4 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-145 {\n-146 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-147 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-148\n-149 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be offset = 0;\n-150 if constexpr (dim==1)\n-151 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be*gridIndexSet.subIndex(element,0,0);\n-152 else if constexpr (dim==2)\n-153 {\n-154 if (element.type().isTriangle())\n-155 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be*gridIndexSet.subIndex(element,0,0);\n-156 else if (element.type().isQuadrilateral())\n-157 offset = _\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_\bQ_\bu_\ba_\bd*gridIndexSet.subIndex\n-(element,0,0);\n-158 else\n-159 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n-quadrilaterals\");\n-160 }\n-161 else if constexpr (dim==3)\n-162 {\n-163 if (element.type().isTetrahedron())\n-164 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn*gridIndexSet.subIndex(element,0,0);\n-165 else if (element.type().isPrism())\n-166 offset = _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm*gridIndexSet.subIndex(element,0,0);\n-167 else if (element.type().isHexahedron())\n-168 offset = _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_ + _\bd_\bo_\bf_\bs_\bP_\be_\br_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn*gridIndexSet.subIndex\n-(element,0,0);\n-169 else if (element.type().isPyramid())\n-170 offset = _\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*gridIndexSet.subIndex\n-(element,0,0);\n-171 else\n-172 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedrons,\n-prisms, hexahedrons or pyramids\");\n-173 }\n-174 else\n-175 DUNE_THROW(Dune::NotImplemented, \"No index method for \" << dim << \"d grids\n-available yet!\");\n-176 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0, end = node._\bs_\bi_\bz_\be() ; i < end ; ++i, ++it)\n-177 *it = {offset + i};\n-178 return it;\n-179 }\n-180\n-_\b1_\b8_\b2 unsigned int _\bo_\br_\bd_\be_\br() const\n-183 {\n-184 return k;\n-185 }\n-186\n-187protected:\n-_\b1_\b8_\b8 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-189\n-_\b1_\b9_\b0 size_t _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b1_\b9_\b1 size_t _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b1_\b9_\b2 size_t _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b1_\b9_\b3 size_t _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-194};\n-195\n-196\n-197\n-198namespace BasisFactory {\n-199\n-207template\n-_\b2_\b0_\b8auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG()\n-209{\n-210 return [](const auto& gridView) {\n-211 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k>(gridView);\n-212 };\n-213}\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 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 // 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+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+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} // end namespace BasisFactory\n-216\n+215 auto localValue = globalValue;\n+216 jacobianTransposed.mv(globalValue, localValue);\n 217\n-218\n-219/\n-/ *****************************************************************************\n-220// This is the actual global basis implementation based on the reusable\n-parts.\n-221/\n-/ *****************************************************************************\n+218 return localValue;\n+219 }\n+220 };\n+221 };\n 222\n-230template\n-_\b2_\b3_\b1using _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b,_\b _\bk_\b> >;\n-232\n-233\n+229 template\n+230 class GlobalValuedLocalBasis\n+231 {\n+232 public:\n+233 using Traits = typename LocalValuedLocalBasis::Traits;\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-_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\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:_\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-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:_\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:44\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_\bD_\bG_\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 lagrangedgbasis.hh:144\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_\bD_\bG_\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 lagrangedgbasis.hh:138\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_\bD_\bG_\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 lagrangedgbasis.hh:182\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_\bD_\bG_\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 lagrangedgbasis.hh:104\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_\bD_\bG_\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_t hexahedronOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:193\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_\bD_\bG_\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 lagrangedgbasis.hh:112\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn\n-static const int dofsPerHexahedron\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:60\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-LagrangeDGPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:67\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_\bD_\bG_\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_t pyramidOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:191\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn\n-static const int dofsPerTetrahedron\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:58\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_\bD_\bG_\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 lagrangedgbasis.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_\bD_\bG_\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 lagrangedgbasis.hh:72\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_\bD_\bG_\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_t quadrilateralOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:190\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be\n-static const int dofsPerEdge\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:55\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_\bD_\bG_\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 lagrangedgbasis.hh:99\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bQ_\bu_\ba_\bd\n-static const int dofsPerQuad\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:57\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be\n-static const int dofsPerTriangle\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:56\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_\bD_\bG_\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-static const int dofsPerPyramid\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.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_\bD_\bG_\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 lagrangedgbasis.hh:188\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_\bD_\bG_\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 lagrangedgbasis.hh:51\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_\bD_\bG_\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 lagrangedgbasis.hh:117\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-size_t prismOffset_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:192\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_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm\n-static const int dofsPerPrism\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:59\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+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+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+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+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/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: subspacebasis.hh File Reference\n+dune-functions: defaultnodetorangemap.hh File Reference\n \n \n \n \n \n \n \n@@ -73,53 +73,47 @@\n \n \n
    \n \n-
    subspacebasis.hh File Reference
    \n+
    defaultnodetorangemap.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 <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 Classes

    class  Dune::Functions::SubspaceBasis< RB, TP >
    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >
     A simple node to range map using lexicographic ordering. More...
     
    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor
     
    \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 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 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,45 +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-subspacebasis.hh File Reference\n-#include \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/_\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+#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_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bR_\bB_\b,_\b _\bT_\bP_\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>\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:_\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 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+_\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/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: subspacebasis.hh Source File\n+dune-functions: defaultnodetorangemap.hh Source File\n \n \n \n \n \n \n \n@@ -74,210 +74,151 @@\n \n \n
    \n
    \n-
    subspacebasis.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_SUBSPACEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n
    9
    \n-
    10#include <dune/common/reservedvector.hh>
    \n-
    11#include <dune/common/typeutilities.hh>
    \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-\n-\n-
    17
    \n+\n+
    15
    \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-
    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-
    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+
    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
    \n-\n-
    70
    \n-
    76 template<class RootRootBasis, class InnerTP, class OuterTP>
    \n-\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+
    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 LocalView(*this, prefixPath_);
    \n-
    115 }
    \n+\n+
    113{
    \n+
    114 return DefaultNodeToRangeMap<Tree>(tree);
    \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-
    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-
    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+
    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-
    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+
    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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,249 +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-subspacebasis.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_SUBSPACEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_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+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/_\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+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 18\n 19\n 20namespace _\bD_\bu_\bn_\be {\n 21namespace Functions {\n 22\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-_\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+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\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-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 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+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-_\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+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-_\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-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-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+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:_\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+_\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/a00143.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00143.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: nodes.hh File Reference\n+dune-functions: flatmultiindex.hh File Reference\n \n \n \n \n \n \n \n@@ -70,63 +70,37 @@\n \n
    \n
    \n \n-
    nodes.hh File Reference
    \n+Typedefs
    \n+
    flatmultiindex.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 <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-\n-\n-\n-\n-\n-\n-

    \n-Classes

    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 Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n-\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)
     

    \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,49 +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-nodes.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \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_\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-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-\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+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/a00143_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00143_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: flatmultiindex.hh Source File\n \n \n \n \n \n \n \n@@ -74,400 +74,48 @@\n \n \n
    \n
    \n-
    nodes.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_NODES_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_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-
    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-
    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-
    114
    \n-
    115 std::size_t treeIndex_;
    \n-
    116 };
    \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+
    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-
    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+
    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,402 +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-nodes.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_NODES_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_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\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-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-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-114\n-115 std::size_t treeIndex_;\n-116 };\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+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:_\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:_\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/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: dynamicpowerbasis.hh File Reference\n+dune-functions: periodicbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -73,54 +73,51 @@\n \n \n
    \n \n-
    dynamicpowerbasis.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/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 <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

    \n Classes

    class  Dune::Functions::DynamicPowerPreBasis< IMS, SPB >
     A pre-basis for dynamic power bases. More...
    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 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<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,42 +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-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+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:_\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_\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:_\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+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/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: dynamicpowerbasis.hh Source File\n+dune-functions: periodicbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,512 +74,226 @@\n \n \n
    \n
    \n-
    dynamicpowerbasis.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_DYNAMICPOWERBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_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/indices.hh>
    \n-
    13
    \n-\n-\n-\n-\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+\n+\n+
    19
    \n
    20
    \n-
    21
    \n+
    21namespace Dune::Functions {
    \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{
    \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+
    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-
    133
    \n-
    134protected:
    \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 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+
    136
    \n+
    137
    \n+
    138template<class RawPreBasisIndicator>
    \n+
    139class PeriodicPreBasisFactory
    \n+
    140{
    \n+
    141public:
    \n+
    142 PeriodicPreBasisFactory()
    \n+
    143 {}
    \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+
    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-
    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+
    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-
    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+
    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,605 +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-dynamicpowerbasis.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_DYNAMICPOWERBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DYNAMICPOWERBASIS_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/_\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+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/_\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+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-21\n+21namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n 22\n-23namespace _\bD_\bu_\bn_\be {\n-24namespace Functions {\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-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+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-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+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 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+136\n+137\n+138template\n+139class PeriodicPreBasisFactory\n+140{\n+141public:\n+142 PeriodicPreBasisFactory()\n+143 {}\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+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 // 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+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-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+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-_\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:_\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:_\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+_\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/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: containerdescriptors.hh File Reference\n+dune-functions: brezzidouglasmarinibasis.hh File Reference\n \n \n \n \n \n \n \n@@ -74,94 +74,63 @@\n
    \n
    \n \n-
    containerdescriptors.hh File Reference
    \n+
    brezzidouglasmarinibasis.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 <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-\n-\n-\n-\n-\n+\n \n

    \n Classes

    struct  Dune::Functions::ContainerDescriptors::Unknown
     Fallback container descriptor if nothing else fits. More...
    class  Dune::Functions::BrezziDouglasMariniPreBasis< GV, k >
     
    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::BrezziDouglasMariniNode< GV, k >
     
    \n \n \n \n \n \n-\n+\n \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::ContainerDescriptors
    namespace  Dune::Functions::BasisFactory
     
    \n \n-\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<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.
     
    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-\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<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": "@@ -2,90 +2,55 @@\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+brezzidouglasmarinibasis.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/_\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+#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:_\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+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-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:_\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:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bo_\br_\bs\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:_\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+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:_\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:_\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/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: containerdescriptors.hh Source File\n+dune-functions: brezzidouglasmarinibasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,299 +74,406 @@\n \n \n \n
    \n-
    containerdescriptors.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_CONTAINERDESCRIPTORS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_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-
    15
    \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+
    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-
    46namespace Dune::Functions {
    \n-
    \n-
    47namespace ContainerDescriptors {
    \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-
    \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-
    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+
    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-
    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-
    \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-
    \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+
    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-
    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+
    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-\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-
    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+
    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-
    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+
    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-
    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+
    \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+
    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,335 +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-containerdescriptors.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_CONTAINERDESCRIPTORS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n 9\n 10#include \n-11#include \n-12#include \n-13#include \n-14#include \n-15\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+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-46namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n-_\b4_\b7namespace ContainerDescriptors {\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+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-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+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-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+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-_\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+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-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+_\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-_\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-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+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-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+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-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+_\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+_\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_\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_\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:_\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/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: basistags.hh File Reference\n+dune-functions: defaultglobalbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -73,77 +73,57 @@\n
    \n \n
    \n \n-
    basistags.hh File Reference
    \n+
    defaultglobalbasis.hh File Reference
    \n
    \n
    \n-
    #include <type_traits>
    \n+
    #include <cstddef>
    \n+#include <type_traits>
    \n+#include <utility>
    \n+#include <dune/common/reservedvector.hh>
    \n+#include <dune/common/typeutilities.hh>
    \n #include <dune/common/concept.hh>
    \n+#include <dune/functions/common/type_traits.hh>
    \n+#include <dune/functions/functionspacebases/defaultlocalview.hh>
    \n+#include <dune/functions/functionspacebases/concepts.hh>
    \n
    \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

    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...
    class  Dune::Functions::DefaultGlobalBasis< PB >
     Global basis for given pre-basis. 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+\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 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": "@@ -2,79 +2,46 @@\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+defaultglobalbasis.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 _\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+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:_\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+ \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/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: basistags.hh Source File\n+dune-functions: defaultglobalbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,150 +74,234 @@\n \n \n
    \n
    \n-
    basistags.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_BASISTAGS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n
    9
    \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+
    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-
    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+\n+\n+\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-
    \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+
    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-
    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+
    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-
    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+
    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 \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,154 +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-basistags.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_BASISTAGS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n 9\n-10#include \n-11#include \n-12\n-13namespace _\bD_\bu_\bn_\be {\n-14namespace Functions {\n-15\n-16 namespace Concept {\n+10#include \n+11#include \n+12#include \n+13\n+14#include \n+15#include \n+16#include \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-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+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+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-_\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+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-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+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:_\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:_\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 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 ===============================================================================\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: taylorhoodbasis.hh File Reference\n+dune-functions: flatvectorview.hh File Reference\n \n \n \n \n \n \n \n@@ -70,63 +70,48 @@\n \n \n
    \n \n-
    taylorhoodbasis.hh File Reference
    \n+
    flatvectorview.hh File Reference
    \n
    \n
    \n-
    #include <dune/common/exceptions.hh>
    \n-#include <dune/common/reservedvector.hh>
    \n+
    #include <array>
    \n+#include <dune/common/concept.hh>
    \n+#include <dune/common/hybridutilities.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 <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

    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 >
     
    \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+\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.
     
    template<class T >
    auto Dune::Functions::flatVectorView (T &t)
     Create flat vector view of passed mutable container.
     
    template<class T >
    auto Dune::Functions::flatVectorView (const T &t)
     Create flat vector view of passed const container.
     
    template<class T >
    auto Dune::Functions::flatVectorView (T &&t)
     Create flat vector view of passed container temporary.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +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 * _\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+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+flatvectorview.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/_\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+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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:_\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-\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+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw (T &t)\n+\u00a0 Create flat vector view of passed mutable container.\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_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw (const T &t)\n+\u00a0 Create flat vector view of passed const container.\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_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw (T &&t)\n+\u00a0 Create flat vector view of passed container temporary.\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: taylorhoodbasis.hh Source File\n+dune-functions: flatvectorview.hh Source File\n \n \n \n \n \n \n \n@@ -74,412 +74,219 @@\n \n \n
    \n
    \n-
    taylorhoodbasis.hh
    \n+
    flatvectorview.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_FLATVECTORVIEW_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_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-
    13
    \n-
    14#include <dune/typetree/powernode.hh>
    \n-
    15#include <dune/typetree/compositenode.hh>
    \n+
    10
    \n+
    11#include <array>
    \n+
    12
    \n+
    13#include <dune/common/concept.hh>
    \n+
    14#include <dune/common/hybridutilities.hh>
    \n+
    15#include <dune/common/indices.hh>
    \n
    16
    \n-\n+\n
    18
    \n-\n-\n+
    19
    \n+
    20
    \n
    21
    \n
    22namespace Dune {
    \n
    23namespace Functions {
    \n-
    24
    \n+
    24namespace Impl {
    \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+
    26
    \n+
    27template<class V>
    \n+
    28struct FlatVectorBackend
    \n+
    29{
    \n+
    30
    \n+
    31 template<class VV, class Index,
    \n+
    32 std::enable_if_t< models<Concept::HasIndexAccess, VV, Index>(), int> = 0>
    \n+
    33 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n+
    34 {
    \n+
    35 return v[i];
    \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+
    38 template<class VV, class Index,
    \n+
    39 std::enable_if_t< not models<Concept::HasIndexAccess, VV, Index>(), int> = 0>
    \n+
    40 static decltype(auto) getEntry(VV&& v, const Index&)
    \n+
    41 {
    \n+
    42 return std::forward<VV>(v);
    \n+
    43 }
    \n+
    44
    \n+
    45 template<class VV,
    \n+
    46 std::enable_if_t< models<Concept::HasSizeMethod, VV>(), int> = 0>
    \n+
    47 static auto size(VV&& v)
    \n+
    48 {
    \n+
    49 return Dune::Hybrid::size(v);
    \n+
    50 }
    \n+
    51
    \n+
    52 template<class VV,
    \n+
    53 std::enable_if_t< not models<Concept::HasSizeMethod, VV>(), int>type = 0>
    \n+
    54 static auto size(VV&&)
    \n+
    55 {
    \n+
    56 return Dune::index_constant<1>{};
    \n+
    57 }
    \n+
    58};
    \n+
    59
    \n+
    60
    \n+
    61
    \n+
    62
    \n+
    63template<class K, int n, int m>
    \n+
    64struct FlatVectorBackend<typename Dune::FieldMatrix<K, n, m> >
    \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+
    66
    \n+
    67 template<class VV, class Index>
    \n+
    68 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n+
    69 {
    \n+
    70 return v[i/m][i%m];
    \n+
    71 }
    \n+
    72
    \n+
    73 template<class VV>
    \n+
    74 static auto size(VV&& v)
    \n+
    75 {
    \n+
    76 return Dune::index_constant<n*m>{};
    \n+
    77 }
    \n+
    78};
    \n+
    79
    \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+
    81
    \n+
    82template<class K, std::size_t n>
    \n+
    83struct FlatVectorBackend< std::array<K, n> >
    \n+
    84{
    \n+
    85
    \n+
    86 template<class VV, class Index>
    \n+
    87 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n+
    88 {
    \n+
    89 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;
    \n+
    90 return FlatVectorBackend<K>::getEntry(v[i/innerSize], i%innerSize);
    \n+
    91 }
    \n+
    92
    \n+
    93 template<class VV>
    \n+
    94 static auto size(VV&& v)
    \n+
    95 {
    \n+
    96 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;
    \n+
    97 return Dune::index_constant<n*innerSize>{};
    \n+
    98 }
    \n+
    99
    \n+
    100};
    \n+
    101
    \n+
    102
    \n+
    103
    \n+
    104
    \n+
    105template<class T>
    \n+
    106class FlatVectorView
    \n+
    107{
    \n+
    108 using Backend = FlatVectorBackend<std::decay_t<T>>;
    \n+
    109public:
    \n+
    110 FlatVectorView(T& t) :
    \n+
    111 t_(&t)
    \n+
    112 {}
    \n+
    113
    \n+
    114 auto size() const
    \n+
    115 {
    \n+
    116 return Backend::size(*t_);
    \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+
    119 template<class Index>
    \n+
    120 decltype(auto) operator[](const Index& i) const
    \n+
    121 {
    \n+
    122 return Backend::getEntry(*t_, i);
    \n+
    123 }
    \n+
    124
    \n+
    125 template<class Index>
    \n+
    126 decltype(auto) operator[](const Index& i)
    \n+
    127 {
    \n+
    128 return Backend::getEntry(*t_, i);
    \n+
    129 }
    \n+
    130
    \n+
    131private:
    \n+
    132 T* t_;
    \n+
    133};
    \n+
    134
    \n+
    135
    \n+
    136template<class T>
    \n+
    137class FlatVectorView<T&&>
    \n+
    138{
    \n+
    139 using Backend = FlatVectorBackend<std::decay_t<T>>;
    \n+
    140public:
    \n+
    141 FlatVectorView(T&& t) :
    \n+
    142 t_(std::move(t))
    \n+
    143 {}
    \n+
    144
    \n+
    145 auto size() const
    \n+
    146 {
    \n+
    147 return Backend::size(t_);
    \n+
    148 }
    \n+
    149
    \n+
    150 template<class Index>
    \n+
    151 decltype(auto) operator[](const Index& i) const
    \n+
    152 {
    \n+
    153 return Backend::getEntry(t_, i);
    \n+
    154 }
    \n+
    155
    \n+
    156 template<class Index>
    \n+
    157 decltype(auto) operator[](const Index& i)
    \n+
    158 {
    \n+
    159 return Backend::getEntry(t_, i);
    \n+
    160 }
    \n+
    161
    \n+
    162private:
    \n+
    163 T t_;
    \n+
    164};
    \n+
    165
    \n+
    166} // namespace Impl
    \n+
    167
    \n+
    168
    \n+
    169
    \n+
    182template<class T>
    \n+
    \n+\n+
    184{
    \n+
    185 return Impl::FlatVectorView<T>(t);
    \n+
    186}
    \n+
    \n+
    187
    \n+
    200template<class T>
    \n+
    \n+
    201auto flatVectorView(const T& t)
    \n+
    202{
    \n+
    203 return Impl::FlatVectorView<const T>(t);
    \n+
    204}
    \n+
    \n+
    205
    \n+
    218template<class T>
    \n+
    \n+
    219auto flatVectorView(T&& t)
    \n+
    220{
    \n+
    221 return Impl::FlatVectorView<T&&>(std::move(t));
    \n+
    222}
    \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+
    224
    \n+
    225} // namespace Dune::Functions
    \n+
    226} // namespace Dune
    \n+
    227
    \n+
    228
    \n+
    229#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH
    \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+
    auto flatVectorView(T &t)
    Create flat vector view of passed mutable container.
    Definition flatvectorview.hh:183
    \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,214 @@\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+flatvectorview.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_FLATVECTORVIEW_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n 9\n-10#include \n-11#include \n-12#include \n-13\n-14#include \n-15#include \n+10\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+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#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+19\n+20\n 21\n 22namespace _\bD_\bu_\bn_\be {\n 23namespace Functions {\n-24\n+24namespace Impl {\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+26\n+27template\n+28struct FlatVectorBackend\n+29{\n+30\n+31 template(), int> = 0>\n+33 static decltype(auto) getEntry(VV&& v, const Index& i)\n+34 {\n+35 return v[i];\n+36 }\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+38 template(), int> =\n+0>\n+40 static decltype(auto) getEntry(VV&& v, const Index&)\n+41 {\n+42 return std::forward(v);\n+43 }\n+44\n+45 template(), int> = 0>\n+47 static auto size(VV&& v)\n+48 {\n+49 return Dune::Hybrid::size(v);\n+50 }\n+51\n+52 template(), int>type = 0>\n+54 static auto size(VV&&)\n+55 {\n+56 return Dune::index_constant<1>{};\n+57 }\n+58};\n+59\n+60\n+61\n+62\n+63template\n+64struct FlatVectorBackend >\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+66\n+67 template\n+68 static decltype(auto) getEntry(VV&& v, const Index& i)\n+69 {\n+70 return v[i/m][i%m];\n+71 }\n+72\n+73 template\n+74 static auto size(VV&& v)\n+75 {\n+76 return Dune::index_constant{};\n+77 }\n+78};\n+79\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+81\n+82template\n+83struct FlatVectorBackend< std::array >\n+84{\n+85\n+86 template\n+87 static decltype(auto) getEntry(VV&& v, const Index& i)\n+88 {\n+89 const auto innerSize = decltype(FlatVectorBackend::size(v[0]))::value;\n+90 return FlatVectorBackend::getEntry(v[i/innerSize], i%innerSize);\n+91 }\n+92\n+93 template\n+94 static auto size(VV&& v)\n+95 {\n+96 const auto innerSize = decltype(FlatVectorBackend::size(v[0]))::value;\n+97 return Dune::index_constant{};\n+98 }\n+99\n+100};\n+101\n+102\n+103\n+104\n+105template\n+106class FlatVectorView\n+107{\n+108 using Backend = FlatVectorBackend>;\n+109public:\n+110 FlatVectorView(T& t) :\n+111 t_(&t)\n+112 {}\n+113\n+114 auto size() const\n+115 {\n+116 return Backend::size(*t_);\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+119 template\n+120 decltype(auto) operator[](const Index& i) const\n+121 {\n+122 return Backend::getEntry(*t_, i);\n+123 }\n+124\n+125 template\n+126 decltype(auto) operator[](const Index& i)\n+127 {\n+128 return Backend::getEntry(*t_, i);\n+129 }\n+130\n+131private:\n+132 T* t_;\n+133};\n+134\n+135\n+136template\n+137class FlatVectorView\n+138{\n+139 using Backend = FlatVectorBackend>;\n+140public:\n+141 FlatVectorView(T&& t) :\n+142 t_(std::move(t))\n+143 {}\n+144\n+145 auto size() const\n+146 {\n+147 return Backend::size(t_);\n+148 }\n+149\n+150 template\n+151 decltype(auto) operator[](const Index& i) const\n+152 {\n+153 return Backend::getEntry(t_, i);\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+155\n+156 template\n+157 decltype(auto) operator[](const Index& i)\n+158 {\n+159 return Backend::getEntry(t_, i);\n+160 }\n+161\n+162private:\n+163 T t_;\n+164};\n+165\n+166} // namespace Impl\n+167\n+168\n+169\n+182template\n+_\b1_\b8_\b3auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(T& t)\n+184{\n+185 return Impl::FlatVectorView(t);\n+186}\n+187\n+200template\n+_\b2_\b0_\b1auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(const T& t)\n+202{\n+203 return Impl::FlatVectorView(t);\n+204}\n+205\n+218template\n+_\b2_\b1_\b9auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(T&& t)\n+220{\n+221 return Impl::FlatVectorView(std::move(t));\n+222}\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+224\n+225} // namespace Dune::Functions\n+226} // namespace Dune\n+227\n+228\n+229#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_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_\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:_\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw\n+auto flatVectorView(T &t)\n+Create flat vector view of passed mutable container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn flatvectorview.hh:183\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/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: subentitydofs.hh File Reference\n+dune-functions: basistags.hh File Reference\n \n \n \n \n \n \n \n@@ -73,50 +73,77 @@\n
    \n \n
    \n \n-
    subentitydofs.hh File Reference
    \n+
    basistags.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/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 \n

    \n Classes

    class  Dune::Functions::SubEntityDOFs< GridView >
     Range of DOFs associated to sub-entity. More...
    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+\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<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": "@@ -2,38 +2,79 @@\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+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-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+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-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+ 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/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: subentitydofs.hh Source File\n+dune-functions: basistags.hh Source File\n \n \n \n \n \n \n \n@@ -74,174 +74,150 @@\n \n \n
    \n
    \n-
    subentitydofs.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_SUBENTITYDOFS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n
    9
    \n-
    10#include <vector>
    \n-
    11
    \n-
    12#include <dune/geometry/referenceelements.hh>
    \n-
    13#include <dune/typetree/traversal.hh>
    \n-
    14
    \n+
    10#include <type_traits>
    \n+
    11#include <dune/common/concept.hh>
    \n+
    12
    \n+
    13namespace Dune {
    \n+
    14namespace Functions {
    \n
    15
    \n-
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n-
    19
    \n-
    20
    \n-
    21
    \n-
    44template<class GridView>
    \n-
    \n-\n-
    46{
    \n-
    47 static const int dim = GridView::dimension;
    \n-
    48
    \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-
    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-
    \n-
    148
    \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+
    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+
    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-
    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+
    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-
    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+
    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,180 +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-subentitydofs.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_SUBENTITYDOFS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_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 \n-13#include \n-14\n+10#include \n+11#include \n+12\n+13namespace _\bD_\bu_\bn_\be {\n+14namespace Functions {\n 15\n-16\n-17namespace _\bD_\bu_\bn_\be {\n-18namespace Functions {\n-19\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-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-_\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-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-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+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+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\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+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:_\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:_\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/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: lfeprebasismixin.hh File Reference\n+dune-functions: raviartthomasbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,48 +72,69 @@\n
  • dune
  • functions
  • functionspacebases
  • \n
    \n \n
    \n \n-
    lfeprebasismixin.hh File Reference
    \n+
    raviartthomasbasis.hh File Reference
    \n
    \n
    \n-
    #include <cassert>
    \n-#include <type_traits>
    \n+
    #include <array>
    \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/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 \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::RaviartThomasPreBasis< GV, k >
     
    class  Dune::Functions::LFEPreBasisMixin< GV, LFE >::Node
     Leaf basis node that encapsulates a local finite-element given from the LFEPreBasisMixin of type LFE. More...
    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+\n+\n

    \n Functions

    template<class GV , class LFE >
     Dune::Functions::LFEPreBasisMixin (const GV &, const LFE &, MCMGLayout) -> LFEPreBasisMixin< GV, LFE >
     
    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,37 +1,53 @@\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+_\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+#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 \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:_\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+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-\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+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/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: lfeprebasismixin.hh Source File\n+dune-functions: raviartthomasbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,161 +74,462 @@\n \n \n
    \n
    \n-
    lfeprebasismixin.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_LFEPREBASISMIXIN_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n
    9
    \n-
    10#include <cassert>
    \n-
    11#include <type_traits>
    \n+
    10#include <array>
    \n+
    11#include <dune/common/exceptions.hh>
    \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-
    21
    \n-
    54template <class GV, class LFE>
    \n-
    \n-\n-
    56 public LeafPreBasisMapperMixin< GV >
    \n-
    57{
    \n-\n-
    59
    \n-
    60public:
    \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-
    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+
    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+
    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-
    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+
    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+
    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-
    \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+
    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} // 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+
    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+
    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+
    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+
    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+
    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+
    301
    \n+
    302 *it = { codimOffset_[codim] +
    \n+
    303 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \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+
    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
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,184 +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-lfeprebasismixin.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_LFEPREBASISMIXIN_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_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+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-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+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-_\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+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+104\n+105 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo::FiniteElement;\n+106 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo::FiniteElement;\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+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+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-_\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-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+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} // end namespace Dune::Functions\n-166\n-167\n-168#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LFEPREBASISMIXIN_HH\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+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+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+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+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+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+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+_\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+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+_\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_\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_\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+_\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. 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+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 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+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 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+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/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: periodicbasis.hh File Reference\n+dune-functions: transformedindexbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -73,51 +73,73 @@\n \n \n
    \n \n-
    periodicbasis.hh File Reference
    \n+
    transformedindexbasis.hh File Reference
    \n
    \n
    \n-
    #include <utility>
    \n-#include <type_traits>
    \n-#include <limits>
    \n-#include <set>
    \n-#include <vector>
    \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/containerdescriptors.hh>
    \n-#include <dune/functions/functionspacebases/transformedindexbasis.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 Classes

    class  Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet
     Container storing identified indices for a periodic basis. More...
    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...
     
    \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

    \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.
     
    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": "@@ -2,38 +2,73 @@\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+transformedindexbasis.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 <_\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/_\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+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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:_\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+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 \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-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+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/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: periodicbasis.hh Source File\n+dune-functions: transformedindexbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,226 +74,359 @@\n \n \n
    \n
    \n-
    periodicbasis.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_PERIODICBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_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+
    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
    \n+
    18#include <dune/typetree/compositenode.hh>
    \n+
    19#include <dune/typetree/utility.hh>
    \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+\n+\n+\n+\n+\n+\n+\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+
    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+
    66
    \n+
    68 using size_type = std::size_t;
    \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+
    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+
    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+
    \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-
    180private:
    \n-
    181 RawPreBasisIndicator rawPreBasisIndicator_;
    \n-
    182 PeriodicIndexSet periodicIndexSet_;
    \n+
    180protected:
    \n+\n+
    182 Transformation transformation_;
    \n
    183};
    \n+
    \n
    184
    \n-
    185} // end namespace BasisFactory::Impl
    \n-
    186
    \n+
    185template<class RPB, class T>
    \n+\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+
    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#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+
    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+
    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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,244 +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-periodicbasis.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_PERIODICBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_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-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+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+19#include \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+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-_\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+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+66\n+_\b6_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\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+_\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+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+_\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 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+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-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+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#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+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+_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n+_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\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+_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\n+_\bn_\bo_\bd_\be_\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:_\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+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 ===============================================================================\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: interpolate.hh File Reference\n+dune-functions: boundarydofs.hh File Reference\n \n \n \n \n \n \n \n@@ -72,53 +72,35 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    interpolate.hh File Reference
    \n+
    boundarydofs.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+
    #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

    \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 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<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": "@@ -2,43 +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 _\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+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 _\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\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+(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: interpolate.hh Source File\n+dune-functions: boundarydofs.hh Source File\n \n \n \n \n \n \n \n@@ -74,294 +74,105 @@\n \n \n
    \n
    \n-
    interpolate.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_INTERPOLATE_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_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+
    10#include <utility>
    \n+
    11
    \n+\n+
    13
    \n+
    14namespace Dune {
    \n+
    15namespace Functions {
    \n
    16
    \n-
    17#include <dune/typetree/traversal.hh>
    \n+
    17
    \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-
    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+
    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-
    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+
    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-
    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-
    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+
    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-
    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,323 +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-interpolate.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_INTERPOLATE_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_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+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#include \n+17\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-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+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-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+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-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+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 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-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-_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\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-_\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-_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\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:_\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+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:_\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/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: defaultlocalview.hh File Reference\n+dune-functions: hierarchicnodetorangemap.hh File Reference\n \n \n \n \n \n \n \n@@ -72,32 +72,29 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    defaultlocalview.hh File Reference
    \n+
    hierarchicnodetorangemap.hh File Reference
    \n
    \n
    \n-
    #include <tuple>
    \n-#include <optional>
    \n+
    #include <utility>
    \n+#include <type_traits>
    \n #include <dune/common/concept.hh>
    \n-#include <dune/common/hybridutilities.hh>
    \n-#include <dune/common/reservedvector.hh>
    \n-#include <dune/functions/common/overflowarray.hh>
    \n-#include <dune/functions/common/multiindex.hh>
    \n #include <dune/functions/functionspacebases/concepts.hh>
    \n+#include <dune/functions/common/indexaccess.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...
    struct  Dune::Functions::HierarchicNodeToRangeMap
     A simple node to range map using the nested tree indices. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,27 +2,24 @@\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-#include \n-#include \n+hierarchicnodetorangemap.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+#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:_\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+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 ===============================================================================\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: defaultlocalview.hh Source File\n+dune-functions: hierarchicnodetorangemap.hh Source File\n \n \n \n \n \n \n \n@@ -74,211 +74,76 @@\n \n \n \n
    \n-
    defaultlocalview.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_DEFAULTLOCALVIEW_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n
    9
    \n
    10
    \n-
    11#include <tuple>
    \n-
    12#include <optional>
    \n+
    11#include <utility>
    \n+
    12#include <type_traits>
    \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+
    15
    \n+\n+\n+
    18
    \n+
    19namespace Dune {
    \n+
    20namespace Functions {
    \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-
    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+\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-
    126
    \n-
    \n-\n-
    130 {
    \n-
    131 return tree_.size();
    \n-
    132 }
    \n+
    48};
    \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+
    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-
    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+
    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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,267 +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-defaultlocalview.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_DEFAULTLOCALVIEW_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n 9\n 10\n-11#include \n-12#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/_\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+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 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_\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+_\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-50protected:\n+50\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+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:_\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+_\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/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: brezzidouglasmarinibasis.hh File Reference\n+dune-functions: hierarchicvectorwrapper.hh File Reference\n \n \n \n \n \n \n \n@@ -72,65 +72,52 @@\n
  • dune
  • functions
  • functionspacebases
  • \n
    \n
    \n
    \n \n-
    brezzidouglasmarinibasis.hh File Reference
    \n+
    hierarchicvectorwrapper.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/functions/functionspacebases/leafprebasismixin.hh>
    \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

    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 Classes

    class  Dune::Functions::BrezziDouglasMariniPreBasis< GV, k >
     
    class  Dune::Functions::BrezziDouglasMariniNode< GV, k >
    class  Dune::Functions::HierarchicVectorWrapper< V, CO >
     A wrapper providing multiindex access to vector entries. 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>
    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+\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<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": "@@ -1,56 +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 | _\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+_\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 _\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-\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:_\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-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+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/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: brezzidouglasmarinibasis.hh Source File\n+dune-functions: hierarchicvectorwrapper.hh Source File\n \n \n \n \n \n \n \n@@ -74,406 +74,294 @@\n \n \n
    \n
    \n-
    brezzidouglasmarinibasis.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_BREZZIDOUGLASMARINIBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n
    9
    \n-
    10#include <array>
    \n-
    11#include <dune/common/exceptions.hh>
    \n-
    12#include <dune/geometry/referenceelements.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-
    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+
    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-\n-\n-\n-\n+
    23
    \n+
    24namespace Dune {
    \n+
    25namespace Functions {
    \n+
    26
    \n
    27
    \n-
    28namespace Dune {
    \n-
    29namespace Functions {
    \n+
    28
    \n+
    29namespace Imp {
    \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+
    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 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+
    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+
    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 // 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+
    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-
    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+
    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-
    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+
    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-
    162public:
    \n-
    163
    \n-
    165 using GridView = GV;
    \n-
    166 using size_type = std::size_t;
    \n-
    167
    \n-\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-
    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+\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-
    187
    \n+
    188
    \n+
    189 template<class MultiIndex>
    \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+
    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-
    200
    \n+
    202
    \n+
    203 template<class MultiIndex>
    \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+
    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-
    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+
    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-
    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+
    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
    \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+
    262} // namespace Dune::Functions
    \n+
    263} // namespace Dune
    \n+
    264
    \n+
    265
    \n+
    266#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n+\n+\n+\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+
    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 \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,489 +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-brezzidouglasmarinibasis.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_BREZZIDOUGLASMARINIBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_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 \n-15#include \n-16\n-17#include \n-18#include \n-19#include \n-20#include \n-21#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/_\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#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+23\n+24namespace _\bD_\bu_\bn_\be {\n+25namespace Functions {\n+26\n 27\n-28namespace _\bD_\bu_\bn_\be {\n-29namespace Functions {\n+28\n+29namespace Imp {\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+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 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+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+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 // 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+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 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+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+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-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+152 c.resize(size);\n+153 prefix.push_back(0);\n+154 for(std::size_t i=0; i;\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_\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+_\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 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+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 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+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-238 for(std::size_t i=0, end=node._\bs_\bi_\bz_\be(); i(), 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-250 return it;\n-251 }\n-252\n-253protected:\n-_\b2_\b5_\b4 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-_\b2_\b5_\b5 std::array _\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+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\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-_\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-_\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_\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+262} // namespace Dune::Functions\n+263} // namespace Dune\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 _\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:_\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/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: boundarydofs.hh File Reference\n+dune-functions: bsplinebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -70,38 +70,82 @@\n \n
    \n
    \n \n-
    boundarydofs.hh File Reference
    \n+
    bsplinebasis.hh File Reference
    \n
    \n
    \n-
    #include <utility>
    \n-#include <dune/functions/functionspacebases/subentitydofs.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+\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::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 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.
     
    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,26 +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-_\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 | _\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:_\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+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+\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+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/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: boundarydofs.hh Source File\n+dune-functions: bsplinebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,105 +74,1284 @@\n \n \n
    \n
    \n-
    boundarydofs.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_BOUNDARYDOFS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n
    9
    \n-
    10#include <utility>
    \n-
    11
    \n-\n-
    13
    \n-
    14namespace Dune {
    \n-
    15namespace Functions {
    \n+
    14#include <array>
    \n+
    15#include <numeric>
    \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+
    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+
    39
    \n+
    40
    \n+
    49template<class GV, class R>
    \n+
    \n+\n+
    51{
    \n+
    52 friend class BSplineLocalFiniteElement<GV,R>;
    \n+
    53
    \n+
    54 typedef typename GV::ctype D;
    \n+
    55 enum {dim = GV::dimension};
    \n+
    56public:
    \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+
    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
    \n+
    93 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);
    \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+
    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
    \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+
    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 // 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+
    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+
    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+
    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,109 +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-boundarydofs.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_BOUNDARYDOFS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_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+14#include \n+15#include \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+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+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 typedef typename GV::ctype D;\n+55 enum {dim = GV::dimension};\n+56public:\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+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\n+93 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);\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+95 for (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\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+129 for (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 // 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+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+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+_\bl_\be_\ba_\bf_\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+_\bn_\bo_\bd_\be_\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:_\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+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/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: compositebasis.hh File Reference\n+dune-functions: containerdescriptors.hh File Reference\n \n \n \n \n \n \n \n@@ -71,52 +71,97 @@\n \n
    \n \n
    \n \n-
    compositebasis.hh File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    containerdescriptors.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 <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/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 <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::CompositePreBasis< IMS, SPB >
     A pre-basis for composite bases. More...
    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...
     
    \n \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
    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+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.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,40 +1,91 @@\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-#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+containerdescriptors.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 \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+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 \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:_\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-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+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/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: compositebasis.hh Source File\n+dune-functions: containerdescriptors.hh Source File\n \n \n \n \n \n \n \n@@ -74,482 +74,299 @@\n \n \n
    \n
    \n-
    compositebasis.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_COMPOSITEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONTAINERDESCRIPTORS_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+
    10#include <array>
    \n+
    11#include <cassert>
    \n+
    12#include <functional>
    \n+
    13#include <type_traits>
    \n+
    14#include <vector>
    \n+
    15
    \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-\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+\n+\n+
    22
    \n+
    46namespace Dune::Functions {
    \n+
    \n+
    47namespace ContainerDescriptors {
    \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-
    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+
    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+
    \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-
    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+
    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+
    \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-
    \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+
    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-
    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+
    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+
    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-
    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-
    Definition polynomial.hh:17
    \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-
    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+
    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,566 +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-compositebasis.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_COMPOSITEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_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-15#include \n-16#include \n-17#include \n-18#include \n+10#include \n+11#include \n+12#include \n+13#include \n+14#include \n+15\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+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+_\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-_\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+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+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-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+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+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-_\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+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-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+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 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+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+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-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-_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\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-_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\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 _\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:_\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\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_\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+_\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/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: refinedlagrangebasis.hh File Reference\n+dune-functions: nodes.hh File Reference\n \n \n \n \n \n \n \n@@ -72,61 +72,61 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    refinedlagrangebasis.hh File Reference
    \n+
    nodes.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 <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
    \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 Classes

    class  Dune::Functions::RefinedLagrangePreBasis< GV, k, R >
     A pre-basis for a refined Lagrange bases. More...
    class  Dune::Functions::BasisNodeMixin
     
    class  Dune::Functions::RefinedLagrangeNode< GV, k, R >
    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-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 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<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": "@@ -1,46 +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-_\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+_\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 _\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:_\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:_\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_\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-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:_\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+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/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: refinedlagrangebasis.hh Source File\n+dune-functions: nodes.hh Source File\n \n \n \n \n \n \n \n@@ -74,222 +74,400 @@\n \n \n
    \n
    \n-
    refinedlagrangebasis.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_REFINEDLAGRANGEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_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+
    10#include <cassert>
    \n+
    11#include <memory>
    \n+
    12
    \n+
    13#include <dune/common/indices.hh>
    \n
    14
    \n-
    15#include <dune/localfunctions/refined.hh>
    \n-
    16
    \n-\n-\n-\n-
    20
    \n-
    21#include <dune/geometry/type.hh>
    \n-
    22
    \n-
    23#include <dune/grid/common/mcmgmapper.hh>
    \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+
    22namespace Dune {
    \n+
    23 namespace Functions {
    \n
    24
    \n
    25
    \n-
    26namespace Dune {
    \n-
    27namespace Functions {
    \n+
    26 namespace Impl {
    \n+
    27
    \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+
    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-
    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+
    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-
    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+
    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
    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+
    115 std::size_t treeIndex_;
    \n+
    116 };
    \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-
    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+
    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-\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+\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-
    157
    \n+
    163
    \n
    \n-\n-
    165 {
    \n-
    166 return finiteElement_;
    \n-
    167 }
    \n+\n+
    165 {
    \n+
    166 offset_ = offset;
    \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-
    \n-
    175
    \n-
    \n-
    180 static constexpr unsigned int order()
    \n-
    181 {
    \n-
    182 return k;
    \n-
    183 }
    \n-
    \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-
    185protected:
    \n-\n-\n-
    188};
    \n-
    \n-
    189
    \n-
    190
    \n-
    191
    \n-
    192namespace BasisFactory {
    \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-
    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+
    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-
    225template <typename GV, int k, typename R=double>
    \n-\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} // end namespace Functions
    \n-
    229} // end namespace Dune
    \n-
    230
    \n+
    228 public:
    \n+
    229
    \n+
    230 using Element = typename T::Element;
    \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+
    \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
    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+
    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 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+
    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
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,254 +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-refinedlagrangebasis.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_REFINEDLAGRANGEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n 9\n-10#include \n-11\n-12#include \n-13#include \n+10#include \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/_\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#include \n-22\n-23#include \n+15#include \n+16#include \n+17#include \n+18#include \n+19#include \n+20#include \n+21\n+22namespace _\bD_\bu_\bn_\be {\n+23 namespace Functions {\n 24\n 25\n-26namespace _\bD_\bu_\bn_\be {\n-27namespace Functions {\n+26 namespace Impl {\n+27\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+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-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+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-_\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+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 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+115 std::size_t treeIndex_;\n+116 };\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-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+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_\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+_\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 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+166 offset_ = _\bo_\bf_\bf_\bs_\be_\bt;\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-181 {\n-182 return k;\n-183 }\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-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+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-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+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-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+_\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} // end namespace Functions\n-229} // end namespace Dune\n-230\n+228 public:\n+229\n+_\b2_\b3_\b0 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename T::Element;\n 231\n-232#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\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-_\bn_\bo_\bd_\be_\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+_\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 _\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:_\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:_\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+_\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-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+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 ===============================================================================\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: globalvaluedlocalfiniteelement.hh File Reference\n+dune-functions: taylorhoodbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -70,36 +70,63 @@\n \n
    \n
    \n \n-
    globalvaluedlocalfiniteelement.hh File Reference
    \n+Classes |\n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    taylorhoodbasis.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 <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+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 >
     
    \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,26 +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-_\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 | _\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+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+\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/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: globalvaluedlocalfiniteelement.hh Source File\n+dune-functions: taylorhoodbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,327 +74,412 @@\n \n \n
    \n
    \n-
    globalvaluedlocalfiniteelement.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_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n
    9
    \n-
    10#include <array>
    \n-
    11#include <numeric>
    \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-
    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+
    10#include <dune/common/exceptions.hh>
    \n+
    11#include <dune/common/reservedvector.hh>
    \n+
    12#include <dune/common/indices.hh>
    \n+
    13
    \n+
    14#include <dune/typetree/powernode.hh>
    \n+
    15#include <dune/typetree/compositenode.hh>
    \n+
    16
    \n+\n+
    18
    \n+\n+\n+
    21
    \n+
    22namespace Dune {
    \n+
    23namespace Functions {
    \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+
    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-
    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-
    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+
    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-
    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 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-
    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+
    \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
    \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+
    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-
    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+
    289template<typename GV>
    \n+
    \n+\n+
    291 public PowerBasisNode<LagrangeNode<GV,2>, GV::dimension>
    \n+
    292{
    \n+\n+\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-
    311
    \n-
    312 const LocalValuedLocalBasis* localValuedLocalBasis_;
    \n-
    313 const Element* element_;
    \n-
    314 };
    \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-
    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+
    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 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-
    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+
    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+
    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,341 +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-globalvaluedlocalfiniteelement.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_GLOBALVALUEDLOCALFINITEELEMENT_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_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\n-18#include \n-19\n-20#include \n-21#include \n-22\n-23namespace Dune::Functions::Impl\n-24{\n+10#include \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+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+21\n+22namespace _\bD_\bu_\bn_\be {\n+23namespace Functions {\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+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-97 template\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-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+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-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 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-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+_\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 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-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+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& 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+249 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_1)._\bs_\bi_\bz_\be();\n+250 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bi_\bn_\bd_\bi_\bc_\be_\bs(node.child(_1), multiIndices);\n+251 for (std::size_t i = 0; i = 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& 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+271 multiIndices += subTreeSize;\n+272 }\n+273 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_1)._\bs_\bi_\bz_\be();\n+274 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bi_\bn_\bd_\bi_\bc_\be_\bs(node.child(_1), multiIndices);\n+275 for (std::size_t i = 0; i fullJacobian;\n-294 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);\n+289template\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-296 Transformator::applyJacobian(fullJacobian, x, element_->geometry());\n-297\n-298 for (std::size_t i=0; iorder();\n-310 }\n-311\n-312 const LocalValuedLocalBasis* localValuedLocalBasis_;\n-313 const Element* element_;\n-314 };\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-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+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 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-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+373} // end namespace Functions\n+374} // end namespace Dune\n+375\n+376\n+377#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\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+_\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:_\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/a00188.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00188.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: hierarchicallagrangebasis.hh File Reference\n+dune-functions: rannacherturekbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -74,56 +74,58 @@\n \n
    \n \n-
    hierarchicallagrangebasis.hh File Reference
    \n+
    rannacherturekbasis.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/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 \n

    \n Classes

    class  Dune::Functions::HierarchicalLagrangePreBasis< GV, 1, R >
    class  Dune::Functions::RannacherTurekPreBasis< GV >
     Pre-basis for a Rannacher-Turek basis. More...
     
    class  Dune::Functions::HierarchicalLagrangePreBasis< GV, 2, R >
    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<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.
     
    template<typename GV >
    using Dune::Functions::RannacherTurekBasis = DefaultGlobalBasis< RannacherTurekPreBasis< GV > >
     Rannacher-Turek basis.
     
    \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 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": "@@ -2,41 +2,43 @@\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+rannacherturekbasis.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/_\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/_\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_\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+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:_\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:_\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:_\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+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:_\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:_\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/a00188_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00188_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: rannacherturekbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,128 +74,268 @@\n \n \n
    \n
    \n-
    hierarchicallagrangebasis.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_HIERARCHICALLAGRANGEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n+
    10#include <dune/common/exceptions.hh>
    \n
    11
    \n-
    12#include <dune/common/exceptions.hh>
    \n+
    12#include <dune/grid/common/capabilities.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+
    14#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n+
    15#include <dune/localfunctions/rannacherturek.hh>
    \n+
    16#include <dune/localfunctions/crouzeixraviart.hh>
    \n+
    17
    \n+\n+\n+\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-
    \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+
    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+
    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-
    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+
    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-
    78 };
    \n-
    \n-
    79
    \n
    80
    \n-
    81 namespace BasisFactory {
    \n-
    82
    \n-
    91 template<int k, typename R=double>
    \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-\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+
    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
    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+
    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,141 +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-hierarchicallagrangebasis.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_HIERARCHICALLAGRANGEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_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 \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 \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/_\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-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 / *****************************************************************************\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+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-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+36\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-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+_\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-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+_\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 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+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+_\bl_\be_\ba_\bf_\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 _\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+_\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:_\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:_\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/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: raviartthomasbasis.hh File Reference\n+dune-functions: refinedlagrangebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -74,67 +74,59 @@\n \n
    \n \n-
    raviartthomasbasis.hh File Reference
    \n+
    refinedlagrangebasis.hh File Reference
    \n
    \n
    \n-
    #include <array>
    \n+
    #include <type_traits>
    \n #include <dune/common/exceptions.hh>
    \n-#include <dune/grid/common/capabilities.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/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

    \n Classes

    class  Dune::Functions::RaviartThomasPreBasis< GV, k >
    class  Dune::Functions::RefinedLagrangePreBasis< GV, k, R >
     A pre-basis for a refined Lagrange bases. More...
     
    class  Dune::Functions::RaviartThomasNode< GV, k >
    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+\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.
     
    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 Functions

    template<std::size_t k>
    auto Dune::Functions::BasisFactory::raviartThomas ()
     Create a pre-basis factory that can create a Raviart-Thomas pre-basis.
     
    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": "@@ -2,52 +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-raviartthomasbasis.hh File Reference\n-#include \n+refinedlagrangebasis.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 \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+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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:_\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+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_\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+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_\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+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:_\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+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/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: raviartthomasbasis.hh Source File\n+dune-functions: refinedlagrangebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,462 +74,222 @@\n \n \n
    \n
    \n-
    raviartthomasbasis.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_RAVIARTTHOMASBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_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-
    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+
    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+
    16
    \n+\n+\n+\n+
    20
    \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-
    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-
    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+
    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
    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-
    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+
    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+
    \n+
    153 const Element& element () const
    \n+
    154 {
    \n+
    155 return *element_;
    \n+
    156 }
    \n+
    \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-
    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+
    \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+
    \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-
    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-
    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-
    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-
    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-
    301
    \n-
    302 *it = { codimOffset_[codim] +
    \n-
    303 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \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-
    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+
    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+
    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
    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+
    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 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+
    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,545 +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-raviartthomasbasis.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_RAVIARTTHOMASBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\n 9\n-10#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+10#include \n+11\n+12#include \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/_\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#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-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-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+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 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+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+_\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-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-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+_\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+_\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-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-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-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-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-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-_\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+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-383 };\n-384}\n-385\n-386} // end namespace BasisFactory\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+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+230\n+231\n+232#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_REFINEDLAGRANGEBASIS_HH\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-_\bl_\be_\ba_\bf_\bp_\br_\be_\bb_\ba_\bs_\bi_\bs_\bm_\bi_\bx_\bi_\bn_\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-_\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_\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:_\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:_\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_\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+_\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 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+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, 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+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 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+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 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+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/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: lagrangebasis.hh File Reference\n+dune-functions: subspacelocalview.hh File Reference\n \n \n \n \n \n \n \n@@ -71,65 +71,37 @@\n \n \n \n
    \n \n-
    lagrangebasis.hh File Reference
    \n+Namespaces
    \n+
    subspacelocalview.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 <dune/common/concept.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 \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::LagrangeNode< GV, k, R >
    class  Dune::Functions::SubspaceLocalView< RLV, PP >
     The restriction of a finite element basis to a single element. 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 = -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-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.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,49 +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 * _\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-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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\n+subspacelocalview.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 _\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-\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:_\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-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-\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-\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: lagrangebasis.hh Source File\n+dune-functions: subspacelocalview.hh Source File\n \n \n \n \n \n \n \n@@ -74,590 +74,191 @@\n \n \n
    \n
    \n-
    lagrangebasis.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_LAGRANGEBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n
    9
    \n-
    10#include <type_traits>
    \n-
    11#include <dune/common/exceptions.hh>
    \n+
    10
    \n+
    11#include <tuple>
    \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+
    13#include <dune/common/concept.hh>
    \n+
    14
    \n+
    15#include <dune/typetree/childextraction.hh>
    \n
    16
    \n-\n-\n-\n+\n+
    18
    \n+
    19
    \n
    20
    \n-
    21
    \n-
    22namespace Dune {
    \n-
    23namespace Functions {
    \n+
    21namespace Dune {
    \n+
    22namespace Functions {
    \n+
    23
    \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-
    34// *****************************************************************************
    \n-
    35
    \n-
    36template<typename GV, int k, typename R=double>
    \n-
    37class LagrangeNode;
    \n+
    25
    \n+
    26template<class RB, class PP>
    \n+
    27class SubspaceBasis;
    \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-
    39template<typename GV, int k, typename R=double>
    \n-
    40class LagrangePreBasis;
    \n-
    41
    \n-
    42
    \n+
    39 using RootLocalView = RLV;
    \n+
    40
    \n+\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+\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-
    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 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+
    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-
    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-
    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-
    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 // 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+
    \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
    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+
    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 \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,715 +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-lagrangebasis.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_LAGRANGEBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n+8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n 9\n-10#include \n-11#include \n+10\n+11#include \n 12\n-13#include \n-14#include \n-15#include \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/_\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+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-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-/ *****************************************************************************\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+25\n+26template\n+27class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs;\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-39template\n-40class LagrangePreBasis;\n-41\n-42\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-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+_\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_\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 _\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+_\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_\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 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 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 // 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-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-_\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-_\bn_\bo_\bd_\be_\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:_\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+_\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 _\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+_\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 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 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+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+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 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+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-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 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+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+_\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: transformedindexbasis.hh File Reference\n+dune-functions: istlvectorbackend.hh File Reference\n \n \n \n \n \n \n \n@@ -65,81 +65,61 @@\n
    \n \n \n \n \n \n \n
    \n \n-
    transformedindexbasis.hh File Reference
    \n+
    istlvectorbackend.hh File Reference
    \n
    \n
    \n-
    #include <tuple>
    \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/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/common/concept.hh>
    \n+#include <dune/functions/common/indexaccess.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-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...
     
    \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+\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 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,74 +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-transformedindexbasis.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 \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 \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-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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:_\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-\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+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/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: transformedindexbasis.hh Source File\n+dune-functions: istlvectorbackend.hh Source File\n \n \n \n \n \n \n \n@@ -70,363 +70,351 @@\n
    \n \n \n \n \n \n \n
    \n-
    transformedindexbasis.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_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n-
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n+
    7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n+
    8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n
    9
    \n-
    10#include <tuple>
    \n+
    10#include <cstddef>
    \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+
    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
    \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-
    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-
    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-
    \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+
    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+
    \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-
    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+
    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-
    \n-\n-
    148 {
    \n-
    149 return rawPreBasis_.maxNodeSize();
    \n+
    146 template<class... Args>
    \n+
    147 static void forwardToResize(Args&&... args)
    \n+
    148 {
    \n+
    149 resize(std::forward<Args>(args)...);
    \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+
    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-
    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+
    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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,416 +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- * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-transformedindexbasis.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_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n-8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_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#include \n+12#include \n+13\n+14#include \n+15#include \n 16#include \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-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-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-_\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+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+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 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-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+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-_\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+146 template\n+147 static void forwardToResize(Args&&... args)\n 148 {\n-149 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.maxNodeSize();\n+149 resize(std::forward(args)...);\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-_\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-_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\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-_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\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:_\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-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+_\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/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/a01315.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01315.html", "unified_diff": "@@ -76,15 +76,15 @@\n
    Dune::Functions::HasStaticSize< T > Struct Template Reference
    \n \n
    \n \n

    Check if type is a statically sized container. \n More...

    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::HasStaticSize< T >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -92,15 +92,15 @@\n \n
    \n

    Detailed Description

    \n
    template<class T>
    \n struct Dune::Functions::HasStaticSize< T >

    Check if type is a statically sized container.

    \n

    Derives from std::true_type or std::false_type

    \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/a01319.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01319.html", "unified_diff": "@@ -76,15 +76,15 @@\n
    Dune::Functions::StaticSizeOrZero< T > Struct Template Reference
    \n \n
    \n \n

    Obtain size of statically sized container, or 0 if dynamic size. \n More...

    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::StaticSizeOrZero< T >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -92,15 +92,15 @@\n \n
    \n

    Detailed Description

    \n
    template<class T>
    \n struct Dune::Functions::StaticSizeOrZero< T >

    Obtain size of statically sized container, or 0 if dynamic size.

    \n

    Derives from std::integral_constant<std::size_t, size>

    \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/a01703.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01703.html", "unified_diff": "@@ -79,15 +79,15 @@\n Static Public Attributes |\n Protected Attributes |\n List of all members \n
    Dune::Functions::LagrangeDGPreBasis< GV, k > Class Template Reference
    \n \n
    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::LagrangeDGPreBasis< GV, k >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -940,15 +940,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/a01711.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01711.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Functions::LeafPreBasisMixin< Derived > Class Template Reference
    \n \n
    \n \n

    A generic MixIn class for PreBasis. \n More...

    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::LeafPreBasisMixin< Derived >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -375,15 +375,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/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/a01911.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01911.html", "unified_diff": "@@ -80,15 +80,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members\n
    Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE > Class Template Reference
    \n \n
    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -486,15 +486,15 @@\n \n

    \n Public Types

    using Signature = Range(Domain)
     
    using RawSignature = typename SignatureTraits< Signature >::RawSignature
     
    \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/a01915.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01915.html", "unified_diff": "@@ -76,15 +76,15 @@\n \n
    Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::Data Struct Reference
    \n \n
    \n \n-

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

    \n+

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

    \n \n \n \n \n \n \n@@ -155,15 +155,15 @@\n \n

    \n Public Attributes

    EntitySet entitySet
     
    std::shared_ptr< const Basisbasis
     
    \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/a01919.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01919.html", "unified_diff": "@@ -79,15 +79,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members \n
    Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::LocalFunctionBase Class Reference
    \n \n
    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::LocalFunctionBase:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -544,15 +544,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/a01923.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01923.html", "unified_diff": "@@ -83,15 +83,15 @@\n
    Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF > Class Template Reference
    \n \n
    \n \n

    Derivative of a DiscreteGlobalBasisFunction \n More...

    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -683,15 +683,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/a01927.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01927.html", "unified_diff": "@@ -84,15 +84,15 @@\n
    Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R > Class Template Reference
    \n \n
    \n \n

    A grid function induced by a global basis and a coefficient vector. \n More...

    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -779,15 +779,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/a01931.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01931.html", "unified_diff": "@@ -80,15 +80,15 @@\n Protected Attributes |\n Friends |\n List of all members \n
    Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >::LocalFunction Class Reference
    \n \n
    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >::LocalFunction:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -585,15 +585,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/a01935.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01935.html", "unified_diff": "@@ -83,15 +83,15 @@\n
    Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >::LocalFunction Class Reference
    \n \n
    \n \n

    local function evaluating the derivative in reference coordinates \n More...

    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >::LocalFunction:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -627,15 +627,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/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
     
     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
     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 Files

     analyticgridviewfunction.hh
     analyticgridviewfunction.hh
     
     composedgridfunction.hh
     
     discreteglobalbasisfunction.hh
     discreteglobalbasisfunction.hh
     
     facenormalgridfunction.hh
     facenormalgridfunction.hh
     
     gridfunction.hh
     gridfunction.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+\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
     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
     lagrangedgbasis.hh
     
     leafprebasismappermixin.hh
     
     leafprebasismixin.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,123 +4,91 @@\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- a00059.html\n+ a00005.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- a00056.html\n+ a00002.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- a02936.html\n- Dune::Functions::Concept::ConstVectorBackend\n- Dune::Functions::Concept::VectorBackend\n- Dune\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::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- Dune::Functions::Concept::CompositeBasisNode\n- Dune::Functions::Concept::BasisTree\n- Dune::Functions::Concept::PreBasis\n- Dune::Functions::Concept::LocalView\n- Dune::Functions::Concept::GlobalBasis\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- a00092.html\n- dune/functions/common/indexaccess.hh\n+ a00197.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- a00020.html\n+ a00029.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- a00008.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+ a00011.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::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- a00023.html\n- dune/functions/common/type_traits.hh\n+ a00059.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- a00053.html\n- dune/functions/common/signature.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/common/functionconcepts.hh\n+ a00038.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- a00047.html\n- dune/functions/common/signature.hh\n- dune/functions/gridfunctions/localderivativetraits.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n+ a00014.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,144 +98,144 @@\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- a00014.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- a00041.html\n+ a00020.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- a00011.html\n- dune/functions/common/defaultderivativetraits.hh\n- dune/functions/common/differentiablefunction.hh\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+ 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 a00035.html\n- dune/functions/common/type_traits.hh\n- dune/functions/common/differentiablefunction_imp.hh\n+ dune/functions/common/type_traits.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- a00032.html\n+ a00026.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- a00026.html\n+ a00050.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+ a00056.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- a00005.html\n+ a00017.html\n Dune::Functions::ReservedDeque\n Dune\n Dune::Functions\n \n #define\n CHECKSIZE\n- a00005.html\n+ a00017.html\n a65543e75bc949ecdb95a25b1f4e11675\n (X)\n \n \n \n signature.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00044.html\n- dune/functions/common/defaultderivativetraits.hh\n+ a00008.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- a00038.html\n- dune/functions/common/type_traits.hh\n+ a00047.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 /build/reproducible-path/dune-functions-2.10.0/dune/functions/common/\n- a00017.html\n+ a00023.html\n Dune::Functions::HasStaticSize\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- a00029.html\n- dune/functions/common/type_traits.hh\n- dune/functions/common/interfaces.hh\n- dune/functions/common/polymorphicsmallobject.hh\n+ a00041.html\n+ dune/functions/common/type_traits.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- a00002.html\n- dune/functions/common/functionconcepts.hh\n+ a00032.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- a00152.html\n+ a00158.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,530 +243,562 @@\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- a00176.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- a00173.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+ a00149.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- a00107.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n- dune/functions/functionspacebases/leafprebasismixin.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::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- a00179.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+ a00089.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/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+ backends/concepts.hh\n+ /build/reproducible-path/dune-functions-2.10.0/dune/functions/backends/\n+ a02936.html\n+ Dune::Functions::Concept::ConstVectorBackend\n+ Dune::Functions::Concept::VectorBackend\n+ Dune\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::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+ Dune::Functions::Concept::CompositeBasisNode\n+ Dune::Functions::Concept::BasisTree\n+ Dune::Functions::Concept::PreBasis\n+ Dune::Functions::Concept::LocalView\n+ Dune::Functions::Concept::GlobalBasis\n+ Dune\n+ Dune::Functions\n+ Dune::Functions::Concept\n+ \n+ \n containerdescriptors.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00149.html\n- dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/basistags.hh\n+ a00179.html\n+ dune/functions/common/type_traits.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- a00101.html\n- dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/defaultlocalview.hh\n+ a00152.html\n+ dune/functions/common/type_traits.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- a00170.html\n- dune/functions/common/overflowarray.hh\n- dune/functions/common/multiindex.hh\n+ a00128.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- a00113.html\n+ a00140.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- a00146.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+ a00116.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/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- a00131.html\n- dune/functions/common/multiindex.hh\n+ a00143.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- a00116.html\n+ a00155.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- a00185.html\n+ a00137.html\n Dune\n Dune::Functions\n \n \n hierarchicallagrangebasis.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00188.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n- dune/functions/functionspacebases/lfeprebasismixin.hh\n+ a00092.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- a00095.html\n+ a00170.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- a00119.html\n- dune/functions/common/indexaccess.hh\n- dune/functions/common/utility.hh\n- dune/functions/common/type_traits.hh\n+ a00173.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- a00167.html\n- dune/functions/gridfunctions/gridviewfunction.hh\n- dune/functions/common/functionconcepts.hh\n+ a00131.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/functionspacebases/flatvectorview.hh\n- dune/functions/functionspacebases/hierarchicnodetorangemap.hh\n+ dune/functions/backends/istlvectorbackend.hh\n+ dune/functions/functionspacebases/flatvectorview.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- a00194.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n- dune/functions/functionspacebases/leafprebasismixin.hh\n+ a00122.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- a00137.html\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+ a00119.html\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 leafprebasismappermixin.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n a00098.html\n- dune/functions/functionspacebases/leafprebasismixin.hh\n+ dune/functions/functionspacebases/leafprebasismixin.hh\n Dune::Functions::LeafPreBasisMapperMixin\n Dune\n Dune::Functions\n \n \n leafprebasismixin.hh\n /build/reproducible-path/dune-functions-2.10.0/dune/functions/functionspacebases/\n- a00125.html\n- dune/functions/functionspacebases/containerdescriptors.hh\n+ a00104.html\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- a00161.html\n+ a00101.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- a00110.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+ a00134.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::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- a00143.html\n+ a00182.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- a00164.html\n+ a00146.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- a00134.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+ a00125.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/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- a00104.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n- dune/functions/functionspacebases/leafprebasismixin.hh\n+ a00188.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- a00191.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+ a00161.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- a00182.html\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ a00191.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- a00128.html\n+ a00107.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- a00158.html\n+ a00110.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- a00140.html\n- dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/subspacelocalview.hh\n+ a00095.html\n+ dune/functions/common/type_traits.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- a00122.html\n+ a00194.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- a00155.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/lagrangebasis.hh\n- dune/functions/functionspacebases/defaultglobalbasis.hh\n+ a00185.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- a00197.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+ a00164.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/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- a00065.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+ a00068.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 a00080.html\n- dune/functions/common/defaultderivativetraits.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/gridfunctions/gridfunction.hh\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- a00071.html\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+ a00077.html\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/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- a00068.html\n- dune/functions/gridfunctions/gridfunction.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n+ a00065.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- a00074.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+ a00086.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 a00062.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/type_traits.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- a00083.html\n+ a00071.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- a00077.html\n- dune/functions/gridfunctions/gridfunction.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n- dune/functions/gridfunctions/analyticgridviewfunction.hh\n+ a00074.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- a00086.html\n- dune/functions/common/defaultderivativetraits.hh\n+ a00083.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+\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
     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
     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
      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
     flatvectorview.hh
     globalvaluedlocalfiniteelement.hh
     hierarchicallagrangebasis.hh
     hierarchicnodetorangemap.hh
     hierarchicvectorwrapper.hh
     interpolate.hh
     lagrangebasis.hh
     lagrangedgbasis.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
     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
     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
      gridfunctions
     analyticgridviewfunction.hh
     analyticgridviewfunction.hh
     composedgridfunction.hh
     discreteglobalbasisfunction.hh
     facenormalgridfunction.hh
     gridfunction.hh
     discreteglobalbasisfunction.hh
     facenormalgridfunction.hh
     gridfunction.hh
     gridfunction_imp.hh
     gridviewentityset.hh
     gridviewfunction.hh
     localderivativetraits.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/a00113.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00089.html", "comments": ["Files 78% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: defaultnodetorangemap.hh File Reference\n+dune-functions: compositebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,49 +71,52 @@\n \n \n \n
    \n \n-
    defaultnodetorangemap.hh File Reference
    \n+Namespaces
    \n+
    compositebasis.hh File Reference
    \n \n
    \n-
    #include <dune/common/concept.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/typetree/traversal.hh>
    \n-#include <dune/typetree/visitor.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+

    Go to the source code of this file.

    \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...
     
    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor
    class  Dune::Functions::CompositePreBasis< IMS, SPB >
     A pre-basis for composite bases. 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-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)))
     
    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,38 +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-_\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+_\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 \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_\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-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:_\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:_\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-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+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\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+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"}]}]}]}]}]}