{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.2I7N86he/b1/dune-functions_2.9.0-2_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.2I7N86he/b2/dune-functions_2.9.0-2_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,3 +1,3 @@\n \n 87ef3cb1cc8038994cb0a9839b5a0db7 83208 libdevel optional libdune-functions-dev_2.9.0-2_amd64.deb\n- 6a20ed7c8a716efdef4a8a178755c98d 2103804 doc optional libdune-functions-doc_2.9.0-2_all.deb\n+ 879c7721aa0f661c7869300e8bea377e 2101856 doc optional libdune-functions-doc_2.9.0-2_all.deb\n"}, {"source1": "libdune-functions-doc_2.9.0-2_all.deb", "source2": "libdune-functions-doc_2.9.0-2_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-01-12 22:26:33.000000 debian-binary\n--rw-r--r-- 0 0 0 13248 2023-01-12 22:26:33.000000 control.tar.xz\n--rw-r--r-- 0 0 0 2090364 2023-01-12 22:26:33.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 13220 2023-01-12 22:26:33.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 2088444 2023-01-12 22:26:33.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}, {"source1": "line order", "source2": "line order", "unified_diff": "@@ -31,20 +31,20 @@\n usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00044.html\n usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00047.html\n usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00050.html\n usr/share/doc/libdune-functions-doc/doxygen/a00050_source.html\n+usr/share/doc/libdune-functions-doc/doxygen/a00053.html\n+usr/share/doc/libdune-functions-doc/doxygen/a00053_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00056.html\n usr/share/doc/libdune-functions-doc/doxygen/a00056_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00059.html\n usr/share/doc/libdune-functions-doc/doxygen/a00059_source.html\n-usr/share/doc/libdune-functions-doc/doxygen/a00062.html\n-usr/share/doc/libdune-functions-doc/doxygen/a00062_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00065.html\n usr/share/doc/libdune-functions-doc/doxygen/a00065_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00068.html\n usr/share/doc/libdune-functions-doc/doxygen/a00068_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00071.html\n usr/share/doc/libdune-functions-doc/doxygen/a00071_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00074.html\n"}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -3,140 +3,140 @@\n drwxr-xr-x 0 root (0) root (0) 0 2023-01-12 22:26:33.000000 ./usr/share/\n drwxr-xr-x 0 root (0) root (0) 0 2023-01-12 22:26:33.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/\n -rw-r--r-- 0 root (0) root (0) 810 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/changelog.Debian.gz\n -rw-r--r-- 0 root (0) root (0) 4118 2022-11-16 12:11:40.000000 ./usr/share/doc/libdune-functions-doc/changelog.gz\n -rw-r--r-- 0 root (0) root (0) 3331 2023-01-12 15:07:37.000000 ./usr/share/doc/libdune-functions-doc/copyright\n drwxr-xr-x 0 root (0) root (0) 0 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/\n--rw-r--r-- 0 root (0) root (0) 4707 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002.html\n--rw-r--r-- 0 root (0) root (0) 13985 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002_source.html\n--rw-r--r-- 0 root (0) root (0) 5104 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005.html\n--rw-r--r-- 0 root (0) root (0) 22582 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005_source.html\n--rw-r--r-- 0 root (0) root (0) 6840 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008.html\n--rw-r--r-- 0 root (0) root (0) 38315 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008_source.html\n--rw-r--r-- 0 root (0) root (0) 8266 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011.html\n--rw-r--r-- 0 root (0) root (0) 17376 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011_source.html\n--rw-r--r-- 0 root (0) root (0) 10071 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014.html\n--rw-r--r-- 0 root (0) root (0) 134397 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014_source.html\n--rw-r--r-- 0 root (0) root (0) 6407 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017.html\n--rw-r--r-- 0 root (0) root (0) 28928 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html\n--rw-r--r-- 0 root (0) root (0) 7438 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020.html\n--rw-r--r-- 0 root (0) root (0) 47656 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020_source.html\n--rw-r--r-- 0 root (0) root (0) 5684 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023.html\n--rw-r--r-- 0 root (0) root (0) 36641 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html\n--rw-r--r-- 0 root (0) root (0) 5921 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026.html\n--rw-r--r-- 0 root (0) root (0) 12738 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026_source.html\n+-rw-r--r-- 0 root (0) root (0) 10801 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002.html\n+-rw-r--r-- 0 root (0) root (0) 226272 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002_source.html\n+-rw-r--r-- 0 root (0) root (0) 6982 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005.html\n+-rw-r--r-- 0 root (0) root (0) 80007 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005_source.html\n+-rw-r--r-- 0 root (0) root (0) 9255 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008.html\n+-rw-r--r-- 0 root (0) root (0) 121650 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008_source.html\n+-rw-r--r-- 0 root (0) root (0) 8968 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011.html\n+-rw-r--r-- 0 root (0) root (0) 77912 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011_source.html\n+-rw-r--r-- 0 root (0) root (0) 5546 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014.html\n+-rw-r--r-- 0 root (0) root (0) 7889 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014_source.html\n+-rw-r--r-- 0 root (0) root (0) 5700 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017.html\n+-rw-r--r-- 0 root (0) root (0) 42366 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html\n+-rw-r--r-- 0 root (0) root (0) 5462 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020.html\n+-rw-r--r-- 0 root (0) root (0) 12949 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020_source.html\n+-rw-r--r-- 0 root (0) root (0) 8081 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023.html\n+-rw-r--r-- 0 root (0) root (0) 26801 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html\n+-rw-r--r-- 0 root (0) root (0) 9166 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026.html\n+-rw-r--r-- 0 root (0) root (0) 85827 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026_source.html\n -rw-r--r-- 0 root (0) root (0) 8698 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029.html\n -rw-r--r-- 0 root (0) root (0) 43949 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html\n--rw-r--r-- 0 root (0) root (0) 5364 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032.html\n--rw-r--r-- 0 root (0) root (0) 35754 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032_source.html\n--rw-r--r-- 0 root (0) root (0) 8968 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035.html\n--rw-r--r-- 0 root (0) root (0) 77912 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html\n--rw-r--r-- 0 root (0) root (0) 6568 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038.html\n--rw-r--r-- 0 root (0) root (0) 73885 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038_source.html\n--rw-r--r-- 0 root (0) root (0) 9255 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041.html\n--rw-r--r-- 0 root (0) root (0) 121650 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html\n+-rw-r--r-- 0 root (0) root (0) 7293 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032.html\n+-rw-r--r-- 0 root (0) root (0) 32938 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032_source.html\n+-rw-r--r-- 0 root (0) root (0) 8380 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035.html\n+-rw-r--r-- 0 root (0) root (0) 57098 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html\n+-rw-r--r-- 0 root (0) root (0) 5909 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038.html\n+-rw-r--r-- 0 root (0) root (0) 17233 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038_source.html\n+-rw-r--r-- 0 root (0) root (0) 13369 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041.html\n+-rw-r--r-- 0 root (0) root (0) 23327 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html\n -rw-r--r-- 0 root (0) root (0) 5703 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044.html\n -rw-r--r-- 0 root (0) root (0) 17040 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html\n--rw-r--r-- 0 root (0) root (0) 8180 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047.html\n--rw-r--r-- 0 root (0) root (0) 49233 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html\n--rw-r--r-- 0 root (0) root (0) 8081 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050.html\n--rw-r--r-- 0 root (0) root (0) 26801 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050_source.html\n--rw-r--r-- 0 root (0) root (0) 10801 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056.html\n--rw-r--r-- 0 root (0) root (0) 226272 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056_source.html\n--rw-r--r-- 0 root (0) root (0) 5462 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059.html\n--rw-r--r-- 0 root (0) root (0) 12949 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059_source.html\n--rw-r--r-- 0 root (0) root (0) 8252 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00062.html\n--rw-r--r-- 0 root (0) root (0) 53028 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00062_source.html\n--rw-r--r-- 0 root (0) root (0) 7187 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065.html\n--rw-r--r-- 0 root (0) root (0) 30973 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065_source.html\n--rw-r--r-- 0 root (0) root (0) 8388 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068.html\n--rw-r--r-- 0 root (0) root (0) 53182 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068_source.html\n--rw-r--r-- 0 root (0) root (0) 8380 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071.html\n--rw-r--r-- 0 root (0) root (0) 57098 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071_source.html\n--rw-r--r-- 0 root (0) root (0) 6982 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074.html\n--rw-r--r-- 0 root (0) root (0) 80007 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074_source.html\n--rw-r--r-- 0 root (0) root (0) 8656 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077.html\n--rw-r--r-- 0 root (0) root (0) 69065 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077_source.html\n--rw-r--r-- 0 root (0) root (0) 8830 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080.html\n--rw-r--r-- 0 root (0) root (0) 39644 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html\n--rw-r--r-- 0 root (0) root (0) 10835 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083.html\n--rw-r--r-- 0 root (0) root (0) 58829 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083_source.html\n--rw-r--r-- 0 root (0) root (0) 5909 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086.html\n--rw-r--r-- 0 root (0) root (0) 17233 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086_source.html\n--rw-r--r-- 0 root (0) root (0) 5700 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089.html\n--rw-r--r-- 0 root (0) root (0) 42366 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html\n--rw-r--r-- 0 root (0) root (0) 5546 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092.html\n--rw-r--r-- 0 root (0) root (0) 7889 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092_source.html\n--rw-r--r-- 0 root (0) root (0) 9166 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095.html\n--rw-r--r-- 0 root (0) root (0) 85827 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095_source.html\n--rw-r--r-- 0 root (0) root (0) 7324 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098.html\n--rw-r--r-- 0 root (0) root (0) 24460 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html\n--rw-r--r-- 0 root (0) root (0) 7293 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101.html\n--rw-r--r-- 0 root (0) root (0) 32938 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101_source.html\n--rw-r--r-- 0 root (0) root (0) 8493 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104.html\n--rw-r--r-- 0 root (0) root (0) 59683 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html\n--rw-r--r-- 0 root (0) root (0) 8418 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107.html\n--rw-r--r-- 0 root (0) root (0) 46970 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html\n--rw-r--r-- 0 root (0) root (0) 13369 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110.html\n--rw-r--r-- 0 root (0) root (0) 23327 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110_source.html\n--rw-r--r-- 0 root (0) root (0) 8523 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113.html\n--rw-r--r-- 0 root (0) root (0) 74873 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html\n--rw-r--r-- 0 root (0) root (0) 5025 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116.html\n--rw-r--r-- 0 root (0) root (0) 49850 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116_source.html\n--rw-r--r-- 0 root (0) root (0) 8255 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119.html\n--rw-r--r-- 0 root (0) root (0) 53468 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html\n--rw-r--r-- 0 root (0) root (0) 5151 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122.html\n--rw-r--r-- 0 root (0) root (0) 21332 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html\n--rw-r--r-- 0 root (0) root (0) 6395 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125.html\n--rw-r--r-- 0 root (0) root (0) 10801 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125_source.html\n--rw-r--r-- 0 root (0) root (0) 6962 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128.html\n--rw-r--r-- 0 root (0) root (0) 18541 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128_source.html\n--rw-r--r-- 0 root (0) root (0) 5272 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131.html\n--rw-r--r-- 0 root (0) root (0) 13252 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131_source.html\n--rw-r--r-- 0 root (0) root (0) 6291 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134.html\n--rw-r--r-- 0 root (0) root (0) 22868 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134_source.html\n--rw-r--r-- 0 root (0) root (0) 7866 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137.html\n--rw-r--r-- 0 root (0) root (0) 27805 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137_source.html\n--rw-r--r-- 0 root (0) root (0) 7755 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140.html\n--rw-r--r-- 0 root (0) root (0) 29314 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140_source.html\n--rw-r--r-- 0 root (0) root (0) 6685 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143.html\n--rw-r--r-- 0 root (0) root (0) 16541 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143_source.html\n--rw-r--r-- 0 root (0) root (0) 6897 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146.html\n--rw-r--r-- 0 root (0) root (0) 48169 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146_source.html\n--rw-r--r-- 0 root (0) root (0) 10273 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149.html\n--rw-r--r-- 0 root (0) root (0) 50957 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149_source.html\n--rw-r--r-- 0 root (0) root (0) 5079 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152.html\n--rw-r--r-- 0 root (0) root (0) 10602 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152_source.html\n--rw-r--r-- 0 root (0) root (0) 5334 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155.html\n--rw-r--r-- 0 root (0) root (0) 51665 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155_source.html\n--rw-r--r-- 0 root (0) root (0) 4593 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158.html\n--rw-r--r-- 0 root (0) root (0) 18426 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158_source.html\n--rw-r--r-- 0 root (0) root (0) 5179 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161.html\n--rw-r--r-- 0 root (0) root (0) 29257 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161_source.html\n--rw-r--r-- 0 root (0) root (0) 4586 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164.html\n--rw-r--r-- 0 root (0) root (0) 13991 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164_source.html\n--rw-r--r-- 0 root (0) root (0) 5526 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167.html\n--rw-r--r-- 0 root (0) root (0) 26680 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167_source.html\n--rw-r--r-- 0 root (0) root (0) 15791 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170.html\n--rw-r--r-- 0 root (0) root (0) 50003 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170_source.html\n--rw-r--r-- 0 root (0) root (0) 23372 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173.html\n--rw-r--r-- 0 root (0) root (0) 70814 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173_source.html\n--rw-r--r-- 0 root (0) root (0) 5658 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176.html\n--rw-r--r-- 0 root (0) root (0) 12235 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176_source.html\n--rw-r--r-- 0 root (0) root (0) 7849 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179.html\n--rw-r--r-- 0 root (0) root (0) 16030 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179_source.html\n--rw-r--r-- 0 root (0) root (0) 7143 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182.html\n--rw-r--r-- 0 root (0) root (0) 15826 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182_source.html\n--rw-r--r-- 0 root (0) root (0) 6929 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185.html\n--rw-r--r-- 0 root (0) root (0) 50447 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185_source.html\n--rw-r--r-- 0 root (0) root (0) 6161 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188.html\n--rw-r--r-- 0 root (0) root (0) 27531 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188_source.html\n--rw-r--r-- 0 root (0) root (0) 7400 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191.html\n--rw-r--r-- 0 root (0) root (0) 11624 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191_source.html\n+-rw-r--r-- 0 root (0) root (0) 8830 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047.html\n+-rw-r--r-- 0 root (0) root (0) 39644 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html\n+-rw-r--r-- 0 root (0) root (0) 8180 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050.html\n+-rw-r--r-- 0 root (0) root (0) 49233 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050_source.html\n+-rw-r--r-- 0 root (0) root (0) 8388 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053.html\n+-rw-r--r-- 0 root (0) root (0) 53182 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053_source.html\n+-rw-r--r-- 0 root (0) root (0) 5364 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056.html\n+-rw-r--r-- 0 root (0) root (0) 35754 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056_source.html\n+-rw-r--r-- 0 root (0) root (0) 8493 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059.html\n+-rw-r--r-- 0 root (0) root (0) 59683 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059_source.html\n+-rw-r--r-- 0 root (0) root (0) 8523 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065.html\n+-rw-r--r-- 0 root (0) root (0) 74873 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065_source.html\n+-rw-r--r-- 0 root (0) root (0) 8252 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068.html\n+-rw-r--r-- 0 root (0) root (0) 53028 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068_source.html\n+-rw-r--r-- 0 root (0) root (0) 7324 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071.html\n+-rw-r--r-- 0 root (0) root (0) 24460 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071_source.html\n+-rw-r--r-- 0 root (0) root (0) 10835 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074.html\n+-rw-r--r-- 0 root (0) root (0) 58829 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074_source.html\n+-rw-r--r-- 0 root (0) root (0) 5025 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077.html\n+-rw-r--r-- 0 root (0) root (0) 49850 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077_source.html\n+-rw-r--r-- 0 root (0) root (0) 8418 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080.html\n+-rw-r--r-- 0 root (0) root (0) 46970 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html\n+-rw-r--r-- 0 root (0) root (0) 8656 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083.html\n+-rw-r--r-- 0 root (0) root (0) 69065 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083_source.html\n+-rw-r--r-- 0 root (0) root (0) 6568 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086.html\n+-rw-r--r-- 0 root (0) root (0) 73885 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086_source.html\n+-rw-r--r-- 0 root (0) root (0) 7187 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089.html\n+-rw-r--r-- 0 root (0) root (0) 30973 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html\n+-rw-r--r-- 0 root (0) root (0) 5334 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092.html\n+-rw-r--r-- 0 root (0) root (0) 51665 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092_source.html\n+-rw-r--r-- 0 root (0) root (0) 6962 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095.html\n+-rw-r--r-- 0 root (0) root (0) 18541 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095_source.html\n+-rw-r--r-- 0 root (0) root (0) 5272 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098.html\n+-rw-r--r-- 0 root (0) root (0) 13252 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html\n+-rw-r--r-- 0 root (0) root (0) 15791 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101.html\n+-rw-r--r-- 0 root (0) root (0) 50003 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101_source.html\n+-rw-r--r-- 0 root (0) root (0) 4586 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104.html\n+-rw-r--r-- 0 root (0) root (0) 13991 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html\n+-rw-r--r-- 0 root (0) root (0) 5526 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107.html\n+-rw-r--r-- 0 root (0) root (0) 26680 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html\n+-rw-r--r-- 0 root (0) root (0) 4593 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110.html\n+-rw-r--r-- 0 root (0) root (0) 18426 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110_source.html\n+-rw-r--r-- 0 root (0) root (0) 6897 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113.html\n+-rw-r--r-- 0 root (0) root (0) 48169 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html\n+-rw-r--r-- 0 root (0) root (0) 7143 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116.html\n+-rw-r--r-- 0 root (0) root (0) 15826 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116_source.html\n+-rw-r--r-- 0 root (0) root (0) 5179 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119.html\n+-rw-r--r-- 0 root (0) root (0) 29257 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html\n+-rw-r--r-- 0 root (0) root (0) 7849 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122.html\n+-rw-r--r-- 0 root (0) root (0) 16030 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html\n+-rw-r--r-- 0 root (0) root (0) 6685 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125.html\n+-rw-r--r-- 0 root (0) root (0) 16541 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125_source.html\n+-rw-r--r-- 0 root (0) root (0) 10273 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128.html\n+-rw-r--r-- 0 root (0) root (0) 50957 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128_source.html\n+-rw-r--r-- 0 root (0) root (0) 7755 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131.html\n+-rw-r--r-- 0 root (0) root (0) 29314 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131_source.html\n+-rw-r--r-- 0 root (0) root (0) 7866 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134.html\n+-rw-r--r-- 0 root (0) root (0) 27805 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134_source.html\n+-rw-r--r-- 0 root (0) root (0) 5658 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137.html\n+-rw-r--r-- 0 root (0) root (0) 12235 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137_source.html\n+-rw-r--r-- 0 root (0) root (0) 5079 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140.html\n+-rw-r--r-- 0 root (0) root (0) 10602 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140_source.html\n+-rw-r--r-- 0 root (0) root (0) 6929 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143.html\n+-rw-r--r-- 0 root (0) root (0) 50447 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143_source.html\n+-rw-r--r-- 0 root (0) root (0) 6291 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146.html\n+-rw-r--r-- 0 root (0) root (0) 22868 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146_source.html\n+-rw-r--r-- 0 root (0) root (0) 7400 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149.html\n+-rw-r--r-- 0 root (0) root (0) 11624 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149_source.html\n+-rw-r--r-- 0 root (0) root (0) 6161 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152.html\n+-rw-r--r-- 0 root (0) root (0) 27531 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152_source.html\n+-rw-r--r-- 0 root (0) root (0) 23372 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155.html\n+-rw-r--r-- 0 root (0) root (0) 70814 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155_source.html\n+-rw-r--r-- 0 root (0) root (0) 8255 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158.html\n+-rw-r--r-- 0 root (0) root (0) 53468 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158_source.html\n+-rw-r--r-- 0 root (0) root (0) 5151 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161.html\n+-rw-r--r-- 0 root (0) root (0) 21332 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161_source.html\n+-rw-r--r-- 0 root (0) root (0) 6395 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164.html\n+-rw-r--r-- 0 root (0) root (0) 10801 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164_source.html\n+-rw-r--r-- 0 root (0) root (0) 7438 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167.html\n+-rw-r--r-- 0 root (0) root (0) 47656 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167_source.html\n+-rw-r--r-- 0 root (0) root (0) 5104 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170.html\n+-rw-r--r-- 0 root (0) root (0) 22582 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170_source.html\n+-rw-r--r-- 0 root (0) root (0) 6407 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173.html\n+-rw-r--r-- 0 root (0) root (0) 28928 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173_source.html\n+-rw-r--r-- 0 root (0) root (0) 6840 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176.html\n+-rw-r--r-- 0 root (0) root (0) 38315 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176_source.html\n+-rw-r--r-- 0 root (0) root (0) 5684 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179.html\n+-rw-r--r-- 0 root (0) root (0) 36641 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179_source.html\n+-rw-r--r-- 0 root (0) root (0) 10071 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182.html\n+-rw-r--r-- 0 root (0) root (0) 134397 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182_source.html\n+-rw-r--r-- 0 root (0) root (0) 8266 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185.html\n+-rw-r--r-- 0 root (0) root (0) 17376 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185_source.html\n+-rw-r--r-- 0 root (0) root (0) 5921 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188.html\n+-rw-r--r-- 0 root (0) root (0) 12738 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188_source.html\n+-rw-r--r-- 0 root (0) root (0) 4707 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191.html\n+-rw-r--r-- 0 root (0) root (0) 13985 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191_source.html\n -rw-r--r-- 0 root (0) root (0) 3041 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00194.html\n -rw-r--r-- 0 root (0) root (0) 3049 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00197.html\n -rw-r--r-- 0 root (0) root (0) 3047 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00200.html\n -rw-r--r-- 0 root (0) root (0) 4095 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00203.html\n -rw-r--r-- 0 root (0) root (0) 6640 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00204.html\n -rw-r--r-- 0 root (0) root (0) 6408 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00206.html\n -rw-r--r-- 0 root (0) root (0) 13117 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00206.png\n@@ -512,15 +512,15 @@\n -rw-r--r-- 0 root (0) root (0) 9960 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_a2250aba7ee066a4c694d7c3cf43d078_dep.png\n -rw-r--r-- 0 root (0) root (0) 8549 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_a5545368301c4029d7054f90c0ed45fc.html\n -rw-r--r-- 0 root (0) root (0) 25711 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_a5545368301c4029d7054f90c0ed45fc_dep.png\n -rw-r--r-- 0 root (0) root (0) 4884 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_e22f2c69b2799e923164d7b2e4fa3f8c.html\n -rw-r--r-- 0 root (0) root (0) 2989 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_e22f2c69b2799e923164d7b2e4fa3f8c_dep.png\n -rw-r--r-- 0 root (0) root (0) 3675 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_e68e8157741866f444e17edd764ebbae.html\n -rw-r--r-- 0 root (0) root (0) 45631 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/doxygen.css\n--rw-r--r-- 0 root (0) root (0) 50081 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dune-functions.tag.gz\n+-rw-r--r-- 0 root (0) root (0) 50084 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dune-functions.tag.gz\n -rw-r--r-- 0 root (0) root (0) 7704 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dynsections.js\n -rw-r--r-- 0 root (0) root (0) 25110 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/files.html\n -rw-r--r-- 0 root (0) root (0) 4096 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions.html\n -rw-r--r-- 0 root (0) root (0) 9243 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions_b.html\n -rw-r--r-- 0 root (0) root (0) 7961 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions_c.html\n -rw-r--r-- 0 root (0) root (0) 16093 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions_d.html\n -rw-r--r-- 0 root (0) root (0) 12774 2023-01-12 22:26:33.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: gridfunction_imp.hh File Reference\n+dune-functions: bsplinebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -65,36 +65,86 @@\n \n \n \n \n \n
\n \n+
  • dune
  • functions
  • functionspacebases
  • \n
    \n \n
    \n
    \n-Namespaces
    \n-
    gridfunction_imp.hh File Reference
    \n+Classes |\n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    bsplinebasis.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+

    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
    \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+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.
     
    \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,20 +1,64 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-gridfunction_imp.hh File Reference\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+ * _\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+#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 _\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+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/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: gridfunction_imp.hh Source File\n+dune-functions: bsplinebasis.hh Source File\n \n \n \n \n \n \n \n@@ -70,92 +70,1311 @@\n \n \n \n \n \n \n \n
    \n-
    gridfunction_imp.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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n-
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n
    5
    \n-\n-\n-\n-
    9
    \n-
    10
    \n-
    11
    \n-
    12namespace Dune {
    \n-
    13namespace Functions {
    \n-
    14namespace Imp {
    \n+
    10#include <array>
    \n+
    11#include <numeric>
    \n+
    12
    \n+
    14#include <dune/common/dynmatrix.hh>
    \n
    15
    \n-
    19struct HasFreeLocalFunction
    \n-
    20{
    \n-
    21 template<class F>
    \n-
    22 auto require(F&& f) -> decltype(
    \n-
    23 localFunction(f)
    \n-
    24 );
    \n-
    25};
    \n-
    26
    \n+
    16#include <dune/localfunctions/common/localbasis.hh>
    \n+
    17#include <dune/common/diagonalmatrix.hh>
    \n+
    18#include <dune/localfunctions/common/localkey.hh>
    \n+
    19#include <dune/localfunctions/common/localfiniteelementtraits.hh>
    \n+
    20#include <dune/geometry/type.hh>
    \n+\n+\n+
    23
    \n+
    24namespace Dune
    \n+
    25{
    \n+
    26namespace Functions {
    \n
    27
    \n-
    28
    \n-
    29// Interface of type erasure wrapper
    \n-
    30//
    \n-
    31// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n-
    32// will be added by the type erasure foundation classes.
    \n-
    33template<class Signature, class DerivativeInterface, class LocalFunctionInterface, class EntitySet>
    \n-
    34class GridFunctionWrapperInterface :
    \n-
    35 public DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>
    \n-
    36{
    \n-
    37public:
    \n-
    38 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;
    \n-
    39
    \n-
    40 virtual const EntitySet& wrappedEntitySet() const = 0;
    \n-
    41};
    \n-
    42
    \n-
    43
    \n-
    44// Implementation of type erasure wrapper
    \n-
    45template<class Signature, class DerivativeInterface, class LocalFunctionInterface, class EntitySet, class B>
    \n-
    46class GridFunctionWrapperImplementation :
    \n-
    47 public DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>
    \n-
    48{
    \n-
    49 using Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n-
    50public:
    \n-
    51 using Base::Base;
    \n+
    28// A maze of dependencies between the different parts of this. We need a few forward declarations
    \n+
    29template<typename GV, typename R>
    \n+\n+
    31
    \n+
    32template<typename GV>
    \n+
    33class BSplinePreBasis;
    \n+
    34
    \n+
    35
    \n+
    44template<class GV, class R>
    \n+
    \n+\n+
    46{
    \n+
    47 friend class BSplineLocalFiniteElement<GV,R>;
    \n+
    48
    \n+
    49 typedef typename GV::ctype D;
    \n+
    50 enum {dim = GV::dimension};
    \n+
    51public:
    \n
    52
    \n-
    53 virtual LocalFunctionInterface wrappedLocalFunction() const
    \n-
    54 {
    \n-
    55 return localFunction(this->get());
    \n-
    56 }
    \n-
    57
    \n-
    58 virtual const EntitySet& wrappedEntitySet() const
    \n-
    59 {
    \n-
    60 return this->get().entitySet();
    \n-
    61 }
    \n-
    62};
    \n-
    63
    \n-
    64
    \n-
    65
    \n-
    66}}} // namespace Dune::Functions::Imp
    \n-
    67
    \n-
    68
    \n-
    69
    \n-
    70#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n-\n-\n-\n+
    54 typedef LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,
    \n+
    55 FieldMatrix<R,1,dim> > Traits;
    \n+
    56
    \n+
    \n+\n+\n+
    63 : preBasis_(preBasis),
    \n+
    64 lFE_(lFE)
    \n+
    65 {}
    \n+
    \n+
    66
    \n+
    \n+
    70 void evaluateFunction (const FieldVector<D,dim>& in,
    \n+
    71 std::vector<FieldVector<R,1> >& out) const
    \n+
    72 {
    \n+
    73 FieldVector<D,dim> globalIn = offset_;
    \n+
    74 scaling_.umv(in,globalIn);
    \n+
    75
    \n+
    76 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);
    \n+
    77 }
    \n+
    \n+
    78
    \n+
    \n+
    82 void evaluateJacobian (const FieldVector<D,dim>& in,
    \n+
    83 std::vector<FieldMatrix<D,1,dim> >& out) const
    \n+
    84 {
    \n+
    85 FieldVector<D,dim> globalIn = offset_;
    \n+
    86 scaling_.umv(in,globalIn);
    \n+
    87
    \n+
    88 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);
    \n+
    89
    \n+
    90 for (size_t i=0; i<out.size(); i++)
    \n+
    91 for (int j=0; j<dim; j++)
    \n+
    92 out[i][0][j] *= scaling_[j][j];
    \n+
    93 }
    \n+
    \n+
    94
    \n+
    96 template<size_t k>
    \n+
    \n+
    97 inline void evaluate (const typename std::array<int,k>& directions,
    \n+
    98 const typename Traits::DomainType& in,
    \n+
    99 std::vector<typename Traits::RangeType>& out) const
    \n+
    100 {
    \n+
    101 switch(k)
    \n+
    102 {
    \n+
    103 case 0:
    \n+
    104 evaluateFunction(in, out);
    \n+
    105 break;
    \n+
    106 case 1:
    \n+
    107 {
    \n+
    108 FieldVector<D,dim> globalIn = offset_;
    \n+
    109 scaling_.umv(in,globalIn);
    \n+
    110
    \n+
    111 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);
    \n+
    112
    \n+
    113 for (size_t i=0; i<out.size(); i++)
    \n+
    114 out[i][0] *= scaling_[directions[0]][directions[0]];
    \n+
    115 break;
    \n+
    116 }
    \n+
    117 case 2:
    \n+
    118 {
    \n+
    119 FieldVector<D,dim> globalIn = offset_;
    \n+
    120 scaling_.umv(in,globalIn);
    \n+
    121
    \n+
    122 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);
    \n+
    123
    \n+
    124 for (size_t i=0; i<out.size(); i++)
    \n+
    125 out[i][0] *= scaling_[directions[0]][directions[0]]*scaling_[directions[1]][directions[1]];
    \n+
    126 break;
    \n+
    127 }
    \n+
    128 default:
    \n+
    129 DUNE_THROW(NotImplemented, "B-Spline derivatives of order " << k << " not implemented yet!");
    \n+
    130 }
    \n+
    131 }
    \n+
    \n+
    132
    \n+
    \n+
    140 unsigned int order () const
    \n+
    141 {
    \n+
    142 return *std::max_element(preBasis_.order_.begin(), preBasis_.order_.end());
    \n+
    143 }
    \n+
    \n+
    144
    \n+
    \n+
    147 std::size_t size() const
    \n+
    148 {
    \n+
    149 return lFE_.size();
    \n+
    150 }
    \n+
    \n+
    151
    \n+
    152private:
    \n+
    153 const BSplinePreBasis<GV>& preBasis_;
    \n+
    154
    \n+\n+
    156
    \n+
    157 // Coordinates in a single knot span differ from coordinates on the B-spline patch
    \n+
    158 // by an affine transformation. This transformation is stored in offset_ and scaling_.
    \n+
    159 FieldVector<D,dim> offset_;
    \n+
    160 DiagonalMatrix<D,dim> scaling_;
    \n+
    161};
    \n+
    \n+
    162
    \n+
    176template<int dim>
    \n+
    \n+\n+
    178{
    \n+
    179 // Return i as a d-digit number in the (k+1)-nary system
    \n+
    180 std::array<unsigned int,dim> multiindex (unsigned int i) const
    \n+
    181 {
    \n+
    182 std::array<unsigned int,dim> alpha;
    \n+
    183 for (int j=0; j<dim; j++)
    \n+
    184 {
    \n+
    185 alpha[j] = i % sizes_[j];
    \n+
    186 i = i/sizes_[j];
    \n+
    187 }
    \n+
    188 return alpha;
    \n+
    189 }
    \n+
    190
    \n+
    192 void setup1d(std::vector<unsigned int>& subEntity)
    \n+
    193 {
    \n+
    194 if (sizes_[0]==1)
    \n+
    195 {
    \n+
    196 subEntity[0] = 0;
    \n+
    197 return;
    \n+
    198 }
    \n+
    199
    \n+
    200 /* edge and vertex numbering
    \n+
    201 0----0----1
    \n+
    202 */
    \n+
    203 unsigned lastIndex=0;
    \n+
    204 subEntity[lastIndex++] = 0; // corner 0
    \n+
    205 for (unsigned i = 0; i < sizes_[0] - 2; ++i)
    \n+
    206 subEntity[lastIndex++] = 0; // inner dofs of element (0)
    \n+
    207
    \n+
    208 subEntity[lastIndex++] = 1; // corner 1
    \n+
    209
    \n+
    210 assert(size()==lastIndex);
    \n+
    211 }
    \n+
    212
    \n+
    213 void setup2d(std::vector<unsigned int>& subEntity)
    \n+
    214 {
    \n+
    215 unsigned lastIndex=0;
    \n+
    216
    \n+
    217 // LocalKey: entity number , entity codim, dof indices within each entity
    \n+
    218 /* edge and vertex numbering
    \n+
    219 2----3----3
    \n+
    220 | |
    \n+
    221 | |
    \n+
    222 0 1
    \n+
    223 | |
    \n+
    224 | |
    \n+
    225 0----2----1
    \n+
    226 */
    \n+
    227
    \n+
    228 // lower edge (2)
    \n+
    229 subEntity[lastIndex++] = 0; // corner 0
    \n+
    230 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n+
    231 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)
    \n+
    232
    \n+
    233 subEntity[lastIndex++] = 1; // corner 1
    \n+
    234
    \n+
    235 // iterate from bottom to top over inner edge dofs
    \n+
    236 for (unsigned e = 0; e < sizes_[1]-2; ++e)
    \n+
    237 {
    \n+
    238 subEntity[lastIndex++] = 0; // left edge (0)
    \n+
    239 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n+
    240 subEntity[lastIndex++] = 0; // face dofs
    \n+
    241 subEntity[lastIndex++] = 1; // right edge (1)
    \n+
    242 }
    \n+
    243
    \n+
    244 // upper edge (3)
    \n+
    245 subEntity[lastIndex++] = 2; // corner 2
    \n+
    246 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n+
    247 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)
    \n+
    248
    \n+
    249 subEntity[lastIndex++] = 3; // corner 3
    \n+
    250
    \n+
    251 assert(size()==lastIndex);
    \n+
    252 }
    \n+
    253
    \n+
    254
    \n+
    255public:
    \n+
    \n+
    256 void init(const std::array<unsigned,dim>& sizes)
    \n+
    257 {
    \n+
    258 sizes_ = sizes;
    \n+
    259
    \n+
    260 li_.resize(size());
    \n+
    261
    \n+
    262 // Set up array of codimension-per-dof-number
    \n+
    263 std::vector<unsigned int> codim(li_.size());
    \n+
    264
    \n+
    265 for (std::size_t i=0; i<codim.size(); i++)
    \n+
    266 {
    \n+
    267 codim[i] = 0;
    \n+
    268 // Codimension gets increased by 1 for each coordinate direction
    \n+
    269 // where dof is on boundary
    \n+
    270 std::array<unsigned int,dim> mIdx = multiindex(i);
    \n+
    271 for (int j=0; j<dim; j++)
    \n+
    272 if (mIdx[j]==0 or mIdx[j]==sizes[j]-1)
    \n+
    273 codim[i]++;
    \n+
    274 }
    \n+
    275
    \n+
    276 // Set up index vector (the index of the dof in the set of dofs of a given subentity)
    \n+
    277 // Algorithm: the 'index' has the same ordering as the dof number 'i'.
    \n+
    278 // To make it consecutive we interpret 'i' in the (k+1)-adic system, omit all digits
    \n+
    279 // that correspond to axes where the dof is on the element boundary, and transform the
    \n+
    280 // rest to the (k-1)-adic system.
    \n+
    281 std::vector<unsigned int> index(size());
    \n+
    282
    \n+
    283 for (std::size_t i=0; i<index.size(); i++)
    \n+
    284 {
    \n+
    285 index[i] = 0;
    \n+
    286
    \n+
    287 std::array<unsigned int,dim> mIdx = multiindex(i);
    \n+
    288
    \n+
    289 for (int j=dim-1; j>=0; j--)
    \n+
    290 if (mIdx[j]>0 and mIdx[j]<sizes[j]-1)
    \n+
    291 index[i] = (sizes[j]-1)*index[i] + (mIdx[j]-1);
    \n+
    292 }
    \n+
    293
    \n+
    294 // Set up entity and dof numbers for each (supported) dimension separately
    \n+
    295 std::vector<unsigned int> subEntity(li_.size());
    \n+
    296
    \n+
    297 if (subEntity.size() > 0)
    \n+
    298 {
    \n+
    299 if (dim==1) {
    \n+
    300
    \n+
    301 setup1d(subEntity);
    \n+
    302
    \n+
    303 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {
    \n+
    304
    \n+
    305 setup2d(subEntity);
    \n+
    306
    \n+
    307 }
    \n+
    308 }
    \n+
    309
    \n+
    310 for (size_t i=0; i<li_.size(); i++)
    \n+
    311 li_[i] = LocalKey(subEntity[i], codim[i], index[i]);
    \n+
    312 }
    \n+
    \n+
    313
    \n+
    \n+
    315 std::size_t size () const
    \n+
    316 {
    \n+
    317 return std::accumulate(sizes_.begin(), sizes_.end(), 1, std::multiplies<unsigned int>());
    \n+
    318 }
    \n+
    \n+
    319
    \n+
    \n+
    321 const LocalKey& localKey (std::size_t i) const
    \n+
    322 {
    \n+
    323 return li_[i];
    \n+
    324 }
    \n+
    \n+
    325
    \n+
    326private:
    \n+
    327
    \n+
    328 // Number of shape functions on this element per coordinate direction
    \n+
    329 std::array<unsigned, dim> sizes_;
    \n+
    330
    \n+
    331 std::vector<LocalKey> li_;
    \n+
    332};
    \n+
    \n+
    333
    \n+
    338template<int dim, class LB>
    \n+
    \n+\n+
    340{
    \n+
    341public:
    \n+
    343 template<typename F, typename C>
    \n+
    \n+
    344 void interpolate (const F& f, std::vector<C>& out) const
    \n+
    345 {
    \n+
    346 DUNE_THROW(NotImplemented, "BSplineLocalInterpolation::interpolate");
    \n+
    347 }
    \n+
    \n+
    348
    \n+
    349};
    \n+
    \n+
    350
    \n+
    360template<class GV, class R>
    \n+
    \n+\n+
    362{
    \n+
    363 typedef typename GV::ctype D;
    \n+
    364 enum {dim = GV::dimension};
    \n+
    365 friend class BSplineLocalBasis<GV,R>;
    \n+
    366public:
    \n+
    367
    \n+
    370 typedef LocalFiniteElementTraits<BSplineLocalBasis<GV,R>,
    \n+\n+\n+
    373
    \n+
    \n+\n+
    377 : preBasis_(preBasis),
    \n+
    378 localBasis_(preBasis,*this)
    \n+
    379 {}
    \n+
    \n+
    380
    \n+
    \n+\n+
    384 : preBasis_(other.preBasis_),
    \n+\n+
    386 {}
    \n+
    \n+
    387
    \n+
    \n+
    394 void bind(const std::array<unsigned,dim>& elementIdx)
    \n+
    395 {
    \n+
    396 /* \\todo In the long run we need to precompute a table for this */
    \n+
    397 for (size_t i=0; i<elementIdx.size(); i++)
    \n+
    398 {
    \n+
    399 currentKnotSpan_[i] = 0;
    \n+
    400
    \n+
    401 // Skip over degenerate knot spans
    \n+
    402 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] < preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)
    \n+
    403 currentKnotSpan_[i]++;
    \n+
    404
    \n+
    405 for (size_t j=0; j<elementIdx[i]; j++)
    \n+
    406 {
    \n+
    407 currentKnotSpan_[i]++;
    \n+
    408
    \n+
    409 // Skip over degenerate knot spans
    \n+
    410 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] < preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)
    \n+
    411 currentKnotSpan_[i]++;
    \n+
    412 }
    \n+
    413
    \n+
    414 // Compute the geometric transformation from knotspan-local to global coordinates
    \n+
    415 localBasis_.offset_[i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]];
    \n+
    416 localBasis_.scaling_[i][i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] - preBasis_.knotVectors_[i][currentKnotSpan_[i]];
    \n+
    417 }
    \n+
    418
    \n+
    419 // Set up the LocalCoefficients object
    \n+
    420 std::array<unsigned int, dim> sizes;
    \n+
    421 for (size_t i=0; i<dim; i++)
    \n+
    422 sizes[i] = size(i);
    \n+
    423 localCoefficients_.init(sizes);
    \n+
    424 }
    \n+
    \n+
    425
    \n+
    \n+\n+
    428 {
    \n+
    429 return localBasis_;
    \n+
    430 }
    \n+
    \n+
    431
    \n+
    \n+\n+
    434 {
    \n+
    435 return localCoefficients_;
    \n+
    436 }
    \n+
    \n+
    437
    \n+\n+
    443
    \n+
    \n+
    445 unsigned size () const
    \n+
    446 {
    \n+
    447 std::size_t r = 1;
    \n+
    448 for (int i=0; i<dim; i++)
    \n+
    449 r *= size(i);
    \n+
    450 return r;
    \n+
    451 }
    \n+
    \n+
    452
    \n+
    \n+
    455 GeometryType type () const
    \n+
    456 {
    \n+
    457 return GeometryTypes::cube(dim);
    \n+
    458 }
    \n+
    \n+
    459
    \n+
    460//private:
    \n+
    461
    \n+
    \n+
    463 unsigned int size(int i) const
    \n+
    464 {
    \n+
    465 const auto& order = preBasis_.order_;
    \n+
    466 unsigned int r = order[i]+1; // The 'normal' value
    \n+
    467 if (currentKnotSpan_[i]<order[i]) // Less near the left end of the knot vector
    \n+
    468 r -= (order[i] - currentKnotSpan_[i]);
    \n+
    469 if ( order[i] > (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] - 2) )
    \n+
    470 r -= order[i] - (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] - 2);
    \n+
    471 return r;
    \n+
    472 }
    \n+
    \n+
    473
    \n+\n+
    475
    \n+\n+\n+\n+
    479
    \n+
    480 // The knot span we are bound to
    \n+
    481 std::array<unsigned,dim> currentKnotSpan_;
    \n+
    482};
    \n+
    \n+
    483
    \n+
    484
    \n+
    485template<typename GV>
    \n+
    486class BSplineNode;
    \n+
    487
    \n+
    497template<typename GV>
    \n+
    \n+\n+
    499{
    \n+
    500 static const int dim = GV::dimension;
    \n+
    501
    \n+
    503 class MultiDigitCounter
    \n+
    504 {
    \n+
    505 public:
    \n+
    506
    \n+
    510 MultiDigitCounter(const std::array<unsigned int,dim>& limits)
    \n+
    511 : limits_(limits)
    \n+
    512 {
    \n+
    513 std::fill(counter_.begin(), counter_.end(), 0);
    \n+
    514 }
    \n+
    515
    \n+
    517 MultiDigitCounter& operator++()
    \n+
    518 {
    \n+
    519 for (int i=0; i<dim; i++)
    \n+
    520 {
    \n+
    521 ++counter_[i];
    \n+
    522
    \n+
    523 // no overflow?
    \n+
    524 if (counter_[i] < limits_[i])
    \n+
    525 break;
    \n+
    526
    \n+
    527 counter_[i] = 0;
    \n+
    528 }
    \n+
    529 return *this;
    \n+
    530 }
    \n+
    531
    \n+
    533 const unsigned int& operator[](int i) const
    \n+
    534 {
    \n+
    535 return counter_[i];
    \n+
    536 }
    \n+
    537
    \n+
    539 unsigned int cycle() const
    \n+
    540 {
    \n+
    541 unsigned int r = 1;
    \n+
    542 for (int i=0; i<dim; i++)
    \n+
    543 r *= limits_[i];
    \n+
    544 return r;
    \n+
    545 }
    \n+
    546
    \n+
    547 private:
    \n+
    548
    \n+
    550 const std::array<unsigned int,dim> limits_;
    \n+
    551
    \n+
    553 std::array<unsigned int,dim> counter_;
    \n+
    554
    \n+
    555 };
    \n+
    556
    \n+
    557public:
    \n+
    558
    \n+
    560 using GridView = GV;
    \n+
    561 using size_type = std::size_t;
    \n+
    562
    \n+\n+
    564
    \n+
    565 static constexpr size_type maxMultiIndexSize = 1;
    \n+
    566 static constexpr size_type minMultiIndexSize = 1;
    \n+
    567 static constexpr size_type multiIndexBufferSize = 1;
    \n+
    568
    \n+
    569 // Type used for function values
    \n+
    570 using R = double;
    \n+
    571
    \n+
    \n+\n+
    591 const std::vector<double>& knotVector,
    \n+
    592 unsigned int order,
    \n+
    593 bool makeOpen = true)
    \n+\n+
    595 {
    \n+
    596 // \\todo Detection of duplicate knots
    \n+
    597 std::fill(elements_.begin(), elements_.end(), knotVector.size()-1);
    \n+
    598
    \n+
    599 // Mediocre sanity check: we don't know the number of grid elements in each direction.
    \n+
    600 // but at least we know the total number of elements.
    \n+
    601 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::multiplies<unsigned>()) == gridView_.size(0) );
    \n+
    602
    \n+
    603 for (int i=0; i<dim; i++)
    \n+
    604 {
    \n+
    605 // Prepend the correct number of additional knots to open the knot vector
    \n+
    607 if (makeOpen)
    \n+
    608 for (unsigned int j=0; j<order; j++)
    \n+
    609 knotVectors_[i].push_back(knotVector[0]);
    \n+
    610
    \n+
    611 knotVectors_[i].insert(knotVectors_[i].end(), knotVector.begin(), knotVector.end());
    \n+
    612
    \n+
    613 if (makeOpen)
    \n+
    614 for (unsigned int j=0; j<order; j++)
    \n+
    615 knotVectors_[i].push_back(knotVector.back());
    \n+
    616 }
    \n+
    617
    \n+
    618 std::fill(order_.begin(), order_.end(), order);
    \n+
    619 }
    \n+
    \n+
    620
    \n+
    \n+\n+
    643 const FieldVector<double,dim>& lowerLeft,
    \n+
    644 const FieldVector<double,dim>& upperRight,
    \n+
    645 const std::array<unsigned int,dim>& elements,
    \n+
    646 unsigned int order,
    \n+
    647 bool makeOpen = true)
    \n+
    648 : elements_(elements),
    \n+\n+
    650 {
    \n+
    651 // Mediocre sanity check: we don't know the number of grid elements in each direction.
    \n+
    652 // but at least we know the total number of elements.
    \n+
    653 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::multiplies<unsigned>()) == gridView_.size(0) );
    \n+
    654
    \n+
    655 for (int i=0; i<dim; i++)
    \n+
    656 {
    \n+
    657 // Prepend the correct number of additional knots to open the knot vector
    \n+
    659 if (makeOpen)
    \n+
    660 for (unsigned int j=0; j<order; j++)
    \n+
    661 knotVectors_[i].push_back(lowerLeft[i]);
    \n+
    662
    \n+
    663 // Construct the actual knot vector
    \n+
    664 for (size_t j=0; j<elements[i]+1; j++)
    \n+
    665 knotVectors_[i].push_back(lowerLeft[i] + j*(upperRight[i]-lowerLeft[i]) / elements[i]);
    \n+
    666
    \n+
    667 if (makeOpen)
    \n+
    668 for (unsigned int j=0; j<order; j++)
    \n+
    669 knotVectors_[i].push_back(upperRight[i]);
    \n+
    670 }
    \n+
    671
    \n+
    672 std::fill(order_.begin(), order_.end(), order);
    \n+
    673 }
    \n+
    \n+
    674
    \n+
    \n+\n+
    677 {}
    \n+
    \n+
    678
    \n+
    \n+
    680 const GridView& gridView() const
    \n+
    681 {
    \n+
    682 return gridView_;
    \n+
    683 }
    \n+
    \n+
    684
    \n+
    \n+
    686 void update(const GridView& gv)
    \n+
    687 {
    \n+
    688 gridView_ = gv;
    \n+
    689 }
    \n+
    \n+
    690
    \n+
    \n+\n+
    695 {
    \n+
    696 return Node{this};
    \n+
    697 }
    \n+
    \n+
    698
    \n+
    699 // Ideally this method should be implemented as
    \n+
    700 //
    \n+
    701 // template<class SizePrefix>
    \n+
    702 // size_type size(const SizePrefix& prefix) const
    \n+
    703 //
    \n+
    704 // But leads to ambiguity with the other size method:
    \n+
    705 //
    \n+
    706 // unsigned int size (size_t d) const
    \n+
    707 //
    \n+
    708 // Once the latter is removed, this implementation should be changed.
    \n+
    709
    \n+
    711 template<class ST, int i>
    \n+
    \n+
    712 size_type size(const Dune::ReservedVector<ST, i>& prefix) const
    \n+
    713 {
    \n+
    714 assert(prefix.size() == 0 || prefix.size() == 1);
    \n+
    715 return (prefix.size() == 0) ? size() : 0;
    \n+
    716 }
    \n+
    \n+
    717
    \n+
    \n+\n+
    720 {
    \n+
    721 return size();
    \n+
    722 }
    \n+
    \n+
    723
    \n+
    \n+\n+
    726 {
    \n+
    727 size_type result = 1;
    \n+
    728 for (int i=0; i<dim; i++)
    \n+
    729 result *= order_[i]+1;
    \n+
    730 return result;
    \n+
    731 }
    \n+
    \n+
    732
    \n+
    734 template<typename It>
    \n+
    \n+
    735 It indices(const Node& node, It it) const
    \n+
    736 {
    \n+
    737 // Local degrees of freedom are arranged in a lattice.
    \n+
    738 // We need the lattice dimensions to be able to compute lattice coordinates from a local index
    \n+
    739 std::array<unsigned int, dim> localSizes;
    \n+
    740 for (int i=0; i<dim; i++)
    \n+
    741 localSizes[i] = node.finiteElement().size(i);
    \n+
    742 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n+
    743 {
    \n+
    744 std::array<unsigned int,dim> localIJK = getIJK(i, localSizes);
    \n+
    745
    \n+
    746 const auto currentKnotSpan = node.finiteElement().currentKnotSpan_;
    \n+
    747 const auto order = order_;
    \n+
    748
    \n+
    749 std::array<unsigned int,dim> globalIJK;
    \n+
    750 for (int i=0; i<dim; i++)
    \n+
    751 globalIJK[i] = std::max((int)currentKnotSpan[i] - (int)order[i], 0) + localIJK[i]; // needs to be a signed type!
    \n+
    752
    \n+
    753 // Make one global flat index from the globalIJK tuple
    \n+
    754 size_type globalIdx = globalIJK[dim-1];
    \n+
    755
    \n+
    756 for (int i=dim-2; i>=0; i--)
    \n+
    757 globalIdx = globalIdx * size(i) + globalIJK[i];
    \n+
    758
    \n+
    759 *it = {{globalIdx}};
    \n+
    760 }
    \n+
    761 return it;
    \n+
    762 }
    \n+
    \n+
    763
    \n+
    \n+
    765 unsigned int size () const
    \n+
    766 {
    \n+
    767 unsigned int result = 1;
    \n+
    768 for (size_t i=0; i<dim; i++)
    \n+
    769 result *= size(i);
    \n+
    770 return result;
    \n+
    771 }
    \n+
    \n+
    772
    \n+
    \n+
    774 unsigned int size (size_t d) const
    \n+
    775 {
    \n+
    776 return knotVectors_[d].size() - order_[d] - 1;
    \n+
    777 }
    \n+
    \n+
    778
    \n+
    \n+
    781 void evaluateFunction (const FieldVector<typename GV::ctype,dim>& in,
    \n+
    782 std::vector<FieldVector<R,1> >& out,
    \n+
    783 const std::array<unsigned,dim>& currentKnotSpan) const
    \n+
    784 {
    \n+
    785 // Evaluate
    \n+
    786 std::array<std::vector<R>, dim> oneDValues;
    \n+
    787
    \n+
    788 for (size_t i=0; i<dim; i++)
    \n+
    789 evaluateFunction(in[i], oneDValues[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n+
    790
    \n+
    791 std::array<unsigned int, dim> limits;
    \n+
    792 for (int i=0; i<dim; i++)
    \n+
    793 limits[i] = oneDValues[i].size();
    \n+
    794
    \n+
    795 MultiDigitCounter ijkCounter(limits);
    \n+
    796
    \n+
    797 out.resize(ijkCounter.cycle());
    \n+
    798
    \n+
    799 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n+
    800 {
    \n+
    801 out[i] = R(1.0);
    \n+
    802 for (size_t j=0; j<dim; j++)
    \n+
    803 out[i] *= oneDValues[j][ijkCounter[j]];
    \n+
    804 }
    \n+
    805 }
    \n+
    \n+
    806
    \n+
    \n+
    812 void evaluateJacobian (const FieldVector<typename GV::ctype,dim>& in,
    \n+
    813 std::vector<FieldMatrix<R,1,dim> >& out,
    \n+
    814 const std::array<unsigned,dim>& currentKnotSpan) const
    \n+
    815 {
    \n+
    816 // How many shape functions to we have in each coordinate direction?
    \n+
    817 std::array<unsigned int, dim> limits;
    \n+
    818 for (int i=0; i<dim; i++)
    \n+
    819 {
    \n+
    820 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries of the knot vector
    \n+
    821 if (currentKnotSpan[i]<order_[i])
    \n+
    822 limits[i] -= (order_[i] - currentKnotSpan[i]);
    \n+
    823 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )
    \n+
    824 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] - 2);
    \n+
    825 }
    \n+
    826
    \n+
    827 // The lowest knot spans that we need values from
    \n+
    828 std::array<unsigned int, dim> offset;
    \n+
    829 for (int i=0; i<dim; i++)
    \n+
    830 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);
    \n+
    831
    \n+
    832 // Evaluate 1d function values (needed for the product rule)
    \n+
    833 std::array<std::vector<R>, dim> oneDValues;
    \n+
    834
    \n+
    835 // Evaluate 1d function values of one order lower (needed for the derivative formula)
    \n+
    836 std::array<std::vector<R>, dim> lowOrderOneDValues;
    \n+
    837
    \n+
    838 std::array<DynamicMatrix<R>, dim> values;
    \n+
    839
    \n+
    840 for (size_t i=0; i<dim; i++)
    \n+
    841 {
    \n+
    842 evaluateFunctionFull(in[i], values[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n+
    843 oneDValues[i].resize(knotVectors_[i].size()-order_[i]-1);
    \n+
    844 for (size_t j=0; j<oneDValues[i].size(); j++)
    \n+
    845 oneDValues[i][j] = values[i][order_[i]][j];
    \n+
    846
    \n+
    847 if (order_[i]!=0)
    \n+
    848 {
    \n+
    849 lowOrderOneDValues[i].resize(knotVectors_[i].size()-(order_[i]-1)-1);
    \n+
    850 for (size_t j=0; j<lowOrderOneDValues[i].size(); j++)
    \n+
    851 lowOrderOneDValues[i][j] = values[i][order_[i]-1][j];
    \n+
    852 }
    \n+
    853 }
    \n+
    854
    \n+
    855
    \n+
    856 // Evaluate 1d function derivatives
    \n+
    857 std::array<std::vector<R>, dim> oneDDerivatives;
    \n+
    858 for (size_t i=0; i<dim; i++)
    \n+
    859 {
    \n+
    860 oneDDerivatives[i].resize(limits[i]);
    \n+
    861
    \n+
    862 if (order_[i]==0) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n+
    863 std::fill(oneDDerivatives[i].begin(), oneDDerivatives[i].end(), R(0.0));
    \n+
    864 else
    \n+
    865 {
    \n+
    866 for (size_t j=offset[i]; j<offset[i]+limits[i]; j++)
    \n+
    867 {
    \n+
    868 R derivativeAddend1 = lowOrderOneDValues[i][j] / (knotVectors_[i][j+order_[i]]-knotVectors_[i][j]);
    \n+
    869 R derivativeAddend2 = lowOrderOneDValues[i][j+1] / (knotVectors_[i][j+order_[i]+1]-knotVectors_[i][j+1]);
    \n+
    870 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n+
    871 if (std::isnan(derivativeAddend1))
    \n+
    872 derivativeAddend1 = 0;
    \n+
    873 if (std::isnan(derivativeAddend2))
    \n+
    874 derivativeAddend2 = 0;
    \n+
    875 oneDDerivatives[i][j-offset[i]] = order_[i] * ( derivativeAddend1 - derivativeAddend2 );
    \n+
    876 }
    \n+
    877 }
    \n+
    878 }
    \n+
    879
    \n+
    880 // Working towards computing only the parts that we really need:
    \n+
    881 // Let's copy them out into a separate array
    \n+
    882 std::array<std::vector<R>, dim> oneDValuesShort;
    \n+
    883
    \n+
    884 for (int i=0; i<dim; i++)
    \n+
    885 {
    \n+
    886 oneDValuesShort[i].resize(limits[i]);
    \n+
    887
    \n+
    888 for (size_t j=0; j<limits[i]; j++)
    \n+
    889 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];
    \n+
    890 }
    \n+
    891
    \n+
    892
    \n+
    893
    \n+
    894 // Set up a multi-index to go from consecutive indices to integer coordinates
    \n+
    895 MultiDigitCounter ijkCounter(limits);
    \n+
    896
    \n+
    897 out.resize(ijkCounter.cycle());
    \n+
    898
    \n+
    899 // Complete Jacobian is given by the product rule
    \n+
    900 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n+
    901 for (int j=0; j<dim; j++)
    \n+
    902 {
    \n+
    903 out[i][0][j] = 1.0;
    \n+
    904 for (int k=0; k<dim; k++)
    \n+
    905 out[i][0][j] *= (j==k) ? oneDDerivatives[k][ijkCounter[k]]
    \n+
    906 : oneDValuesShort[k][ijkCounter[k]];
    \n+
    907 }
    \n+
    908
    \n+
    909 }
    \n+
    \n+
    910
    \n+
    912 template <size_type k>
    \n+
    \n+
    913 void evaluate(const typename std::array<int,k>& directions,
    \n+
    914 const FieldVector<typename GV::ctype,dim>& in,
    \n+
    915 std::vector<FieldVector<R,1> >& out,
    \n+
    916 const std::array<unsigned,dim>& currentKnotSpan) const
    \n+
    917 {
    \n+
    918 if (k != 1 && k != 2)
    \n+
    919 DUNE_THROW(RangeError, "Differentiation order greater than 2 is not supported!");
    \n+
    920
    \n+
    921 // Evaluate 1d function values (needed for the product rule)
    \n+
    922 std::array<std::vector<R>, dim> oneDValues;
    \n+
    923 std::array<std::vector<R>, dim> oneDDerivatives;
    \n+
    924 std::array<std::vector<R>, dim> oneDSecondDerivatives;
    \n+
    925
    \n+
    926 // Evaluate 1d function derivatives
    \n+
    927 if (k==1)
    \n+
    928 for (size_t i=0; i<dim; i++)
    \n+
    929 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], false, oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n+
    930 else
    \n+
    931 for (size_t i=0; i<dim; i++)
    \n+
    932 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], true, oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n+
    933
    \n+
    934 // The lowest knot spans that we need values from
    \n+
    935 std::array<unsigned int, dim> offset;
    \n+
    936 for (int i=0; i<dim; i++)
    \n+
    937 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);
    \n+
    938
    \n+
    939 // Set up a multi-index to go from consecutive indices to integer coordinates
    \n+
    940 std::array<unsigned int, dim> limits;
    \n+
    941 for (int i=0; i<dim; i++)
    \n+
    942 {
    \n+
    943 // In a proper implementation, the following line would do
    \n+
    944 //limits[i] = oneDValues[i].size();
    \n+
    945 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries of the knot vector
    \n+
    946 if (currentKnotSpan[i]<order_[i])
    \n+
    947 limits[i] -= (order_[i] - currentKnotSpan[i]);
    \n+
    948 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )
    \n+
    949 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] - 2);
    \n+
    950 }
    \n+
    951
    \n+
    952 // Working towards computing only the parts that we really need:
    \n+
    953 // Let's copy them out into a separate array
    \n+
    954 std::array<std::vector<R>, dim> oneDValuesShort;
    \n+
    955
    \n+
    956 for (int i=0; i<dim; i++)
    \n+
    957 {
    \n+
    958 oneDValuesShort[i].resize(limits[i]);
    \n+
    959
    \n+
    960 for (size_t j=0; j<limits[i]; j++)
    \n+
    961 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];
    \n+
    962 }
    \n+
    963
    \n+
    964
    \n+
    965 MultiDigitCounter ijkCounter(limits);
    \n+
    966
    \n+
    967 out.resize(ijkCounter.cycle());
    \n+
    968
    \n+
    969 if (k == 1)
    \n+
    970 {
    \n+
    971 // Complete Jacobian is given by the product rule
    \n+
    972 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n+
    973 {
    \n+
    974 out[i][0] = 1.0;
    \n+
    975 for (int l=0; l<dim; l++)
    \n+
    976 out[i][0] *= (directions[0]==l) ? oneDDerivatives[l][ijkCounter[l]]
    \n+
    977 : oneDValuesShort[l][ijkCounter[l]];
    \n+
    978 }
    \n+
    979 }
    \n+
    980
    \n+
    981 if (k == 2)
    \n+
    982 {
    \n+
    983 // Complete derivation by deriving the tensor product
    \n+
    984 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n+
    985 {
    \n+
    986 out[i][0] = 1.0;
    \n+
    987 for (int j=0; j<dim; j++)
    \n+
    988 {
    \n+
    989 if (directions[0] != directions[1]) //derivation in two different variables
    \n+
    990 if (directions[0] == j || directions[1] == j) //the spline has to be derived (once) in this direction
    \n+
    991 out[i][0] *= oneDDerivatives[j][ijkCounter[j]];
    \n+
    992 else //no derivation in this direction
    \n+
    993 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];
    \n+
    994 else //spline is derived two times in the same direction
    \n+
    995 if (directions[0] == j) //the spline is derived two times in this direction
    \n+
    996 out[i][0] *= oneDSecondDerivatives[j][ijkCounter[j]];
    \n+
    997 else //no derivation in this direction
    \n+
    998 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];
    \n+
    999 }
    \n+
    1000 }
    \n+
    1001 }
    \n+
    1002 }
    \n+
    \n+
    1003
    \n+
    1004
    \n+
    \n+
    1009 static std::array<unsigned int,dim> getIJK(typename GridView::IndexSet::IndexType idx, std::array<unsigned int,dim> elements)
    \n+
    1010 {
    \n+
    1011 std::array<unsigned,dim> result;
    \n+
    1012 for (int i=0; i<dim; i++)
    \n+
    1013 {
    \n+
    1014 result[i] = idx%elements[i];
    \n+
    1015 idx /= elements[i];
    \n+
    1016 }
    \n+
    1017 return result;
    \n+
    1018 }
    \n+
    \n+
    1019
    \n+
    \n+
    1028 static void evaluateFunction (const typename GV::ctype& in, std::vector<R>& out,
    \n+
    1029 const std::vector<R>& knotVector,
    \n+
    1030 unsigned int order,
    \n+
    1031 unsigned int currentKnotSpan)
    \n+
    1032 {
    \n+
    1033 std::size_t outSize = order+1; // The 'standard' value away from the boundaries of the knot vector
    \n+
    1034 if (currentKnotSpan<order) // Less near the left end of the knot vector
    \n+
    1035 outSize -= (order - currentKnotSpan);
    \n+
    1036 if ( order > (knotVector.size() - currentKnotSpan - 2) )
    \n+
    1037 outSize -= order - (knotVector.size() - currentKnotSpan - 2);
    \n+
    1038 out.resize(outSize);
    \n+
    1039
    \n+
    1040 // It's not really a matrix that is needed here, a plain 2d array would do
    \n+
    1041 DynamicMatrix<R> N(order+1, knotVector.size()-1);
    \n+
    1042
    \n+
    1043 // The text books on splines use the following geometric condition here to fill the array N
    \n+
    1044 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition
    \n+
    1045 // only works if splines are never evaluated exactly on the knots.
    \n+
    1046 //
    \n+
    1047 // for (size_t i=0; i<knotVector.size()-1; i++)
    \n+
    1048 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);
    \n+
    1049 for (size_t i=0; i<knotVector.size()-1; i++)
    \n+
    1050 N[0][i] = (i == currentKnotSpan);
    \n+
    1051
    \n+
    1052 for (size_t r=1; r<=order; r++)
    \n+
    1053 for (size_t i=0; i<knotVector.size()-r-1; i++)
    \n+
    1054 {
    \n+
    1055 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)
    \n+
    1056 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])
    \n+
    1057 : 0;
    \n+
    1058 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)
    \n+
    1059 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])
    \n+
    1060 : 0;
    \n+
    1061 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];
    \n+
    1062 }
    \n+
    1063
    \n+
    1068 for (size_t i=0; i<out.size(); i++) {
    \n+
    1069 out[i] = N[order][std::max((int)(currentKnotSpan - order),0) + i];
    \n+
    1070 }
    \n+
    1071 }
    \n+
    \n+
    1072
    \n+
    \n+
    1085 static void evaluateFunctionFull(const typename GV::ctype& in,
    \n+
    1086 DynamicMatrix<R>& out,
    \n+
    1087 const std::vector<R>& knotVector,
    \n+
    1088 unsigned int order,
    \n+
    1089 unsigned int currentKnotSpan)
    \n+
    1090 {
    \n+
    1091 // It's not really a matrix that is needed here, a plain 2d array would do
    \n+
    1092 DynamicMatrix<R>& N = out;
    \n+
    1093
    \n+
    1094 N.resize(order+1, knotVector.size()-1);
    \n+
    1095
    \n+
    1096 // The text books on splines use the following geometric condition here to fill the array N
    \n+
    1097 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition
    \n+
    1098 // only works if splines are never evaluated exactly on the knots.
    \n+
    1099 //
    \n+
    1100 // for (size_t i=0; i<knotVector.size()-1; i++)
    \n+
    1101 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);
    \n+
    1102 for (size_t i=0; i<knotVector.size()-1; i++)
    \n+
    1103 N[0][i] = (i == currentKnotSpan);
    \n+
    1104
    \n+
    1105 for (size_t r=1; r<=order; r++)
    \n+
    1106 for (size_t i=0; i<knotVector.size()-r-1; i++)
    \n+
    1107 {
    \n+
    1108 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)
    \n+
    1109 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])
    \n+
    1110 : 0;
    \n+
    1111 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)
    \n+
    1112 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])
    \n+
    1113 : 0;
    \n+
    1114 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];
    \n+
    1115 }
    \n+
    1116 }
    \n+
    \n+
    1117
    \n+
    1118
    \n+
    \n+
    1128 static void evaluateAll(const typename GV::ctype& in,
    \n+
    1129 std::vector<R>& out,
    \n+
    1130 bool evaluateJacobian, std::vector<R>& outJac,
    \n+
    1131 bool evaluateHessian, std::vector<R>& outHess,
    \n+
    1132 const std::vector<R>& knotVector,
    \n+
    1133 unsigned int order,
    \n+
    1134 unsigned int currentKnotSpan)
    \n+
    1135 {
    \n+
    1136 // How many shape functions to we have in each coordinate direction?
    \n+
    1137 unsigned int limit;
    \n+
    1138 limit = order+1; // The 'standard' value away from the boundaries of the knot vector
    \n+
    1139 if (currentKnotSpan<order)
    \n+
    1140 limit -= (order - currentKnotSpan);
    \n+
    1141 if ( order > (knotVector.size() - currentKnotSpan - 2) )
    \n+
    1142 limit -= order - (knotVector.size() - currentKnotSpan - 2);
    \n+
    1143
    \n+
    1144 // The lowest knot spans that we need values from
    \n+
    1145 unsigned int offset;
    \n+
    1146 offset = std::max((int)(currentKnotSpan - order),0);
    \n+
    1147
    \n+
    1148 // Evaluate 1d function values (needed for the product rule)
    \n+
    1149 DynamicMatrix<R> values;
    \n+
    1150
    \n+
    1151 evaluateFunctionFull(in, values, knotVector, order, currentKnotSpan);
    \n+
    1152
    \n+
    1153 out.resize(knotVector.size()-order-1);
    \n+
    1154 for (size_t j=0; j<out.size(); j++)
    \n+
    1155 out[j] = values[order][j];
    \n+
    1156
    \n+
    1157 // Evaluate 1d function values of one order lower (needed for the derivative formula)
    \n+
    1158 std::vector<R> lowOrderOneDValues;
    \n+
    1159
    \n+
    1160 if (order!=0)
    \n+
    1161 {
    \n+
    1162 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);
    \n+
    1163 for (size_t j=0; j<lowOrderOneDValues.size(); j++)
    \n+
    1164 lowOrderOneDValues[j] = values[order-1][j];
    \n+
    1165 }
    \n+
    1166
    \n+
    1167 // Evaluate 1d function values of two order lower (needed for the (second) derivative formula)
    \n+
    1168 std::vector<R> lowOrderTwoDValues;
    \n+
    1169
    \n+
    1170 if (order>1 && evaluateHessian)
    \n+
    1171 {
    \n+
    1172 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);
    \n+
    1173 for (size_t j=0; j<lowOrderTwoDValues.size(); j++)
    \n+
    1174 lowOrderTwoDValues[j] = values[order-2][j];
    \n+
    1175 }
    \n+
    1176
    \n+
    1177 // Evaluate 1d function derivatives
    \n+
    1178 if (evaluateJacobian)
    \n+
    1179 {
    \n+
    1180 outJac.resize(limit);
    \n+
    1181
    \n+
    1182 if (order==0) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n+
    1183 std::fill(outJac.begin(), outJac.end(), R(0.0));
    \n+
    1184 else
    \n+
    1185 {
    \n+
    1186 for (size_t j=offset; j<offset+limit; j++)
    \n+
    1187 {
    \n+
    1188 R derivativeAddend1 = lowOrderOneDValues[j] / (knotVector[j+order]-knotVector[j]);
    \n+
    1189 R derivativeAddend2 = lowOrderOneDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]);
    \n+
    1190 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n+
    1191 if (std::isnan(derivativeAddend1))
    \n+
    1192 derivativeAddend1 = 0;
    \n+
    1193 if (std::isnan(derivativeAddend2))
    \n+
    1194 derivativeAddend2 = 0;
    \n+
    1195 outJac[j-offset] = order * ( derivativeAddend1 - derivativeAddend2 );
    \n+
    1196 }
    \n+
    1197 }
    \n+
    1198 }
    \n+
    1199
    \n+
    1200 // Evaluate 1d function second derivatives
    \n+
    1201 if (evaluateHessian)
    \n+
    1202 {
    \n+
    1203 outHess.resize(limit);
    \n+
    1204
    \n+
    1205 if (order<2) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n+
    1206 std::fill(outHess.begin(), outHess.end(), R(0.0));
    \n+
    1207 else
    \n+
    1208 {
    \n+
    1209 for (size_t j=offset; j<offset+limit; j++)
    \n+
    1210 {
    \n+
    1211 assert(j+2 < lowOrderTwoDValues.size());
    \n+
    1212 R derivativeAddend1 = lowOrderTwoDValues[j] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order-1]-knotVector[j]);
    \n+
    1213 R derivativeAddend2 = lowOrderTwoDValues[j+1] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order]-knotVector[j+1]);
    \n+
    1214 R derivativeAddend3 = lowOrderTwoDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+order]-knotVector[j+1]);
    \n+
    1215 R derivativeAddend4 = lowOrderTwoDValues[j+2] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+1+order]-knotVector[j+2]);
    \n+
    1216 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n+
    1217
    \n+
    1218 if (std::isnan(derivativeAddend1))
    \n+
    1219 derivativeAddend1 = 0;
    \n+
    1220 if (std::isnan(derivativeAddend2))
    \n+
    1221 derivativeAddend2 = 0;
    \n+
    1222 if (std::isnan(derivativeAddend3))
    \n+
    1223 derivativeAddend3 = 0;
    \n+
    1224 if (std::isnan(derivativeAddend4))
    \n+
    1225 derivativeAddend4 = 0;
    \n+
    1226 outHess[j-offset] = order * (order-1) * ( derivativeAddend1 - derivativeAddend2 -derivativeAddend3 + derivativeAddend4 );
    \n+
    1227 }
    \n+
    1228 }
    \n+
    1229 }
    \n+
    1230 }
    \n+
    \n+
    1231
    \n+
    1232
    \n+
    1234 std::array<unsigned int, dim> order_;
    \n+
    1235
    \n+
    1237 std::array<std::vector<double>, dim> knotVectors_;
    \n+
    1238
    \n+
    1240 std::array<unsigned,dim> elements_;
    \n+
    1241
    \n+\n+
    1243};
    \n+
    \n+
    1244
    \n+
    1245
    \n+
    1246
    \n+
    1247template<typename GV>
    \n+
    \n+\n+
    1249 public LeafBasisNode
    \n+
    1250{
    \n+
    1251 static const int dim = GV::dimension;
    \n+
    1252
    \n+
    1253public:
    \n+
    1254
    \n+
    1255 using size_type = std::size_t;
    \n+
    1256 using Element = typename GV::template Codim<0>::Entity;
    \n+\n+
    1258
    \n+
    \n+\n+
    1260 preBasis_(preBasis),
    \n+
    1261 finiteElement_(*preBasis)
    \n+
    1262 {}
    \n+
    \n+
    1263
    \n+
    \n+
    1265 const Element& element() const
    \n+
    1266 {
    \n+
    1267 return element_;
    \n+
    1268 }
    \n+
    \n+
    1269
    \n+
    \n+\n+
    1275 {
    \n+
    1276 return finiteElement_;
    \n+
    1277 }
    \n+
    \n+
    1278
    \n+
    \n+
    1280 void bind(const Element& e)
    \n+
    1281 {
    \n+
    1282 element_ = e;
    \n+
    1283 auto elementIndex = preBasis_->gridView().indexSet().index(e);
    \n+
    1284 finiteElement_.bind(preBasis_->getIJK(elementIndex,preBasis_->elements_));
    \n+
    1285 this->setSize(finiteElement_.size());
    \n+
    1286 }
    \n+
    \n+
    1287
    \n+
    1288protected:
    \n+
    1289
    \n+\n+
    1291
    \n+\n+\n+
    1294};
    \n+
    \n+
    1295
    \n+
    1296
    \n+
    1297
    \n+
    1298namespace BasisFactory {
    \n+
    1299
    \n+
    \n+
    1306inline auto bSpline(const std::vector<double>& knotVector,
    \n+
    1307 unsigned int order,
    \n+
    1308 bool makeOpen = true)
    \n+
    1309{
    \n+
    1310 return [&knotVector, order, makeOpen](const auto& gridView) {
    \n+
    1311 return BSplinePreBasis<std::decay_t<decltype(gridView)>>(gridView, knotVector, order, makeOpen);
    \n+
    1312 };
    \n+
    1313}
    \n+
    \n+
    1314
    \n+
    1315} // end namespace BasisFactory
    \n+
    1316
    \n+
    1317// *****************************************************************************
    \n+
    1318// This is the actual global basis implementation based on the reusable parts.
    \n+
    1319// *****************************************************************************
    \n+
    1320
    \n+
    1327template<typename GV>
    \n+\n+
    1329
    \n+
    1330
    \n+
    1331} // namespace Functions
    \n+
    1332
    \n+
    1333} // namespace Dune
    \n+
    1334
    \n+
    1335#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n+\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:1306
    \n
    Definition polynomial.hh:10
    \n+
    LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grid...
    Definition bsplinebasis.hh:362
    \n+
    BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)
    Copy constructor.
    Definition bsplinebasis.hh:383
    \n+
    const BSplinePreBasis< GV > & preBasis_
    Definition bsplinebasis.hh:474
    \n+
    const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > & localInterpolation() const
    Hand out a LocalInterpolation object.
    Definition bsplinebasis.hh:439
    \n+
    LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients< dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits
    Export various types related to this LocalFiniteElement.
    Definition bsplinebasis.hh:372
    \n+
    std::array< unsigned, dim > currentKnotSpan_
    Definition bsplinebasis.hh:481
    \n+
    BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)
    Constructor with a given B-spline basis.
    Definition bsplinebasis.hh:376
    \n+
    const BSplineLocalCoefficients< dim > & localCoefficients() const
    Hand out a LocalCoefficients object.
    Definition bsplinebasis.hh:433
    \n+
    void bind(const std::array< unsigned, dim > &elementIdx)
    Bind LocalFiniteElement to a specific knot span of the spline patch.
    Definition bsplinebasis.hh:394
    \n+
    BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > localInterpolation_
    Definition bsplinebasis.hh:478
    \n+
    GeometryType type() const
    Return the reference element that the local finite element is defined on (here, a hypercube)
    Definition bsplinebasis.hh:455
    \n+
    unsigned size() const
    Number of shape functions in this finite element.
    Definition bsplinebasis.hh:445
    \n+
    BSplineLocalCoefficients< dim > localCoefficients_
    Definition bsplinebasis.hh:477
    \n+
    unsigned int size(int i) const
    Number of degrees of freedom for one coordinate direction.
    Definition bsplinebasis.hh:463
    \n+
    BSplineLocalBasis< GV, R > localBasis_
    Definition bsplinebasis.hh:476
    \n+
    const BSplineLocalBasis< GV, R > & localBasis() const
    Hand out a LocalBasis object.
    Definition bsplinebasis.hh:427
    \n+
    Pre-basis for B-spline basis.
    Definition bsplinebasis.hh:499
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition bsplinebasis.hh:567
    \n+
    std::array< unsigned, dim > elements_
    Number of grid elements in the different coordinate directions.
    Definition bsplinebasis.hh:1240
    \n+
    GridView gridView_
    Definition bsplinebasis.hh:1242
    \n+
    double R
    Definition bsplinebasis.hh:570
    \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:1085
    \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:781
    \n+
    std::array< unsigned int, dim > order_
    Order of the B-spline for each space dimension.
    Definition bsplinebasis.hh:1234
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition bsplinebasis.hh:719
    \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:1128
    \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:1028
    \n+
    unsigned int size(size_t d) const
    Number of shape functions in one direction.
    Definition bsplinebasis.hh:774
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition bsplinebasis.hh:560
    \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:735
    \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:913
    \n+
    std::size_t size_type
    Definition bsplinebasis.hh:561
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition bsplinebasis.hh:565
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition bsplinebasis.hh:686
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition bsplinebasis.hh:676
    \n+
    size_type size(const Dune::ReservedVector< ST, i > &prefix) const
    Return number of possible values for next position in multi index.
    Definition bsplinebasis.hh:712
    \n+
    unsigned int size() const
    Total number of B-spline basis functions.
    Definition bsplinebasis.hh:765
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition bsplinebasis.hh:680
    \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:1009
    \n+
    Node makeNode() const
    Create tree node.
    Definition bsplinebasis.hh:694
    \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:590
    \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:812
    \n+
    static constexpr size_type minMultiIndexSize
    Definition bsplinebasis.hh:566
    \n+
    std::array< std::vector< double >, dim > knotVectors_
    The knot vectors, one for each space dimension.
    Definition bsplinebasis.hh:1237
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition bsplinebasis.hh:725
    \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:642
    \n+
    LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch ...
    Definition bsplinebasis.hh:46
    \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:55
    \n+
    unsigned int order() const
    Polynomial order of the shape functions.
    Definition bsplinebasis.hh:140
    \n+
    std::size_t size() const
    Return the number of basis functions on the current knot span.
    Definition bsplinebasis.hh:147
    \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:97
    \n+
    void evaluateFunction(const FieldVector< D, dim > &in, std::vector< FieldVector< R, 1 > > &out) const
    Evaluate all shape functions.
    Definition bsplinebasis.hh:70
    \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:82
    \n+
    BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const BSplineLocalFiniteElement< GV, R > &lFE)
    Constructor with a given B-spline patch.
    Definition bsplinebasis.hh:61
    \n+
    Attaches a shape function to an entity.
    Definition bsplinebasis.hh:178
    \n+
    const LocalKey & localKey(std::size_t i) const
    get i'th index
    Definition bsplinebasis.hh:321
    \n+
    void init(const std::array< unsigned, dim > &sizes)
    Definition bsplinebasis.hh:256
    \n+
    std::size_t size() const
    number of coefficients
    Definition bsplinebasis.hh:315
    \n+
    Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product gri...
    Definition bsplinebasis.hh:340
    \n+
    void interpolate(const F &f, std::vector< C > &out) const
    Local interpolation of a function.
    Definition bsplinebasis.hh:344
    \n+
    Definition bsplinebasis.hh:1250
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition bsplinebasis.hh:1274
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition bsplinebasis.hh:1256
    \n+
    const BSplinePreBasis< GV > * preBasis_
    Definition bsplinebasis.hh:1290
    \n+
    Element element_
    Definition bsplinebasis.hh:1293
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition bsplinebasis.hh:1280
    \n+
    BSplineNode(const BSplinePreBasis< GV > *preBasis)
    Definition bsplinebasis.hh:1259
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition bsplinebasis.hh:1265
    \n+
    FiniteElement finiteElement_
    Definition bsplinebasis.hh:1292
    \n+
    std::size_t size_type
    Definition bsplinebasis.hh:1255
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n+
    size_type size() const
    Definition nodes.hh:142
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n+
    Definition nodes.hh:186
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,89 +1,1500 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-gridfunction_imp.hh\n+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n-4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n 5\n-6#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-7#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-8#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-9\n-10\n-11\n-12namespace _\bD_\bu_\bn_\be {\n-13namespace Functions {\n-14namespace Imp {\n+10#include \n+11#include \n+12\n+14#include \n 15\n-19struct HasFreeLocalFunction\n-20{\n-21 template\n-22 auto require(F&& f) -> decltype(\n-23 localFunction(f)\n-24 );\n-25};\n-26\n+16#include \n+17#include \n+18#include \n+19#include \n+20#include \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/_\bn_\bo_\bd_\be_\bs_\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/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+23\n+24namespace _\bD_\bu_\bn_\be\n+25{\n+26namespace Functions {\n 27\n-28\n-29// Interface of type erasure wrapper\n-30//\n-31// Notice that the basic interface of polymorphic classes (destructor, clone,\n-...)\n-32// will be added by the type erasure foundation classes.\n-33template\n-34class GridFunctionWrapperInterface :\n-35 public DifferentiableFunctionWrapperInterface\n-36{\n-37public:\n-38 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;\n-39\n-40 virtual const EntitySet& wrappedEntitySet() const = 0;\n-41};\n-42\n-43\n-44// Implementation of type erasure wrapper\n-45template\n-46class GridFunctionWrapperImplementation :\n-47 public DifferentiableFunctionWrapperImplementation\n-48{\n-49 using Base = DifferentiableFunctionWrapperImplementation;\n-50public:\n-51 using Base::Base;\n+28// A maze of dependencies between the different parts of this. We need a few\n+forward declarations\n+29template\n+30class _\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+31\n+32template\n+33class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs;\n+34\n+35\n+44template\n+_\b4_\b5class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n+46{\n+47 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+48\n+49 typedef typename GV::ctype D;\n+50 enum {dim = GV::dimension};\n+51public:\n 52\n-53 virtual LocalFunctionInterface wrappedLocalFunction() const\n-54 {\n-55 return localFunction(this->get());\n-56 }\n-57\n-58 virtual const EntitySet& wrappedEntitySet() const\n-59 {\n-60 return this->get().entitySet();\n-61 }\n-62};\n-63\n-64\n-65\n-66}}} // namespace Dune::Functions::Imp\n-67\n-68\n-69\n-70#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_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-_\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+54 typedef LocalBasisTraits,R,1,FieldVector,\n+_\b5_\b5 FieldMatrix > _\bT_\br_\ba_\bi_\bt_\bs;\n+56\n+_\b6_\b1 _\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+62 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+63 : preBasis_(preBasis),\n+64 lFE_(lFE)\n+65 {}\n+66\n+_\b7_\b0 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (const FieldVector& in,\n+71 std::vector >& out) const\n+72 {\n+73 FieldVector globalIn = offset_;\n+74 scaling_.umv(in,globalIn);\n+75\n+76 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);\n+77 }\n+78\n+_\b8_\b2 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn (const FieldVector& in,\n+83 std::vector >& out) const\n+84 {\n+85 FieldVector globalIn = offset_;\n+86 scaling_.umv(in,globalIn);\n+87\n+88 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);\n+89\n+90 for (size_t i=0; i\n+_\b9_\b7 inline void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be (const typename std::array& directions,\n+98 const typename Traits::DomainType& in,\n+99 std::vector& out) const\n+100 {\n+101 switch(k)\n+102 {\n+103 case 0:\n+104 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(in, out);\n+105 break;\n+106 case 1:\n+107 {\n+108 FieldVector globalIn = offset_;\n+109 scaling_.umv(in,globalIn);\n+110\n+111 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n+112\n+113 for (size_t i=0; i globalIn = offset_;\n+120 scaling_.umv(in,globalIn);\n+121\n+122 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n+123\n+124 for (size_t i=0; i& preBasis_;\n+154\n+155 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+156\n+157 // Coordinates in a single knot span differ from coordinates on the B-\n+spline patch\n+158 // by an affine transformation. This transformation is stored in offset_\n+and scaling_.\n+159 FieldVector offset_;\n+160 DiagonalMatrix scaling_;\n+161};\n+162\n+176template\n+_\b1_\b7_\b7class _\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+178{\n+179 // Return i as a d-digit number in the (k+1)-nary system\n+180 std::array multiindex (unsigned int i) const\n+181 {\n+182 std::array alpha;\n+183 for (int j=0; j& subEntity)\n+193 {\n+194 if (sizes_[0]==1)\n+195 {\n+196 subEntity[0] = 0;\n+197 return;\n+198 }\n+199\n+200 /* edge and vertex numbering\n+201 0----0----1\n+202 */\n+203 unsigned lastIndex=0;\n+204 subEntity[lastIndex++] = 0; // corner 0\n+205 for (unsigned i = 0; i < sizes_[0] - 2; ++i)\n+206 subEntity[lastIndex++] = 0; // inner dofs of element (0)\n+207\n+208 subEntity[lastIndex++] = 1; // corner 1\n+209\n+210 assert(_\bs_\bi_\bz_\be()==lastIndex);\n+211 }\n+212\n+213 void setup2d(std::vector& subEntity)\n+214 {\n+215 unsigned lastIndex=0;\n+216\n+217 // LocalKey: entity number , entity codim, dof indices within each entity\n+218 /* edge and vertex numbering\n+219 2----3----3\n+220 | |\n+221 | |\n+222 0 1\n+223 | |\n+224 | |\n+225 0----2----1\n+226 */\n+227\n+228 // lower edge (2)\n+229 subEntity[lastIndex++] = 0; // corner 0\n+230 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n+231 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)\n+232\n+233 subEntity[lastIndex++] = 1; // corner 1\n+234\n+235 // iterate from bottom to top over inner edge dofs\n+236 for (unsigned e = 0; e < sizes_[1]-2; ++e)\n+237 {\n+238 subEntity[lastIndex++] = 0; // left edge (0)\n+239 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n+240 subEntity[lastIndex++] = 0; // face dofs\n+241 subEntity[lastIndex++] = 1; // right edge (1)\n+242 }\n+243\n+244 // upper edge (3)\n+245 subEntity[lastIndex++] = 2; // corner 2\n+246 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n+247 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)\n+248\n+249 subEntity[lastIndex++] = 3; // corner 3\n+250\n+251 assert(_\bs_\bi_\bz_\be()==lastIndex);\n+252 }\n+253\n+254\n+255public:\n+_\b2_\b5_\b6 void _\bi_\bn_\bi_\bt(const std::array& sizes)\n+257 {\n+258 sizes_ = sizes;\n+259\n+260 li_.resize(_\bs_\bi_\bz_\be());\n+261\n+262 // Set up array of codimension-per-dof-number\n+263 std::vector codim(li_.size());\n+264\n+265 for (std::size_t i=0; i mIdx = multiindex(i);\n+271 for (int j=0; j index(_\bs_\bi_\bz_\be());\n+282\n+283 for (std::size_t i=0; i mIdx = multiindex(i);\n+288\n+289 for (int j=dim-1; j>=0; j--)\n+290 if (mIdx[j]>0 and mIdx[j] subEntity(li_.size());\n+296\n+297 if (subEntity.size() > 0)\n+298 {\n+299 if (dim==1) {\n+300\n+301 setup1d(subEntity);\n+302\n+303 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {\n+304\n+305 setup2d(subEntity);\n+306\n+307 }\n+308 }\n+309\n+310 for (size_t i=0; i());\n+318 }\n+319\n+_\b3_\b2_\b1 const LocalKey& _\bl_\bo_\bc_\ba_\bl_\bK_\be_\by (std::size_t i) const\n+322 {\n+323 return li_[i];\n+324 }\n+325\n+326private:\n+327\n+328 // Number of shape functions on this element per coordinate direction\n+329 std::array sizes_;\n+330\n+331 std::vector li_;\n+332};\n+333\n+338template\n+_\b3_\b3_\b9class _\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+340{\n+341public:\n+343 template\n+_\b3_\b4_\b4 void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const F& f, std::vector& out) const\n+345 {\n+346 DUNE_THROW(NotImplemented, \"BSplineLocalInterpolation::interpolate\");\n+347 }\n+348\n+349};\n+350\n+360template\n+_\b3_\b6_\b1class _\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+362{\n+_\b3_\b6_\b3 typedef typename GV::ctype D;\n+364 enum {dim = GV::dimension};\n+365 friend class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs;\n+366public:\n+367\n+370 typedef LocalFiniteElementTraits,\n+371 _\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_\b2 _\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+373\n+_\b3_\b7_\b6 _\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+377 : _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(preBasis),\n+378 _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(preBasis,*this)\n+379 {}\n+380\n+_\b3_\b8_\b3 _\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+384 : _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(other._\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_),\n+385 _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_,*this)\n+386 {}\n+387\n+_\b3_\b9_\b4 void _\bb_\bi_\bn_\bd(const std::array& elementIdx)\n+395 {\n+396 /* \\todo In the long run we need to precompute a table for this */\n+397 for (size_t i=0; i sizes;\n+421 for (size_t i=0; i& _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs() const\n+428 {\n+429 return _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n+430 }\n+431\n+_\b4_\b3_\b3 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+434 {\n+435 return _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b_;\n+436 }\n+437\n+_\b4_\b3_\b9 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+440 {\n+441 return _\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b_;\n+442 }\n+443\n+_\b4_\b4_\b5 unsigned _\bs_\bi_\bz_\be () const\n+446 {\n+447 std::size_t r = 1;\n+448 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+470 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+471 return r;\n+472 }\n+473\n+_\b4_\b7_\b4 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+475\n+_\b4_\b7_\b6 _\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_\b7_\b7 _\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_\b7_\b8 _\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+479\n+480 // The knot span we are bound to\n+_\b4_\b8_\b1 std::array _\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_;\n+482};\n+483\n+484\n+485template\n+486class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be;\n+487\n+497template\n+_\b4_\b9_\b8class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+499{\n+500 static const int dim = GV::dimension;\n+501\n+503 class MultiDigitCounter\n+504 {\n+505 public:\n+506\n+510 MultiDigitCounter(const std::array& limits)\n+511 : limits_(limits)\n+512 {\n+513 std::fill(counter_.begin(), counter_.end(), 0);\n+514 }\n+515\n+517 MultiDigitCounter& operator++()\n+518 {\n+519 for (int i=0; i limits_;\n+551\n+553 std::array counter_;\n+554\n+555 };\n+556\n+557public:\n+558\n+_\b5_\b6_\b0 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b5_\b6_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+562\n+_\b5_\b6_\b3 using _\bN_\bo_\bd_\be = _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b>;\n+564\n+_\b5_\b6_\b5 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+_\b5_\b6_\b6 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+_\b5_\b6_\b7 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+568\n+569 // Type used for function values\n+_\b5_\b7_\b0 using _\bR = double;\n+571\n+_\b5_\b9_\b0 _\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+591 const std::vector& knotVector,\n+592 unsigned int order,\n+593 bool makeOpen = true)\n+594 : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)\n+595 {\n+596 // \\todo Detection of duplicate knots\n+597 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+598\n+599 // Mediocre sanity check: we don't know the number of grid elements in each\n+direction.\n+600 // but at least we know the total number of elements.\n+601 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+602\n+603 for (int i=0; i& lowerLeft,\n+644 const FieldVector& upperRight,\n+645 const std::array& elements,\n+646 unsigned int order,\n+647 bool makeOpen = true)\n+648 : _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_(elements),\n+649 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)\n+650 {\n+651 // Mediocre sanity check: we don't know the number of grid elements in each\n+direction.\n+652 // but at least we know the total number of elements.\n+653 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+654\n+655 for (int i=0; i\n+702 // size_type size(const SizePrefix& prefix) const\n+703 //\n+704 // But leads to ambiguity with the other size method:\n+705 //\n+706 // unsigned int size (size_t d) const\n+707 //\n+708 // Once the latter is removed, this implementation should be changed.\n+709\n+711 template\n+_\b7_\b1_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const Dune::ReservedVector& prefix) const\n+713 {\n+714 assert(prefix.size() == 0 || prefix.size() == 1);\n+715 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n+716 }\n+717\n+_\b7_\b1_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+720 {\n+721 return _\bs_\bi_\bz_\be();\n+722 }\n+723\n+_\b7_\b2_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+726 {\n+727 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 1;\n+728 for (int i=0; i\n+_\b7_\b3_\b5 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+736 {\n+737 // Local degrees of freedom are arranged in a lattice.\n+738 // We need the lattice dimensions to be able to compute lattice coordinates\n+from a local index\n+739 std::array localSizes;\n+740 for (int i=0; i localIJK = _\bg_\be_\bt_\bI_\bJ_\bK(i, localSizes);\n+745\n+746 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+747 const auto order = _\bo_\br_\bd_\be_\br_\b_;\n+748\n+749 std::array globalIJK;\n+750 for (int i=0; i=0; i--)\n+757 globalIdx = globalIdx * _\bs_\bi_\bz_\be(i) + globalIJK[i];\n+758\n+759 *it = {{globalIdx}};\n+760 }\n+761 return it;\n+762 }\n+763\n+_\b7_\b6_\b5 unsigned int _\bs_\bi_\bz_\be () const\n+766 {\n+767 unsigned int result = 1;\n+768 for (size_t i=0; i& in,\n+782 std::vector >& out,\n+783 const std::array& currentKnotSpan) const\n+784 {\n+785 // Evaluate\n+786 std::array, dim> oneDValues;\n+787\n+788 for (size_t i=0; i limits;\n+792 for (int i=0; i& in,\n+813 std::vector >& out,\n+814 const std::array& currentKnotSpan) const\n+815 {\n+816 // How many shape functions to we have in each coordinate direction?\n+817 std::array limits;\n+818 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+824 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+825 }\n+826\n+827 // The lowest knot spans that we need values from\n+828 std::array offset;\n+829 for (int i=0; i, dim> oneDValues;\n+834\n+835 // Evaluate 1d function values of one order lower (needed for the\n+derivative formula)\n+836 std::array, dim> lowOrderOneDValues;\n+837\n+838 std::array, dim> values;\n+839\n+840 for (size_t i=0; i, dim> oneDDerivatives;\n+858 for (size_t i=0; i, dim> oneDValuesShort;\n+883\n+884 for (int i=0; i\n+_\b9_\b1_\b3 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const typename std::array& directions,\n+914 const FieldVector& in,\n+915 std::vector >& out,\n+916 const std::array& currentKnotSpan) const\n+917 {\n+918 if (k != 1 && k != 2)\n+919 DUNE_THROW(RangeError, \"Differentiation order greater than 2 is not\n+supported!\");\n+920\n+921 // Evaluate 1d function values (needed for the product rule)\n+922 std::array, dim> oneDValues;\n+923 std::array, dim> oneDDerivatives;\n+924 std::array, dim> oneDSecondDerivatives;\n+925\n+926 // Evaluate 1d function derivatives\n+927 if (k==1)\n+928 for (size_t i=0; i offset;\n+936 for (int i=0; i limits;\n+941 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+949 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+950 }\n+951\n+952 // Working towards computing only the parts that we really need:\n+953 // Let's copy them out into a separate array\n+954 std::array, dim> oneDValuesShort;\n+955\n+956 for (int i=0; i _\bg_\be_\bt_\bI_\bJ_\bK(typename GridView::IndexSet::\n+IndexType idx, std::array elements)\n+1010 {\n+1011 std::array result;\n+1012 for (int i=0; i& out,\n+1029 const std::vector& knotVector,\n+1030 unsigned int order,\n+1031 unsigned int currentKnotSpan)\n+1032 {\n+1033 std::size_t outSize = order+1; // The 'standard' value away from the\n+boundaries of the knot vector\n+1034 if (currentKnotSpan (knotVector.size() - currentKnotSpan - 2) )\n+1037 outSize -= order - (knotVector.size() - currentKnotSpan - 2);\n+1038 out.resize(outSize);\n+1039\n+1040 // It's not really a matrix that is needed here, a plain 2d array would do\n+1041 DynamicMatrix N(order+1, knotVector.size()-1);\n+1042\n+1043 // The text books on splines use the following geometric condition here to\n+fill the array N\n+1044 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n+this condition\n+1045 // only works if splines are never evaluated exactly on the knots.\n+1046 //\n+1047 // for (size_t i=0; i 1e-10)\n+1056 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n+1057 : 0;\n+1058 _\bR factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n+1059 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n+1060 : 0;\n+1061 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n+1062 }\n+1063\n+1068 for (size_t i=0; i& out,\n+1087 const std::vector& knotVector,\n+1088 unsigned int order,\n+1089 unsigned int currentKnotSpan)\n+1090 {\n+1091 // It's not really a matrix that is needed here, a plain 2d array would do\n+1092 DynamicMatrix& N = out;\n+1093\n+1094 N.resize(order+1, knotVector.size()-1);\n+1095\n+1096 // The text books on splines use the following geometric condition here to\n+fill the array N\n+1097 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n+this condition\n+1098 // only works if splines are never evaluated exactly on the knots.\n+1099 //\n+1100 // for (size_t i=0; i 1e-10)\n+1109 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n+1110 : 0;\n+1111 _\bR factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n+1112 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n+1113 : 0;\n+1114 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n+1115 }\n+1116 }\n+1117\n+1118\n+_\b1_\b1_\b2_\b8 static void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bA_\bl_\bl(const typename GV::ctype& in,\n+1129 std::vector& out,\n+1130 bool _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn, std::vector& outJac,\n+1131 bool evaluateHessian, std::vector& outHess,\n+1132 const std::vector& knotVector,\n+1133 unsigned int order,\n+1134 unsigned int currentKnotSpan)\n+1135 {\n+1136 // How many shape functions to we have in each coordinate direction?\n+1137 unsigned int limit;\n+1138 limit = order+1; // The 'standard' value away from the boundaries of the\n+knot vector\n+1139 if (currentKnotSpan (knotVector.size() - currentKnotSpan - 2) )\n+1142 limit -= order - (knotVector.size() - currentKnotSpan - 2);\n+1143\n+1144 // The lowest knot spans that we need values from\n+1145 unsigned int offset;\n+1146 offset = std::max((int)(currentKnotSpan - order),0);\n+1147\n+1148 // Evaluate 1d function values (needed for the product rule)\n+1149 DynamicMatrix values;\n+1150\n+1151 _\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+1152\n+1153 out.resize(knotVector.size()-order-1);\n+1154 for (size_t j=0; j lowOrderOneDValues;\n+1159\n+1160 if (order!=0)\n+1161 {\n+1162 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);\n+1163 for (size_t j=0; j lowOrderTwoDValues;\n+1169\n+1170 if (order>1 && evaluateHessian)\n+1171 {\n+1172 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);\n+1173 for (size_t j=0; j _\bo_\br_\bd_\be_\br_\b_;\n+1235\n+_\b1_\b2_\b3_\b7 std::array, dim> _\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_;\n+1238\n+_\b1_\b2_\b4_\b0 std::array _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_;\n+1241\n+_\b1_\b2_\b4_\b2 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+1243};\n+1244\n+1245\n+1246\n+1247template\n+_\b1_\b2_\b4_\b8class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be :\n+1249 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+1250{\n+1251 static const int dim = GV::dimension;\n+1252\n+1253public:\n+1254\n+_\b1_\b2_\b5_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b1_\b2_\b5_\b6 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b1_\b2_\b5_\b7 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+1258\n+_\b1_\b2_\b5_\b9 _\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+1260 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(preBasis),\n+1261 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(*preBasis)\n+1262 {}\n+1263\n+_\b1_\b2_\b6_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+1266 {\n+1267 return _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+1268 }\n+1269\n+_\b1_\b2_\b7_\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+1275 {\n+1276 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+1277 }\n+1278\n+_\b1_\b2_\b8_\b0 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+1281 {\n+1282 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = e;\n+1283 auto elementIndex = _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_->gridView().indexSet().index(e);\n+1284 _\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+1285 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+1286 }\n+1287\n+1288protected:\n+1289\n+_\b1_\b2_\b9_\b0 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+1291\n+_\b1_\b2_\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_\b2_\b9_\b3 _\bE_\bl_\be_\bm_\be_\bn_\bt _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+1294};\n+1295\n+1296\n+1297\n+1298namespace BasisFactory {\n+1299\n+_\b1_\b3_\b0_\b6inline auto _\bb_\bS_\bp_\bl_\bi_\bn_\be(const std::vector& knotVector,\n+1307 unsigned int order,\n+1308 bool makeOpen = true)\n+1309{\n+1310 return [&knotVector, order, makeOpen](const auto& gridView) {\n+1311 return _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(gridView,\n+knotVector, order, makeOpen);\n+1312 };\n+1313}\n+1314\n+1315} // end namespace BasisFactory\n+1316\n+1317/\n+/ *****************************************************************************\n+1318// This is the actual global basis implementation based on the reusable\n+parts.\n+1319/\n+/ *****************************************************************************\n+1320\n+1327template\n+_\b1_\b3_\b2_\b8using _\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+1329\n+1330\n+1331} // namespace Functions\n+1332\n+1333} // namespace Dune\n+1334\n+1335#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+_\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:1306\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n+_\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:362\n+_\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:383\n+_\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:474\n+_\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:439\n+_\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:372\n+_\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: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:_\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:376\n+_\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:433\n+_\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:394\n+_\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:478\n+_\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:455\n+_\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:445\n+_\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:477\n+_\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:463\n+_\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:476\n+_\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:427\n+_\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:499\n+_\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_\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 bsplinebasis.hh:567\n+_\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: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_\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:1242\n+_\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:570\n+_\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:1085\n+_\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:781\n+_\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:1234\n+_\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+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 bsplinebasis.hh:719\n+_\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:1128\n+_\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:1028\n+_\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:774\n+_\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:560\n+_\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:735\n+_\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:913\n+_\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:561\n+_\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_\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 bsplinebasis.hh:565\n+_\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:686\n+_\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:676\n+_\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+size_type size(const Dune::ReservedVector< ST, i > &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 bsplinebasis.hh:712\n+_\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() const\n+Total number of B-spline basis functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:765\n+_\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: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_\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: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:_\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:694\n+_\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:590\n+_\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:812\n+_\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_\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 bsplinebasis.hh:566\n+_\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: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_\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:725\n+_\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:642\n+_\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:46\n+_\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:55\n+_\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:140\n+_\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:147\n+_\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:97\n+_\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:70\n+_\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:82\n+_\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:61\n+_\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:178\n+_\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:321\n+_\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:256\n+_\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:315\n+_\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:340\n+_\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:344\n+_\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:1250\n+_\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: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:_\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:1256\n+_\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:1290\n+_\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:1293\n+_\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:1280\n+_\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:1259\n+_\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:1265\n+_\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:1292\n+_\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:1255\n+_\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:46\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:142\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:164\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:186\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: gridviewentityset.hh File Reference\n+dune-functions: compositebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -65,40 +65,58 @@\n
    \n \n \n \n \n \n \n
    \n \n-
    gridviewentityset.hh File Reference
    \n+
    compositebasis.hh File Reference
    \n
    \n
    \n-
    #include <memory>
    \n+
    #include <tuple>
    \n+#include <utility>
    \n+#include <dune/common/std/apply.hh>
    \n+#include <dune/common/hybridutilities.hh>
    \n+#include <dune/common/reservedvector.hh>
    \n+#include <dune/common/typeutilities.hh>
    \n+#include <dune/common/tupleutility.hh>
    \n+#include <dune/common/tuplevector.hh>
    \n+#include <dune/functions/common/staticforloop.hh>
    \n+#include <dune/functions/common/type_traits.hh>
    \n+#include <dune/functions/common/utility.hh>
    \n+#include <dune/functions/functionspacebases/basistags.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/functions/functionspacebases/concepts.hh>
    \n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::GridViewEntitySet< GV, cd >
     An entity set for all entities of given codim in a grid view. More...
    class  Dune::Functions::CompositePreBasis< IMS, SPB >
     A pre-basis for composite bases. More...
     
    \n \n \n \n \n \n+\n+\n+\n+\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,40 @@\n dune-functions\u00a02.9.0\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+ * _\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-gridviewentityset.hh File Reference\n-#include \n+compositebasis.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/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b<_\b _\bG_\bV_\b,_\b _\bc_\bd_\b _\b>\n-\u00a0 An entity set for all entities of given codim in a grid view. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bI_\bM_\bS_\b,_\b _\bS_\bP_\bB_\b _\b>\n+\u00a0 A pre-basis for composite bases. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/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: gridviewentityset.hh Source File\n+dune-functions: compositebasis.hh Source File\n \n \n \n \n \n \n \n@@ -70,123 +70,452 @@\n
    \n \n \n \n \n \n \n
    \n-
    gridviewentityset.hh
    \n+
    compositebasis.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n-
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n-
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n
    5
    \n-
    6#include <memory>
    \n-
    7
    \n+
    6#include <tuple>
    \n+
    7#include <utility>
    \n
    8
    \n-
    9namespace Dune {
    \n-
    10
    \n-
    11namespace Functions {
    \n-
    12
    \n-
    13
    \n-
    21template<class GV, int cd>
    \n-
    \n-\n-
    23{
    \n-
    24public:
    \n+
    9#include <dune/common/std/apply.hh>
    \n+
    10#include <dune/common/hybridutilities.hh>
    \n+
    11#include <dune/common/reservedvector.hh>
    \n+
    12#include <dune/common/typeutilities.hh>
    \n+
    13#include <dune/common/hybridutilities.hh>
    \n+
    14#include <dune/common/tupleutility.hh>
    \n+
    15#include <dune/common/tuplevector.hh>
    \n+
    16
    \n+\n+\n+\n+\n+\n+\n+\n+
    24
    \n
    25
    \n-
    26 typedef GV GridView;
    \n-
    27 enum {
    \n-
    28 codim = cd
    \n-
    29 };
    \n-
    30
    \n-
    32 typedef typename GridView::template Codim<codim>::Entity Element;
    \n-
    33
    \n-
    35 typedef typename Element::Geometry::LocalCoordinate LocalCoordinate;
    \n-
    36 typedef typename Element::Geometry::GlobalCoordinate GlobalCoordinate;
    \n-
    37
    \n-\n+
    26namespace Dune {
    \n+
    27namespace Functions {
    \n+
    28
    \n+
    29// *****************************************************************************
    \n+
    30// This is the reusable part of the composite bases. It contains
    \n+
    31//
    \n+
    32// CompositePreBasis
    \n+
    33//
    \n+
    34// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    35// state. These components do _not_ depend on the global basis and local view
    \n+
    36// and can be used without a global basis.
    \n+
    37// *****************************************************************************
    \n+
    38
    \n
    39
    \n-
    41 typedef typename GridView::template Codim<codim>::Iterator const_iterator;
    \n-
    42
    \n-\n-
    45
    \n-
    \n-\n-
    48 gv_(gv)
    \n-
    49 {}
    \n-
    \n-
    50
    \n-
    \n-
    52 bool contains(const Element& e) const
    \n-
    53 {
    \n-
    54 return gv_.contains(e);
    \n-
    55 }
    \n-
    \n+
    51template<class IMS, class... SPB>
    \n+
    \n+\n+
    53{
    \n+
    54 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;
    \n+
    55public:
    \n
    56
    \n-
    \n-
    58 size_t size() const
    \n-
    59 {
    \n-
    60 return gv_.size(codim);
    \n-
    61 }
    \n-
    \n-
    62
    \n-
    \n-\n-
    65 {
    \n-
    66 return gv_.template begin<codim>();
    \n-
    67 }
    \n-
    \n-
    68
    \n-
    \n-\n-
    71 {
    \n-
    72 return gv_.template end<codim>();
    \n-
    73 }
    \n-
    \n-
    74
    \n-
    \n-
    76 const GridView& gridView() const
    \n-
    77 {
    \n-
    78 return gv_;
    \n-
    79 }
    \n-
    \n-
    80
    \n-
    81private:
    \n-
    82 GridView gv_;
    \n-
    83};
    \n-
    \n-
    84
    \n-
    85
    \n-
    86} // end of namespace Dune::Functions
    \n-
    87} // end of namespace Dune
    \n-
    88
    \n-
    89#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n+
    58 using SubPreBases = std::tuple<SPB...>;
    \n+
    59
    \n+
    61 template<std::size_t i>
    \n+
    62 using SubPreBasis = std::tuple_element_t<i, SubPreBases>;
    \n+
    63
    \n+
    65 using GridView = typename std::tuple_element_t<0, SubPreBases>::GridView;
    \n+
    66
    \n+
    68 using size_type = std::size_t;
    \n+
    69
    \n+\n+
    72
    \n+
    73protected:
    \n+
    74 static const std::size_t children = sizeof...(SPB);
    \n+
    75
    \n+
    76 using ChildIndices = std::make_index_sequence<children>;
    \n+
    77
    \n+
    78public:
    \n+
    79
    \n+
    81 using Node = CompositeBasisNode<typename SPB::Node...>;
    \n+
    82
    \n+
    83 static constexpr size_type maxMultiIndexSize = std::max({SPB::maxMultiIndexSize...}) + isBlocked;
    \n+
    84 static constexpr size_type minMultiIndexSize = std::min({SPB::minMultiIndexSize...}) + isBlocked;
    \n+
    85 static constexpr size_type multiIndexBufferSize = std::max({SPB::multiIndexBufferSize...}) + isBlocked;
    \n+
    86
    \n+
    92 template<class... SFArgs,
    \n+
    93 disableCopyMove<CompositePreBasis, SFArgs...> = 0,
    \n+
    94 enableIfConstructible<std::tuple<SPB...>, SFArgs...> = 0>
    \n+
    \n+
    95 CompositePreBasis(SFArgs&&... sfArgs) :
    \n+
    96 subPreBases_(std::forward<SFArgs>(sfArgs)...)
    \n+
    97 {
    \n+
    98 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){
    \n+
    99 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype(subPreBasis)>>(), "Subprebases passed to CompositePreBasis does not model the PreBasis concept.");
    \n+
    100 });
    \n+
    101 }
    \n+
    \n+
    102
    \n+
    109 template<class GV,
    \n+
    110 std::enable_if_t<std::conjunction_v<
    \n+
    111 std::bool_constant<(children > 1)>, // Avoid ambiguous constructor if there's only one child
    \n+
    112 std::is_same<GV, GridView>,
    \n+
    113 std::is_constructible<SPB, GridView>...
    \n+
    114 >, int> = 0>
    \n+
    \n+
    115 CompositePreBasis(const GV& gv) :
    \n+
    116 subPreBases_(SPB(gv)...)
    \n+
    117 {
    \n+
    118 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){
    \n+
    119 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype(subPreBasis)>>(), "Subprebases passed to CompositePreBasis does not model the PreBasis concept.");
    \n+
    120 });
    \n+
    121 }
    \n+
    \n+
    122
    \n+
    \n+\n+
    125 {
    \n+
    126 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    127 this->subPreBasis(i).initializeIndices();
    \n+
    128 });
    \n+
    129 }
    \n+
    \n+
    130
    \n+
    \n+
    132 const GridView& gridView() const
    \n+
    133 {
    \n+
    134 return std::get<0>(subPreBases_).gridView();
    \n+
    135 }
    \n+
    \n+
    136
    \n+
    \n+
    138 void update(const GridView& gv)
    \n+
    139 {
    \n+
    140 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    141 this->subPreBasis(i).update(gv);
    \n+
    142 });
    \n+
    143 }
    \n+
    \n+
    144
    \n+
    \n+\n+
    149 {
    \n+
    150 auto node = Node{};
    \n+
    151 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    152 node.setChild(this->subPreBasis(i).makeNode(), i);
    \n+
    153 });
    \n+
    154 return node;
    \n+
    155 }
    \n+
    \n+
    156
    \n+
    \n+\n+
    159 {
    \n+
    160 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n+
    161 }
    \n+
    \n+
    162
    \n+
    164 template<class SizePrefix>
    \n+
    \n+
    165 size_type size(const SizePrefix& prefix) const
    \n+
    166 {
    \n+
    167 return size(prefix, IndexMergingStrategy{});
    \n+
    168 }
    \n+
    \n+
    169
    \n+
    170private:
    \n+
    171
    \n+
    172 template<class SizePrefix>
    \n+
    173 size_type size(const SizePrefix& prefix, BasisFactory::BlockedLexicographic) const
    \n+
    174 {
    \n+
    175 if (prefix.size() == 0)
    \n+
    176 return children;
    \n+
    177
    \n+
    178 return Hybrid::switchCases(ChildIndices(), prefix[0], [&] (auto i) {
    \n+
    179 SizePrefix subPrefix;
    \n+
    180 for(std::size_t i=1; i<prefix.size(); ++i)
    \n+
    181 subPrefix.push_back(prefix[i]);
    \n+
    182 return this->subPreBasis(i).size(subPrefix);
    \n+
    183 }, []() {
    \n+
    184 return size_type(0);
    \n+
    185 });
    \n+
    186 }
    \n+
    187
    \n+
    188 template<class SizePrefix>
    \n+
    189 size_type size(const SizePrefix& prefix, BasisFactory::FlatLexicographic) const
    \n+
    190 {
    \n+
    191 size_type result = 0;
    \n+
    192 if (prefix.size() == 0)
    \n+
    193 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    194 result += this->subPreBasis(i).size();
    \n+
    195 });
    \n+
    196 else {
    \n+
    197 size_type shiftedFirstDigit = prefix[0];
    \n+
    198 staticFindInRange<0, children>([&](auto i) {
    \n+
    199 auto firstDigitSize = this->subPreBasis(i).size();
    \n+
    200 if (shiftedFirstDigit < firstDigitSize)
    \n+
    201 {
    \n+
    202 SizePrefix subPrefix;
    \n+
    203 subPrefix.push_back(shiftedFirstDigit);
    \n+
    204 for(std::size_t i=1; i<prefix.size(); ++i)
    \n+
    205 subPrefix.push_back(prefix[i]);
    \n+
    206 result = this->subPreBasis(i).size(subPrefix);
    \n+
    207 return true;
    \n+
    208 }
    \n+
    209 shiftedFirstDigit -= firstDigitSize;
    \n+
    210 return false;
    \n+
    211 });
    \n+
    212 }
    \n+
    213 return result;
    \n+
    214 }
    \n+
    215
    \n+
    216public:
    \n+
    217
    \n+
    \n+\n+
    220 {
    \n+
    221 size_type r=0;
    \n+
    222 // Accumulate dimension() for all subprebases
    \n+
    223 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    224 r += this->subPreBasis(i).dimension();
    \n+
    225 });
    \n+
    226 return r;
    \n+
    227 }
    \n+
    \n+
    228
    \n+
    \n+\n+
    231 {
    \n+
    232 size_type r=0;
    \n+
    233 // Accumulate maxNodeSize() for all subprebases
    \n+
    234 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n+
    235 r += this->subPreBasis(i).maxNodeSize();
    \n+
    236 });
    \n+
    237 return r;
    \n+
    238 }
    \n+
    \n+
    239
    \n+
    241 template<std::size_t i>
    \n+
    \n+
    242 const SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {}) const
    \n+
    243 {
    \n+
    244 return std::get<i>(subPreBases_);
    \n+
    245 }
    \n+
    \n+
    246
    \n+
    248 template<std::size_t i>
    \n+
    \n+
    249 SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {})
    \n+
    250 {
    \n+
    251 return std::get<i>(subPreBases_);
    \n+
    252 }
    \n+
    \n+
    253
    \n+
    255 template<typename It>
    \n+
    \n+
    256 It indices(const Node& node, It it) const
    \n+
    257 {
    \n+
    258 return indices(node, it, IndexMergingStrategy{});
    \n+
    259 }
    \n+
    \n+
    260
    \n+
    261private:
    \n+
    262
    \n+
    263 template<typename It>
    \n+
    264 It indices(const Node& node, It multiIndices, BasisFactory::FlatLexicographic) const
    \n+
    265 {
    \n+
    266 size_type firstComponentOffset = 0;
    \n+
    267 // Loop over all children
    \n+
    268 Hybrid::forEach(ChildIndices(), [&](auto child){
    \n+
    269 size_type subTreeSize = node.child(child).size();
    \n+
    270 // Fill indices for current child into index buffer starting from current
    \n+
    271 // buffer position and shift first index component of any index for current
    \n+
    272 // child by suitable offset to get lexicographic indices.
    \n+
    273 subPreBasis(child).indices(node.child(child), multiIndices);
    \n+
    274 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    275 multiIndices[i][0] += firstComponentOffset;
    \n+
    276 // Increment offset by the size for first index component of the current child
    \n+
    277 firstComponentOffset += subPreBasis(child).size();
    \n+
    278 // Increment buffer iterator by the number of indices processed for current child
    \n+
    279 multiIndices += subTreeSize;
    \n+
    280 });
    \n+
    281 return multiIndices;
    \n+
    282 }
    \n+
    283
    \n+
    284 template<class MultiIndex>
    \n+
    285 static void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n+
    286 {
    \n+
    287 M.resize(M.size()+1);
    \n+
    288 for(std::size_t i=M.size()-1; i>0; --i)
    \n+
    289 M[i] = M[i-1];
    \n+
    290 M[0] = M0;
    \n+
    291 }
    \n+
    292
    \n+
    293 template<typename It>
    \n+
    294 It indices(const Node& node, It multiIndices, BasisFactory::BlockedLexicographic) const
    \n+
    295 {
    \n+
    296 // Loop over all children
    \n+
    297 Hybrid::forEach(ChildIndices(), [&](auto child){
    \n+
    298 size_type subTreeSize = node.child(child).size();
    \n+
    299 // Fill indices for current child into index buffer starting from current position
    \n+
    300 subPreBasis(child).indices(node.child(child), multiIndices);
    \n+
    301 // Insert child index before first component of all indices of current child.
    \n+
    302 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    303 this->multiIndexPushFront(multiIndices[i], child);
    \n+
    304 // Increment buffer iterator by the number of indices processed for current child
    \n+
    305 multiIndices += subTreeSize;
    \n+
    306 });
    \n+
    307 return multiIndices;
    \n+
    308 }
    \n+
    309
    \n+
    310 std::tuple<SPB...> subPreBases_;
    \n+
    311};
    \n+
    \n+
    312
    \n+
    313
    \n+
    314
    \n+
    315namespace BasisFactory {
    \n+
    316
    \n+
    317namespace Imp {
    \n+
    318
    \n+
    319template<class IndexMergingStrategy, class... ChildPreBasisFactory>
    \n+
    320class CompositePreBasisFactory
    \n+
    321{
    \n+
    322
    \n+
    323 template<class GridView, class... ChildPreBasis>
    \n+
    324 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&... childPreBasis) const
    \n+
    325 {
    \n+
    326 return CompositePreBasis<IndexMergingStrategy, std::decay_t<ChildPreBasis>...>(std::forward<ChildPreBasis>(childPreBasis)...);
    \n+
    327 }
    \n+
    328
    \n+
    329public:
    \n+
    330
    \n+
    331 CompositePreBasisFactory(const ChildPreBasisFactory&... childPreBasisFactory) :
    \n+
    332 childPreBasisFactories_(childPreBasisFactory...)
    \n+
    333 {}
    \n+
    334
    \n+
    335 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :
    \n+
    336 childPreBasisFactories_(std::move(childPreBasisFactory)...)
    \n+
    337 {}
    \n+
    338
    \n+
    339 template<class GridView>
    \n+
    340 auto operator()(const GridView& gridView) const
    \n+
    341 {
    \n+
    342 // Use std::apply to unpack the tuple childPreBasisFactories_
    \n+
    343 return std::apply([&](const auto&... childPreBasisFactory) {
    \n+
    344 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory(gridView)...);
    \n+
    345 }, childPreBasisFactories_);
    \n+
    346 }
    \n+
    347
    \n+
    348private:
    \n+
    349 std::tuple<ChildPreBasisFactory...> childPreBasisFactories_;
    \n+
    350};
    \n+
    351
    \n+
    352} // end namespace BasisFactory::Imp
    \n+
    353
    \n+
    354
    \n+
    355
    \n+
    366template<
    \n+
    367 typename... Args,
    \n+
    368 std::enable_if_t<Concept::isIndexMergingStrategy<typename LastType<Args...>::type>(),int> = 0>
    \n+
    369auto composite(Args&&... args)
    \n+
    370{
    \n+
    371 // We have to separate the last entry which is the IndexMergingStrategy
    \n+
    372 // and the preceding ones, which are the ChildPreBasisFactories
    \n+
    373
    \n+
    374 using ArgTuple = std::tuple<std::decay_t<Args>...>;
    \n+
    375
    \n+
    376 // Compute number of children and index of the IndexMergingStrategy argument
    \n+
    377 constexpr std::size_t children = Dune::SizeOf<Args...>::value-1;
    \n+
    378
    \n+
    379 // Use last type as IndexMergingStrategy
    \n+
    380 using IndexMergingStrategy = std::tuple_element_t<children, ArgTuple>;
    \n+
    381
    \n+
    382 // Index sequence for all but the last entry for partial tuple unpacking
    \n+
    383 auto childIndices = std::make_index_sequence<children>{};
    \n+
    384
    \n+
    385 // Unpack tuple only for those entries related to children
    \n+
    386 return applyPartial([](auto&&... childPreBasisFactory){
    \n+
    387 return Imp::CompositePreBasisFactory<IndexMergingStrategy, std::decay_t<decltype(childPreBasisFactory)>...>(std::forward<decltype(childPreBasisFactory)>(childPreBasisFactory)...);
    \n+
    388 },
    \n+
    389 std::forward_as_tuple(std::forward<Args>(args)...),
    \n+
    390 childIndices);
    \n+
    391}
    \n+
    392
    \n+
    404template<
    \n+
    405 typename... Args,
    \n+
    406 std::enable_if_t<not Concept::isIndexMergingStrategy<typename LastType<Args...>::type>(),int> = 0>
    \n+
    407auto composite(Args&&... args)
    \n+
    408{
    \n+
    409 return Imp::CompositePreBasisFactory<BasisFactory::BlockedLexicographic, std::decay_t<Args>...>(std::forward<Args>(args)...);
    \n+
    410}
    \n+
    411
    \n+
    412} // end namespace BasisFactory
    \n+
    413
    \n+
    414// Backward compatibility
    \n+
    415namespace BasisBuilder {
    \n+
    416
    \n+
    417 using namespace BasisFactory;
    \n+
    418
    \n+
    419}
    \n+
    420
    \n+
    421
    \n+
    422
    \n+
    423} // end namespace Functions
    \n+
    424} // end namespace Dune
    \n+
    425
    \n+
    426
    \n+
    427#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n+\n+\n+\n+\n+\n+\n+
    typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:26
    \n
    Definition polynomial.hh:10
    \n-
    An entity set for all entities of given codim in a grid view.
    Definition gridviewentityset.hh:23
    \n-
    GridViewEntitySet(const GridView &gv)
    Construct GridViewEntitySet for a GridView.
    Definition gridviewentityset.hh:47
    \n-
    GV GridView
    Definition gridviewentityset.hh:26
    \n-
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:32
    \n-
    const_iterator end() const
    Create an end iterator.
    Definition gridviewentityset.hh:70
    \n-
    const GridView & gridView() const
    Return the associated GridView.
    Definition gridviewentityset.hh:76
    \n-
    Element value_type
    Definition gridviewentityset.hh:38
    \n-
    const_iterator begin() const
    Create a begin iterator.
    Definition gridviewentityset.hh:64
    \n-
    GridView::template Codim< codim >::Iterator const_iterator
    A forward iterator.
    Definition gridviewentityset.hh:41
    \n-
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:35
    \n-
    size_t size() const
    Return number of Elements visited by an iterator.
    Definition gridviewentityset.hh:58
    \n-
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:36
    \n-
    @ codim
    Definition gridviewentityset.hh:28
    \n-
    bool contains(const Element &e) const
    Return true if e is contained in the EntitySet.
    Definition gridviewentityset.hh:52
    \n-
    const_iterator iterator
    Same as const_iterator.
    Definition gridviewentityset.hh:44
    \n+
    static constexpr bool isIndexMergingStrategy()
    Definition basistags.hh:23
    \n+
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:80
    \n+
    Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
    Definition basistags.hh:148
    \n+
    A pre-basis for composite bases.
    Definition compositebasis.hh:53
    \n+
    SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})
    Mutable access to the stored prebasis of the factor in the power space.
    Definition compositebasis.hh:249
    \n+
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child pre-bases.
    Definition compositebasis.hh:71
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition compositebasis.hh:230
    \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:242
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition compositebasis.hh:68
    \n+
    CompositeBasisNode< typename SPB::Node... > Node
    Template mapping root tree path to type of created tree node.
    Definition compositebasis.hh:81
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition compositebasis.hh:165
    \n+
    CompositePreBasis(SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects.
    Definition compositebasis.hh:95
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition compositebasis.hh:219
    \n+
    CompositePreBasis(const GV &gv)
    Constructor for given GridView.
    Definition compositebasis.hh:115
    \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:256
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition compositebasis.hh:158
    \n+
    typename std::tuple_element_t< 0, SubPreBases >::GridView GridView
    The grid view that the FE basis is defined on.
    Definition compositebasis.hh:65
    \n+
    static const std::size_t children
    Definition compositebasis.hh:74
    \n+
    std::tuple< SPB... > SubPreBases
    Tuple of child pre-bases.
    Definition compositebasis.hh:58
    \n+
    Node makeNode() const
    Create tree node.
    Definition compositebasis.hh:148
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition compositebasis.hh:124
    \n+
    std::tuple_element_t< i, SubPreBases > SubPreBasis
    Export individual child pre-bases by index.
    Definition compositebasis.hh:62
    \n+
    std::make_index_sequence< children > ChildIndices
    Definition compositebasis.hh:76
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition compositebasis.hh:138
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition compositebasis.hh:85
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition compositebasis.hh:132
    \n+
    static constexpr size_type minMultiIndexSize
    Definition compositebasis.hh:84
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition compositebasis.hh:83
    \n+\n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,140 +1,528 @@\n dune-functions\u00a02.9.0\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+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n+compositebasis.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n-3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n-4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n 5\n-6#include \n-7\n+6#include \n+7#include \n 8\n-9namespace _\bD_\bu_\bn_\be {\n-10\n-11namespace Functions {\n-12\n-13\n-21template\n-_\b2_\b2class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-23{\n-24public:\n+9#include \n+10#include \n+11#include \n+12#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/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\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_\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/_\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/_\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+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/_\bn_\bo_\bd_\be_\bs_\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/_\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/_\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+24\n 25\n-_\b2_\b6 typedef GV _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw;\n-27 enum {\n-28 _\bc_\bo_\bd_\bi_\bm = cd\n-_\b2_\b9 };\n-30\n-_\b3_\b2 typedef typename GridView::template Codim::Entity _\bE_\bl_\be_\bm_\be_\bn_\bt;\n-33\n-_\b3_\b5 typedef typename Element::Geometry::LocalCoordinate _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-_\b3_\b6 typedef typename Element::Geometry::GlobalCoordinate _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-37\n-_\b3_\b8 typedef _\bE_\bl_\be_\bm_\be_\bn_\bt _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+26namespace _\bD_\bu_\bn_\be {\n+27namespace Functions {\n+28\n+29/\n+/ *****************************************************************************\n+30// This is the reusable part of the composite bases. It contains\n+31//\n+32// CompositePreBasis\n+33//\n+34// The pre-basis allows to create the others and is the owner of possible\n+shared\n+35// state. These components do _not_ depend on the global basis and local view\n+36// and can be used without a global basis.\n+37/\n+/ *****************************************************************************\n+38\n 39\n-_\b4_\b1 typedef typename GridView::template Codim::Iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-42\n-_\b4_\b4 typedef _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-45\n-_\b4_\b7 _\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-48 gv_(gv)\n-49 {}\n-50\n-_\b5_\b2 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e) const\n-53 {\n-54 return gv_.contains(e);\n-55 }\n+51template\n+_\b5_\b2class _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+53{\n+54 static const bool isBlocked = std::is_same_v or std::is_same_v;\n+55public:\n 56\n-_\b5_\b8 size_t _\bs_\bi_\bz_\be() const\n-59 {\n-60 return gv_.size(_\bc_\bo_\bd_\bi_\bm);\n-61 }\n-62\n-_\b6_\b4 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const\n-65 {\n-66 return gv_.template begin();\n-67 }\n-68\n-_\b7_\b0 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const\n-71 {\n-72 return gv_.template end();\n-73 }\n-74\n-_\b7_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-77 {\n-78 return gv_;\n-79 }\n-80\n-81private:\n-82 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw gv_;\n-83};\n-84\n-85\n-86} // end of namespace Dune::Functions\n-87} // end of namespace Dune\n-88\n-89#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+_\b5_\b8 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs = std::tuple;\n+59\n+61 template\n+_\b6_\b2 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = std::tuple_element_t;\n+63\n+_\b6_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename std::tuple_element_t<0, SubPreBases>::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 _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n+72\n+73protected:\n+_\b7_\b4 static const std::size_t _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn = sizeof...(SPB);\n+75\n+_\b7_\b6 using _\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs = std::make_index_sequence;\n+77\n+78public:\n+79\n+_\b8_\b1 using _\bN_\bo_\bd_\be = _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be;\n+82\n+_\b8_\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 = std::max({SPB::\n+maxMultiIndexSize...}) + isBlocked;\n+_\b8_\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 = std::min({SPB::\n+minMultiIndexSize...}) + isBlocked;\n+_\b8_\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({SPB::\n+multiIndexBufferSize...}) + isBlocked;\n+86\n+92 template = 0,\n+94 _\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_\b5 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(SFArgs&&... sfArgs) :\n+96 subPreBases_(std::forward(sfArgs)...)\n+97 {\n+98 Hybrid::forEach(subPreBases_, [&](const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs){\n+99 static_assert(models, std::decay_t>(), \"Subprebases passed to CompositePreBasis does not model the\n+PreBasis concept.\");\n+100 });\n+101 }\n+102\n+109 template 1)>, // Avoid ambiguous constructor if\n+there's only one child\n+112 std::is_same,\n+113 std::is_constructible...\n+114 >, int> = 0>\n+_\b1_\b1_\b5 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const GV& gv) :\n+116 subPreBases_(SPB(gv)...)\n+117 {\n+118 Hybrid::forEach(subPreBases_, [&](const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs){\n+119 static_assert(models, std::decay_t>(), \"Subprebases passed to CompositePreBasis does not model the\n+PreBasis concept.\");\n+120 });\n+121 }\n+122\n+_\b1_\b2_\b4 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+125 {\n+126 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+127 this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).initializeIndices();\n+128 });\n+129 }\n+130\n+_\b1_\b3_\b2 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+133 {\n+134 return std::get<0>(subPreBases_).gridView();\n+135 }\n+136\n+_\b1_\b3_\b8 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+139 {\n+140 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+141 this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).update(gv);\n+142 });\n+143 }\n+144\n+_\b1_\b4_\b8 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+149 {\n+150 auto node = _\bN_\bo_\bd_\be{};\n+151 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+152 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+153 });\n+154 return node;\n+155 }\n+156\n+_\b1_\b5_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+159 {\n+160 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n+161 }\n+162\n+164 template\n+_\b1_\b6_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+166 {\n+167 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+168 }\n+169\n+170private:\n+171\n+172 template\n+173 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, _\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+174 {\n+175 if (prefix.size() == 0)\n+176 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n+177\n+178 return Hybrid::switchCases(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), prefix[0], [&] (auto i) {\n+179 SizePrefix subPrefix;\n+180 for(std::size_t i=1; i_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size(subPrefix);\n+183 }, []() {\n+184 return _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be(0);\n+185 });\n+186 }\n+187\n+188 template\n+189 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, BasisFactory::FlatLexicographic)\n+const\n+190 {\n+191 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n+192 if (prefix.size() == 0)\n+193 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+194 result += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size();\n+195 });\n+196 else {\n+197 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be shiftedFirstDigit = prefix[0];\n+198 staticFindInRange<0, children>([&](auto i) {\n+199 auto firstDigitSize = this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size();\n+200 if (shiftedFirstDigit < firstDigitSize)\n+201 {\n+202 SizePrefix subPrefix;\n+203 subPrefix.push_back(shiftedFirstDigit);\n+204 for(std::size_t i=1; i_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size(subPrefix);\n+207 return true;\n+208 }\n+209 shiftedFirstDigit -= firstDigitSize;\n+210 return false;\n+211 });\n+212 }\n+213 return result;\n+214 }\n+215\n+216public:\n+217\n+_\b2_\b1_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+220 {\n+221 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be r=0;\n+222 // Accumulate dimension() for all subprebases\n+223 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+224 r += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).dimension();\n+225 });\n+226 return r;\n+227 }\n+228\n+_\b2_\b3_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+231 {\n+232 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be r=0;\n+233 // Accumulate maxNodeSize() for all subprebases\n+234 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n+235 r += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).maxNodeSize();\n+236 });\n+237 return r;\n+238 }\n+239\n+241 template\n+_\b2_\b4_\b2 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+243 {\n+244 return std::get(subPreBases_);\n+245 }\n+246\n+248 template\n+_\b2_\b4_\b9 _\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+250 {\n+251 return std::get(subPreBases_);\n+252 }\n+253\n+255 template\n+_\b2_\b5_\b6 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+257 {\n+258 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+259 }\n+260\n+261private:\n+262\n+263 template\n+264 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+265 {\n+266 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be firstComponentOffset = 0;\n+267 // Loop over all children\n+268 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto child){\n+269 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(child)._\bs_\bi_\bz_\be();\n+270 // Fill indices for current child into index buffer starting from current\n+271 // buffer position and shift first index component of any index for current\n+272 // child by suitable offset to get lexicographic indices.\n+273 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(child).indices(node.child(child), multiIndices);\n+274 for (std::size_t i = 0; i\n+285 static void multiIndexPushFront(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n+286 {\n+287 M.resize(M.size()+1);\n+288 for(std::size_t i=M.size()-1; i>0; --i)\n+289 M[i] = M[i-1];\n+290 M[0] = M0;\n+291 }\n+292\n+293 template\n+294 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n+BlockedLexicographic) const\n+295 {\n+296 // Loop over all children\n+297 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto child){\n+298 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(child)._\bs_\bi_\bz_\be();\n+299 // Fill indices for current child into index buffer starting from current\n+position\n+300 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(child).indices(node.child(child), multiIndices);\n+301 // Insert child index before first component of all indices of current\n+child.\n+302 for (std::size_t i = 0; imultiIndexPushFront(multiIndices[i], child);\n+304 // Increment buffer iterator by the number of indices processed for current\n+child\n+305 multiIndices += subTreeSize;\n+306 });\n+307 return multiIndices;\n+308 }\n+309\n+310 std::tuple subPreBases_;\n+311};\n+312\n+313\n+314\n+315namespace BasisFactory {\n+316\n+317namespace Imp {\n+318\n+319template\n+320class CompositePreBasisFactory\n+321{\n+322\n+323 template\n+324 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&...\n+childPreBasis) const\n+325 {\n+326 return CompositePreBasis...>(std::forward(childPreBasis)...);\n+327 }\n+328\n+329public:\n+330\n+331 CompositePreBasisFactory(const ChildPreBasisFactory&...\n+childPreBasisFactory) :\n+332 childPreBasisFactories_(childPreBasisFactory...)\n+333 {}\n+334\n+335 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :\n+336 childPreBasisFactories_(std::move(childPreBasisFactory)...)\n+337 {}\n+338\n+339 template\n+340 auto operator()(const GridView& gridView) const\n+341 {\n+342 // Use std::apply to unpack the tuple childPreBasisFactories_\n+343 return std::apply([&](const auto&... childPreBasisFactory) {\n+344 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory\n+(gridView)...);\n+345 }, childPreBasisFactories_);\n+346 }\n+347\n+348private:\n+349 std::tuple childPreBasisFactories_;\n+350};\n+351\n+352} // end namespace BasisFactory::Imp\n+353\n+354\n+355\n+366template<\n+367 typename... Args,\n+368 std::enable_if_t<_\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+369auto composite(Args&&... args)\n+370{\n+371 // We have to separate the last entry which is the IndexMergingStrategy\n+372 // and the preceding ones, which are the ChildPreBasisFactories\n+373\n+374 using ArgTuple = std::tuple...>;\n+375\n+376 // Compute number of children and index of the IndexMergingStrategy\n+argument\n+377 constexpr std::size_t children = Dune::SizeOf::value-1;\n+378\n+379 // Use last type as IndexMergingStrategy\n+380 using IndexMergingStrategy = std::tuple_element_t;\n+381\n+382 // Index sequence for all but the last entry for partial tuple unpacking\n+383 auto childIndices = std::make_index_sequence{};\n+384\n+385 // Unpack tuple only for those entries related to children\n+386 return applyPartial([](auto&&... childPreBasisFactory){\n+387 return Imp::CompositePreBasisFactory...>(std::forward(childPreBasisFactory)...);\n+388 },\n+389 std::forward_as_tuple(std::forward(args)...),\n+390 childIndices);\n+391}\n+392\n+404template<\n+405 typename... Args,\n+406 std::enable_if_t::type>(),int> = 0>\n+407auto composite(Args&&... args)\n+408{\n+409 return Imp::CompositePreBasisFactory...>(std::forward(args)...);\n+410}\n+411\n+412} // end namespace BasisFactory\n+413\n+414// Backward compatibility\n+415namespace BasisBuilder {\n+416\n+417 using namespace BasisFactory;\n+418\n+419}\n+420\n+421\n+422\n+423} // end namespace Functions\n+424} // end namespace Dune\n+425\n+426\n+427#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+_\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+_\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_\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+typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n+type enableIfConstructible\n+Helper to constrain forwarding constructors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:26\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:23\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:47\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: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_\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: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:_\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:70\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+_\bD_\bu_\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:23\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:80\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:148\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:53\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:249\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:71\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: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_\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:242\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:68\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:81\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:165\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:95\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:219\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:115\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:256\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:158\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:65\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:74\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:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\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:148\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:124\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: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:_\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:76\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:138\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: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:_\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:76\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:38\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:64\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:41\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:35\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:58\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: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:_\bc_\bo_\bd_\bi_\bm\n-@ codim\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:28\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:52\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:44\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:132\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: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_\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:83\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:219\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/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: composedgridfunction.hh File Reference\n+dune-functions: lagrangebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -65,54 +65,70 @@\n \n \n \n \n \n \n \n
    \n \n-
    composedgridfunction.hh File Reference
    \n+
    lagrangebasis.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/common/exceptions.hh>
    \n+#include <dune/localfunctions/lagrange.hh>
    \n+#include <dune/localfunctions/lagrange/equidistantpoints.hh>
    \n+#include <dune/localfunctions/lagrange/pqkfactory.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::ComposedGridFunction< OF, IF >
     Composition of grid functions with another function. More...
    class  Dune::Functions::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+\n+\n+\n

    \n Functions

    template<class OF , class... IF>
    auto Dune::Functions::makeComposedGridFunction (OF &&outerFunction, IF &&... innerFunction)
     Create a ComposedGridFunction that composes grid-functions with another function.
     
    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,35 +1,48 @@\n dune-functions\u00a02.9.0\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-composedgridfunction.hh File Reference\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 <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bO_\bF_\b,_\b _\bI_\bF_\b _\b>\n-\u00a0 Composition of grid functions with another function. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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:_\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (OF &&outerFunction, IF &&...\n- innerFunction)\n-\u00a0 Create a _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn that composes grid-functions with another\n- function.\n+template\n+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/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: composedgridfunction.hh Source File\n+dune-functions: lagrangebasis.hh Source File\n \n \n \n \n \n \n \n@@ -70,216 +70,611 @@\n \n \n \n \n \n \n \n
    \n-
    composedgridfunction.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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH
    \n-
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n
    5
    \n
    6#include <type_traits>
    \n-
    7#include <tuple>
    \n+
    7#include <dune/common/exceptions.hh>
    \n
    8
    \n-
    9#include <dune/common/referencehelper.hh>
    \n-
    10#include <dune/common/typeutilities.hh>
    \n-
    11
    \n-\n-\n-\n+
    9#include <dune/localfunctions/lagrange.hh>
    \n+
    10#include <dune/localfunctions/lagrange/equidistantpoints.hh>
    \n+
    11#include <dune/localfunctions/lagrange/pqkfactory.hh>
    \n+
    12
    \n+\n+\n
    15
    \n
    16
    \n
    17namespace Dune {
    \n
    18namespace Functions {
    \n
    19
    \n-
    20
    \n-
    21
    \n-
    40template<class OF, class... IF>
    \n-
    \n-\n-
    42{
    \n-
    43 using InnerFunctions = std::tuple<IF...>;
    \n-
    44 using InnerLocalFunctions = std::tuple<decltype(localFunction(resolveRef(std::declval<const IF&>())))...>;
    \n-
    45
    \n-
    46 template<std::size_t i>
    \n-
    47 using InnerFunction = std::decay_t<ResolveRef_t<std::tuple_element_t<i, InnerFunctions>>>;
    \n-
    48
    \n-
    49 using OuterFunction = OF;
    \n-
    50
    \n-
    51public:
    \n-
    52
    \n-
    53 using EntitySet = typename InnerFunction<0>::EntitySet;
    \n-
    54 using Element = typename EntitySet::Element;
    \n-
    55
    \n-
    56 using Domain = typename EntitySet::GlobalCoordinate;
    \n-
    57 using LocalDomain = typename EntitySet::LocalCoordinate;
    \n+
    20// *****************************************************************************
    \n+
    21// This is the reusable part of the LagrangeBasis. It contains
    \n+
    22//
    \n+
    23// LagrangePreBasis
    \n+
    24// LagrangeNode
    \n+
    25//
    \n+
    26// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    27// state. These components do _not_ depend on the global basis and local view
    \n+
    28// and can be used without a global basis.
    \n+
    29// *****************************************************************************
    \n+
    30
    \n+
    31template<typename GV, int k, typename R=double>
    \n+
    32class LagrangeNode;
    \n+
    33
    \n+
    34template<typename GV, int k, typename R=double>
    \n+
    35class LagrangePreBasis;
    \n+
    36
    \n+
    37
    \n+
    38
    \n+
    53template<typename GV, int k, typename R>
    \n+
    \n+\n+
    55{
    \n+
    56 static const int dim = GV::dimension;
    \n+
    57 static const bool useDynamicOrder = (k<0);
    \n
    58
    \n-
    59 using Range = decltype(std::declval<OF>()(std::declval<IF>()(std::declval<Domain>())...));
    \n+
    59public:
    \n
    60
    \n-
    61private:
    \n-
    62
    \n-
    63 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet, DefaultDerivativeTraits, 16>;
    \n-
    64
    \n-
    65 class LocalFunction
    \n-
    66 {
    \n-
    67 public:
    \n-
    74 LocalFunction(const ComposedGridFunction& globalFunction) :
    \n-
    75 globalFunction_(globalFunction),
    \n-
    76 innerLocalFunctions_(globalFunction.innerLocalFunctions())
    \n-
    77 {}
    \n+
    62 using GridView = GV;
    \n+
    63
    \n+
    65 using size_type = std::size_t;
    \n+
    66
    \n+\n+
    69
    \n+
    70 static constexpr size_type maxMultiIndexSize = 1;
    \n+
    71 static constexpr size_type minMultiIndexSize = 1;
    \n+
    72 static constexpr size_type multiIndexBufferSize = 1;
    \n+
    73
    \n+
    \n+\n+
    76 : LagrangePreBasis(gv, std::numeric_limits<unsigned int>::max())
    \n+
    77 {}
    \n+
    \n
    78
    \n-
    88 void bind(const Element& element)
    \n-
    89 {
    \n-
    90 std::apply([&](auto&... innerFunction) {
    \n-
    91 (innerFunction.bind(element),...);
    \n-
    92 }, innerLocalFunctions_);
    \n-
    93 }
    \n+
    \n+
    80 LagrangePreBasis(const GridView& gv, unsigned int order) :
    \n+\n+
    82 {
    \n+
    83 if (!useDynamicOrder && order!=std::numeric_limits<unsigned int>::max())
    \n+
    84 DUNE_THROW(RangeError, "Template argument k has to be -1 when supplying a run-time order!");
    \n+
    85
    \n+
    86 for (int i=0; i<=dim; i++)
    \n+
    87 {
    \n+\n+\n+
    90 }
    \n+\n+\n+
    93 }
    \n+
    \n
    94
    \n-
    96 void unbind()
    \n-
    97 {
    \n-
    98 std::apply([&](auto&... innerFunction) {
    \n-
    99 (innerFunction.unbind(),...);
    \n-
    100 }, innerLocalFunctions_);
    \n-
    101 }
    \n-
    102
    \n-
    105 bool bound() const
    \n-
    106 {
    \n-
    107 return std::apply([](const auto&... innerFunction) {
    \n-
    108 return (innerFunction.bound() && ...);
    \n-
    109 }, innerLocalFunctions_);
    \n-
    110 }
    \n-
    111
    \n-
    121 Range operator()(const LocalDomain& x) const
    \n-
    122 {
    \n-
    123 return std::apply([&](const auto&... innerFunction) {
    \n-
    124 return globalFunction_.outerFunction_(innerFunction(x)...);
    \n-
    125 }, innerLocalFunctions_);
    \n-
    126 }
    \n-
    127
    \n-
    137 const Element& localContext() const
    \n-
    138 {
    \n-
    139 return std::get<0>(innerLocalFunctions_).localContext();
    \n-
    140 }
    \n-
    141
    \n-
    143 friend typename Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction& t)
    \n-
    144 {
    \n-
    145 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    146 }
    \n-
    147
    \n-
    148 private:
    \n-
    149 const ComposedGridFunction& globalFunction_;
    \n-
    150 InnerLocalFunctions innerLocalFunctions_;
    \n-
    151 };
    \n-
    152
    \n-
    153public:
    \n-
    154
    \n-
    164 template<class OFT, class... IFT,
    \n-
    165 disableCopyMove<ComposedGridFunction, OFT> = 0,
    \n-
    166 std::enable_if_t<(sizeof...(IFT) > 0), int> = 0>
    \n-
    \n-
    167 ComposedGridFunction(OFT&& outerFunction, IFT&&... innerFunctions) :
    \n-
    168 outerFunction_(std::forward<OFT>(outerFunction)),
    \n-
    169 innerFunctions_(std::forward<IFT>(innerFunctions)...)
    \n-
    170 {}
    \n-
    \n-
    171
    \n-
    \n-
    173 Range operator()(const Domain& x) const
    \n-
    174 {
    \n-
    175 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    176 }
    \n-
    \n-
    177
    \n-
    \n-\n-
    180 {
    \n-
    181 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    182 }
    \n-
    \n-
    183
    \n-
    \n-
    190 friend LocalFunction localFunction(const ComposedGridFunction& cgf)
    \n-
    191 {
    \n-
    192 return LocalFunction(cgf);
    \n-
    193 }
    \n-
    \n-
    194
    \n-
    \n-
    205 const EntitySet& entitySet() const
    \n-
    206 {
    \n-
    207 return resolveRef(std::get<0>(innerFunctions_)).entitySet();
    \n-
    208 }
    \n-
    \n-
    209
    \n-
    210protected:
    \n-
    211
    \n-
    \n-
    212 InnerLocalFunctions innerLocalFunctions() const
    \n-
    213 {
    \n-
    214 return std::apply([&](const auto&... innerFunction) {
    \n-
    215 return std::make_tuple(localFunction(resolveRef(innerFunction))...);
    \n-
    216 }, innerFunctions_);
    \n-
    217 }
    \n-
    \n-
    218
    \n-
    219 OuterFunction outerFunction_;
    \n-
    220 InnerFunctions innerFunctions_;
    \n-
    221};
    \n-
    \n-
    222
    \n-
    223
    \n-
    224
    \n-
    247template<class OF, class... IF>
    \n-
    \n-
    248auto makeComposedGridFunction(OF&& outerFunction, IF&&... innerFunction)
    \n-
    249{
    \n-
    250 using ComposedGridFunctionType = ComposedGridFunction<std::decay_t<OF>, std::decay_t<IF>...>;
    \n-
    251 return ComposedGridFunctionType(std::forward<OF>(outerFunction), std::forward<IF>(innerFunction)...);
    \n-
    252}
    \n-
    \n-
    253
    \n-
    254
    \n-
    255
    \n-
    256}} // namespace Dune::Functions
    \n-
    257
    \n-
    258
    \n-
    259
    \n-
    260#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH
    \n-\n-\n-\n-
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:39
    \n-
    auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)
    Create a ComposedGridFunction that composes grid-functions with another function.
    Definition composedgridfunction.hh:248
    \n+
    \n+\n+
    97 {
    \n+
    98 vertexOffset_ = 0;
    \n+\n+
    100
    \n+
    101 if (dim>=2)
    \n+
    102 {
    \n+\n+
    104
    \n+
    105 quadrilateralOffset_ = triangleOffset_ + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle));
    \n+
    106 }
    \n+
    107
    \n+
    108 if (dim==3) {
    \n+
    109 tetrahedronOffset_ = quadrilateralOffset_ + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));
    \n+
    110
    \n+
    111 prismOffset_ = tetrahedronOffset_ + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::tetrahedron));
    \n+
    112
    \n+
    113 hexahedronOffset_ = prismOffset_ + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism));
    \n+
    114
    \n+
    115 pyramidOffset_ = hexahedronOffset_ + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::hexahedron));
    \n+
    116 }
    \n+
    117 }
    \n+
    \n+
    118
    \n+
    \n+
    120 const GridView& gridView() const
    \n+
    121 {
    \n+
    122 return gridView_;
    \n+
    123 }
    \n+
    \n+
    124
    \n+
    \n+
    126 void update (const GridView& gv)
    \n+
    127 {
    \n+
    128 gridView_ = gv;
    \n+
    129 }
    \n+
    \n+
    130
    \n+
    \n+\n+
    135 {
    \n+
    136 return Node{order_};
    \n+
    137 }
    \n+
    \n+
    138
    \n+
    \n+\n+
    141 {
    \n+
    142 switch (dim)
    \n+
    143 {
    \n+
    144 case 1:
    \n+
    145 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n+
    146 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1));
    \n+
    147 case 2:
    \n+
    148 {
    \n+
    149 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n+
    150 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))
    \n+
    151 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle))
    \n+
    152 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));
    \n+
    153 }
    \n+
    154 case 3:
    \n+
    155 {
    \n+
    156 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n+
    157 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))
    \n+
    158 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle))
    \n+
    159 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral))
    \n+
    160 + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::tetrahedron))
    \n+
    161 + dofsPerPyramid() * ((size_type)gridView_.size(Dune::GeometryTypes::pyramid))
    \n+
    162 + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism))
    \n+
    163 + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::hexahedron));
    \n+
    164 }
    \n+
    165 }
    \n+
    166 DUNE_THROW(Dune::NotImplemented, "No size method for " << dim << "d grids available yet!");
    \n+
    167 }
    \n+
    \n+
    168
    \n+
    170 template<class SizePrefix>
    \n+
    \n+
    171 size_type size(const SizePrefix& prefix) const
    \n+
    172 {
    \n+
    173 assert(prefix.size() == 0 || prefix.size() == 1);
    \n+
    174 return (prefix.size() == 0) ? size() : 0;
    \n+
    175 }
    \n+
    \n+
    176
    \n+
    \n+\n+
    179 {
    \n+
    180 return size();
    \n+
    181 }
    \n+
    \n+
    182
    \n+
    \n+\n+
    185 {
    \n+
    186 // That cast to unsigned int is necessary because GV::dimension is an enum,
    \n+
    187 // which is not recognized by the power method as an integer type...
    \n+
    188 return power(order()+1, (unsigned int)GV::dimension);
    \n+
    189 }
    \n+
    \n+
    190
    \n+
    191 template<typename It>
    \n+
    \n+
    192 It indices(const Node& node, It it) const
    \n+
    193 {
    \n+
    194 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it, ++i)
    \n+
    195 {
    \n+
    196 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    197 const auto& gridIndexSet = gridView().indexSet();
    \n+
    198 const auto& element = node.element();
    \n+
    199
    \n+
    200 // The dimension of the entity that the current dof is related to
    \n+
    201 auto dofDim = dim - localKey.codim();
    \n+
    202
    \n+
    203 // Test for a vertex dof
    \n+
    204 // The test for k==1 is redundant, but having it here allows the compiler to conclude
    \n+
    205 // at compile-time that the dofDim==0 case is the only one that will ever happen.
    \n+
    206 // This leads to measurable speed-up: see
    \n+
    207 // https://gitlab.dune-project.org/staging/dune-functions/issues/30
    \n+
    208 if (k==1 || dofDim==0) {
    \n+
    209 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity(),dim)) }};
    \n+
    210 continue;
    \n+
    211 }
    \n+
    212
    \n+
    213 if (dofDim==1)
    \n+
    214 { // edge dof
    \n+
    215 if (dim==1) // element dof -- any local numbering is fine
    \n+
    216 {
    \n+
    217 *it = {{ edgeOffset_
    \n+
    218 + dofsPerCube(1) * ((size_type)gridIndexSet.subIndex(element,0,0))
    \n+
    219 + localKey.index() }};
    \n+
    220 continue;
    \n+
    221 }
    \n+
    222 else
    \n+
    223 {
    \n+
    224 const auto refElement
    \n+
    225 = Dune::referenceElement<double,dim>(element.type());
    \n+
    226
    \n+
    227 // We have to reverse the numbering if the local element edge is
    \n+
    228 // not aligned with the global edge.
    \n+
    229 auto v0 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),0,dim),dim);
    \n+
    230 auto v1 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),1,dim),dim);
    \n+
    231 bool flip = (v0 > v1);
    \n+
    232 *it = {{ (flip)
    \n+\n+
    234 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))
    \n+
    235 + (dofsPerCube(1)-1)-localKey.index()
    \n+\n+
    237 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))
    \n+
    238 + localKey.index() }};
    \n+
    239 continue;
    \n+
    240 }
    \n+
    241 }
    \n+
    242
    \n+
    243 if (dofDim==2)
    \n+
    244 {
    \n+
    245 if (dim==2) // element dof -- any local numbering is fine
    \n+
    246 {
    \n+
    247 if (element.type().isTriangle())
    \n+
    248 {
    \n+
    249 *it = {{ triangleOffset_ + dofsPerSimplex(2)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    250 continue;
    \n+
    251 }
    \n+
    252 else if (element.type().isQuadrilateral())
    \n+
    253 {
    \n+
    254 *it = {{ quadrilateralOffset_ + dofsPerCube(2)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    255 continue;
    \n+
    256 }
    \n+
    257 else
    \n+
    258 DUNE_THROW(Dune::NotImplemented, "2d elements have to be triangles or quadrilaterals");
    \n+
    259 } else
    \n+
    260 {
    \n+
    261 const auto refElement
    \n+
    262 = Dune::referenceElement<double,dim>(element.type());
    \n+
    263
    \n+
    264 if (order()>3)
    \n+
    265 DUNE_THROW(Dune::NotImplemented, "LagrangeBasis for 3D grids is only implemented if k<=3");
    \n+
    266
    \n+
    267 if (order()==3 and !refElement.type(localKey.subEntity(), localKey.codim()).isTriangle())
    \n+
    268 DUNE_THROW(Dune::NotImplemented, "LagrangeBasis for 3D grids with k==3 is only implemented if the grid is a simplex grid");
    \n+
    269
    \n+
    270 *it = {{ triangleOffset_ + ((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim())) }};
    \n+
    271 continue;
    \n+
    272 }
    \n+
    273 }
    \n+
    274
    \n+
    275 if (dofDim==3)
    \n+
    276 {
    \n+
    277 if (dim==3) // element dof -- any local numbering is fine
    \n+
    278 {
    \n+
    279 if (element.type().isTetrahedron())
    \n+
    280 {
    \n+
    281 *it = {{ tetrahedronOffset_ + dofsPerSimplex(3)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    282 continue;
    \n+
    283 }
    \n+
    284 else if (element.type().isHexahedron())
    \n+
    285 {
    \n+
    286 *it = {{ hexahedronOffset_ + dofsPerCube(3)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    287 continue;
    \n+
    288 }
    \n+
    289 else if (element.type().isPrism())
    \n+
    290 {
    \n+
    291 *it = {{ prismOffset_ + dofsPerPrism()*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    292 continue;
    \n+
    293 }
    \n+
    294 else if (element.type().isPyramid())
    \n+
    295 {
    \n+
    296 *it = {{ pyramidOffset_ + dofsPerPyramid()*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n+
    297 continue;
    \n+
    298 }
    \n+
    299 else
    \n+
    300 DUNE_THROW(Dune::NotImplemented, "3d elements have to be tetrahedra, hexahedra, prisms, or pyramids");
    \n+
    301 } else
    \n+
    302 DUNE_THROW(Dune::NotImplemented, "Grids of dimension larger than 3 are no supported");
    \n+
    303 }
    \n+
    304 DUNE_THROW(Dune::NotImplemented, "Grid contains elements not supported for the LagrangeBasis");
    \n+
    305 }
    \n+
    306 return it;
    \n+
    307 }
    \n+
    \n+
    308
    \n+
    \n+
    310 unsigned int order() const
    \n+
    311 {
    \n+
    312 return (useDynamicOrder) ? order_ : k;
    \n+
    313 }
    \n+
    \n+
    314
    \n+
    315protected:
    \n+\n+
    317
    \n+
    318 // Run-time order, only valid if k<0
    \n+
    319 const unsigned int order_;
    \n+
    320
    \n+
    \n+
    322 size_type dofsPerSimplex(std::size_t simplexDim) const
    \n+
    323 {
    \n+
    324 return useDynamicOrder ? dofsPerSimplex_[simplexDim] : computeDofsPerSimplex(simplexDim);
    \n+
    325 }
    \n+
    \n+
    326
    \n+
    \n+
    328 size_type dofsPerCube(std::size_t cubeDim) const
    \n+
    329 {
    \n+
    330 return useDynamicOrder ? dofsPerCube_[cubeDim] : computeDofsPerCube(cubeDim);
    \n+
    331 }
    \n+
    \n+
    332
    \n+
    \n+\n+
    334 {
    \n+
    335 return useDynamicOrder ? dofsPerPrism_ : computeDofsPerPrism();
    \n+
    336 }
    \n+
    \n+
    337
    \n+
    \n+\n+
    339 {
    \n+
    340 return useDynamicOrder ? dofsPerPyramid_ : computeDofsPerPyramid();
    \n+
    341 }
    \n+
    \n+
    342
    \n+
    \n+
    344 size_type computeDofsPerSimplex(std::size_t simplexDim) const
    \n+
    345 {
    \n+
    346 return order() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::size_t(order()-1),simplexDim);
    \n+
    347 }
    \n+
    \n+
    348
    \n+
    \n+
    350 size_type computeDofsPerCube(std::size_t cubeDim) const
    \n+
    351 {
    \n+
    352 return order() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(order()-1, cubeDim);
    \n+
    353 }
    \n+
    \n+
    354
    \n+
    \n+\n+
    356 {
    \n+
    357 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-1)*(order()-1)*(order()-2)/2;
    \n+
    358 }
    \n+
    \n+
    359
    \n+
    \n+\n+
    361 {
    \n+
    362 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-2)*(order()-1)*(2*order()-3)/6;
    \n+
    363 }
    \n+
    \n+
    364
    \n+
    365 // When the order is given at run-time, the following numbers are pre-computed:
    \n+
    366 std::array<size_type,dim+1> dofsPerSimplex_;
    \n+
    367 std::array<size_type,dim+1> dofsPerCube_;
    \n+\n+\n+
    370
    \n+\n+\n+\n+\n+\n+\n+\n+\n+
    379
    \n+
    380};
    \n+
    \n+
    381
    \n+
    382
    \n+
    383
    \n+
    384template<typename GV, int k, typename R>
    \n+
    \n+\n+
    386 public LeafBasisNode
    \n+
    387{
    \n+
    388 // Stores LocalFiniteElement implementations with run-time order as a function of GeometryType
    \n+
    389 template<typename Domain, typename Range, int dim>
    \n+
    390 class LagrangeRunTimeLFECache
    \n+
    391 {
    \n+
    392 public:
    \n+
    393 using FiniteElementType = LagrangeLocalFiniteElement<EquidistantPointSet,dim,Domain,Range>;
    \n+
    394
    \n+
    395 const FiniteElementType& get(GeometryType type)
    \n+
    396 {
    \n+
    397 auto i = data_.find(type);
    \n+
    398 if (i==data_.end())
    \n+
    399 i = data_.emplace(type,FiniteElementType(type,order_)).first;
    \n+
    400 return (*i).second;
    \n+
    401 }
    \n+
    402
    \n+
    403 std::map<GeometryType, FiniteElementType> data_;
    \n+
    404 unsigned int order_;
    \n+
    405 };
    \n+
    406
    \n+
    407 static constexpr int dim = GV::dimension;
    \n+
    408 static constexpr bool useDynamicOrder = (k<0);
    \n+
    409
    \n+
    410 using FiniteElementCache = typename std::conditional<(useDynamicOrder),
    \n+
    411 LagrangeRunTimeLFECache<typename GV::ctype, R, dim>,
    \n+
    412 PQkLocalFiniteElementCache<typename GV::ctype, R, dim, k>
    \n+
    413 >::type;
    \n+
    414
    \n+
    415public:
    \n+
    416
    \n+
    417 using size_type = std::size_t;
    \n+
    418 using Element = typename GV::template Codim<0>::Entity;
    \n+
    419 using FiniteElement = typename FiniteElementCache::FiniteElementType;
    \n+
    420
    \n+
    \n+\n+
    423 finiteElement_(nullptr),
    \n+
    424 element_(nullptr)
    \n+
    425 {}
    \n+
    \n+
    426
    \n+
    \n+
    428 LagrangeNode(unsigned int order) :
    \n+
    429 order_(order),
    \n+
    430 finiteElement_(nullptr),
    \n+
    431 element_(nullptr)
    \n+
    432 {
    \n+
    433 // Only the cache for the run-time-order case (i.e., k<0), has the 'order_' member
    \n+
    434 if constexpr (useDynamicOrder)
    \n+
    435 cache_.order_ = order;
    \n+
    436 }
    \n+
    \n+
    437
    \n+
    \n+
    439 const Element& element() const
    \n+
    440 {
    \n+
    441 return *element_;
    \n+
    442 }
    \n+
    \n+
    443
    \n+
    \n+\n+
    449 {
    \n+
    450 return *finiteElement_;
    \n+
    451 }
    \n+
    \n+
    452
    \n+
    \n+
    454 void bind(const Element& e)
    \n+
    455 {
    \n+
    456 element_ = &e;
    \n+
    457 finiteElement_ = &(cache_.get(element_->type()));
    \n+
    458 this->setSize(finiteElement_->size());
    \n+
    459 }
    \n+
    \n+
    460
    \n+
    461protected:
    \n+
    462
    \n+
    \n+
    463 unsigned int order() const
    \n+
    464 {
    \n+
    465 return (useDynamicOrder) ? order_ : k;
    \n+
    466 }
    \n+
    \n+
    467
    \n+
    468 // Run-time order, only valid if k<0
    \n+
    469 unsigned int order_;
    \n+
    470
    \n+
    471 FiniteElementCache cache_;
    \n+\n+\n+
    474};
    \n+
    \n+
    475
    \n+
    476
    \n+
    477
    \n+
    478namespace BasisFactory {
    \n+
    479
    \n+
    488template<std::size_t k, typename R=double>
    \n+
    \n+\n+
    490{
    \n+
    491 return [](const auto& gridView) {
    \n+
    492 return LagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n+
    493 };
    \n+
    494}
    \n+
    \n+
    495
    \n+
    503template<typename R=double>
    \n+
    \n+
    504auto lagrange(int order)
    \n+
    505{
    \n+
    506 return [=](const auto& gridView) {
    \n+
    507 return LagrangePreBasis<std::decay_t<decltype(gridView)>, -1, R>(gridView, order);
    \n+
    508 };
    \n+
    509}
    \n+
    \n+
    510
    \n+
    511} // end namespace BasisFactory
    \n+
    512
    \n+
    513
    \n+
    514
    \n+
    538template<typename GV, int k=-1, typename R=double>
    \n+\n+
    540
    \n+
    541
    \n+
    542
    \n+
    543
    \n+
    544
    \n+
    545} // end namespace Functions
    \n+
    546} // end namespace Dune
    \n+
    547
    \n+
    548
    \n+
    549#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n+\n+\n+
    auto lagrange()
    Create a pre-basis factory that can create a Lagrange pre-basis.
    Definition lagrangebasis.hh:489
    \n
    Definition polynomial.hh:10
    \n-
    decltype(auto) resolveRef(T &&t)
    This is an alias for Dune::resolveRef.
    Definition referencehelper.hh:37
    \n-
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:37
    \n-
    Composition of grid functions with another function.
    Definition composedgridfunction.hh:42
    \n-
    OuterFunction outerFunction_
    Definition composedgridfunction.hh:219
    \n-
    InnerFunctions innerFunctions_
    Definition composedgridfunction.hh:220
    \n-
    ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)
    Create ComposedGridFunction.
    Definition composedgridfunction.hh:167
    \n-
    const EntitySet & entitySet() const
    Return the EntitySet associated to this composed grid-function.
    Definition composedgridfunction.hh:205
    \n-
    typename InnerFunction< 0 >::EntitySet EntitySet
    Definition composedgridfunction.hh:53
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition composedgridfunction.hh:57
    \n-
    typename EntitySet::Element Element
    Definition composedgridfunction.hh:54
    \n-
    InnerLocalFunctions innerLocalFunctions() const
    Definition composedgridfunction.hh:212
    \n-
    friend LocalFunction localFunction(const ComposedGridFunction &cgf)
    Create a local-function of this composed grid-function.
    Definition composedgridfunction.hh:190
    \n-
    decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >())...)) Range
    Definition composedgridfunction.hh:59
    \n-
    typename EntitySet::GlobalCoordinate Domain
    Definition composedgridfunction.hh:56
    \n-
    Range operator()(const Domain &x) const
    Evaluation of the composed grid function in coordinates x
    Definition composedgridfunction.hh:173
    \n-
    friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)
    Not implemented.
    Definition composedgridfunction.hh:179
    \n-
    Definition gridfunction.hh:32
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n+
    Definition lagrangebasis.hh:387
    \n+
    LagrangeNode(unsigned int order)
    Constructor with a run-time order.
    Definition lagrangebasis.hh:428
    \n+
    unsigned int order() const
    Definition lagrangebasis.hh:463
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition lagrangebasis.hh:448
    \n+
    const Element * element_
    Definition lagrangebasis.hh:473
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition lagrangebasis.hh:439
    \n+
    FiniteElementCache cache_
    Definition lagrangebasis.hh:471
    \n+
    typename FiniteElementCache::FiniteElementType FiniteElement
    Definition lagrangebasis.hh:419
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition lagrangebasis.hh:454
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition lagrangebasis.hh:418
    \n+
    const FiniteElement * finiteElement_
    Definition lagrangebasis.hh:472
    \n+
    unsigned int order_
    Definition lagrangebasis.hh:469
    \n+
    std::size_t size_type
    Definition lagrangebasis.hh:417
    \n+
    LagrangeNode()
    Constructor without order (uses the compile-time value)
    Definition lagrangebasis.hh:422
    \n+
    A pre-basis for a PQ-lagrange bases with given order.
    Definition lagrangebasis.hh:55
    \n+
    size_type dofsPerPrism() const
    Definition lagrangebasis.hh:333
    \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:350
    \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:344
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition lagrangebasis.hh:70
    \n+
    size_type computeDofsPerPrism() const
    Definition lagrangebasis.hh:355
    \n+
    size_type edgeOffset_
    Definition lagrangebasis.hh:372
    \n+
    std::array< size_type, dim+1 > dofsPerSimplex_
    Definition lagrangebasis.hh:366
    \n+
    It indices(const Node &node, It it) const
    Definition lagrangebasis.hh:192
    \n+
    size_type vertexOffset_
    Definition lagrangebasis.hh:371
    \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:322
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition lagrangebasis.hh:65
    \n+
    size_type pyramidOffset_
    Definition lagrangebasis.hh:376
    \n+
    size_type prismOffset_
    Definition lagrangebasis.hh:377
    \n+
    size_type tetrahedronOffset_
    Definition lagrangebasis.hh:375
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition lagrangebasis.hh:96
    \n+
    size_type computeDofsPerPyramid() const
    Definition lagrangebasis.hh:360
    \n+
    LagrangePreBasis(const GridView &gv, unsigned int order)
    Constructor for a given grid view object and run-time order.
    Definition lagrangebasis.hh:80
    \n+
    size_type dofsPerPyramid_
    Definition lagrangebasis.hh:369
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition lagrangebasis.hh:178
    \n+
    LagrangePreBasis(const GridView &gv)
    Constructor for a given grid view object with compile-time order.
    Definition lagrangebasis.hh:75
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition lagrangebasis.hh:126
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition lagrangebasis.hh:171
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition lagrangebasis.hh:72
    \n+
    GV GridView
    The grid view that the FE basis is defined on.
    Definition lagrangebasis.hh:62
    \n+
    size_type quadrilateralOffset_
    Definition lagrangebasis.hh:374
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition lagrangebasis.hh:120
    \n+
    GridView gridView_
    Definition lagrangebasis.hh:316
    \n+
    Node makeNode() const
    Create tree node.
    Definition lagrangebasis.hh:134
    \n+
    unsigned int order() const
    Polynomial order used in the local Lagrange finite-elements.
    Definition lagrangebasis.hh:310
    \n+
    const unsigned int order_
    Definition lagrangebasis.hh:319
    \n+
    std::array< size_type, dim+1 > dofsPerCube_
    Definition lagrangebasis.hh:367
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition lagrangebasis.hh:184
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition lagrangebasis.hh:140
    \n+
    size_type dofsPerPrism_
    Definition lagrangebasis.hh:368
    \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:328
    \n+
    size_type triangleOffset_
    Definition lagrangebasis.hh:373
    \n+
    size_type hexahedronOffset_
    Definition lagrangebasis.hh:378
    \n+
    static constexpr size_type minMultiIndexSize
    Definition lagrangebasis.hh:71
    \n+
    size_type dofsPerPyramid() const
    Definition lagrangebasis.hh:338
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n+
    Definition nodes.hh:186
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,247 +1,736 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-composedgridfunction.hh\n+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n-4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n 5\n 6#include \n-7#include \n+7#include \n 8\n-9#include \n-10#include \n-11\n-12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\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-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_\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-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+9#include \n+10#include \n+11#include \n+12\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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 15\n 16\n 17namespace _\bD_\bu_\bn_\be {\n 18namespace Functions {\n 19\n-20\n-21\n-40template\n-_\b4_\b1class _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-42{\n-43 using InnerFunctions = std::tuple;\n-44 using InnerLocalFunctions = std::tuple())))...>;\n-45\n-46 template\n-47 using InnerFunction = std::decay_t>>;\n-48\n-49 using OuterFunction = OF;\n-50\n-51public:\n-52\n-_\b5_\b3 using _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt = typename InnerFunction<0>::EntitySet;\n-_\b5_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename EntitySet::Element;\n-55\n-_\b5_\b6 using _\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::GlobalCoordinate;\n-_\b5_\b7 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::LocalCoordinate;\n+20/\n+/ *****************************************************************************\n+21// This is the reusable part of the LagrangeBasis. It contains\n+22//\n+23// LagrangePreBasis\n+24// LagrangeNode\n+25//\n+26// The pre-basis allows to create the others and is the owner of possible\n+shared\n+27// state. These components do _not_ depend on the global basis and local view\n+28// and can be used without a global basis.\n+29/\n+/ *****************************************************************************\n+30\n+31template\n+32class LagrangeNode;\n+33\n+34template\n+35class LagrangePreBasis;\n+36\n+37\n+38\n+53template\n+_\b5_\b4class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+55{\n+56 static const int dim = GV::dimension;\n+57 static const bool useDynamicOrder = (k<0);\n 58\n-_\b5_\b9 using _\bR_\ba_\bn_\bg_\be = decltype(std::declval()(std::declval()(std::\n-declval())...));\n+59public:\n 60\n-61private:\n-62\n-63 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-64\n-65 class LocalFunction\n-66 {\n-67 public:\n-74 LocalFunction(const _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& globalFunction) :\n-75 globalFunction_(globalFunction),\n-76 innerLocalFunctions_(globalFunction._\bi_\bn_\bn_\be_\br_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs())\n+_\b6_\b2 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+63\n+_\b6_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+66\n+_\b6_\b8 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+69\n+_\b7_\b0 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+_\b7_\b1 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+_\b7_\b2 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+73\n+_\b7_\b5 _\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+76 : _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(gv, std::numeric_limits::max())\n 77 {}\n 78\n-88 void bind(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n-89 {\n-90 std::apply([&](auto&... innerFunction) {\n-91 (innerFunction.bind(element),...);\n-92 }, innerLocalFunctions_);\n+_\b8_\b0 _\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+81 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv), _\bo_\br_\bd_\be_\br_\b_(_\bo_\br_\bd_\be_\br)\n+82 {\n+83 if (!useDynamicOrder && _\bo_\br_\bd_\be_\br!=std::numeric_limits::max())\n+84 DUNE_THROW(RangeError, \"Template argument k has to be -1 when supplying a\n+run-time order!\");\n+85\n+86 for (int i=0; i<=dim; i++)\n+87 {\n+88 _\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+89 _\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+90 }\n+91 _\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+92 _\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 93 }\n 94\n-96 void unbind()\n+_\b9_\b6 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n 97 {\n-98 std::apply([&](auto&... innerFunction) {\n-99 (innerFunction.unbind(),...);\n-100 }, innerLocalFunctions_);\n-101 }\n-102\n-105 bool bound() const\n-106 {\n-107 return std::apply([](const auto&... innerFunction) {\n-108 return (innerFunction.bound() && ...);\n-109 }, innerLocalFunctions_);\n-110 }\n-111\n-121 _\bR_\ba_\bn_\bg_\be operator()(const _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn& x) const\n-122 {\n-123 return std::apply([&](const auto&... innerFunction) {\n-124 return globalFunction_.outerFunction_(innerFunction(x)...);\n-125 }, innerLocalFunctions_);\n-126 }\n-127\n-137 const _\bE_\bl_\be_\bm_\be_\bn_\bt& localContext() const\n-138 {\n-139 return std::get<0>(innerLocalFunctions_).localContext();\n-140 }\n-141\n-143 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-144 {\n-145 DUNE_THROW(NotImplemented,\"not implemented\");\n-146 }\n-147\n-148 private:\n-149 const _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& globalFunction_;\n-150 InnerLocalFunctions innerLocalFunctions_;\n-151 };\n-152\n-153public:\n-154\n-164 template = 0,\n-166 std::enable_if_t<(sizeof...(IFT) > 0), int> = 0>\n-_\b1_\b6_\b7 _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(OFT&& outerFunction, IFT&&... innerFunctions) :\n-168 _\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_(std::forward(outerFunction)),\n-169 _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_(std::forward(innerFunctions)...)\n-170 {}\n-171\n-_\b1_\b7_\b3 _\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-174 {\n-175 DUNE_THROW(NotImplemented,\"not implemented\");\n-176 }\n-177\n-_\b1_\b7_\b9 friend typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const\n-_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n-180 {\n-181 DUNE_THROW(NotImplemented,\"not implemented\");\n-182 }\n-183\n-_\b1_\b9_\b0 friend LocalFunction _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& cgf)\n-191 {\n-192 return LocalFunction(cgf);\n-193 }\n-194\n-_\b2_\b0_\b5 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-206 {\n-207 return _\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf(std::get<0>(_\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_)).entitySet();\n-208 }\n-209\n-210protected:\n-211\n-_\b2_\b1_\b2 InnerLocalFunctions _\bi_\bn_\bn_\be_\br_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs() const\n-213 {\n-214 return std::apply([&](const auto&... innerFunction) {\n-215 return std::make_tuple(_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf(innerFunction))...);\n-216 }, _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_);\n-217 }\n-218\n-_\b2_\b1_\b9 OuterFunction _\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_;\n-_\b2_\b2_\b0 InnerFunctions _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_;\n-221};\n-222\n-223\n-224\n-247template\n-_\b2_\b4_\b8auto _\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(OF&& outerFunction, IF&&... innerFunction)\n-249{\n-250 using ComposedGridFunctionType = _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bs_\bt_\bd_\b:_\b:_\bd_\be_\bc_\ba_\by_\b__\bt_\b<_\bO_\bF_\b>,\n-std::decay_t...>;\n-251 return ComposedGridFunctionType(std::forward(outerFunction), std::\n-forward(innerFunction)...);\n-252}\n-253\n-254\n-255\n-256}} // namespace Dune::Functions\n-257\n-258\n-259\n-260#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n-_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\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_\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:39\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)\n-Create a ComposedGridFunction that composes grid-functions with another\n-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:248\n+98 _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_ = 0;\n+99 _\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+100\n+101 if (dim>=2)\n+102 {\n+103 _\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+104\n+105 _\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+106 }\n+107\n+108 if (dim==3) {\n+109 _\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+110\n+111 _\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+112\n+113 _\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+114\n+115 _\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+116 }\n+117 }\n+118\n+_\b1_\b2_\b0 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+121 {\n+122 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+123 }\n+124\n+_\b1_\b2_\b6 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+127 {\n+128 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+129 }\n+130\n+_\b1_\b3_\b4 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+135 {\n+136 return _\bN_\bo_\bd_\be{_\bo_\br_\bd_\be_\br_\b_};\n+137 }\n+138\n+_\b1_\b4_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+141 {\n+142 switch (dim)\n+143 {\n+144 case 1:\n+145 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+146 + _\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+147 case 2:\n+148 {\n+149 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+150 + _\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+151 + _\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+152 + _\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+153 }\n+154 case 3:\n+155 {\n+156 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+157 + _\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+158 + _\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+159 + _\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+160 + _\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+161 + _\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+162 + _\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+163 + _\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+164 }\n+165 }\n+166 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n+available yet!\");\n+167 }\n+168\n+170 template\n+_\b1_\b7_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+172 {\n+173 assert(prefix.size() == 0 || prefix.size() == 1);\n+174 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n+175 }\n+176\n+_\b1_\b7_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+179 {\n+180 return _\bs_\bi_\bz_\be();\n+181 }\n+182\n+_\b1_\b8_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+185 {\n+186 // That cast to unsigned int is necessary because GV::dimension is an enum,\n+187 // which is not recognized by the power method as an integer type...\n+188 return power(_\bo_\br_\bd_\be_\br()+1, (unsigned int)GV::dimension);\n+189 }\n+190\n+191 template\n+_\b1_\b9_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+193 {\n+194 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+195 {\n+196 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n+(i);\n+197 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n+198 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+199\n+200 // The dimension of the entity that the current dof is related to\n+201 auto dofDim = dim - localKey.codim();\n+202\n+203 // Test for a vertex dof\n+204 // The test for k==1 is redundant, but having it here allows the compiler\n+to conclude\n+205 // at compile-time that the dofDim==0 case is the only one that will ever\n+happen.\n+206 // This leads to measurable speed-up: see\n+207 // https://gitlab.dune-project.org/staging/dune-functions/issues/30\n+208 if (k==1 || dofDim==0) {\n+209 *it = {{ (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(gridIndexSet.subIndex(element,localKey.subEntity\n+(),dim)) }};\n+210 continue;\n+211 }\n+212\n+213 if (dofDim==1)\n+214 { // edge dof\n+215 if (dim==1) // element dof -- any local numbering is fine\n+216 {\n+217 *it = {{ _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+218 + _\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+219 + localKey.index() }};\n+220 continue;\n+221 }\n+222 else\n+223 {\n+224 const auto refElement\n+225 = Dune::referenceElement(element.type());\n+226\n+227 // We have to reverse the numbering if the local element edge is\n+228 // not aligned with the global edge.\n+229 auto v0 = (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,refElement.subEntity\n+(localKey.subEntity(),localKey.codim(),0,dim),dim);\n+230 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+231 bool flip = (v0 > v1);\n+232 *it = {{ (flip)\n+233 ? _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+234 + _\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+235 + (_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1)-1)-localKey.index()\n+236 : _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n+237 + _\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+238 + localKey.index() }};\n+239 continue;\n+240 }\n+241 }\n+242\n+243 if (dofDim==2)\n+244 {\n+245 if (dim==2) // element dof -- any local numbering is fine\n+246 {\n+247 if (element.type().isTriangle())\n+248 {\n+249 *it = {{ _\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+250 continue;\n+251 }\n+252 else if (element.type().isQuadrilateral())\n+253 {\n+254 *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+255 continue;\n+256 }\n+257 else\n+258 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n+quadrilaterals\");\n+259 } else\n+260 {\n+261 const auto refElement\n+262 = Dune::referenceElement(element.type());\n+263\n+264 if (_\bo_\br_\bd_\be_\br()>3)\n+265 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids is only\n+implemented if k<=3\");\n+266\n+267 if (_\bo_\br_\bd_\be_\br()==3 and !refElement.type(localKey.subEntity(), localKey.codim\n+()).isTriangle())\n+268 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids with k==3 is\n+only implemented if the grid is a simplex grid\");\n+269\n+270 *it = {{ _\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+271 continue;\n+272 }\n+273 }\n+274\n+275 if (dofDim==3)\n+276 {\n+277 if (dim==3) // element dof -- any local numbering is fine\n+278 {\n+279 if (element.type().isTetrahedron())\n+280 {\n+281 *it = {{ _\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+282 continue;\n+283 }\n+284 else if (element.type().isHexahedron())\n+285 {\n+286 *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+287 continue;\n+288 }\n+289 else if (element.type().isPrism())\n+290 {\n+291 *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+292 continue;\n+293 }\n+294 else if (element.type().isPyramid())\n+295 {\n+296 *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+297 continue;\n+298 }\n+299 else\n+300 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedra,\n+hexahedra, prisms, or pyramids\");\n+301 } else\n+302 DUNE_THROW(Dune::NotImplemented, \"Grids of dimension larger than 3 are no\n+supported\");\n+303 }\n+304 DUNE_THROW(Dune::NotImplemented, \"Grid contains elements not supported for\n+the LagrangeBasis\");\n+305 }\n+306 return it;\n+307 }\n+308\n+_\b3_\b1_\b0 unsigned int _\bo_\br_\bd_\be_\br() const\n+311 {\n+312 return (useDynamicOrder) ? _\bo_\br_\bd_\be_\br_\b_ : k;\n+313 }\n+314\n+315protected:\n+_\b3_\b1_\b6 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+317\n+318 // Run-time order, only valid if k<0\n+_\b3_\b1_\b9 const unsigned int _\bo_\br_\bd_\be_\br_\b_;\n+320\n+_\b3_\b2_\b2 _\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+323 {\n+324 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+325 }\n+326\n+_\b3_\b2_\b8 _\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+329 {\n+330 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+331 }\n+332\n+_\b3_\b3_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() const\n+334 {\n+335 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+336 }\n+337\n+_\b3_\b3_\b8 _\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+339 {\n+340 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+341 }\n+342\n+_\b3_\b4_\b4 _\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+345 {\n+346 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+347 }\n+348\n+_\b3_\b5_\b0 _\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+351 {\n+352 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(_\bo_\br_\bd_\be_\br()-1,\n+cubeDim);\n+353 }\n+354\n+_\b3_\b5_\b5 _\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+356 {\n+357 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+358 }\n+359\n+_\b3_\b6_\b0 _\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+361 {\n+362 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+363 }\n+364\n+365 // When the order is given at run-time, the following numbers are pre-\n+computed:\n+_\b3_\b6_\b6 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_;\n+_\b3_\b6_\b7 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_;\n+_\b3_\b6_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_;\n+_\b3_\b6_\b9 _\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+370\n+_\b3_\b7_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b7_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b7_\b3 _\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_\b7_\b4 _\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_\b7_\b5 _\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_\b7_\b6 _\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_\b7_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b3_\b7_\b8 _\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+379\n+380};\n+381\n+382\n+383\n+384template\n+_\b3_\b8_\b5class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be :\n+386 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+387{\n+388 // Stores LocalFiniteElement implementations with run-time order as a\n+function of GeometryType\n+389 template\n+390 class LagrangeRunTimeLFECache\n+391 {\n+392 public:\n+393 using FiniteElementType =\n+LagrangeLocalFiniteElement;\n+394\n+395 const FiniteElementType& get(GeometryType type)\n+396 {\n+397 auto i = data_.find(type);\n+398 if (i==data_.end())\n+399 i = data_.emplace(type,FiniteElementType(type,order_)).first;\n+400 return (*i).second;\n+401 }\n+402\n+403 std::map data_;\n+404 unsigned int order_;\n+405 };\n+406\n+407 static constexpr int dim = GV::dimension;\n+408 static constexpr bool useDynamicOrder = (k<0);\n+409\n+410 using FiniteElementCache = typename std::conditional<(useDynamicOrder),\n+411 LagrangeRunTimeLFECache,\n+412 PQkLocalFiniteElementCache\n+413 >::type;\n+414\n+415public:\n+416\n+_\b4_\b1_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b4_\b1_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b4_\b1_\b9 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = typename FiniteElementCache::FiniteElementType;\n+420\n+_\b4_\b2_\b2 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be() :\n+423 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+424 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n+425 {}\n+426\n+_\b4_\b2_\b8 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be(unsigned int _\bo_\br_\bd_\be_\br) :\n+429 _\bo_\br_\bd_\be_\br_\b_(_\bo_\br_\bd_\be_\br),\n+430 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+431 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n+432 {\n+433 // Only the cache for the run-time-order case (i.e., k<0), has the 'order_'\n+member\n+434 if constexpr (useDynamicOrder)\n+435 _\bc_\ba_\bc_\bh_\be_\b_.order_ = _\bo_\br_\bd_\be_\br;\n+436 }\n+437\n+_\b4_\b3_\b9 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+440 {\n+441 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+442 }\n+443\n+_\b4_\b4_\b8 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+449 {\n+450 return *_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+451 }\n+452\n+_\b4_\b5_\b4 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+455 {\n+456 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+457 _\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+458 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_->size());\n+459 }\n+460\n+461protected:\n+462\n+_\b4_\b6_\b3 unsigned int _\bo_\br_\bd_\be_\br() const\n+464 {\n+465 return (useDynamicOrder) ? _\bo_\br_\bd_\be_\br_\b_ : k;\n+466 }\n+467\n+468 // Run-time order, only valid if k<0\n+_\b4_\b6_\b9 unsigned int _\bo_\br_\bd_\be_\br_\b_;\n+470\n+_\b4_\b7_\b1 FiniteElementCache _\bc_\ba_\bc_\bh_\be_\b_;\n+_\b4_\b7_\b2 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_\b7_\b3 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+474};\n+475\n+476\n+477\n+478namespace BasisFactory {\n+479\n+488template\n+_\b4_\b8_\b9auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be()\n+490{\n+491 return [](const auto& gridView) {\n+492 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k, R>(gridView);\n+493 };\n+494}\n+495\n+503template\n+_\b5_\b0_\b4auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be(int order)\n+505{\n+506 return [=](const auto& gridView) {\n+507 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, -1, R>(gridView,\n+order);\n+508 };\n+509}\n+510\n+511} // end namespace BasisFactory\n+512\n+513\n+514\n+538template\n+_\b5_\b3_\b9using _\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+540\n+541\n+542\n+543\n+544\n+545} // end namespace Functions\n+546} // end namespace Dune\n+547\n+548\n+549#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+_\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:489\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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_\bR_\be_\bf\n-decltype(auto) resolveRef(T &&t)\n-This is an alias for Dune::resolveRef.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:37\n-_\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:37\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-Composition of grid functions with another function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:42\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_\n-OuterFunction outerFunction_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:219\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_\n-InnerFunctions innerFunctions_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:220\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)\n-Create ComposedGridFunction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:167\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-const EntitySet & entitySet() const\n-Return the EntitySet associated to this composed grid-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:205\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-typename InnerFunction< 0 >::EntitySet EntitySet\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:53\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n-typename EntitySet::LocalCoordinate LocalDomain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename EntitySet::Element Element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:54\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bi_\bn_\bn_\be_\br_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-InnerLocalFunctions innerLocalFunctions() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:212\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-friend LocalFunction localFunction(const ComposedGridFunction &cgf)\n-Create a local-function of this composed grid-function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:190\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >\n-())...)) Range\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:59\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n-typename EntitySet::GlobalCoordinate Domain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:56\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-Range operator()(const Domain &x) const\n-Evaluation of the composed grid function in coordinates x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:173\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)\n-Not implemented.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:179\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: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_\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:46\n+_\bD_\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:387\n+_\bD_\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:428\n+_\bD_\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:463\n+_\bD_\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:448\n+_\bD_\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:473\n+_\bD_\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:439\n+_\bD_\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:471\n+_\bD_\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:419\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind to element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:454\n+_\bD_\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:418\n+_\bD_\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:472\n+_\bD_\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:469\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:417\n+_\bD_\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:422\n+_\bD_\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: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_\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:333\n+_\bD_\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:350\n+_\bD_\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:344\n+_\bD_\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_\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 lagrangebasis.hh:70\n+_\bD_\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: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:_\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:372\n+_\bD_\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: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:_\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: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_\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:371\n+_\bD_\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:322\n+_\bD_\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:65\n+_\bD_\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:376\n+_\bD_\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:377\n+_\bD_\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: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:_\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:96\n+_\bD_\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: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:_\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:80\n+_\bD_\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:369\n+_\bD_\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:178\n+_\bD_\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:75\n+_\bD_\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:126\n+_\bD_\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\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 lagrangebasis.hh:171\n+_\bD_\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_\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 lagrangebasis.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_\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:62\n+_\bD_\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:374\n+_\bD_\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:120\n+_\bD_\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: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:_\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:134\n+_\bD_\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: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:_\bo_\br_\bd_\be_\br_\b_\n+const unsigned int order_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:319\n+_\bD_\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:367\n+_\bD_\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:184\n+_\bD_\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\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 lagrangebasis.hh:140\n+_\bD_\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:368\n+_\bD_\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:328\n+_\bD_\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:373\n+_\bD_\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:378\n+_\bD_\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_\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 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:_\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:338\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:164\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:186\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: gridviewfunction.hh File Reference\n+dune-functions: brezzidouglasmarinibasis.hh File Reference\n \n \n \n \n \n \n \n@@ -65,58 +65,71 @@\n \n \n \n \n \n \n \n
    \n \n-
    gridviewfunction.hh File Reference
    \n+
    brezzidouglasmarinibasis.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 <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
    \n

    Go to the source code of this file.

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

    \n Classes

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

    \n Namespaces

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

    \n+Typedefs

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

    \n Functions

    template<class F , class GridView , typename std::enable_if< models< Imp::HasFreeLocalFunction, F >(), int >::type = 0>
    std::decay< F >::type Dune::Functions::makeGridViewFunction (F &&f, const GridView &gridView)
     Construct a function modeling GridViewFunction from function and grid view.
     
    template<class F , class GridView , typename std::enable_if< not(models< Imp::HasFreeLocalFunction, F >()), int >::type = 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<std::size_t k>
    auto Dune::Functions::BasisFactory::brezziDouglasMarini ()
     Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,47 +1,55 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-gridviewfunction.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+ * _\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 _\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:_\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:_\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:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k > >\n+\u00a0 Basis of a scalar k-th-order BDM finite element space on simplex and\n+ cube grids.\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template(), int >::type = 0>\n-std::decay< F >::type\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\n- GridView &gridView)\n-\u00a0 Construct a function modeling _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from\n- function and grid view.\n-\u00a0\n-template()), int >::type = 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\n- GridView &gridView) -> decltype\n- (_\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 >(f),\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\n- function 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:_\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/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: gridviewfunction.hh Source File\n+dune-functions: brezzidouglasmarinibasis.hh Source File\n \n \n \n \n \n \n \n@@ -70,103 +70,427 @@\n
    \n \n \n \n \n \n \n
    \n-
    gridviewfunction.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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n-
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n
    5
    \n-
    6#include <memory>
    \n-
    7
    \n-
    8#include <dune/common/concept.hh>
    \n+
    6#include <array>
    \n+
    7#include <dune/common/exceptions.hh>
    \n+
    8#include <dune/geometry/referenceelements.hh>
    \n
    9
    \n-\n-\n-\n-
    13
    \n-
    14
    \n-
    15namespace Dune {
    \n-
    16namespace Functions {
    \n-
    17
    \n+
    10#include <dune/localfunctions/common/virtualinterface.hh>
    \n+
    11#include <dune/localfunctions/common/virtualwrappers.hh>
    \n+
    12
    \n+
    13#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh>
    \n+
    14#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>
    \n+
    15#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>
    \n+
    16#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>
    \n+
    17#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh>
    \n
    18
    \n-
    19
    \n-
    20template<class Signature, class GridView, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n-
    \n-\n-
    22{};
    \n-
    \n-
    23
    \n-
    24
    \n+\n+\n+\n+
    22
    \n+
    23namespace Dune {
    \n+
    24namespace Functions {
    \n
    25
    \n-
    40template<class Range, class Domain, class GV, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    \n-
    41class GridViewFunction<Range(Domain), GV, DerivativeTraits, bufferSize> :
    \n-
    42 public GridFunction<Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize>
    \n-
    43{
    \n-
    44 using Base = GridFunction<Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize>;
    \n-
    45public:
    \n-
    46 using GridView = GV;
    \n+
    26namespace Impl {
    \n+
    27
    \n+
    28 template<int dim, typename D, typename R, std::size_t k>
    \n+
    29 struct BDMSimplexLocalInfo
    \n+
    30 {
    \n+
    31 static_assert((AlwaysFalse<D>::value),"The requested type of BDM element is not implemented, sorry!");
    \n+
    32 };
    \n+
    33
    \n+
    34 template<typename D, typename R>
    \n+
    35 struct BDMSimplexLocalInfo<2,D,R,1>
    \n+
    36 {
    \n+
    37 using FiniteElement = BDM1Simplex2DLocalFiniteElement<D,R>;
    \n+
    38 static const std::size_t Variants = 8;
    \n+
    39 };
    \n+
    40
    \n+
    41 template<typename D, typename R>
    \n+
    42 struct BDMSimplexLocalInfo<2,D,R,2>
    \n+
    43 {
    \n+
    44 using FiniteElement = BDM2Simplex2DLocalFiniteElement<D,R>;
    \n+
    45 static const std::size_t Variants = 8;
    \n+
    46 };
    \n
    47
    \n-
    48 using Base::Base;
    \n-
    49};
    \n-
    \n-
    50
    \n-
    51
    \n-
    52
    \n-
    64template<class F, class GridView,
    \n-
    65 typename std::enable_if<
    \n-
    66 models< Imp::HasFreeLocalFunction, F>() , int>::type = 0>
    \n-
    67typename std::decay<F>::type
    \n-
    \n-
    68 makeGridViewFunction(F&& f, const GridView& gridView)
    \n-
    69{
    \n-
    70 return std::forward<F>(f);
    \n-
    71}
    \n-
    \n-
    72
    \n-
    73
    \n+
    48 template<int dim, typename D, typename R, std::size_t k>
    \n+
    49 struct BDMCubeLocalInfo
    \n+
    50 {
    \n+
    51 static_assert((AlwaysFalse<D>::value),"The requested type of BDM element is not implemented, sorry!");
    \n+
    52 };
    \n+
    53
    \n+
    54 template<typename D, typename R>
    \n+
    55 struct BDMCubeLocalInfo<2,D,R,1>
    \n+
    56 {
    \n+
    57 using FiniteElement = BDM1Cube2DLocalFiniteElement<D,R>;
    \n+
    58 static const std::size_t Variants = 16;
    \n+
    59 };
    \n+
    60
    \n+
    61 template<typename D, typename R>
    \n+
    62 struct BDMCubeLocalInfo<2,D,R,2>
    \n+
    63 {
    \n+
    64 using FiniteElement = BDM2Cube2DLocalFiniteElement<D,R>;
    \n+
    65 static const std::size_t Variants = 16;
    \n+
    66 };
    \n+
    67
    \n+
    68 template<typename D, typename R>
    \n+
    69 struct BDMCubeLocalInfo<3,D,R,1>
    \n+
    70 {
    \n+
    71 using FiniteElement = BDM1Cube3DLocalFiniteElement<D,R>;
    \n+
    72 static const std::size_t Variants = 64;
    \n+
    73 };
    \n
    74
    \n-
    90template<class F, class GridView,
    \n-
    91 typename std::enable_if<
    \n-
    92 not(models< Imp::HasFreeLocalFunction, F>()) , int>::type = 0>
    \n-
    \n-
    93auto makeGridViewFunction(F&& f, const GridView& gridView)
    \n-
    94 -> decltype(makeAnalyticGridViewFunction(std::forward<F>(f), gridView))
    \n-
    95{
    \n-
    96 return makeAnalyticGridViewFunction(std::forward<F>(f), gridView);
    \n-
    97}
    \n-
    \n-
    98
    \n+
    75 template<typename GV, int dim, typename R, std::size_t k>
    \n+
    76 class BDMLocalFiniteElementMap
    \n+
    77 {
    \n+
    78 using D = typename GV::ctype;
    \n+
    79 using CubeFiniteElement = typename BDMCubeLocalInfo<dim, D, R, k>::FiniteElement;
    \n+
    80 using SimplexFiniteElement = typename BDMSimplexLocalInfo<dim, D, R, k>::FiniteElement;
    \n+
    81
    \n+
    82 public:
    \n+
    83
    \n+
    84 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n+
    85 using FiniteElement = LocalFiniteElementVirtualInterface<T>;
    \n+
    86
    \n+
    87 BDMLocalFiniteElementMap(const GV& gv)
    \n+
    88 : is_(&(gv.indexSet())), orient_(gv.size(0))
    \n+
    89 {
    \n+
    90 cubeVariant_.resize(BDMCubeLocalInfo<dim, D, R, k>::Variants);
    \n+
    91 simplexVariant_.resize(BDMSimplexLocalInfo<dim, D, R, k>::Variants);
    \n+
    92
    \n+
    93 // create all variants
    \n+
    94 for (size_t i = 0; i < cubeVariant_.size(); i++)
    \n+
    95 cubeVariant_[i] = std::make_unique<LocalFiniteElementVirtualImp<CubeFiniteElement> >(CubeFiniteElement(i));
    \n+
    96
    \n+
    97 for (size_t i = 0; i < simplexVariant_.size(); i++)
    \n+
    98 simplexVariant_[i] = std::make_unique<LocalFiniteElementVirtualImp<SimplexFiniteElement> >(SimplexFiniteElement(i));
    \n
    99
    \n-
    100
    \n-
    101} // end of namespace Dune::Functions
    \n-
    102} // end of namespace Dune
    \n-
    103
    \n-
    104#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n-\n-\n-\n-
    AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
    Create an AnalyticGridViewFunction from a function and a grid view.
    Definition analyticgridviewfunction.hh:230
    \n+
    100 // compute orientation for all elements
    \n+
    101 // loop once over the grid
    \n+
    102 for(const auto& cell : elements(gv))
    \n+
    103 {
    \n+
    104 unsigned int myId = is_->index(cell);
    \n+
    105 orient_[myId] = 0;
    \n+
    106
    \n+
    107 for (const auto& intersection : intersections(gv,cell))
    \n+
    108 {
    \n+
    109 if (intersection.neighbor() && (is_->index(intersection.outside()) > myId))
    \n+
    110 orient_[myId] |= (1 << intersection.indexInInside());
    \n+
    111 }
    \n+
    112 }
    \n+
    113 }
    \n+
    114
    \n+
    116 template<class EntityType>
    \n+
    117 const FiniteElement& find(const EntityType& e) const
    \n+
    118 {
    \n+
    119 if (e.type().isCube())
    \n+
    120 return *cubeVariant_[orient_[is_->index(e)]];
    \n+
    121 else
    \n+
    122 return *simplexVariant_[orient_[is_->index(e)]];
    \n+
    123 }
    \n+
    124
    \n+
    125 private:
    \n+
    126 std::vector<std::unique_ptr<LocalFiniteElementVirtualImp<CubeFiniteElement> > > cubeVariant_;
    \n+
    127 std::vector<std::unique_ptr<LocalFiniteElementVirtualImp<SimplexFiniteElement> > > simplexVariant_;
    \n+
    128 const typename GV::IndexSet* is_;
    \n+
    129 std::vector<unsigned char> orient_;
    \n+
    130 };
    \n+
    131
    \n+
    132
    \n+
    133} // namespace Impl
    \n+
    134
    \n+
    135
    \n+
    136// *****************************************************************************
    \n+
    137// This is the reusable part of the basis. It contains
    \n+
    138//
    \n+
    139// BrezziDouglasMariniPreBasis
    \n+
    140// BrezziDouglasMariniNode
    \n+
    141//
    \n+
    142// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    143// state. These components do _not_ depend on the global basis and local view
    \n+
    144// and can be used without a global basis.
    \n+
    145// *****************************************************************************
    \n+
    146
    \n+
    147template<typename GV, int k>
    \n+
    148class BrezziDouglasMariniNode;
    \n+
    149
    \n+
    150template<typename GV, int k>
    \n+
    \n+\n+
    152{
    \n+
    153 static const int dim = GV::dimension;
    \n+
    154 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;
    \n+
    155
    \n+
    156public:
    \n+
    157
    \n+
    159 using GridView = GV;
    \n+
    160 using size_type = std::size_t;
    \n+
    161
    \n+\n+
    163
    \n+
    164 static constexpr size_type maxMultiIndexSize = 1;
    \n+
    165 static constexpr size_type minMultiIndexSize = 1;
    \n+
    166 static constexpr size_type multiIndexBufferSize = 1;
    \n+
    167
    \n+
    \n+\n+
    170 gridView_(gv),
    \n+\n+
    172 {
    \n+
    173 // There is no inherent reason why the basis shouldn't work for grids with more than one
    \n+
    174 // element types. Somebody simply has to sit down and implement the missing bits.
    \n+
    175 if (gv.indexSet().types(0).size() > 1)
    \n+
    176 DUNE_THROW(Dune::NotImplemented, "Brezzi-Douglas-Marini basis is only implemented for grids with a single element type");
    \n+
    177 }
    \n+
    \n+
    178
    \n+
    \n+\n+
    180 {
    \n+
    181 codimOffset_[0] = 0;
    \n+
    182 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);
    \n+
    183 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] * gridView_.size(1);
    \n+
    184 }
    \n+
    \n+
    185
    \n+
    \n+
    188 const GridView& gridView() const
    \n+
    189 {
    \n+
    190 return gridView_;
    \n+
    191 }
    \n+
    \n+
    192
    \n+
    193 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n+
    \n+
    194 void update (const GridView& gv)
    \n+
    195 {
    \n+
    196 gridView_ = gv;
    \n+
    197 }
    \n+
    \n+
    198
    \n+
    \n+\n+
    203 {
    \n+
    204 return Node{&finiteElementMap_};
    \n+
    205 }
    \n+
    \n+
    206
    \n+
    \n+\n+
    208 {
    \n+
    209 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] * gridView_.size(1); // only 2d
    \n+
    210 }
    \n+
    \n+
    211
    \n+
    213 template<class SizePrefix>
    \n+
    \n+
    214 size_type size(const SizePrefix prefix) const
    \n+
    215 {
    \n+
    216 assert(prefix.size() == 0 || prefix.size() == 1);
    \n+
    217 return (prefix.size() == 0) ? size() : 0;
    \n+
    218 }
    \n+
    \n+
    219
    \n+
    \n+\n+
    222 {
    \n+
    223 return size();
    \n+
    224 }
    \n+
    \n+
    225
    \n+
    \n+\n+
    227 {
    \n+
    228 // The implementation currently only supports grids with a single element type.
    \n+
    229 // We can therefore return the actual number of dofs here.
    \n+
    230 GeometryType elementType = *(gridView_.indexSet().types(0).begin());
    \n+
    231 size_t numFaces = ReferenceElements<double,dim>::general(elementType).size(1);
    \n+
    232 return dofsPerCodim_[0] + dofsPerCodim_[1] * numFaces;
    \n+
    233 }
    \n+
    \n+
    234
    \n+
    240 template<typename It>
    \n+
    \n+
    241 It indices(const Node& node, It it) const
    \n+
    242 {
    \n+
    243 const auto& gridIndexSet = gridView().indexSet();
    \n+
    244 const auto& element = node.element();
    \n+
    245
    \n+
    246 // throw if element is not of predefined type
    \n+
    247 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n+
    248 DUNE_THROW(Dune::NotImplemented, "BrezziDouglasMariniBasis only implemented for cube and simplex elements.");
    \n+
    249
    \n+
    250 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n+
    251 {
    \n+
    252 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    253
    \n+
    254 // The dimension of the entity that the current dof is related to
    \n+
    255 size_t subentity = localKey.subEntity();
    \n+
    256 size_t codim = localKey.codim();
    \n+
    257
    \n+
    258 *it = { codimOffset_[codim] +
    \n+
    259 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \n+
    260 }
    \n+
    261
    \n+
    262 return it;
    \n+
    263 }
    \n+
    \n+
    264
    \n+
    265protected:
    \n+\n+
    267 std::array<size_t,dim+1> codimOffset_;
    \n+
    268 FiniteElementMap finiteElementMap_;
    \n+
    269 // Number of dofs per entity type depending on the entity's codimension and type
    \n+
    270 std::array<int,2> dofsPerCodim_ {{dim*(k-1)*3, dim+(k-1)}};
    \n+
    271};
    \n+
    \n+
    272
    \n+
    273
    \n+
    274
    \n+
    275template<typename GV, int k>
    \n+
    \n+\n+
    277 public LeafBasisNode
    \n+
    278{
    \n+
    279 static const int dim = GV::dimension;
    \n+
    280
    \n+
    281public:
    \n+
    282
    \n+
    283 using size_type = std::size_t;
    \n+
    284 using Element = typename GV::template Codim<0>::Entity;
    \n+
    285 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;
    \n+
    286 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,
    \n+
    287 typename FiniteElementMap::FiniteElement,
    \n+
    288 Element>;
    \n+
    289
    \n+
    \n+
    290 BrezziDouglasMariniNode(const FiniteElementMap* finiteElementMap) :
    \n+
    291 element_(nullptr),
    \n+
    292 finiteElementMap_(finiteElementMap)
    \n+
    293 {}
    \n+
    \n+
    294
    \n+
    \n+
    296 const Element& element() const
    \n+
    297 {
    \n+
    298 return *element_;
    \n+
    299 }
    \n+
    \n+
    300
    \n+
    \n+\n+
    306 {
    \n+
    307 return finiteElement_;
    \n+
    308 }
    \n+
    \n+
    309
    \n+
    \n+
    311 void bind(const Element& e)
    \n+
    312 {
    \n+
    313 element_ = &e;
    \n+
    314 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n+
    315 this->setSize(finiteElement_.size());
    \n+
    316 }
    \n+
    \n+
    317
    \n+
    318protected:
    \n+
    319
    \n+\n+\n+\n+
    323};
    \n+
    \n+
    324
    \n+
    325
    \n+
    326
    \n+
    327namespace BasisFactory {
    \n+
    328
    \n+
    336template<std::size_t k>
    \n+
    \n+\n+
    338{
    \n+
    339 return [](const auto& gridView) {
    \n+
    340 return BrezziDouglasMariniPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n+
    341 };
    \n+
    342}
    \n+
    \n+
    343
    \n+
    344} // end namespace BasisFactory
    \n+
    345
    \n+
    346
    \n+
    347
    \n+
    348// *****************************************************************************
    \n+
    349// This is the actual global basis implementation based on the reusable parts.
    \n+
    350// *****************************************************************************
    \n+
    351
    \n+
    359template<typename GV, int k>
    \n+\n+
    361
    \n+
    362} // end namespace Functions
    \n+
    363} // end namespace Dune
    \n+
    364
    \n+
    365
    \n+
    366#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n+\n+\n+\n+
    auto brezziDouglasMarini()
    Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.
    Definition brezzidouglasmarinibasis.hh:337
    \n
    Definition polynomial.hh:10
    \n-
    std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)
    Construct a function modeling GridViewFunction from function and grid view.
    Definition gridviewfunction.hh:68
    \n-
    Definition gridfunction.hh:32
    \n-
    An entity set for all entities of given codim in a grid view.
    Definition gridviewentityset.hh:23
    \n-
    Definition gridviewfunction.hh:22
    \n-\n+
    Definition brezzidouglasmarinibasis.hh:278
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition brezzidouglasmarinibasis.hh:305
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition brezzidouglasmarinibasis.hh:284
    \n+
    const FiniteElementMap * finiteElementMap_
    Definition brezzidouglasmarinibasis.hh:322
    \n+
    std::size_t size_type
    Definition brezzidouglasmarinibasis.hh:283
    \n+
    FiniteElement finiteElement_
    Definition brezzidouglasmarinibasis.hh:320
    \n+
    typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap
    Definition brezzidouglasmarinibasis.hh:285
    \n+
    const Element * element_
    Definition brezzidouglasmarinibasis.hh:321
    \n+
    Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition brezzidouglasmarinibasis.hh:288
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition brezzidouglasmarinibasis.hh:311
    \n+
    BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)
    Definition brezzidouglasmarinibasis.hh:290
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition brezzidouglasmarinibasis.hh:296
    \n+
    Definition brezzidouglasmarinibasis.hh:152
    \n+
    std::size_t size_type
    Definition brezzidouglasmarinibasis.hh:160
    \n+
    std::array< int, 2 > dofsPerCodim_
    Definition brezzidouglasmarinibasis.hh:270
    \n+
    size_type dimension() const
    Definition brezzidouglasmarinibasis.hh:221
    \n+
    static constexpr size_type minMultiIndexSize
    Definition brezzidouglasmarinibasis.hh:165
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition brezzidouglasmarinibasis.hh:164
    \n+
    std::array< size_t, dim+1 > codimOffset_
    Definition brezzidouglasmarinibasis.hh:267
    \n+
    size_type size(const SizePrefix prefix) const
    Return number possible values for next position in multi index.
    Definition brezzidouglasmarinibasis.hh:214
    \n+
    Node makeNode() const
    Create tree node.
    Definition brezzidouglasmarinibasis.hh:202
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition brezzidouglasmarinibasis.hh:159
    \n+
    BrezziDouglasMariniPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition brezzidouglasmarinibasis.hh:169
    \n+
    FiniteElementMap finiteElementMap_
    Definition brezzidouglasmarinibasis.hh:268
    \n+
    void update(const GridView &gv)
    Definition brezzidouglasmarinibasis.hh:194
    \n+
    void initializeIndices()
    Definition brezzidouglasmarinibasis.hh:179
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition brezzidouglasmarinibasis.hh:188
    \n+
    size_type size() const
    Definition brezzidouglasmarinibasis.hh:207
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition brezzidouglasmarinibasis.hh:166
    \n+
    size_type maxNodeSize() const
    Definition brezzidouglasmarinibasis.hh:226
    \n+
    GridView gridView_
    Definition brezzidouglasmarinibasis.hh:266
    \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:241
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n+
    size_type size() const
    Definition nodes.hh:142
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n+
    Definition nodes.hh:186
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,107 +1,509 @@\n dune-functions\u00a02.9.0\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+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n-4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n 5\n-6#include \n-7\n-8#include \n+6#include \n+7#include \n+8#include \n 9\n-10#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-11#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-12#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-13\n-14\n-15namespace _\bD_\bu_\bn_\be {\n-16namespace Functions {\n-17\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\n-19\n-20template class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-_\b2_\b1class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-22{};\n-23\n-24\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/\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+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/_\bn_\bo_\bd_\be_\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+23namespace _\bD_\bu_\bn_\be {\n+24namespace Functions {\n 25\n-40template class\n-DerivativeTraits, size_t bufferSize>\n-_\b4_\b1class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-42 public _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn,\n-DerivativeTraits, bufferSize>\n-43{\n-44 using _\bB_\ba_\bs_\be = _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn,\n-DerivativeTraits, bufferSize>;\n-45public:\n-_\b4_\b6 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+26namespace Impl {\n+27\n+28 template\n+29 struct BDMSimplexLocalInfo\n+30 {\n+31 static_assert((AlwaysFalse::value),\"The requested type of BDM element is\n+not implemented, sorry!\");\n+32 };\n+33\n+34 template\n+35 struct BDMSimplexLocalInfo<2,D,R,1>\n+36 {\n+37 using FiniteElement = BDM1Simplex2DLocalFiniteElement;\n+38 static const std::size_t Variants = 8;\n+39 };\n+40\n+41 template\n+42 struct BDMSimplexLocalInfo<2,D,R,2>\n+43 {\n+44 using FiniteElement = BDM2Simplex2DLocalFiniteElement;\n+45 static const std::size_t Variants = 8;\n+46 };\n 47\n-48 using Base::Base;\n-49};\n-50\n-51\n-52\n-64template() , int>::type = 0>\n-67typename std::decay::type\n-_\b6_\b8 _\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-69{\n-70 return std::forward(f);\n-71}\n-72\n-73\n+48 template\n+49 struct BDMCubeLocalInfo\n+50 {\n+51 static_assert((AlwaysFalse::value),\"The requested type of BDM element is\n+not implemented, sorry!\");\n+52 };\n+53\n+54 template\n+55 struct BDMCubeLocalInfo<2,D,R,1>\n+56 {\n+57 using FiniteElement = BDM1Cube2DLocalFiniteElement;\n+58 static const std::size_t Variants = 16;\n+59 };\n+60\n+61 template\n+62 struct BDMCubeLocalInfo<2,D,R,2>\n+63 {\n+64 using FiniteElement = BDM2Cube2DLocalFiniteElement;\n+65 static const std::size_t Variants = 16;\n+66 };\n+67\n+68 template\n+69 struct BDMCubeLocalInfo<3,D,R,1>\n+70 {\n+71 using FiniteElement = BDM1Cube3DLocalFiniteElement;\n+72 static const std::size_t Variants = 64;\n+73 };\n 74\n-90template()) , int>::type = 0>\n-_\b9_\b3auto _\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-94 -> 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-95{\n-96 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-97}\n-98\n+75 template\n+76 class BDMLocalFiniteElementMap\n+77 {\n+78 using D = typename GV::ctype;\n+79 using CubeFiniteElement = typename BDMCubeLocalInfo::\n+FiniteElement;\n+80 using SimplexFiniteElement = typename BDMSimplexLocalInfo::\n+FiniteElement;\n+81\n+82 public:\n+83\n+84 using T = LocalBasisTraits, R, dim,\n+FieldVector, FieldMatrix >;\n+85 using FiniteElement = LocalFiniteElementVirtualInterface;\n+86\n+87 BDMLocalFiniteElementMap(const GV& gv)\n+88 : is_(&(gv.indexSet())), orient_(gv.size(0))\n+89 {\n+90 cubeVariant_.resize(BDMCubeLocalInfo::Variants);\n+91 simplexVariant_.resize(BDMSimplexLocalInfo::Variants);\n+92\n+93 // create all variants\n+94 for (size_t i = 0; i < cubeVariant_.size(); i++)\n+95 cubeVariant_[i] = std::\n+make_unique >(CubeFiniteElement\n+(i));\n+96\n+97 for (size_t i = 0; i < simplexVariant_.size(); i++)\n+98 simplexVariant_[i] = std::\n+make_unique >\n+(SimplexFiniteElement(i));\n 99\n-100\n-101} // end of namespace Dune::Functions\n-102} // end of namespace Dune\n-103\n-104#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n-_\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-_\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bA_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::\n-template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::\n-template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::\n-decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView\n-&gridView)\n-Create an AnalyticGridViewFunction from a function and a grid view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:230\n+100 // compute orientation for all elements\n+101 // loop once over the grid\n+102 for(const auto& cell : elements(gv))\n+103 {\n+104 unsigned int myId = is_->index(cell);\n+105 orient_[myId] = 0;\n+106\n+107 for (const auto& intersection : intersections(gv,cell))\n+108 {\n+109 if (intersection.neighbor() && (is_->index(intersection.outside()) > myId))\n+110 orient_[myId] |= (1 << intersection.indexInInside());\n+111 }\n+112 }\n+113 }\n+114\n+116 template\n+117 const FiniteElement& find(const EntityType& e) const\n+118 {\n+119 if (e.type().isCube())\n+120 return *cubeVariant_[orient_[is_->index(e)]];\n+121 else\n+122 return *simplexVariant_[orient_[is_->index(e)]];\n+123 }\n+124\n+125 private:\n+126 std::vector\n+> > cubeVariant_;\n+127 std::vector > >\n+simplexVariant_;\n+128 const typename GV::IndexSet* is_;\n+129 std::vector orient_;\n+130 };\n+131\n+132\n+133} // namespace Impl\n+134\n+135\n+136/\n+/ *****************************************************************************\n+137// This is the reusable part of the basis. It contains\n+138//\n+139// BrezziDouglasMariniPreBasis\n+140// BrezziDouglasMariniNode\n+141//\n+142// The pre-basis allows to create the others and is the owner of possible\n+shared\n+143// state. These components do _not_ depend on the global basis and local\n+view\n+144// and can be used without a global basis.\n+145/\n+/ *****************************************************************************\n+146\n+147template\n+148class BrezziDouglasMariniNode;\n+149\n+150template\n+_\b1_\b5_\b1class _\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+152{\n+153 static const int dim = GV::dimension;\n+154 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap;\n+155\n+156public:\n+157\n+_\b1_\b5_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b1_\b6_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+161\n+_\b1_\b6_\b2 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+163\n+_\b1_\b6_\b4 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+_\b1_\b6_\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+_\b1_\b6_\b6 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+167\n+_\b1_\b6_\b9 _\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+170 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n+171 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv)\n+172 {\n+173 // There is no inherent reason why the basis shouldn't work for grids with\n+more than one\n+174 // element types. Somebody simply has to sit down and implement the missing\n+bits.\n+175 if (gv.indexSet().types(0).size() > 1)\n+176 DUNE_THROW(Dune::NotImplemented, \"Brezzi-Douglas-Marini basis is only\n+implemented for grids with a single element type\");\n+177 }\n+178\n+_\b1_\b7_\b9 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+180 {\n+181 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] = 0;\n+182 _\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+183 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] *\n+gridView_.size(1);\n+184 }\n+185\n+_\b1_\b8_\b8 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+189 {\n+190 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+191 }\n+192\n+193 /* \\brief Update the stored grid view, to be called if the grid has changed\n+*/\n+_\b1_\b9_\b4 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+195 {\n+196 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+197 }\n+198\n+_\b2_\b0_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+203 {\n+204 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n+205 }\n+206\n+_\b2_\b0_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+208 {\n+209 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+210 }\n+211\n+213 template\n+_\b2_\b1_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix prefix) const\n+215 {\n+216 assert(prefix.size() == 0 || prefix.size() == 1);\n+217 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n+218 }\n+219\n+_\b2_\b2_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+222 {\n+223 return _\bs_\bi_\bz_\be();\n+224 }\n+225\n+_\b2_\b2_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+227 {\n+228 // The implementation currently only supports grids with a single element\n+type.\n+229 // We can therefore return the actual number of dofs here.\n+230 GeometryType elementType = *(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0).begin());\n+231 size_t numFaces = ReferenceElements::general(elementType).size\n+(1);\n+232 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+233 }\n+234\n+240 template\n+_\b2_\b4_\b1 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+242 {\n+243 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n+244 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+245\n+246 // throw if element is not of predefined type\n+247 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n+248 DUNE_THROW(Dune::NotImplemented, \"BrezziDouglasMariniBasis only implemented\n+for cube and simplex elements.\");\n+249\n+250 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_\b6_\b8 FiniteElementMap _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n+269 // Number of dofs per entity type depending on the entity's codimension and\n+type\n+_\b2_\b7_\b0 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_ {{dim*(k-1)*3, dim+(k-1)}};\n+271};\n+272\n+273\n+274\n+275template\n+_\b2_\b7_\b6class _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be :\n+277 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+278{\n+279 static const int dim = GV::dimension;\n+280\n+281public:\n+282\n+_\b2_\b8_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b2_\b8_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b2_\b8_\b5 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::BDMLocalFiniteElementMap;\n+_\b2_\b8_\b6 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n+289\n+_\b2_\b9_\b0 _\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+291 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+292 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n+293 {}\n+294\n+_\b2_\b9_\b6 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+297 {\n+298 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+299 }\n+300\n+_\b3_\b0_\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+306 {\n+307 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+308 }\n+309\n+_\b3_\b1_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+312 {\n+313 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+314 _\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+315 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n+316 }\n+317\n+318protected:\n+319\n+_\b3_\b2_\b0 _\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_\b2_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b3_\b2_\b2 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+323};\n+324\n+325\n+326\n+327namespace BasisFactory {\n+328\n+336template\n+_\b3_\b3_\b7auto _\bb_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi()\n+338{\n+339 return [](const auto& gridView) {\n+340 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+341 };\n+342}\n+343\n+344} // end namespace BasisFactory\n+345\n+346\n+347\n+348/\n+/ *****************************************************************************\n+349// This is the actual global basis implementation based on the reusable\n+parts.\n+350/\n+/ *****************************************************************************\n+351\n+359template\n+_\b3_\b6_\b0using _\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+361\n+362} // end namespace Functions\n+363} // end namespace Dune\n+364\n+365\n+366#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+_\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:337\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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< F >::type 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:68\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: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:23\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:22\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+_\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: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:_\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:305\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: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_\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:322\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:283\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:320\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:285\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:321\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:288\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:311\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:290\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:296\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:152\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:160\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:270\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:221\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_\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 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:_\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 brezzidouglasmarinibasis.hh:164\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:267\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\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 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:_\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:202\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewfunction.hh:46\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:159\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:169\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:268\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:194\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:179\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:188\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\n+size_type size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:207\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_\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 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:_\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:226\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: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_\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:241\n+_\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:46\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:142\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:164\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:186\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: discreteglobalbasisfunction.hh File Reference\n+dune-functions: flatmultiindex.hh File Reference\n \n \n \n \n \n \n \n@@ -65,73 +65,42 @@\n \n \n \n \n \n \n \n
    \n \n-
    discreteglobalbasisfunction.hh File Reference
    \n+Typedefs
    \n+
    flatmultiindex.hh File Reference
    \n \n
    \n-
    #include <memory>
    \n-#include <optional>
    \n-#include <dune/common/typetraits.hh>
    \n-#include <dune/typetree/treecontainer.hh>
    \n-#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>
    \n-#include <dune/functions/functionspacebases/flatvectorview.hh>
    \n-#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n-#include <dune/functions/gridfunctions/gridfunction.hh>
    \n-#include <dune/functions/backends/concepts.hh>
    \n-#include <dune/functions/backends/istlvectorbackend.hh>
    \n+
    #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-\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...
     
    \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-Functions

    template<typename R , typename B , typename V >
    auto Dune::Functions::makeDiscreteGlobalBasisFunction (B &&basis, V &&vector)
     Generate a DiscreteGlobalBasisFunction.
     

    \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,59 +1,24 @@\n dune-functions\u00a02.9.0\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-#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+ * _\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 _\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-\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+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/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: discreteglobalbasisfunction.hh Source File\n+dune-functions: flatmultiindex.hh Source File\n \n \n \n \n \n \n \n@@ -70,681 +70,48 @@\n
    \n \n \n \n \n \n \n
    \n-
    discreteglobalbasisfunction.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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n-
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n
    5
    \n-
    6#include <memory>
    \n-
    7#include <optional>
    \n-
    8
    \n-
    9#include <dune/common/typetraits.hh>
    \n-
    10
    \n-
    11#include <dune/typetree/treecontainer.hh>
    \n+
    6#include <array>
    \n+
    7
    \n+\n+
    9
    \n+
    10namespace Dune {
    \n+
    11namespace Functions {
    \n
    12
    \n-\n-\n-\n-\n-\n-\n-
    19
    \n-
    20namespace Dune {
    \n-
    21namespace Functions {
    \n-
    22
    \n-
    23
    \n-
    \n-
    24namespace ImplDoc {
    \n-
    25
    \n-
    26template<typename B, typename V, typename NTRE>
    \n-
    \n-\n-
    28{
    \n-
    29public:
    \n-
    30 using Basis = B;
    \n-
    31 using Vector = V;
    \n+
    13
    \n+
    14
    \n+
    30template<class size_type>
    \n+\n
    32
    \n-
    33 // In order to make the cache work for proxy-references
    \n-
    34 // we have to use AutonomousValue<T> instead of std::decay_t<T>
    \n-
    35 using Coefficient = Dune::AutonomousValue<decltype(std::declval<Vector>()[std::declval<typename Basis::MultiIndex>()])>;
    \n-
    36
    \n-
    37 using GridView = typename Basis::GridView;
    \n-\n-
    39 using Tree = typename Basis::LocalView::Tree;
    \n-
    40 using NodeToRangeEntry = NTRE;
    \n-
    41
    \n-\n-
    43
    \n-\n-
    45 using Element = typename EntitySet::Element;
    \n-
    46
    \n-
    47protected:
    \n-
    48
    \n-
    49 // This collects all data that is shared by all related
    \n-
    50 // global and local functions. This way we don't need to
    \n-
    51 // keep track of it individually.
    \n-
    \n-
    52 struct Data
    \n-
    53 {
    \n-\n-
    55 std::shared_ptr<const Basis> basis;
    \n-
    56 std::shared_ptr<const Vector> coefficients;
    \n-
    57 std::shared_ptr<const NodeToRangeEntry> nodeToRangeEntry;
    \n-
    58 };
    \n-
    \n-
    59
    \n-
    60public:
    \n-
    \n-\n-
    62 {
    \n-
    63 using LocalView = typename Basis::LocalView;
    \n-
    64 using size_type = typename Tree::size_type;
    \n-
    65
    \n-
    66 public:
    \n-\n-
    68 using Element = typename EntitySet::Element;
    \n-
    69
    \n-
    70 protected:
    \n-
    \n-
    71 LocalFunctionBase(const std::shared_ptr<const Data>& data)
    \n-
    72 : data_(data)
    \n-
    73 , localView_(data_->basis->localView())
    \n-
    74 {
    \n-
    75 localDoFs_.reserve(localView_.maxSize());
    \n-
    76 }
    \n-
    \n-
    77
    \n-
    \n-\n-
    85 : data_(other.data_)
    \n-
    86 , localView_(other.localView_)
    \n-
    87 {
    \n-
    88 localDoFs_.reserve(localView_.maxSize());
    \n-
    89 if (bound())
    \n-
    90 localDoFs_ = other.localDoFs_;
    \n-
    91 }
    \n-
    \n-
    92
    \n-
    \n-\n-
    101 {
    \n-
    102 data_ = other.data_;
    \n-
    103 localView_ = other.localView_;
    \n-
    104 if (bound())
    \n-
    105 localDoFs_ = other.localDoFs_;
    \n-
    106 return *this;
    \n-
    107 }
    \n-
    \n-
    108
    \n-
    109 public:
    \n-
    \n-
    116 void bind(const Element& element)
    \n-
    117 {
    \n-
    118 localView_.bind(element);
    \n-
    119 // Use cache of full local view size. For a subspace basis,
    \n-
    120 // this may be larger than the number of local DOFs in the
    \n-
    121 // tree. In this case only cache entries associated to local
    \n-
    122 // DOFs in the subspace are filled. Cache entries associated
    \n-
    123 // to local DOFs which are not contained in the subspace will
    \n-
    124 // not be touched.
    \n-
    125 //
    \n-
    126 // Alternatively one could use a cache that exactly fits
    \n-
    127 // the size of the tree. However, this would require to
    \n-
    128 // subtract an offset from localIndex(i) on each cache
    \n-
    129 // access in operator().
    \n-
    130 localDoFs_.resize(localView_.size());
    \n-
    131 const auto& dofs = *data_->coefficients;
    \n-
    132 for (size_type i = 0; i < localView_.tree().size(); ++i)
    \n-
    133 {
    \n-
    134 // For a subspace basis the index-within-tree i
    \n-
    135 // is not the same as the localIndex within the
    \n-
    136 // full local view.
    \n-
    137 size_t localIndex = localView_.tree().localIndex(i);
    \n-
    138 localDoFs_[localIndex] = dofs[localView_.index(localIndex)];
    \n-
    139 }
    \n-
    140 }
    \n-
    \n-
    141
    \n-
    \n-
    143 void unbind()
    \n-
    144 {
    \n-
    145 localView_.unbind();
    \n-
    146 }
    \n-
    \n-
    147
    \n-
    \n-
    149 bool bound() const
    \n-
    150 {
    \n-
    151 return localView_.bound();
    \n-
    152 }
    \n-
    \n-
    153
    \n-
    \n-
    155 const Element& localContext() const
    \n-
    156 {
    \n-
    157 return localView_.element();
    \n-
    158 }
    \n-
    \n-
    159
    \n-
    160 protected:
    \n-
    161
    \n-
    162 template<class To, class From>
    \n-
    \n-
    163 void assignWith(To& to, const From& from) const
    \n-
    164 {
    \n-
    165 auto from_flat = flatVectorView(from);
    \n-
    166 auto to_flat = flatVectorView(to);
    \n-
    167 assert(from_flat.size() == to_flat.size());
    \n-
    168 for (size_type i = 0; i < to_flat.size(); ++i)
    \n-
    169 to_flat[i] = from_flat[i];
    \n-
    170 }
    \n-
    \n-
    171
    \n-
    172 template<class Node, class TreePath, class Range>
    \n-
    \n-
    173 decltype(auto) nodeToRangeEntry(const Node& node, const TreePath& treePath, Range& y) const
    \n-
    174 {
    \n-
    175 return (*data_->nodeToRangeEntry)(node, treePath, y);
    \n-
    176 }
    \n-
    \n-
    177
    \n-
    178 std::shared_ptr<const Data> data_;
    \n-
    179 LocalView localView_;
    \n-
    180 std::vector<Coefficient> localDoFs_;
    \n-
    181 };
    \n-
    \n-
    182
    \n-
    183protected:
    \n-
    \n-
    184 DiscreteGlobalBasisFunctionBase(const std::shared_ptr<const Data>& data)
    \n-
    185 : data_(data)
    \n-
    186 {
    \n-
    187 /* Nothing. */
    \n-
    188 }
    \n-
    \n-
    189
    \n-
    190public:
    \n-
    191
    \n-
    \n-
    193 const Basis& basis() const
    \n-
    194 {
    \n-
    195 return *data_->basis;
    \n-
    196 }
    \n-
    \n-
    197
    \n-
    \n-
    199 const Vector& dofs() const
    \n-
    200 {
    \n-
    201 return *data_->coefficients;
    \n-
    202 }
    \n-
    \n-
    203
    \n-
    \n-\n-
    206 {
    \n-
    207 return *data_->nodeToRangeEntry;
    \n-
    208 }
    \n-
    \n-
    209
    \n-
    \n-
    211 const EntitySet& entitySet() const
    \n-
    212 {
    \n-
    213 return data_->entitySet;
    \n-
    214 }
    \n-
    \n-
    215
    \n-
    216protected:
    \n-
    217 std::shared_ptr<const Data> data_;
    \n-
    218};
    \n-
    \n-
    219
    \n-
    220} // namespace ImplDoc
    \n-
    \n-
    221
    \n-
    222
    \n-
    223
    \n-
    224template<typename DGBF>
    \n-\n-
    226
    \n-
    264template<typename B, typename V,
    \n-
    265 typename NTRE = HierarchicNodeToRangeMap,
    \n-
    266 typename R = typename V::value_type>
    \n-
    \n-\n-\n-
    269{
    \n-\n-
    271 using Data = typename Base::Data;
    \n-
    272
    \n-
    273public:
    \n-
    274 using Basis = typename Base::Basis;
    \n-
    275 using Vector = typename Base::Vector;
    \n-
    276
    \n-
    277 using Domain = typename Base::Domain;
    \n-
    278 using Range = R;
    \n-
    279
    \n-
    280 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16>;
    \n-
    281
    \n-
    282private:
    \n-
    283
    \n-
    284 template<class Node>
    \n-
    285 using LocalBasisRange = typename Node::FiniteElement::Traits::LocalBasisType::Traits::RangeType;
    \n-
    286 template<class Node>
    \n-
    287 using NodeData = typename std::vector<LocalBasisRange<Node>>;
    \n-
    288 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData, typename Base::Tree>;
    \n-
    289
    \n-
    290public:
    \n-
    \n-\n-\n-
    293 {
    \n-
    294 using LocalBase = typename Base::LocalFunctionBase;
    \n-
    295 using size_type = typename Base::Tree::size_type;
    \n-
    296 using LocalBase::nodeToRangeEntry;
    \n-
    297
    \n-
    298 public:
    \n-
    299
    \n-\n-
    301 using Domain = typename LocalBase::Domain;
    \n-\n-
    303 using Element = typename LocalBase::Element;
    \n-
    304
    \n-
    \n-\n-
    307 : LocalBase(globalFunction.data_)
    \n-
    308 , evaluationBuffer_(this->localView_.tree())
    \n-
    309 {
    \n-
    310 /* Nothing. */
    \n-
    311 }
    \n-
    \n-
    312
    \n-
    \n-
    322 Range operator()(const Domain& x) const
    \n-
    323 {
    \n-
    324 Range y;
    \n-
    325 istlVectorBackend(y) = 0;
    \n-
    326
    \n-
    327 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&& treePath) {
    \n-
    328 const auto& fe = node.finiteElement();
    \n-
    329 const auto& localBasis = fe.localBasis();
    \n-
    330 auto& shapeFunctionValues = evaluationBuffer_[treePath];
    \n-
    331
    \n-
    332 localBasis.evaluateFunction(x, shapeFunctionValues);
    \n-
    333
    \n-
    334 // Compute linear combinations of basis function jacobian.
    \n-
    335 // Non-scalar coefficients of dimension coeffDim are handled by
    \n-
    336 // processing the coeffDim linear combinations independently
    \n-
    337 // and storing them as entries of an array.
    \n-
    338 using Value = LocalBasisRange< std::decay_t<decltype(node)> >;
    \n-
    339 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;
    \n-
    340 auto values = std::array<Value, coeffDim>{};
    \n-
    341 istlVectorBackend(values) = 0;
    \n-
    342 for (size_type i = 0; i < localBasis.size(); ++i)
    \n-
    343 {
    \n-
    344 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);
    \n-
    345 for (std::size_t j = 0; j < coeffDim; ++j)
    \n-
    346 values[j].axpy(c[j], shapeFunctionValues[i]);
    \n-
    347 }
    \n-
    348
    \n-
    349 // Assign computed values to node entry of range.
    \n-
    350 // Types are matched using the lexicographic ordering provided by flatVectorView.
    \n-
    351 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), values);
    \n-
    352 });
    \n-
    353
    \n-
    354 return y;
    \n-
    355 }
    \n-
    \n-
    356
    \n-
    \n-\n-
    359 {
    \n-\n-
    361 if (lf.bound())
    \n-
    362 dlf.bind(lf.localContext());
    \n-
    363 return dlf;
    \n-
    364 }
    \n-
    \n-
    365
    \n-
    366 private:
    \n-
    367 mutable PerNodeEvaluationBuffer evaluationBuffer_;
    \n-
    368 };
    \n-
    \n-
    369
    \n-
    371 template<class B_T, class V_T, class NTRE_T>
    \n-
    \n-
    372 DiscreteGlobalBasisFunction(B_T && basis, V_T && coefficients, NTRE_T&& nodeToRangeEntry)
    \n-
    373 : 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-
    374 {}
    \n-
    \n-
    375
    \n-
    \n-
    377 DiscreteGlobalBasisFunction(std::shared_ptr<const Basis> basis, std::shared_ptr<const V> coefficients, std::shared_ptr<const typename Base::NodeToRangeEntry> nodeToRangeEntry)
    \n-
    378 : Base(std::make_shared<Data>(Data{{basis->gridView()}, basis, coefficients, nodeToRangeEntry}))
    \n-
    379 {}
    \n-
    \n-
    380
    \n-
    \n-
    382 Range operator() (const Domain& x) const
    \n-
    383 {
    \n-
    384 // TODO: Implement this using hierarchic search
    \n-
    385 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    386 }
    \n-
    \n-
    387
    \n-\n-
    393
    \n-
    \n-\n-
    403 {
    \n-
    404 return LocalFunction(t);
    \n-
    405 }
    \n-
    \n-
    406};
    \n-
    \n-
    407
    \n-
    408
    \n-
    431template<typename R, typename B, typename V>
    \n-
    \n-
    432auto makeDiscreteGlobalBasisFunction(B&& basis, V&& vector)
    \n-
    433{
    \n-
    434 using Basis = std::decay_t<B>;
    \n-
    435 using NTREM = HierarchicNodeToRangeMap;
    \n-
    436
    \n-
    437 // Small helper functions to wrap vectors using istlVectorBackend
    \n-
    438 // if they do not already satisfy the VectorBackend interface.
    \n-
    439 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {
    \n-
    440 if constexpr (models<Concept::ConstVectorBackend<Basis>, decltype(v)>()) {
    \n-
    441 return std::forward<decltype(v)>(v);
    \n-
    442 } else {
    \n-
    443 return istlVectorBackend(v);
    \n-
    444 }
    \n-
    445 };
    \n-
    446
    \n-
    447 using Vector = std::decay_t<decltype(toConstVectorBackend(std::forward<V>(vector)))>;
    \n-\n-
    449 std::forward<B>(basis),
    \n-
    450 toConstVectorBackend(std::forward<V>(vector)),
    \n-\n-
    452}
    \n-
    \n-
    453
    \n-
    454
    \n-
    469template<typename DGBF>
    \n-
    \n-\n-
    471 : public ImplDoc::DiscreteGlobalBasisFunctionBase<typename DGBF::Basis, typename DGBF::Vector, typename DGBF::NodeToRangeEntry>
    \n-
    472{
    \n-\n-
    474 using Data = typename Base::Data;
    \n-
    475
    \n-
    476public:
    \n-\n-
    478
    \n-
    479 using Basis = typename Base::Basis;
    \n-
    480 using Vector = typename Base::Vector;
    \n-
    481
    \n-
    482 using Domain = typename Base::Domain;
    \n-\n-
    484
    \n-
    485 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16>;
    \n-
    486
    \n-
    487private:
    \n-
    488
    \n-
    489 template<class Node>
    \n-
    490 using LocalBasisRange = typename Node::FiniteElement::Traits::LocalBasisType::Traits::JacobianType;
    \n-
    491 template<class Node>
    \n-
    492 using NodeData = typename std::vector< LocalBasisRange<Node> >;
    \n-
    493 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData, typename Base::Tree>;
    \n-
    494
    \n-
    495public:
    \n-
    496
    \n-
    \n-\n-\n-
    506 {
    \n-
    507 using LocalBase = typename Base::LocalFunctionBase;
    \n-
    508 using size_type = typename Base::Tree::size_type;
    \n-
    509 using LocalBase::nodeToRangeEntry;
    \n-
    510
    \n-
    511 public:
    \n-\n-
    513 using Domain = typename LocalBase::Domain;
    \n-\n-
    515 using Element = typename LocalBase::Element;
    \n-
    516
    \n-
    \n-
    518 LocalFunction(const GlobalFunction& globalFunction)
    \n-
    519 : LocalBase(globalFunction.data_)
    \n-
    520 , evaluationBuffer_(this->localView_.tree())
    \n-
    521 {
    \n-
    522 /* Nothing. */
    \n-
    523 }
    \n-
    \n-
    524
    \n-
    \n-
    531 void bind(const Element& element)
    \n-
    532 {
    \n-
    533 LocalBase::bind(element);
    \n-
    534 geometry_.emplace(element.geometry());
    \n-
    535 }
    \n-
    \n-
    536
    \n-
    \n-
    538 void unbind()
    \n-
    539 {
    \n-
    540 geometry_.reset();
    \n-
    541 LocalBase::unbind();
    \n-
    542 }
    \n-
    \n-
    543
    \n-
    \n-
    557 Range operator()(const Domain& x) const
    \n-
    558 {
    \n-
    559 Range y;
    \n-
    560 istlVectorBackend(y) = 0;
    \n-
    561
    \n-
    562 const auto& jacobianInverse = geometry_->jacobianInverse(x);
    \n-
    563
    \n-
    564 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&& treePath) {
    \n-
    565 const auto& fe = node.finiteElement();
    \n-
    566 const auto& localBasis = fe.localBasis();
    \n-
    567 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];
    \n-
    568
    \n-
    569 localBasis.evaluateJacobian(x, shapeFunctionJacobians);
    \n-
    570
    \n-
    571 // Compute linear combinations of basis function jacobian.
    \n-
    572 // Non-scalar coefficients of dimension coeffDim are handled by
    \n-
    573 // processing the coeffDim linear combinations independently
    \n-
    574 // and storing them as entries of an array.
    \n-
    575 using RefJacobian = LocalBasisRange< std::decay_t<decltype(node)> >;
    \n-
    576 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;
    \n-
    577 auto refJacobians = std::array<RefJacobian, coeffDim>{};
    \n-
    578 istlVectorBackend(refJacobians) = 0;
    \n-
    579 for (size_type i = 0; i < localBasis.size(); ++i)
    \n-
    580 {
    \n-
    581 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);
    \n-
    582 for (std::size_t j = 0; j < coeffDim; ++j)
    \n-
    583 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);
    \n-
    584 }
    \n-
    585
    \n-
    586 // Transform Jacobians form local to global coordinates.
    \n-
    587 using Jacobian = decltype(refJacobians[0] * jacobianInverse);
    \n-
    588 auto jacobians = std::array<Jacobian, coeffDim>{};
    \n-
    589 std::transform(
    \n-
    590 refJacobians.begin(), refJacobians.end(), jacobians.begin(),
    \n-
    591 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });
    \n-
    592
    \n-
    593 // Assign computed Jacobians to node entry of range.
    \n-
    594 // Types are matched using the lexicographic ordering provided by flatVectorView.
    \n-
    595 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);
    \n-
    596 });
    \n-
    597
    \n-
    598 return y;
    \n-
    599 }
    \n-
    \n-
    600
    \n-
    \n-\n-
    603 {
    \n-
    604 DUNE_THROW(NotImplemented, "derivative of derivative is not implemented");
    \n-
    605 }
    \n-
    \n-
    606
    \n-
    607 private:
    \n-
    608 mutable PerNodeEvaluationBuffer evaluationBuffer_;
    \n-
    609 std::optional<typename Element::Geometry> geometry_;
    \n-
    610 };
    \n-
    \n-
    611
    \n-
    \n-
    618 DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr<const Data>& data)
    \n-
    619 : Base(data)
    \n-
    620 {
    \n-
    621 /* Nothing. */
    \n-
    622 }
    \n-
    \n-
    623
    \n-
    \n-
    625 Range operator()(const Domain& x) const
    \n-
    626 {
    \n-
    627 // TODO: Implement this using hierarchic search
    \n-
    628 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    629 }
    \n-
    \n-
    630
    \n-
    \n-\n-
    632 {
    \n-
    633 DUNE_THROW(NotImplemented, "derivative of derivative is not implemented");
    \n-
    634 }
    \n-
    \n-
    635
    \n-
    \n-\n-
    638 {
    \n-
    639 return LocalFunction(f);
    \n-
    640 }
    \n-
    \n-
    641};
    \n-
    \n-
    642
    \n-
    643
    \n-
    644} // namespace Functions
    \n-
    645} // namespace Dune
    \n-
    646
    \n-
    647#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n-\n-\n-\n-\n-\n-
    auto makeDiscreteGlobalBasisFunction(B &&basis, V &&vector)
    Generate a DiscreteGlobalBasisFunction.
    Definition discreteglobalbasisfunction.hh:432
    \n-
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:346
    \n+
    33
    \n+
    34
    \n+
    35} // end namespace Functions
    \n+
    36} // end namespace Dune
    \n+
    37
    \n+
    38#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n+\n
    Definition polynomial.hh:10
    \n-
    auto flatVectorView(T &t)
    Create flat vector view of passed mutable container.
    Definition flatvectorview.hh:179
    \n-
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:37
    \n-
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n-
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:30
    \n-
    Definition discreteglobalbasisfunction.hh:28
    \n-
    std::shared_ptr< const Data > data_
    Definition discreteglobalbasisfunction.hh:217
    \n-
    const Vector & dofs() const
    Return the coefficients of this discrete function by reference.
    Definition discreteglobalbasisfunction.hh:199
    \n-
    B Basis
    Definition discreteglobalbasisfunction.hh:30
    \n-
    typename Basis::LocalView::Tree Tree
    Definition discreteglobalbasisfunction.hh:39
    \n-
    V Vector
    Definition discreteglobalbasisfunction.hh:31
    \n-
    typename EntitySet::Element Element
    Definition discreteglobalbasisfunction.hh:45
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition discreteglobalbasisfunction.hh:44
    \n-
    const NodeToRangeEntry & nodeToRangeEntry() const
    Return the stored node-to-range map.
    Definition discreteglobalbasisfunction.hh:205
    \n-
    NTRE NodeToRangeEntry
    Definition discreteglobalbasisfunction.hh:40
    \n-
    DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)
    Definition discreteglobalbasisfunction.hh:184
    \n-
    typename Basis::GridView GridView
    Definition discreteglobalbasisfunction.hh:37
    \n-
    const Basis & basis() const
    Return a const reference to the stored basis.
    Definition discreteglobalbasisfunction.hh:193
    \n-
    GridViewEntitySet< GridView, 0 > EntitySet
    Definition discreteglobalbasisfunction.hh:38
    \n-
    const EntitySet & entitySet() const
    Get associated set of entities the local-function can be bound to.
    Definition discreteglobalbasisfunction.hh:211
    \n-
    typename EntitySet::GlobalCoordinate Domain
    Definition discreteglobalbasisfunction.hh:42
    \n-
    Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename Basis::MultiIndex >()])> Coefficient
    Definition discreteglobalbasisfunction.hh:35
    \n-
    Definition discreteglobalbasisfunction.hh:53
    \n-
    EntitySet entitySet
    Definition discreteglobalbasisfunction.hh:54
    \n-
    std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry
    Definition discreteglobalbasisfunction.hh:57
    \n-
    std::shared_ptr< const Basis > basis
    Definition discreteglobalbasisfunction.hh:55
    \n-
    std::shared_ptr< const Vector > coefficients
    Definition discreteglobalbasisfunction.hh:56
    \n-\n-
    LocalFunctionBase & operator=(const LocalFunctionBase &other)
    Copy-assignment of the local-function.
    Definition discreteglobalbasisfunction.hh:100
    \n-
    bool bound() const
    Check if LocalFunction is already bound to an element.
    Definition discreteglobalbasisfunction.hh:149
    \n-
    void bind(const Element &element)
    Bind LocalFunction to grid element.
    Definition discreteglobalbasisfunction.hh:116
    \n-
    typename EntitySet::Element Element
    Definition discreteglobalbasisfunction.hh:68
    \n-
    const Element & localContext() const
    Return the element the local-function is bound to.
    Definition discreteglobalbasisfunction.hh:155
    \n-
    LocalFunctionBase(const LocalFunctionBase &other)
    Copy-construct the local-function.
    Definition discreteglobalbasisfunction.hh:84
    \n-
    std::vector< Coefficient > localDoFs_
    Definition discreteglobalbasisfunction.hh:180
    \n-
    void assignWith(To &to, const From &from) const
    Definition discreteglobalbasisfunction.hh:163
    \n-
    std::shared_ptr< const Data > data_
    Definition discreteglobalbasisfunction.hh:178
    \n-
    decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath, Range &y) const
    Definition discreteglobalbasisfunction.hh:173
    \n-
    LocalView localView_
    Definition discreteglobalbasisfunction.hh:179
    \n-
    void unbind()
    Unbind the local-function.
    Definition discreteglobalbasisfunction.hh:143
    \n-
    LocalDomain Domain
    Definition discreteglobalbasisfunction.hh:67
    \n-
    LocalFunctionBase(const std::shared_ptr< const Data > &data)
    Definition discreteglobalbasisfunction.hh:71
    \n-
    Derivative of a DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:472
    \n-
    typename Base::Basis Basis
    Definition discreteglobalbasisfunction.hh:479
    \n-
    friend Traits::DerivativeInterface derivative(const DiscreteGlobalBasisFunctionDerivative &f)
    Definition discreteglobalbasisfunction.hh:631
    \n-
    Range operator()(const Domain &x) const
    Not implemented.
    Definition discreteglobalbasisfunction.hh:625
    \n-
    typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::DerivativeInterface >::Range Range
    Definition discreteglobalbasisfunction.hh:483
    \n-
    friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative &f)
    Construct local function from a DiscreteGlobalBasisFunctionDerivative
    Definition discreteglobalbasisfunction.hh:637
    \n-
    DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data > &data)
    create object from DiscreateGlobalBasisFunction data
    Definition discreteglobalbasisfunction.hh:618
    \n-
    DGBF DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:477
    \n-
    typename Base::Vector Vector
    Definition discreteglobalbasisfunction.hh:480
    \n-
    Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits
    Definition discreteglobalbasisfunction.hh:485
    \n-
    typename Base::Domain Domain
    Definition discreteglobalbasisfunction.hh:482
    \n-
    A grid function induced by a global basis and a coefficient vector.
    Definition discreteglobalbasisfunction.hh:269
    \n-
    friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction > derivative(const DiscreteGlobalBasisFunction &f)
    Derivative of the DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:389
    \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:372
    \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:377
    \n-
    friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)
    Construct local function from a DiscreteGlobalBasisFunction.
    Definition discreteglobalbasisfunction.hh:402
    \n-
    typename Base::Basis Basis
    Definition discreteglobalbasisfunction.hh:274
    \n-
    Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits
    Definition discreteglobalbasisfunction.hh:280
    \n-
    R Range
    Definition discreteglobalbasisfunction.hh:278
    \n-
    typename Base::Vector Vector
    Definition discreteglobalbasisfunction.hh:275
    \n-
    typename Base::Domain Domain
    Definition discreteglobalbasisfunction.hh:277
    \n-
    Definition discreteglobalbasisfunction.hh:293
    \n-
    GlobalFunction::Range Range
    Definition discreteglobalbasisfunction.hh:302
    \n-
    typename LocalBase::Domain Domain
    Definition discreteglobalbasisfunction.hh:301
    \n-
    LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)
    Create a local-function from the associated grid-function.
    Definition discreteglobalbasisfunction.hh:306
    \n-
    friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::LocalFunction derivative(const LocalFunction &lf)
    Local function of the derivative.
    Definition discreteglobalbasisfunction.hh:358
    \n-
    Range operator()(const Domain &x) const
    Evaluate this local-function in coordinates x in the bound element.
    Definition discreteglobalbasisfunction.hh:322
    \n-
    typename LocalBase::Element Element
    Definition discreteglobalbasisfunction.hh:303
    \n-
    local function evaluating the derivative in reference coordinates
    Definition discreteglobalbasisfunction.hh:506
    \n-
    Range operator()(const Domain &x) const
    Evaluate this local-function in coordinates x in the bound element.
    Definition discreteglobalbasisfunction.hh:557
    \n-
    typename LocalBase::Domain Domain
    Definition discreteglobalbasisfunction.hh:513
    \n-
    typename LocalBase::Element Element
    Definition discreteglobalbasisfunction.hh:515
    \n-
    friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction &)
    Not implemented.
    Definition discreteglobalbasisfunction.hh:602
    \n-
    GlobalFunction::Range Range
    Definition discreteglobalbasisfunction.hh:514
    \n-
    void unbind()
    Unbind the local-function.
    Definition discreteglobalbasisfunction.hh:538
    \n-
    LocalFunction(const GlobalFunction &globalFunction)
    Create a local function from the associated grid function.
    Definition discreteglobalbasisfunction.hh:518
    \n-
    void bind(const Element &element)
    Bind LocalFunction to grid element.
    Definition discreteglobalbasisfunction.hh:531
    \n-
    Definition gridfunction.hh:32
    \n-\n-
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:32
    \n-
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:35
    \n-
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:36
    \n-\n+
    A statically sized MultiIndex type.
    Definition multiindex.hh:25
    \n+
    A statically sized MultiIndex type.
    Definition multiindex.hh:49
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,853 +1,43 @@\n dune-functions\u00a02.9.0\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+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n-4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n 5\n-6#include \n-7#include \n-8\n-9#include \n-10\n-11#include \n+6#include \n+7\n+8#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+9\n+10namespace _\bD_\bu_\bn_\be {\n+11namespace Functions {\n 12\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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-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/_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\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/_\bg_\br_\bi_\bd_\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/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\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/_\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-19\n-20namespace _\bD_\bu_\bn_\be {\n-21namespace Functions {\n-22\n-23\n-_\b2_\b4namespace ImplDoc {\n-25\n-26template\n-_\b2_\b7class _\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-28{\n-29public:\n-_\b3_\b0 using _\bB_\ba_\bs_\bi_\bs = B;\n-_\b3_\b1 using _\bV_\be_\bc_\bt_\bo_\br = V;\n+13\n+14\n+30template\n+_\b3_\b1using _\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 32\n-33 // In order to make the cache work for proxy-references\n-34 // we have to use AutonomousValue instead of std::decay_t\n-_\b3_\b5 using _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt = Dune::AutonomousValue()\n-[std::declval()])>;\n-36\n-_\b3_\b7 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename Basis::GridView;\n-_\b3_\b8 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-_\b3_\b9 using _\bT_\br_\be_\be = typename Basis::LocalView::Tree;\n-_\b4_\b0 using _\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by = NTRE;\n-41\n-_\b4_\b2 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-43\n-_\b4_\b4 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-_\b4_\b5 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-46\n-47protected:\n-48\n-49 // This collects all data that is shared by all related\n-50 // global and local functions. This way we don't need to\n-51 // keep track of it individually.\n-_\b5_\b2 struct _\bD_\ba_\bt_\ba\n-53 {\n-_\b5_\b4 _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt;\n-_\b5_\b5 std::shared_ptr _\bb_\ba_\bs_\bi_\bs;\n-_\b5_\b6 std::shared_ptr _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs;\n-_\b5_\b7 std::shared_ptr _\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by;\n-58 };\n-59\n-60public:\n-_\b6_\b1 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-62 {\n-63 using LocalView = typename Basis::LocalView;\n-64 using size_type = typename Tree::size_type;\n-65\n-66 public:\n-_\b6_\b7 using _\bD_\bo_\bm_\ba_\bi_\bn = _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn;\n-_\b6_\b8 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-69\n-70 protected:\n-_\b7_\b1 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be(const std::shared_ptr& data)\n-72 : _\bd_\ba_\bt_\ba_\b_(data)\n-73 , _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(_\bd_\ba_\bt_\ba_\b_->_\bb_\ba_\bs_\bi_\bs->localView())\n-74 {\n-75 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.reserve(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize());\n-76 }\n-77\n-_\b8_\b4 _\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-85 : _\bd_\ba_\bt_\ba_\b_(other._\bd_\ba_\bt_\ba_\b_)\n-86 , _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(other._\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_)\n-87 {\n-88 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.reserve(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize());\n-89 if (_\bb_\bo_\bu_\bn_\bd())\n-90 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n-91 }\n-92\n-_\b1_\b0_\b0 _\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-101 {\n-102 _\bd_\ba_\bt_\ba_\b_ = other._\bd_\ba_\bt_\ba_\b_;\n-103 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n-104 if (_\bb_\bo_\bu_\bn_\bd())\n-105 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n-106 return *this;\n-107 }\n-108\n-109 public:\n-_\b1_\b1_\b6 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n-117 {\n-118 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bind(element);\n-119 // Use cache of full local view size. For a subspace basis,\n-120 // this may be larger than the number of local DOFs in the\n-121 // tree. In this case only cache entries associated to local\n-122 // DOFs in the subspace are filled. Cache entries associated\n-123 // to local DOFs which are not contained in the subspace will\n-124 // not be touched.\n-125 //\n-126 // Alternatively one could use a cache that exactly fits\n-127 // the size of the tree. However, this would require to\n-128 // subtract an offset from localIndex(i) on each cache\n-129 // access in operator().\n-130 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.resize(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.size());\n-131 const auto& _\bd_\bo_\bf_\bs = *_\bd_\ba_\bt_\ba_\b_->coefficients;\n-132 for (size_type i = 0; i < _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree().size(); ++i)\n-133 {\n-134 // For a subspace basis the index-within-tree i\n-135 // is not the same as the localIndex within the\n-136 // full local view.\n-137 size_t localIndex = _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree().localIndex(i);\n-138 _\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-139 }\n-140 }\n-141\n-_\b1_\b4_\b3 void _\bu_\bn_\bb_\bi_\bn_\bd()\n-144 {\n-145 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.unbind();\n-146 }\n-147\n-_\b1_\b4_\b9 bool _\bb_\bo_\bu_\bn_\bd() const\n-150 {\n-151 return _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bound();\n-152 }\n-153\n-_\b1_\b5_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt() const\n-156 {\n-157 return _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.element();\n-158 }\n-159\n-160 protected:\n-161\n-162 template\n-_\b1_\b6_\b3 void _\ba_\bs_\bs_\bi_\bg_\bn_\bW_\bi_\bt_\bh(To& to, const From& from) const\n-164 {\n-165 auto from_flat = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(from);\n-166 auto to_flat = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(to);\n-167 assert(from_flat.size() == to_flat.size());\n-168 for (size_type i = 0; i < to_flat.size(); ++i)\n-169 to_flat[i] = from_flat[i];\n-170 }\n-171\n-172 template\n-_\b1_\b7_\b3 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-174 {\n-175 return (*_\bd_\ba_\bt_\ba_\b_->nodeToRangeEntry)(node, treePath, y);\n-176 }\n-177\n-_\b1_\b7_\b8 std::shared_ptr _\bd_\ba_\bt_\ba_\b_;\n-_\b1_\b7_\b9 LocalView _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n-_\b1_\b8_\b0 std::vector _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n-181 };\n-182\n-183protected:\n-_\b1_\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_\bB_\ba_\bs_\be(const std::shared_ptr& data)\n-185 : _\bd_\ba_\bt_\ba_\b_(data)\n-186 {\n-187 /* Nothing. */\n-188 }\n-189\n-190public:\n-191\n-_\b1_\b9_\b3 const _\bB_\ba_\bs_\bi_\bs& _\bb_\ba_\bs_\bi_\bs() const\n-194 {\n-195 return *_\bd_\ba_\bt_\ba_\b_->basis;\n-196 }\n-197\n-_\b1_\b9_\b9 const _\bV_\be_\bc_\bt_\bo_\br& _\bd_\bo_\bf_\bs() const\n-200 {\n-201 return *_\bd_\ba_\bt_\ba_\b_->coefficients;\n-202 }\n-203\n-_\b2_\b0_\b5 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-206 {\n-207 return *_\bd_\ba_\bt_\ba_\b_->nodeToRangeEntry;\n-208 }\n-209\n-_\b2_\b1_\b1 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-212 {\n-213 return _\bd_\ba_\bt_\ba_\b_->entitySet;\n-214 }\n-215\n-216protected:\n-_\b2_\b1_\b7 std::shared_ptr _\bd_\ba_\bt_\ba_\b_;\n-218};\n-219\n-220} // namespace ImplDoc\n-221\n-222\n-223\n-224template\n-225class _\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-226\n-264template\n-_\b2_\b6_\b7class _\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-268 : 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-269{\n-270 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-271 using Data = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba;\n-272\n-273public:\n-_\b2_\b7_\b4 using _\bB_\ba_\bs_\bi_\bs = typename _\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs;\n-_\b2_\b7_\b5 using _\bV_\be_\bc_\bt_\bo_\br = typename _\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br;\n-276\n-_\b2_\b7_\b7 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n-_\b2_\b7_\b8 using _\bR_\ba_\bn_\bg_\be = R;\n-279\n-_\b2_\b8_\b0 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-281\n-282private:\n-283\n-284 template\n-285 using LocalBasisRange = typename Node::FiniteElement::Traits::\n-LocalBasisType::Traits::RangeType;\n-286 template\n-287 using NodeData = typename std::vector>;\n-288 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer;\n-289\n-290public:\n-_\b2_\b9_\b1 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-292 : 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-293 {\n-294 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-295 using size_type = typename Base::Tree::size_type;\n-296 using LocalBase::nodeToRangeEntry;\n-297\n-298 public:\n-299\n-_\b3_\b0_\b0 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_\b0_\b1 using _\bD_\bo_\bm_\ba_\bi_\bn = typename LocalBase::Domain;\n-_\b3_\b0_\b2 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_\b0_\b3 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename LocalBase::Element;\n-304\n-_\b3_\b0_\b6 _\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-307 : LocalBase(globalFunction._\bd_\ba_\bt_\ba_\b_)\n-308 , evaluationBuffer_(this->_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree())\n-309 {\n-310 /* Nothing. */\n-311 }\n-312\n-_\b3_\b2_\b2 _\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-323 {\n-324 _\bR_\ba_\bn_\bg_\be y;\n-325 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(y) = 0;\n-326\n-327 TypeTree::forEachLeafNode(this->_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree(), [&](auto&& node, auto&&\n-treePath) {\n-328 const auto& fe = node.finiteElement();\n-329 const auto& localBasis = fe.localBasis();\n-330 auto& shapeFunctionValues = evaluationBuffer_[treePath];\n-331\n-332 localBasis.evaluateFunction(x, shapeFunctionValues);\n-333\n-334 // Compute linear combinations of basis function jacobian.\n-335 // Non-scalar coefficients of dimension coeffDim are handled by\n-336 // processing the coeffDim linear combinations independently\n-337 // and storing them as entries of an array.\n-338 using Value = LocalBasisRange< std::decay_t >;\n-339 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n-[node.localIndex(0)]).size())::value;\n-340 auto values = std::array{};\n-341 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(values) = 0;\n-342 for (size_type i = 0; i < localBasis.size(); ++i)\n-343 {\n-344 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-345 for (std::size_t j = 0; j < coeffDim; ++j)\n-346 values[j].axpy(c[j], shapeFunctionValues[i]);\n-347 }\n-348\n-349 // Assign computed values to node entry of range.\n-350 // Types are matched using the lexicographic ordering provided by\n-flatVectorView.\n-351 LocalBase::assignWith(_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by(node, treePath, y), values);\n-352 });\n-353\n-354 return y;\n-355 }\n-356\n-_\b3_\b5_\b8 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-359 {\n-360 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-361 if (lf._\bb_\bo_\bu_\bn_\bd())\n-362 dlf.bind(lf._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt());\n-363 return dlf;\n-364 }\n-365\n-366 private:\n-367 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n-368 };\n-369\n-371 template\n-_\b3_\b7_\b2 _\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-373 : _\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-374 {}\n-375\n-_\b3_\b7_\b7 _\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-378 : _\bB_\ba_\bs_\be(std::make_shared(Data{{basis->gridView()}, basis,\n-coefficients, nodeToRangeEntry}))\n-379 {}\n-380\n-_\b3_\b8_\b2 _\bR_\ba_\bn_\bg_\be operator() (const _\bD_\bo_\bm_\ba_\bi_\bn& x) const\n-383 {\n-384 // TODO: Implement this using hierarchic search\n-385 DUNE_THROW(NotImplemented,\"not implemented\");\n-386 }\n-387\n-_\b3_\b8_\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-390 {\n-391 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-392 }\n-393\n-_\b4_\b0_\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-403 {\n-404 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(t);\n-405 }\n-406};\n-407\n-408\n-431template\n-_\b4_\b3_\b2auto _\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-433{\n-434 using _\bB_\ba_\bs_\bi_\bs = std::decay_t;\n-435 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-436\n-437 // Small helper functions to wrap vectors using istlVectorBackend\n-438 // if they do not already satisfy the VectorBackend interface.\n-439 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {\n-440 if constexpr (models, decltype(v)>()) {\n-441 return std::forward(v);\n-442 } else {\n-443 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n-444 }\n-445 };\n-446\n-447 using _\bV_\be_\bc_\bt_\bo_\br = std::decay_t\n-(vector)))>;\n-448 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-449 std::forward(basis),\n-450 toConstVectorBackend(std::forward(vector)),\n-451 _\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-452}\n-453\n-454\n-469template\n-_\b4_\b7_\b0class _\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-471 : 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-472{\n-473 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-474 using Data = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba;\n-475\n-476public:\n-_\b4_\b7_\b7 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-478\n-_\b4_\b7_\b9 using _\bB_\ba_\bs_\bi_\bs = typename _\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs;\n-_\b4_\b8_\b0 using _\bV_\be_\bc_\bt_\bo_\br = typename _\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br;\n-481\n-_\b4_\b8_\b2 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n-_\b4_\b8_\b3 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-484\n-_\b4_\b8_\b5 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-486\n-487private:\n-488\n-489 template\n-490 using LocalBasisRange = typename Node::FiniteElement::Traits::\n-LocalBasisType::Traits::JacobianType;\n-491 template\n-492 using NodeData = typename std::vector< LocalBasisRange >;\n-493 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer;\n-494\n-495public:\n-496\n-_\b5_\b0_\b4 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-505 : 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-506 {\n-507 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-508 using size_type = typename Base::Tree::size_type;\n-509 using LocalBase::nodeToRangeEntry;\n-510\n-511 public:\n-_\b5_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be;\n-_\b5_\b1_\b3 using _\bD_\bo_\bm_\ba_\bi_\bn = typename LocalBase::Domain;\n-_\b5_\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-_\b5_\b1_\b5 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename LocalBase::Element;\n-516\n-_\b5_\b1_\b8 _\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-519 : LocalBase(globalFunction.data_)\n-520 , evaluationBuffer_(this->localView_.tree())\n-521 {\n-522 /* Nothing. */\n-523 }\n-524\n-_\b5_\b3_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n-532 {\n-533 LocalBase::bind(element);\n-534 geometry_.emplace(element.geometry());\n-535 }\n-536\n-_\b5_\b3_\b8 void _\bu_\bn_\bb_\bi_\bn_\bd()\n-539 {\n-540 geometry_.reset();\n-541 LocalBase::unbind();\n-542 }\n-543\n-_\b5_\b5_\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-558 {\n-559 _\bR_\ba_\bn_\bg_\be y;\n-560 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(y) = 0;\n-561\n-562 const auto& jacobianInverse = geometry_->jacobianInverse(x);\n-563\n-564 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&&\n-treePath) {\n-565 const auto& fe = node.finiteElement();\n-566 const auto& localBasis = fe.localBasis();\n-567 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];\n-568\n-569 localBasis.evaluateJacobian(x, shapeFunctionJacobians);\n-570\n-571 // Compute linear combinations of basis function jacobian.\n-572 // Non-scalar coefficients of dimension coeffDim are handled by\n-573 // processing the coeffDim linear combinations independently\n-574 // and storing them as entries of an array.\n-575 using RefJacobian = LocalBasisRange< std::decay_t >;\n-576 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n-[node.localIndex(0)]).size())::value;\n-577 auto refJacobians = std::array{};\n-578 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(refJacobians) = 0;\n-579 for (size_type i = 0; i < localBasis.size(); ++i)\n-580 {\n-581 auto c = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(this->localDoFs_[node.localIndex(i)]);\n-582 for (std::size_t j = 0; j < coeffDim; ++j)\n-583 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);\n-584 }\n-585\n-586 // Transform Jacobians form local to global coordinates.\n-587 using Jacobian = decltype(refJacobians[0] * jacobianInverse);\n-588 auto jacobians = std::array{};\n-589 std::transform(\n-590 refJacobians.begin(), refJacobians.end(), jacobians.begin(),\n-591 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });\n-592\n-593 // Assign computed Jacobians to node entry of range.\n-594 // Types are matched using the lexicographic ordering provided by\n-flatVectorView.\n-595 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);\n-596 });\n-597\n-598 return y;\n-599 }\n-600\n-_\b6_\b0_\b2 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-603 {\n-604 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n-605 }\n-606\n-607 private:\n-608 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n-609 std::optional geometry_;\n-610 };\n-611\n-_\b6_\b1_\b8 _\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-619 : _\bB_\ba_\bs_\be(data)\n-620 {\n-621 /* Nothing. */\n-622 }\n-623\n-_\b6_\b2_\b5 _\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-626 {\n-627 // TODO: Implement this using hierarchic search\n-628 DUNE_THROW(NotImplemented,\"not implemented\");\n-629 }\n-630\n-_\b6_\b3_\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-632 {\n-633 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n-634 }\n-635\n-_\b6_\b3_\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-638 {\n-639 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(f);\n-640 }\n-641};\n-642\n-643\n-644} // namespace Functions\n-645} // namespace Dune\n-646\n-647#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n-_\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-_\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-_\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:432\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:346\n+33\n+34\n+35} // end namespace Functions\n+36} // end namespace Dune\n+37\n+38#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+_\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:10\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:179\n-_\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:37\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:56\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:30\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:28\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: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_\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: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:_\bB_\ba_\bs_\bi_\bs\n-B Basis\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:30\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:39\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:31\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: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:_\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: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:_\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: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:_\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:40\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: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:_\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: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:_\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:193\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:38\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: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:_\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:42\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:35\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:53\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:54\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:57\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:55\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:56\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: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_\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:100\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: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-_\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:116\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: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-_\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: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-_\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:84\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:180\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:163\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:178\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:173\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: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-_\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:143\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:67\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:71\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:472\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:479\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:631\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-Not implemented.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:625\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:483\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:637\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:618\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:477\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:480\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:485\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:482\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:269\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: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:_\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:372\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:377\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:402\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:274\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:280\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:278\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:275\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:277\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:293\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:302\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:301\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:306\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:358\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:322\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:303\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:506\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:557\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:513\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:515\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:602\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:514\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:538\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:518\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:531\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: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>\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: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:_\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:35\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:36\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:_\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:25\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:49\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00017.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00017.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: gridfunction.hh File Reference\n+dune-functions: defaultlocalview.hh File Reference\n \n \n \n \n \n \n \n@@ -65,42 +65,39 @@\n \n \n \n \n \n \n \n
    \n \n-
    gridfunction.hh File Reference
    \n+
    defaultlocalview.hh File Reference
    \n
    \n
    \n-
    #include <type_traits>
    \n-#include <dune/common/typeutilities.hh>
    \n-#include <dune/functions/common/typeerasure.hh>
    \n-#include <dune/functions/common/defaultderivativetraits.hh>
    \n-#include <dune/functions/common/differentiablefunction.hh>
    \n-#include <dune/functions/common/localfunction.hh>
    \n-#include <dune/functions/common/functionconcepts.hh>
    \n-#include <dune/functions/gridfunctions/localderivativetraits.hh>
    \n-#include <dune/functions/gridfunctions/gridfunction_imp.hh>
    \n+
    #include <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 \n

    \n Classes

    class  Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >
     Wrapper class for functions defined on a Grid. More...
    class  Dune::Functions::DefaultLocalView< GB >
     The restriction of a finite element basis to a single element. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,28 @@\n dune-functions\u00a02.9.0\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+ * _\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-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+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:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n- _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bE_\bS_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n- _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n-\u00a0 Wrapper class for functions defined on a Grid. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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 ===============================================================================\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: gridfunction.hh Source File\n+dune-functions: defaultlocalview.hh Source File\n \n \n \n \n \n \n \n@@ -70,179 +70,220 @@\n \n \n \n \n \n \n \n
    \n-
    gridfunction.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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n-
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n
    5
    \n-
    6#include <type_traits>
    \n-
    7
    \n-
    8#include <dune/common/typeutilities.hh>
    \n+
    6
    \n+
    7#include <tuple>
    \n+
    8#include <optional>
    \n
    9
    \n-\n-\n-\n-\n-\n-\n-\n+
    10#include <dune/common/concept.hh>
    \n+
    11#include <dune/common/hybridutilities.hh>
    \n+
    12#include <dune/common/reservedvector.hh>
    \n+
    13
    \n+\n+\n+\n
    17
    \n
    18
    \n
    19
    \n
    20namespace Dune {
    \n
    21namespace Functions {
    \n
    22
    \n
    23
    \n
    24
    \n-
    25/*
    \n-
    26 * Default implementation is empty
    \n-
    27 * The actual implementation is only given if Signature is an type
    \n-
    28 * describing a function signature as Range(Domain).
    \n-
    29 */
    \n-
    30template<class Signature, class EntitySet, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n-
    \n-\n-
    32{};
    \n-
    \n+
    26template<class GB>
    \n+
    \n+\n+
    28{
    \n+
    29public:
    \n+
    30
    \n+
    32 using GlobalBasis = GB;
    \n
    33
    \n-
    34
    \n-
    35
    \n-
    36namespace Imp
    \n-
    37{
    \n-
    38
    \n-
    40 template<class S, class ES, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    41 struct GridFunctionTraits :
    \n-
    42 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>
    \n-
    43 {
    \n-
    44 protected:
    \n-
    45 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;
    \n-
    46
    \n-
    47 public:
    \n-
    49 using EntitySet = ES;
    \n-
    50
    \n-
    52 using Element = typename EntitySet::Element;
    \n-
    53
    \n-
    55 using DerivativeSignature = typename Base::DerivativeSignature;
    \n-
    56
    \n-\n+
    35 using GridView = typename GlobalBasis::GridView;
    \n+
    36
    \n+
    38 using Element = typename GridView::template Codim<0>::Entity;
    \n+
    39
    \n+
    41 using size_type = std::size_t;
    \n+
    42
    \n+
    44 using Tree = typename GlobalBasis::PreBasis::Node;
    \n+
    45
    \n+
    46protected:
    \n+
    47
    \n+
    48 using PreBasis = typename GlobalBasis::PreBasis;
    \n+
    49
    \n+
    50 // Type used to store the multi indices of the basis vectors.
    \n+
    51 // In contrast to MultiIndex this always has dynamic size.
    \n+
    52 // It's guaranteed, that you can always cast it to MultiIndex
    \n+\n+
    54 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),
    \n+\n+
    56 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;
    \n+
    57
    \n+
    58public:
    \n
    59
    \n-
    61 using LocalSignature = typename Base::Range(typename EntitySet::LocalCoordinate);
    \n-
    62
    \n-
    64 template<class R>
    \n-\n+
    61 using MultiIndex =
    \n+
    62 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),
    \n+\n+
    64 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;
    \n+
    65
    \n
    66
    \n-
    68 using LocalFunctionTraits = typename Dune::Functions::Imp::LocalFunctionTraits<LocalSignature, Element, LocalDerivativeTraits, bufferSize>;
    \n-
    69
    \n-\n-
    72
    \n-
    74 using Concept = GridFunctionWrapperInterface<S, DerivativeInterface, LocalFunctionInterface, ES>;
    \n+
    \n+\n+\n+
    70 tree_(globalBasis_->preBasis().makeNode())
    \n+
    71 {
    \n+
    72 static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to DefaultLocalView does not model the BasisNode concept.");
    \n+\n+
    74 }
    \n+
    \n
    75
    \n-
    77 template<class B>
    \n-
    78 using Model = GridFunctionWrapperImplementation<S, DerivativeInterface, LocalFunctionInterface, ES, B>;
    \n-
    79 };
    \n-
    80}
    \n-
    81
    \n-
    82
    \n-
    83
    \n-
    95template<class Range, class Domain, class ES, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    \n-
    96class GridFunction<Range(Domain), ES, DerivativeTraits, bufferSize> :
    \n-
    97 public TypeErasureBase<
    \n-
    98 typename Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::Concept,
    \n-
    99 Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::template Model>
    \n-
    100{
    \n-
    101 using Traits = Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>;
    \n+
    \n+
    81 void bind(const Element& e)
    \n+
    82 {
    \n+
    83 element_ = e;
    \n+\n+
    85 indices_.resize(size());
    \n+
    86 globalBasis_->preBasis().indices(tree_, indices_.begin());
    \n+
    87 }
    \n+
    \n+
    88
    \n+
    91 [[deprecated("Use the bound() method instead")]]
    \n+
    \n+
    92 bool isBound() const {
    \n+
    93 return static_cast<bool>(element_);
    \n+
    94 }
    \n+
    \n+
    95
    \n+
    \n+
    98 bool bound() const
    \n+
    99 {
    \n+
    100 return static_cast<bool>(element_);
    \n+
    101 }
    \n+
    \n
    102
    \n-\n-
    104
    \n-
    105 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n-
    106
    \n-
    107 using LocalFunctionInterface = typename Traits::LocalFunctionInterface;
    \n-
    108
    \n-
    109 using EntitySet = typename Traits::EntitySet;
    \n-
    110
    \n-
    111public:
    \n-
    112
    \n-
    124 template<class F, disableCopyMove<GridFunction, F> = 0 >
    \n+
    \n+
    107 const Element& element() const
    \n+
    108 {
    \n+
    109 return *element_;
    \n+
    110 }
    \n+
    \n+
    111
    \n+
    \n+
    116 void unbind()
    \n+
    117 {
    \n+
    118 element_.reset();
    \n+
    119 }
    \n+
    \n+
    120
    \n
    \n-\n-
    126 Base(std::forward<F>(f))
    \n-
    127 {
    \n-
    128 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-
    129 }
    \n-
    \n-
    130
    \n-
    131 GridFunction() = default;
    \n-
    132
    \n-
    \n-
    138 Range operator() (const Domain& x) const
    \n-
    139 {
    \n-
    140 return this->asInterface().operator()(x);
    \n-
    141 }
    \n-
    \n-
    142
    \n-
    \n-
    151 friend DerivativeInterface derivative(const GridFunction& t)
    \n-
    152 {
    \n-
    153 return t.asInterface().derivative();
    \n-
    154 }
    \n-
    \n-
    155
    \n-
    \n-
    165 friend LocalFunctionInterface localFunction(const GridFunction& t)
    \n-
    166 {
    \n-
    167 return t.asInterface().wrappedLocalFunction();
    \n-
    168 }
    \n-
    \n-
    169
    \n-
    \n-
    176 const EntitySet& entitySet() const
    \n-
    177 {
    \n-
    178 return this->asInterface().wrappedEntitySet();
    \n-
    179 }
    \n-
    \n-
    180};
    \n-
    \n-
    181
    \n-
    182
    \n-
    183
    \n-
    184}} // namespace Dune::Functions
    \n-
    185
    \n-
    186
    \n-
    187
    \n-
    188#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n-\n-\n-\n-\n-\n-\n-\n+
    125 const Tree& tree() const
    \n+
    126 {
    \n+
    127 return tree_;
    \n+
    128 }
    \n+
    \n+
    129
    \n+
    \n+\n+
    133 {
    \n+
    134 return tree_.size();
    \n+
    135 }
    \n+
    \n+
    136
    \n+
    \n+\n+
    144 {
    \n+
    145 return globalBasis_->preBasis().maxNodeSize();
    \n+
    146 }
    \n+
    \n+
    147
    \n+
    \n+
    149 const MultiIndex& index(size_type i) const
    \n+
    150 {
    \n+
    151 return indices_[i];
    \n+
    152 }
    \n+
    \n+
    153
    \n+
    \n+\n+
    157 {
    \n+
    158 return *globalBasis_;
    \n+
    159 }
    \n+
    \n+
    160
    \n+
    \n+\n+
    162 {
    \n+
    163 return *this;
    \n+
    164 }
    \n+
    \n+
    165
    \n+
    166protected:
    \n+\n+
    168 std::optional<Element> element_;
    \n+\n+
    170 std::vector<MultiIndexStorage> indices_;
    \n+
    171};
    \n+
    \n+
    172
    \n+
    173
    \n+
    174
    \n+
    175} // end namespace Functions
    \n+
    176} // end namespace Dune
    \n+
    177
    \n+
    178
    \n+
    179
    \n+
    180#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n+\n+\n
    Definition polynomial.hh:10
    \n-
    Definition localfunction.hh:30
    \n-
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:165
    \n-
    Definition gridfunction.hh:32
    \n-
    friend DerivativeInterface derivative(const GridFunction &t)
    Get derivative of wrapped function.
    Definition gridfunction.hh:151
    \n-\n-
    const EntitySet & entitySet() const
    Get associated EntitySet.
    Definition gridfunction.hh:176
    \n-
    GridFunction(F &&f)
    Construct from function.
    Definition gridfunction.hh:125
    \n-
    friend LocalFunctionInterface localFunction(const GridFunction &t)
    Get local function of wrapped function.
    Definition gridfunction.hh:165
    \n-
    Derivative traits for local functions.
    Definition localderivativetraits.hh:28
    \n+
    void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)
    Definition nodes.hh:253
    \n+
    void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)
    Definition nodes.hh:260
    \n+
    A statically sized MultiIndex type.
    Definition multiindex.hh:25
    \n+
    A dynamically sized array-like class with overflow.
    Definition overflowarray.hh:45
    \n+
    The restriction of a finite element basis to a single element.
    Definition defaultlocalview.hh:28
    \n+
    typename GlobalBasis::PreBasis PreBasis
    Definition defaultlocalview.hh:48
    \n+
    void unbind()
    Unbind from the current element.
    Definition defaultlocalview.hh:116
    \n+
    bool bound() const
    Return if the view is bound to a grid element.
    Definition defaultlocalview.hh:98
    \n+
    typename GlobalBasis::GridView GridView
    The grid view the global FE basis lives on.
    Definition defaultlocalview.hh:35
    \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:149
    \n+
    std::optional< Element > element_
    Definition defaultlocalview.hh:168
    \n+
    typename GridView::template Codim< 0 >::Entity Element
    Type of the grid element we are bound to.
    Definition defaultlocalview.hh:38
    \n+
    const Tree & tree() const
    Return the local ansatz tree associated to the bound entity.
    Definition defaultlocalview.hh:125
    \n+
    void bind(const Element &e)
    Bind the view to a grid element.
    Definition defaultlocalview.hh:81
    \n+
    const Element & element() const
    Return the grid element that the view is bound to.
    Definition defaultlocalview.hh:107
    \n+
    size_type size() const
    Total number of degrees of freedom on this element.
    Definition defaultlocalview.hh:132
    \n+
    GB GlobalBasis
    The global FE basis that this is a view on.
    Definition defaultlocalview.hh:32
    \n+
    Tree tree_
    Definition defaultlocalview.hh:169
    \n+
    size_type maxSize() const
    Maximum local size for any element on the GridView.
    Definition defaultlocalview.hh:143
    \n+
    std::size_t size_type
    The type used for sizes.
    Definition defaultlocalview.hh:41
    \n+
    bool isBound() const
    Return if the view is bound to a grid element.
    Definition defaultlocalview.hh:92
    \n+
    const DefaultLocalView & rootLocalView() const
    Definition defaultlocalview.hh:161
    \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:56
    \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:64
    \n+
    std::vector< MultiIndexStorage > indices_
    Definition defaultlocalview.hh:170
    \n+
    typename GlobalBasis::PreBasis::Node Tree
    Tree of local finite elements / local shape function sets.
    Definition defaultlocalview.hh:44
    \n+
    DefaultLocalView(const GlobalBasis &globalBasis)
    Construct local view for a given global finite element basis.
    Definition defaultlocalview.hh:68
    \n+
    const GlobalBasis * globalBasis_
    Definition defaultlocalview.hh:167
    \n+
    const GlobalBasis & globalBasis() const
    Return the global basis that we are a view on.
    Definition defaultlocalview.hh:156
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,197 +1,270 @@\n dune-functions\u00a02.9.0\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+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n-4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n 5\n-6#include \n-7\n-8#include \n+6\n+7#include \n+8#include \n 9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\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#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-13#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-14#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-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/_\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-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/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\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/_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\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/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+16#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n 17\n 18\n 19\n 20namespace _\bD_\bu_\bn_\be {\n 21namespace Functions {\n 22\n 23\n 24\n-25/*\n-26 * Default implementation is empty\n-27 * The actual implementation is only given if Signature is an type\n-28 * describing a function signature as Range(Domain).\n-29 */\n-30template class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-_\b3_\b1class _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-32{};\n+26template\n+_\b2_\b7class _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+28{\n+29public:\n+30\n+_\b3_\b2 using _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs = GB;\n 33\n-34\n-35\n-36namespace Imp\n-37{\n-38\n-40 template class DerivativeTraits, size_t\n-bufferSize>\n-41 struct GridFunctionTraits :\n-42 DifferentiableFunctionTraits\n-43 {\n-44 protected:\n-45 using Base=DifferentiableFunctionTraits;\n-46\n-47 public:\n-49 using EntitySet = ES;\n-50\n-52 using Element = typename EntitySet::Element;\n-53\n-55 using DerivativeSignature = typename Base::DerivativeSignature;\n-56\n-58 using DerivativeInterface = _\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+_\b3_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename GlobalBasis::GridView;\n+36\n+_\b3_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GridView::template Codim<0>::Entity;\n+39\n+_\b4_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+42\n+_\b4_\b4 using _\bT_\br_\be_\be = typename GlobalBasis::PreBasis::Node;\n+45\n+46protected:\n+47\n+_\b4_\b8 using _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = typename GlobalBasis::PreBasis;\n+49\n+50 // Type used to store the multi indices of the basis vectors.\n+51 // In contrast to MultiIndex this always has dynamic size.\n+52 // It's guaranteed, that you can always cast it to MultiIndex\n+_\b5_\b3 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bt_\bo_\br_\ba_\bg_\be =\n+54 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n+maxMultiIndexSize),\n+55 _\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+56 Dune::ReservedVector>;\n+57\n+58public:\n 59\n-61 using LocalSignature = typename Base::Range(typename EntitySet::\n-LocalCoordinate);\n-62\n-64 template\n-65 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+_\b6_\b1 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx =\n+62 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n+maxMultiIndexSize),\n+63 _\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+64 Dune::ReservedVector>;\n+65\n 66\n-68 using LocalFunctionTraits = typename Dune::Functions::Imp::\n-LocalFunctionTraits;\n-69\n-71 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-72\n-74 using Concept = GridFunctionWrapperInterface;\n+_\b6_\b8 _\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+69 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(&_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs),\n+70 _\bt_\br_\be_\be_\b_(_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().makeNode())\n+71 {\n+72 static_assert(models, _\bT_\br_\be_\be>(), \"Tree type\n+passed to DefaultLocalView does not model the BasisNode concept.\");\n+73 _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be(_\bt_\br_\be_\be_\b_);\n+74 }\n 75\n-77 template\n-78 using Model = GridFunctionWrapperImplementation;\n-79 };\n-80}\n-81\n-82\n-83\n-95template class\n-DerivativeTraits, size_t bufferSize>\n-_\b9_\b6class _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-97 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n-98 typename Imp::GridFunctionTraits::Concept,\n-99 Imp::GridFunctionTraits::\n-template Model>\n-100{\n-101 using Traits = Imp::GridFunctionTraits;\n+_\b8_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+82 {\n+83 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = e;\n+84 _\bb_\bi_\bn_\bd_\bT_\br_\be_\be(_\bt_\br_\be_\be_\b_, *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n+85 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.resize(_\bs_\bi_\bz_\be());\n+86 _\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+87 }\n+88\n+91 [[deprecated(\"Use the bound() method instead\")]]\n+_\b9_\b2 bool _\bi_\bs_\bB_\bo_\bu_\bn_\bd() const {\n+93 return static_cast(_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n+94 }\n+95\n+_\b9_\b8 bool _\bb_\bo_\bu_\bn_\bd() const\n+99 {\n+100 return static_cast(_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n+101 }\n 102\n-103 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-104\n-105 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-106\n-107 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-108\n-109 using EntitySet = typename Traits::EntitySet;\n-110\n-111public:\n-112\n-124 template = 0 >\n-_\b1_\b2_\b5 _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n-126 _\bB_\ba_\bs_\be(std::forward(f))\n-127 {\n-128 static_assert(Dune::Functions::Concept::isGridFunction(), \"Trying to construct a GridFunction from type that does not model\n-the GridFunction concept\");\n-129 }\n-130\n-_\b1_\b3_\b1 _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n-132\n-_\b1_\b3_\b8 Range operator() (const Domain& x) const\n-139 {\n-140 return this->asInterface().operator()(x);\n-141 }\n-142\n-_\b1_\b5_\b1 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-152 {\n-153 return t.asInterface().derivative();\n-154 }\n-155\n-_\b1_\b6_\b5 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-166 {\n-167 return t.asInterface().wrappedLocalFunction();\n-168 }\n-169\n-_\b1_\b7_\b6 const EntitySet& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-177 {\n-178 return this->asInterface().wrappedEntitySet();\n-179 }\n-180};\n-181\n-182\n-183\n-184}} // namespace Dune::Functions\n-185\n-186\n-187\n-188#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n-_\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_\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-_\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-_\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-_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\b1_\b0_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+108 {\n+109 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+110 }\n+111\n+_\b1_\b1_\b6 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+117 {\n+118 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_.reset();\n+119 }\n+120\n+_\b1_\b2_\b5 const _\bT_\br_\be_\be& _\bt_\br_\be_\be() const\n+126 {\n+127 return _\bt_\br_\be_\be_\b_;\n+128 }\n+129\n+_\b1_\b3_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+133 {\n+134 return _\bt_\br_\be_\be_\b_.size();\n+135 }\n+136\n+_\b1_\b4_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bS_\bi_\bz_\be() const\n+144 {\n+145 return _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().maxNodeSize();\n+146 }\n+147\n+_\b1_\b4_\b9 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+150 {\n+151 return _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_[i];\n+152 }\n+153\n+_\b1_\b5_\b6 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+157 {\n+158 return *_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n+159 }\n+160\n+_\b1_\b6_\b1 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+162 {\n+163 return *this;\n+164 }\n+165\n+166protected:\n+_\b1_\b6_\b7 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_\b8 std::optional _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b1_\b6_\b9 _\bT_\br_\be_\be _\bt_\br_\be_\be_\b_;\n+_\b1_\b7_\b0 std::vector _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n+171};\n+172\n+173\n+174\n+175} // end namespace Functions\n+176} // end namespace Dune\n+177\n+178\n+179\n+180#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\by_\b._\bh_\bh\n+_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:30\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:165\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:32\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:151\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:176\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:125\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:165\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:28\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:253\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:260\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:25\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: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\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:28\n+_\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: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:_\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:116\n+_\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:98\n+_\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:35\n+_\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:149\n+_\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:168\n+_\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:38\n+_\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:125\n+_\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:81\n+_\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:107\n+_\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:132\n+_\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: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:_\bt_\br_\be_\be_\b_\n+Tree tree_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:169\n+_\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:143\n+_\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: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_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bi_\bs_\bB_\bo_\bu_\bn_\bd\n+bool isBound() 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:92\n+_\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:161\n+_\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:56\n+_\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: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_\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:170\n+_\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:44\n+_\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: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:_\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: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:_\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:156\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/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: analyticgridviewfunction.hh File Reference\n+dune-functions: hierarchicnodetorangemap.hh File Reference\n \n \n \n \n \n \n \n@@ -65,56 +65,44 @@\n \n \n \n \n \n \n \n
    \n \n-
    analyticgridviewfunction.hh File Reference
    \n+Namespaces
    \n+
    hierarchicnodetorangemap.hh File Reference
    \n \n
    \n-
    #include <type_traits>
    \n-#include <optional>
    \n-#include <dune/common/typeutilities.hh>
    \n-#include <dune/functions/common/signature.hh>
    \n-#include <dune/functions/common/defaultderivativetraits.hh>
    \n-#include <dune/functions/common/differentiablefunction_imp.hh>
    \n-#include <dune/functions/common/differentiablefunction.hh>
    \n-#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n-#include <dune/functions/gridfunctions/localderivativetraits.hh>
    \n+
    #include <utility>
    \n+#include <type_traits>
    \n+#include <dune/common/concept.hh>
    \n+#include <dune/functions/functionspacebases/concepts.hh>
    \n+#include <dune/functions/common/indexaccess.hh>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
    \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...
    struct  Dune::Functions::HierarchicNodeToRangeMap
     A simple node to range map using the nested tree indices. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

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

    \n-Functions

    template<class F , class GridView >
    AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > 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,26 @@\n dune-functions\u00a02.9.0\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+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+hierarchicnodetorangemap.hh File Reference\n+#include \n #include \n-#include \n-#include \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+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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+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-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\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< typename\n- std::invoke_result< F, typename\n- GridView::template Codim< 0 >::\n- Geometry::GlobalCoordinate >::type\n-(typename GridView::template Codim< 0\n- >::Geometry::GlobalCoordinate), _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n- GridView, typename std::decay< F >:: _\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,\n- type >\u00a0 const GridView &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\n- 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/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: analyticgridviewfunction.hh Source File\n+dune-functions: hierarchicnodetorangemap.hh Source File\n \n \n \n \n \n \n \n@@ -70,253 +70,77 @@\n
    \n \n \n \n \n \n \n
    \n-
    analyticgridviewfunction.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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n-
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n
    5
    \n-
    6#include <type_traits>
    \n-
    7#include <optional>
    \n-
    8
    \n-
    9#include <dune/common/typeutilities.hh>
    \n-
    10
    \n-\n-\n-\n-\n-\n-\n+
    6
    \n+
    7#include <utility>
    \n+
    8#include <type_traits>
    \n+
    9
    \n+
    10#include <dune/common/concept.hh>
    \n+
    11
    \n+\n+\n+
    14
    \n+
    15namespace Dune {
    \n+
    16namespace Functions {
    \n
    17
    \n
    18
    \n-
    19namespace Dune {
    \n-
    20namespace Functions {
    \n-
    21
    \n-
    22namespace Imp {
    \n-
    23
    \n-
    24template<class Signature, class GV, class FLocal, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-
    25class LocalAnalyticGridViewFunction;
    \n-
    26
    \n-
    27template<class Range, class LocalDomain, class GV, class F, template<class> class DerivativeTraits>
    \n-
    28class LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F, DerivativeTraits>
    \n-
    29{
    \n-
    30public:
    \n-
    31 using Signature = Range(LocalDomain);
    \n-
    32 using RawSignature = typename SignatureTraits<Signature>::RawSignature;
    \n-
    33 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(LocalDomain);
    \n-
    34
    \n-
    35 using GridView = GV;
    \n-
    36 using EntitySet = GridViewEntitySet<GridView, 0>;
    \n-
    37 using Element = typename EntitySet::Element;
    \n-
    38// using Geometry = typename Element::Geometry;
    \n-
    39 using Geometry = typename std::decay<typename Element::Geometry>::type;
    \n-
    40
    \n-
    41 // Use the indirection via derivativeIfImplemented to also support
    \n-
    42 // function types F that do not implement derivative. In this case
    \n-
    43 // the interface type DifferentiableFunction is using a dummy for
    \n-
    44 // the derivative type
    \n-
    45 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;
    \n-
    46 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
    \n-
    47 using LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits>;
    \n-
    48
    \n-
    50 template<class FT, disableCopyMove<LocalAnalyticGridViewFunction, FT> = 0>
    \n-
    51 LocalAnalyticGridViewFunction(FT&& f) :
    \n-
    52 f_(std::forward<FT>(f))
    \n-
    53 {}
    \n-
    54
    \n-
    56 template<class FT>
    \n-
    57 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::optional<Geometry>& geometry) :
    \n-
    58 f_(std::forward<FT>(f)),
    \n-
    59 element_(element),
    \n-
    60 geometry_(geometry)
    \n-
    61 {}
    \n-
    62
    \n-
    63
    \n-
    72 void bind(const Element& element)
    \n-
    73 {
    \n-
    74 element_ = element;
    \n-
    75 geometry_.emplace(element_.geometry());
    \n-
    76 }
    \n-
    77
    \n-
    79 void unbind()
    \n-
    80 {
    \n-
    81 geometry_.reset();
    \n-
    82 }
    \n-
    83
    \n-
    86 bool bound() const
    \n-
    87 {
    \n-
    88 return static_cast<bool>(geometry_);
    \n-
    89 }
    \n-
    90
    \n-
    100 Range operator()(const LocalDomain& x) const
    \n-
    101 {
    \n-
    102 assert(!!geometry_);
    \n-
    103 return f_(geometry_->global(x));
    \n-
    104 }
    \n-
    105
    \n-
    107 const Element& localContext() const
    \n-
    108 {
    \n-
    109 assert(!!geometry_);
    \n-
    110 return element_;
    \n-
    111 }
    \n-
    112
    \n-
    121 friend LocalDerivative derivative(const LocalAnalyticGridViewFunction& t)
    \n-
    122 {
    \n-
    123 return LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.element_, t.geometry_);
    \n-
    124 }
    \n-
    125
    \n-
    126private:
    \n-
    127 F f_;
    \n-
    128 Element element_;
    \n-
    129 std::optional<Geometry> geometry_ = std::nullopt;
    \n-
    130};
    \n-
    131
    \n-
    132} // end namespace Imp
    \n-
    133
    \n-
    134
    \n-
    135
    \n-
    136
    \n-
    137template<class Signature, class GV, class F, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-\n-
    139
    \n-
    140
    \n-
    146template<class Range, class Domain, class GV, class F, template<class> class DerivativeTraits>
    \n-
    \n-
    147class AnalyticGridViewFunction<Range(Domain), GV, F, DerivativeTraits>
    \n-
    148{
    \n-
    149public:
    \n-
    150 using Signature = Range(Domain);
    \n-\n-
    152 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n-
    153
    \n-
    154 using GridView = GV;
    \n-\n-
    156 using Element = typename EntitySet::Element;
    \n-
    157 using Geometry = typename Element::Geometry;
    \n-
    158
    \n-
    159 // Use the indirection via derivativeIfImplemented to also support
    \n-
    160 // function types F that do not implement derivative. In this case
    \n-
    161 // the interface type DifferentiableFunction is used a dummy for
    \n-
    162 // the derivative type
    \n-\n-
    164 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
    \n-\n-
    166
    \n-\n-
    168 using LocalFunction = typename Imp::LocalAnalyticGridViewFunction<Range(LocalDomain), GridView, F, LocalDerivativeTraits<EntitySet, DerivativeTraits>::template Traits>;
    \n-
    169
    \n-
    171 template<class FT>
    \n-
    \n-
    172 AnalyticGridViewFunction(FT&& f, const GridView& gridView) :
    \n-
    173 f_(std::forward<FT>(f)),
    \n-
    174 entitySet_(gridView)
    \n-
    175 {}
    \n-
    \n-
    176
    \n-
    \n-
    178 Range operator()(const Domain& x) const
    \n-
    179 {
    \n-
    180 return f_(x);
    \n-
    181 }
    \n-
    \n-
    182
    \n-
    \n-\n-
    185 {
    \n-
    186 return Derivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.entitySet_.gridView());
    \n-
    187 }
    \n-
    \n-
    188
    \n-
    \n-\n-
    191 {
    \n-
    192 return LocalFunction(t.f_);
    \n-
    193 }
    \n-
    \n-
    194
    \n-
    \n-
    196 const EntitySet& entitySet() const
    \n-
    197 {
    \n-
    198 return entitySet_;
    \n-
    199 }
    \n-
    \n-
    200
    \n-
    201private:
    \n-
    202 F f_;
    \n-
    203 EntitySet entitySet_;
    \n-
    204};
    \n-
    \n-
    205
    \n-
    206
    \n-
    207
    \n-
    224template<class F, class GridView>
    \n-
    225AnalyticGridViewFunction<
    \n-
    226 typename std::invoke_result<F, typename GridView::template Codim<0>::Geometry::GlobalCoordinate>::type // Range
    \n-
    227 (typename GridView::template Codim<0>::Geometry::GlobalCoordinate), // Domain
    \n-
    228 GridView,
    \n-
    229 typename std::decay<F>::type > // Raw type of F (without & or &&)
    \n-
    \n-
    230 makeAnalyticGridViewFunction(F&& f, const GridView& gridView)
    \n-
    231{
    \n-
    232 using Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate;
    \n-
    233 using Range = typename std::invoke_result<F, Domain>::type;
    \n-
    234 using FRaw = typename std::decay<F>::type;
    \n-
    235
    \n-
    236 return AnalyticGridViewFunction<Range(Domain), GridView, FRaw>(std::forward<F>(f), gridView);
    \n-
    237}
    \n-
    \n-
    238
    \n-
    239
    \n-
    240
    \n-
    241}} // namespace Dune::Functions
    \n-
    242
    \n-
    243
    \n-
    244
    \n-
    245#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n-\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:39
    \n-
    AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
    Create an AnalyticGridViewFunction from a function and a grid view.
    Definition analyticgridviewfunction.hh:230
    \n+
    19
    \n+
    \n+\n+
    30{
    \n+
    31 template<class Node, class TreePath, class Range,
    \n+
    32 std::enable_if_t< models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), int> = 0>
    \n+
    \n+
    33 decltype(auto) operator()(const Node&, const TreePath& treePath, Range&& y) const
    \n+
    34 {
    \n+
    35 return resolveStaticMultiIndex(y, treePath);
    \n+
    36 }
    \n+
    \n+
    37
    \n+
    38 template<class Node, class TreePath, class Range,
    \n+
    39 std::enable_if_t<not models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), int> = 0>
    \n+
    \n+
    40 decltype(auto) operator()(const Node&, const TreePath&, Range&& y) const
    \n+
    41 {
    \n+
    42 return std::forward<Range>(y);
    \n+
    43 }
    \n+
    \n+
    44};
    \n+
    \n+
    45
    \n+
    46
    \n+
    47
    \n+
    48} // namespace Dune::Functions
    \n+
    49} // namespace Dune
    \n+
    50
    \n+
    51
    \n+
    52#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n+\n+
    constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:398
    \n
    Definition polynomial.hh:10
    \n-
    Definition differentiablefunction.hh:29
    \n-
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n-
    Definition analyticgridviewfunction.hh:138
    \n-
    Range operator()(const Domain &x) const
    Evaluate the wrapped function f directly in global coordinates x.
    Definition analyticgridviewfunction.hh:178
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition analyticgridviewfunction.hh:167
    \n-
    friend Derivative derivative(const AnalyticGridViewFunction &t)
    Create a derivative grid-function by wrapping the derivative of f.
    Definition analyticgridviewfunction.hh:184
    \n-
    typename Element::Geometry Geometry
    Definition analyticgridviewfunction.hh:157
    \n-
    typename EntitySet::Element Element
    Definition analyticgridviewfunction.hh:156
    \n-\n-
    decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >())) GlobalRawDerivative
    Definition analyticgridviewfunction.hh:164
    \n-
    Range(Domain) Signature
    Definition analyticgridviewfunction.hh:150
    \n-
    AnalyticGridViewFunction(FT &&f, const GridView &gridView)
    Create the grid-function by wrapping a function f and create a GridViewEntitySet.
    Definition analyticgridviewfunction.hh:172
    \n-
    friend LocalFunction localFunction(const AnalyticGridViewFunction &t)
    Construct the associated local-function.
    Definition analyticgridviewfunction.hh:190
    \n-
    typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F, LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits > LocalFunction
    Definition analyticgridviewfunction.hh:168
    \n-
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition analyticgridviewfunction.hh:151
    \n-
    const EntitySet & entitySet() const
    Return the set of entities this local-function can be bound to.
    Definition analyticgridviewfunction.hh:196
    \n-
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Definition analyticgridviewfunction.hh:152
    \n-\n-
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:32
    \n-
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:35
    \n-
    Derivative traits for local functions.
    Definition localderivativetraits.hh:28
    \n+
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:30
    \n+
    decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y) const
    Definition hierarchicnodetorangemap.hh:33
    \n+
    decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const
    Definition hierarchicnodetorangemap.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,324 +1,76 @@\n dune-functions\u00a02.9.0\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+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n-4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n 5\n-6#include \n-7#include \n-8\n-9#include \n-10\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n-12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\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-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_\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-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_\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-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/_\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+6\n+7#include \n+8#include \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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\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/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+14\n+15namespace _\bD_\bu_\bn_\be {\n+16namespace Functions {\n 17\n 18\n-19namespace _\bD_\bu_\bn_\be {\n-20namespace Functions {\n-21\n-22namespace Imp {\n-23\n-24template class\n-DerivativeTraits=DefaultDerivativeTraits>\n-25class LocalAnalyticGridViewFunction;\n-26\n-27template\n-class DerivativeTraits>\n-28class LocalAnalyticGridViewFunction\n-29{\n-30public:\n-31 using Signature = Range(LocalDomain);\n-32 using RawSignature = typename SignatureTraits::RawSignature;\n-33 using DerivativeSignature = typename DerivativeTraits::Range\n-(LocalDomain);\n-34\n-35 using GridView = GV;\n-36 using EntitySet = GridViewEntitySet;\n-37 using Element = typename EntitySet::Element;\n-38// using Geometry = typename Element::Geometry;\n-39 using Geometry = typename std::decay::type;\n-40\n-41 // Use the indirection via derivativeIfImplemented to also support\n-42 // function types F that do not implement derivative. In this case\n-43 // the interface type DifferentiableFunction is using a dummy for\n-44 // the derivative type\n-45 using DerivativeDummy = DifferentiableFunction;\n-46 using GlobalRawDerivative = decltype(Imp::\n-derivativeIfImplemented(std::declval()));\n-47 using LocalDerivative = LocalAnalyticGridViewFunction;\n-48\n-50 template = 0>\n-51 LocalAnalyticGridViewFunction(FT&& f) :\n-52 f_(std::forward(f))\n-53 {}\n-54\n-56 template\n-57 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::\n-optional& geometry) :\n-58 f_(std::forward(f)),\n-59 element_(element),\n-60 geometry_(geometry)\n-61 {}\n-62\n-63\n-72 void bind(const Element& element)\n-73 {\n-74 element_ = element;\n-75 geometry_.emplace(element_.geometry());\n-76 }\n-77\n-79 void unbind()\n-80 {\n-81 geometry_.reset();\n-82 }\n-83\n-86 bool bound() const\n-87 {\n-88 return static_cast(geometry_);\n-89 }\n-90\n-100 Range operator()(const LocalDomain& x) const\n-101 {\n-102 assert(!!geometry_);\n-103 return f_(geometry_->global(x));\n-104 }\n-105\n-107 const Element& localContext() const\n-108 {\n-109 assert(!!geometry_);\n-110 return element_;\n-111 }\n-112\n-121 friend LocalDerivative _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const LocalAnalyticGridViewFunction& t)\n-122 {\n-123 return LocalDerivative(Imp::derivativeIfImplemented\n-(t.f_), t.element_, t.geometry_);\n-124 }\n-125\n-126private:\n-127 F f_;\n-128 Element element_;\n-129 std::optional geometry_ = std::nullopt;\n-130};\n-131\n-132} // end namespace Imp\n-133\n-134\n-135\n-136\n-137template class\n-DerivativeTraits=DefaultDerivativeTraits>\n-_\b1_\b3_\b8class _\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-139\n-140\n-146template class\n-DerivativeTraits>\n-_\b1_\b4_\b7class _\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-148{\n-149public:\n-_\b1_\b5_\b0 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n-_\b1_\b5_\b1 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_\b2 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-153\n-_\b1_\b5_\b4 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b1_\b5_\b5 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_\b5_\b6 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_\b5_\b7 using _\bG_\be_\bo_\bm_\be_\bt_\br_\by = typename Element::Geometry;\n-158\n-159 // Use the indirection via derivativeIfImplemented to also support\n-160 // function types F that do not implement derivative. In this case\n-161 // the interface type DifferentiableFunction is used a dummy for\n-162 // the derivative type\n-_\b1_\b6_\b3 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_\b6_\b4 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_\b6_\b5 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-166\n-_\b1_\b6_\b7 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_\b6_\b8 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-169\n-171 template\n-_\b1_\b7_\b2 _\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-173 f_(std::forward(f)),\n-174 entitySet_(gridView)\n-175 {}\n-176\n-_\b1_\b7_\b8 Range _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Domain& x) const\n-179 {\n-180 return f_(x);\n-181 }\n-182\n-_\b1_\b8_\b4 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-185 {\n-186 return _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(Imp::derivativeIfImplemented(t.f_),\n-t.entitySet_.gridView());\n-187 }\n-188\n-_\b1_\b9_\b0 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-191 {\n-192 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(t.f_);\n-193 }\n-194\n-_\b1_\b9_\b6 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-197 {\n-198 return entitySet_;\n-199 }\n-200\n-201private:\n-202 F f_;\n-203 EntitySet entitySet_;\n-204};\n-205\n-206\n-207\n-224template\n-225AnalyticGridViewFunction<\n-226 typename std::invoke_result::\n-Geometry::GlobalCoordinate>::type // Range\n-227 (typename GridView::template Codim<0>::Geometry::GlobalCoordinate), /\n-/ Domain\n-228 GridView,\n-229 typename std::decay::type > // Raw type of F (without & or &&)\n-_\b2_\b3_\b0 _\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-231{\n-232 using Domain = typename GridView::template Codim<0>::Geometry::\n-GlobalCoordinate;\n-233 using Range = typename std::invoke_result::type;\n-234 using FRaw = typename std::decay::type;\n-235\n-236 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-237}\n-238\n-239\n-240\n-241}} // namespace Dune::Functions\n-242\n-243\n-244\n-245#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n-_\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_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n-_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n-_\bd_\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\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:39\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-AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::\n-template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::\n-template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::\n-decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView\n-&gridView)\n-Create an AnalyticGridViewFunction from a function and a grid view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:230\n+19\n+_\b2_\b9struct _\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+30{\n+31 template>(), int> = 0>\n+_\b3_\b3 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Node&, const TreePath& treePath, Range&& y)\n+const\n+34 {\n+35 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+36 }\n+37\n+38 template>(), int> = 0>\n+_\b4_\b0 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Node&, const TreePath&, Range&& y) const\n+41 {\n+42 return std::forward(y);\n+43 }\n+44};\n+45\n+46\n+47\n+48} // namespace Dune::Functions\n+49} // namespace Dune\n+50\n+51\n+52#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+_\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:398\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:29\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:56\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:138\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: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_\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:167\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: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:_\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: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_\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: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:_\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:154\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:164\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:150\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:172\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: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:_\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:168\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:151\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: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:_\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:152\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: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:_\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:35\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:28\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:30\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:33\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: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/a00023.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00023.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: facenormalgridfunction.hh File Reference\n+dune-functions: subentitydofs.hh File Reference\n \n \n \n \n \n \n \n@@ -65,47 +65,58 @@\n \n \n \n \n \n \n \n
    \n \n-
    facenormalgridfunction.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    subentitydofs.hh File Reference
    \n \n
    \n-
    #include <type_traits>
    \n-#include <optional>
    \n-#include <dune/common/exceptions.hh>
    \n-#include <dune/common/typeutilities.hh>
    \n-#include <dune/common/rangeutilities.hh>
    \n+
    #include <vector>
    \n #include <dune/geometry/referenceelements.hh>
    \n-#include <dune/functions/gridfunctions/gridfunction.hh>
    \n-#include <dune/functions/gridfunctions/gridviewentityset.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 Classes

    class  Dune::Functions::FaceNormalGridFunction< GV >
     Grid function implementing the piecewise element face normal. More...
    class  Dune::Functions::SubEntityDOFs< GridView >
     Range of DOFs associated to sub-entity. 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+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.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,39 @@\n dune-functions\u00a02.9.0\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-#include \n-#include \n-#include \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 | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+subentitydofs.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 \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:_\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+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+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: facenormalgridfunction.hh Source File\n+dune-functions: subentitydofs.hh Source File\n \n \n \n \n \n \n \n@@ -70,209 +70,174 @@\n
    \n \n \n \n \n \n \n
    \n-
    facenormalgridfunction.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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n-
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n
    5
    \n-
    6#include <type_traits>
    \n-
    7#include <optional>
    \n-
    8
    \n-
    9#include <dune/common/exceptions.hh>
    \n-
    10#include <dune/common/typeutilities.hh>
    \n-
    11#include <dune/common/rangeutilities.hh>
    \n-
    12#include <dune/geometry/referenceelements.hh>
    \n-
    13
    \n-\n-\n+
    6#include <vector>
    \n+
    7
    \n+
    8#include <dune/geometry/referenceelements.hh>
    \n+
    9#include <dune/typetree/traversal.hh>
    \n+
    10
    \n+
    11
    \n+
    12
    \n+
    13namespace Dune {
    \n+
    14namespace Functions {
    \n+
    15
    \n
    16
    \n
    17
    \n-
    18namespace Dune::Functions {
    \n-
    19
    \n-
    20namespace Impl {
    \n-
    21
    \n-
    22// Compute closest face to point
    \n-
    23template<class ReferenceElement, class Coordinate>
    \n-
    24auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)
    \n-
    25{
    \n-
    26 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};
    \n-
    27 double closestFaceDistance = std::numeric_limits<double>::max();
    \n-
    28 for(auto&& faceIndex : Dune::range(re.size(1)))
    \n-
    29 {
    \n-
    30 // For a face unit outer normal consider the orthogonal projection
    \n-
    31 // Px = x + <c-x,n>*n into the face. Then the distance to the face
    \n-
    32 // is given by |x-Px| = |<c-x,n>||n| = <c-x,n>.
    \n-
    33 auto normal = re.integrationOuterNormal(faceIndex);
    \n-
    34 normal /= normal.two_norm();
    \n-
    35 auto c = re.position(faceIndex,1);
    \n-
    36 c -= x;
    \n-
    37 auto faceDistance = (c*normal);
    \n-
    38 if (faceDistance<closestFaceDistance)
    \n-
    39 {
    \n-
    40 closestFaceDistance = faceDistance;
    \n-
    41 closestFaceIndex = faceIndex;
    \n-
    42 }
    \n-
    43 }
    \n-
    44 return closestFaceIndex;
    \n-
    45}
    \n+
    40template<class GridView>
    \n+
    \n+\n+
    42{
    \n+
    43 static const int dim = GridView::dimension;
    \n+
    44
    \n+
    45public:
    \n
    46
    \n-
    47} // end namespace Impl
    \n-
    48
    \n-
    49
    \n-
    50
    \n-
    51
    \n-
    64template<class GV>
    \n-
    \n-\n-
    66{
    \n-
    67public:
    \n-
    68 using GridView = GV;
    \n-\n-
    70 using Element = typename EntitySet::Element;
    \n+
    63 template<class LocalView>
    \n+
    \n+
    64 SubEntityDOFs& bind(const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    \n+
    65 {
    \n+
    66 // fill vector with local indices of all DOFs contained in subentity
    \n+
    67 containedDOFs_.clear();
    \n+
    68 dofIsContained_.assign(localView.size(), false);
    \n+
    69
    \n+
    70 auto re = Dune::referenceElement<double,dim>(localView.element().type());
    \n
    71
    \n-\n-\n-\n-
    75
    \n-
    76private:
    \n-
    77
    \n-
    78 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet, DefaultDerivativeTraits, 16>;
    \n-
    79
    \n-
    80 class LocalFunction
    \n-
    81 {
    \n-
    82 using Geometry = typename Element::Geometry;
    \n-
    83 static const int dimension = GV::dimension;
    \n-
    84 public:
    \n-
    85
    \n-
    97 void bind(const Element& element)
    \n-
    98 {
    \n-
    99 element_ = element;
    \n-
    100 geometry_.emplace(element_.geometry());
    \n-
    101 }
    \n-
    102
    \n-
    103 void unbind()
    \n-
    104 {
    \n-
    105 geometry_.reset();
    \n-
    106 }
    \n-
    107
    \n-
    110 bool bound() const
    \n-
    111 {
    \n-
    112 return static_cast<bool>(geometry_);
    \n-
    113 }
    \n+
    72 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /*treePath*/) {
    \n+
    73 const auto& localCoefficients = node.finiteElement().localCoefficients();
    \n+
    74 std::size_t localSize = localCoefficients.size();
    \n+
    75 for(std::size_t i=0; i<localSize; ++i)
    \n+
    76 {
    \n+
    77 auto localKey = localCoefficients.localKey(i);
    \n+
    78 if (re.subEntities(subEntityIndex, subEntityCodim, localKey.codim()).contains(localKey.subEntity()))
    \n+
    79 {
    \n+
    80 containedDOFs_.push_back(node.localIndex(i));
    \n+
    81 dofIsContained_[node.localIndex(i)] = true;
    \n+
    82 }
    \n+
    83 }
    \n+
    84 });
    \n+
    85 return *this;
    \n+
    86 }
    \n+
    \n+
    87
    \n+
    103 template<class LocalView, class Intersection>
    \n+
    \n+
    104 SubEntityDOFs& bind(const LocalView& localView, const Intersection& intersection)
    \n+
    105 {
    \n+
    106 return bind(localView, intersection.indexInInside(), 1);
    \n+
    107 }
    \n+
    \n+
    108
    \n+
    \n+
    110 auto begin() const
    \n+
    111 {
    \n+
    112 return containedDOFs_.cbegin();
    \n+
    113 }
    \n+
    \n
    114
    \n-
    124 Range operator()(const LocalDomain& x) const
    \n-
    125 {
    \n-
    126 auto&& re = Dune::referenceElement(*geometry_);
    \n-
    127 // Compute reference normal of closest face to given point
    \n-
    128 auto face = Impl::closestFaceIndex(re, x);
    \n-
    129 auto localNormal = re.integrationOuterNormal(face);
    \n-
    130
    \n-
    131 // Transform reference normal into global unit outer normal using
    \n-
    132 // covariant Piola transformation
    \n-
    133 auto normal = Range{};
    \n-
    134 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);
    \n-
    135 normal /= normal.two_norm();
    \n-
    136 return normal;
    \n-
    137 }
    \n+
    \n+
    116 auto end() const
    \n+
    117 {
    \n+
    118 return containedDOFs_.cend();
    \n+
    119 }
    \n+
    \n+
    120
    \n+
    \n+
    122 auto size() const
    \n+
    123 {
    \n+
    124 return containedDOFs_.size();
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    \n+
    128 decltype(auto) operator[](std::size_t i) const
    \n+
    129 {
    \n+
    130 return containedDOFs_[i];
    \n+
    131 }
    \n+
    \n+
    132
    \n+
    \n+
    134 bool contains(std::size_t localIndex) const
    \n+
    135 {
    \n+
    136 return dofIsContained_[localIndex];
    \n+
    137 }
    \n+
    \n
    138
    \n-
    140 const Element& localContext() const
    \n-
    141 {
    \n-
    142 return element_;
    \n-
    143 }
    \n+
    139private:
    \n+
    140
    \n+
    141 std::vector<std::size_t> containedDOFs_;
    \n+
    142 std::vector<bool> dofIsContained_;
    \n+
    143};
    \n+
    \n
    144
    \n-
    146 friend typename Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction& t)
    \n-
    147 {
    \n-
    148 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    149 }
    \n-
    150
    \n-
    151 private:
    \n-
    152 std::optional<Geometry> geometry_;
    \n-
    153 Element element_;
    \n-
    154 };
    \n-
    155
    \n-
    156public:
    \n-
    \n-\n-
    159 entitySet_(gridView)
    \n-
    160 {}
    \n-
    \n-
    161
    \n-
    \n-
    163 Range operator()(const Domain& x) const
    \n-
    164 {
    \n-
    165 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    166 }
    \n-
    \n-
    167
    \n-
    \n-\n-
    170 {
    \n-
    171 DUNE_THROW(NotImplemented,"not implemented");
    \n-
    172 }
    \n-
    \n-
    173
    \n-
    \n-
    175 friend LocalFunction localFunction(const FaceNormalGridFunction& t)
    \n-
    176 {
    \n-
    177 return LocalFunction{};
    \n-
    178 }
    \n-
    \n-
    179
    \n-
    \n-
    181 const EntitySet& entitySet() const
    \n-
    182 {
    \n-
    183 return entitySet_;
    \n-
    184 }
    \n-
    \n-
    185
    \n-
    186private:
    \n-
    187 EntitySet entitySet_;
    \n-
    188};
    \n-
    \n-
    189
    \n-
    190
    \n-
    191
    \n-
    192} // namespace Dune::Functions
    \n-
    193
    \n-
    194#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:39
    \n+
    145
    \n+
    146
    \n+
    159template<class T>
    \n+
    \n+
    160auto subEntityDOFs(const T&)
    \n+
    161{
    \n+\n+
    163}
    \n+
    \n+
    164
    \n+
    165
    \n+
    166
    \n+
    186template<class LocalView>
    \n+
    \n+
    187auto subEntityDOFs(const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    \n+
    188{
    \n+
    189 using GridView = typename LocalView::GridView;
    \n+\n+
    191 subEntityDOFs.bind(localView, subEntityIndex, subEntityCodim);
    \n+
    192 return subEntityDOFs;
    \n+
    193}
    \n+
    \n+
    194
    \n+
    195
    \n+
    196
    \n+
    215template<class LocalView, class Intersection>
    \n+
    \n+
    216auto subEntityDOFs(const LocalView& localView, const Intersection& intersection)
    \n+
    217{
    \n+
    218 using GridView = typename LocalView::GridView;
    \n+\n+
    220 subEntityDOFs.bind(localView, intersection);
    \n+
    221 return subEntityDOFs;
    \n+
    222}
    \n+
    \n+
    223
    \n+
    224
    \n+
    225
    \n+
    226} // namespace Functions
    \n+
    227} // namespace Dune
    \n+
    228
    \n+
    229#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n+
    auto subEntityDOFs(const T &)
    Create SubEntityDOFs object.
    Definition subentitydofs.hh:160
    \n
    Definition polynomial.hh:10
    \n-
    Definition polynomial.hh:11
    \n-
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:37
    \n-
    Grid function implementing the piecewise element face normal.
    Definition facenormalgridfunction.hh:66
    \n-
    GridViewEntitySet< GridView, 0 > EntitySet
    Definition facenormalgridfunction.hh:69
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition facenormalgridfunction.hh:72
    \n-
    typename EntitySet::GlobalCoordinate Domain
    Definition facenormalgridfunction.hh:73
    \n-
    typename EntitySet::GlobalCoordinate Range
    Definition facenormalgridfunction.hh:74
    \n-
    const EntitySet & entitySet() const
    Return the stored GridViewEntitySet.
    Definition facenormalgridfunction.hh:181
    \n-
    friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)
    Not implemented.
    Definition facenormalgridfunction.hh:169
    \n-
    GV GridView
    Definition facenormalgridfunction.hh:68
    \n-
    friend LocalFunction localFunction(const FaceNormalGridFunction &t)
    Return a local-function associated to FaceNormalGridFunction.
    Definition facenormalgridfunction.hh:175
    \n-
    FaceNormalGridFunction(const GridView &gridView)
    Construct the FaceNormalGridFunction.
    Definition facenormalgridfunction.hh:158
    \n-
    typename EntitySet::Element Element
    Definition facenormalgridfunction.hh:70
    \n-
    Range operator()(const Domain &x) const
    Not implemented.
    Definition facenormalgridfunction.hh:163
    \n-
    Definition gridfunction.hh:32
    \n-\n-
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:32
    \n-
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:35
    \n-
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:36
    \n+
    Range of DOFs associated to sub-entity.
    Definition subentitydofs.hh:42
    \n+
    auto begin() const
    Create begin iterator for access to range of contained local indices.
    Definition subentitydofs.hh:110
    \n+
    auto size() const
    Return number of contained DOFs.
    Definition subentitydofs.hh:122
    \n+
    SubEntityDOFs & bind(const LocalView &localView, const Intersection &intersection)
    Bind SubEntityDOFs object to LocalView and sub-entity.
    Definition subentitydofs.hh:104
    \n+
    bool contains(std::size_t localIndex) const
    Check if given local index is contained in this range of DOFs.
    Definition subentitydofs.hh:134
    \n+
    auto end() const
    Create end iterator for access to range of contained local indices.
    Definition subentitydofs.hh:116
    \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:64
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,236 +1,174 @@\n dune-functions\u00a02.9.0\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+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n-4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n 5\n-6#include \n-7#include \n-8\n-9#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/_\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+6#include \n+7\n+8#include \n+9#include \n+10\n+11\n+12\n+13namespace _\bD_\bu_\bn_\be {\n+14namespace Functions {\n+15\n 16\n 17\n-18namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n-19\n-20namespace Impl {\n-21\n-22// Compute closest face to point\n-23template\n-24auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)\n-25{\n-26 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};\n-27 double closestFaceDistance = std::numeric_limits::max();\n-28 for(auto&& faceIndex : _\bD_\bu_\bn_\be::range(re.size(1)))\n-29 {\n-30 // For a face unit outer normal consider the orthogonal projection\n-31 // Px = x + *n into the face. Then the distance to the face\n-32 // is given by |x-Px| = |||n| = .\n-33 auto normal = re.integrationOuterNormal(faceIndex);\n-34 normal /= normal.two_norm();\n-35 auto c = re.position(faceIndex,1);\n-36 c -= x;\n-37 auto faceDistance = (c*normal);\n-38 if (faceDistance\n+_\b4_\b1class _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n+42{\n+43 static const int dim = GridView::dimension;\n+44\n+45public:\n 46\n-47} // end namespace Impl\n-48\n-49\n-50\n-51\n-64template\n-_\b6_\b5class _\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-66{\n-67public:\n-_\b6_\b8 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b6_\b9 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_\b0 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+63 template\n+_\b6_\b4 _\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+65 {\n+66 // fill vector with local indices of all DOFs contained in subentity\n+67 containedDOFs_.clear();\n+68 dofIsContained_.assign(localView.size(), false);\n+69\n+70 auto re = Dune::referenceElement(localView.element().type());\n 71\n-_\b7_\b2 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_\b3 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_\b4 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-75\n-76private:\n-77\n-78 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-79\n-80 class LocalFunction\n-81 {\n-82 using Geometry = typename Element::Geometry;\n-83 static const int dimension = GV::dimension;\n-84 public:\n-85\n-97 void bind(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n-98 {\n-99 element_ = element;\n-100 geometry_.emplace(element_.geometry());\n-101 }\n-102\n-103 void unbind()\n-104 {\n-105 geometry_.reset();\n-106 }\n-107\n-110 bool bound() const\n+72 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /\n+*treePath*/) {\n+73 const auto& localCoefficients = node.finiteElement().localCoefficients();\n+74 std::size_t localSize = localCoefficients.size();\n+75 for(std::size_t i=0; i\n+_\b1_\b0_\b4 _\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+105 {\n+106 return bind(localView, intersection.indexInInside(), 1);\n+107 }\n+108\n+_\b1_\b1_\b0 auto _\bb_\be_\bg_\bi_\bn() const\n 111 {\n-112 return static_cast(geometry_);\n+112 return containedDOFs_.cbegin();\n 113 }\n 114\n-124 _\bR_\ba_\bn_\bg_\be operator()(const _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn& x) const\n-125 {\n-126 auto&& re = Dune::referenceElement(*geometry_);\n-127 // Compute reference normal of closest face to given point\n-128 auto face = Impl::closestFaceIndex(re, x);\n-129 auto localNormal = re.integrationOuterNormal(face);\n-130\n-131 // Transform reference normal into global unit outer normal using\n-132 // covariant Piola transformation\n-133 auto normal = _\bR_\ba_\bn_\bg_\be{};\n-134 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);\n-135 normal /= normal.two_norm();\n-136 return normal;\n+_\b1_\b1_\b6 auto _\be_\bn_\bd() const\n+117 {\n+118 return containedDOFs_.cend();\n+119 }\n+120\n+_\b1_\b2_\b2 auto _\bs_\bi_\bz_\be() const\n+123 {\n+124 return containedDOFs_.size();\n+125 }\n+126\n+_\b1_\b2_\b8 decltype(auto) operator[](std::size_t i) const\n+129 {\n+130 return containedDOFs_[i];\n+131 }\n+132\n+_\b1_\b3_\b4 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(std::size_t localIndex) const\n+135 {\n+136 return dofIsContained_[localIndex];\n 137 }\n 138\n-140 const _\bE_\bl_\be_\bm_\be_\bn_\bt& localContext() const\n-141 {\n-142 return element_;\n-143 }\n+139private:\n+140\n+141 std::vector containedDOFs_;\n+142 std::vector dofIsContained_;\n+143};\n 144\n-146 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-147 {\n-148 DUNE_THROW(NotImplemented,\"not implemented\");\n-149 }\n-150\n-151 private:\n-152 std::optional geometry_;\n-153 _\bE_\bl_\be_\bm_\be_\bn_\bt element_;\n-154 };\n-155\n-156public:\n-_\b1_\b5_\b8 _\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-159 entitySet_(gridView)\n-160 {}\n-161\n-_\b1_\b6_\b3 _\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-164 {\n-165 DUNE_THROW(NotImplemented,\"not implemented\");\n-166 }\n-167\n-_\b1_\b6_\b9 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-170 {\n-171 DUNE_THROW(NotImplemented,\"not implemented\");\n-172 }\n-173\n-_\b1_\b7_\b5 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-176 {\n-177 return LocalFunction{};\n-178 }\n-179\n-_\b1_\b8_\b1 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n-182 {\n-183 return entitySet_;\n-184 }\n-185\n-186private:\n-187 _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt entitySet_;\n-188};\n-189\n-190\n-191\n-192} // namespace Dune::Functions\n-193\n-194#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n-_\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:_\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:39\n+145\n+146\n+159template\n+_\b1_\b6_\b0auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const T&)\n+161{\n+162 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+163}\n+164\n+165\n+166\n+186template\n+_\b1_\b8_\b7auto _\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+188{\n+189 using GridView = typename LocalView::GridView;\n+190 _\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+191 _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs.bind(localView, subEntityIndex, subEntityCodim);\n+192 return _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n+193}\n+194\n+195\n+196\n+215template\n+_\b2_\b1_\b6auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const LocalView& localView, const Intersection&\n+intersection)\n+217{\n+218 using GridView = typename LocalView::GridView;\n+219 _\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+220 _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs.bind(localView, intersection);\n+221 return _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n+222}\n+223\n+224\n+225\n+226} // namespace Functions\n+227} // namespace Dune\n+228\n+229#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n+_\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:160\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:11\n-_\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:37\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:66\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:69\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n-typename EntitySet::LocalCoordinate LocalDomain\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh: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:_\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: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:_\bR_\ba_\bn_\bg_\be\n-typename EntitySet::GlobalCoordinate Range\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:_\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:181\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:169\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:68\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:175\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:158\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: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:_\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:163\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: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>\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: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:_\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:35\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:36\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:42\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:110\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:122\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:104\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:134\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:116\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: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: localderivativetraits.hh File Reference\n+dune-functions: raviartthomasbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -65,44 +65,75 @@\n \n \n \n \n \n \n \n
    \n \n-
    localderivativetraits.hh File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    raviartthomasbasis.hh File Reference
    \n \n
    \n-
    #include <dune/functions/common/defaultderivativetraits.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/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
    \n

    Go to the source code of this file.

    \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::RaviartThomasPreBasis< GV, k >
     
    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< Signature >
     
    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< R(LocalDomain)>
    class  Dune::Functions::RaviartThomasNode< GV, k >
     
    \n \n \n \n \n \n+\n+\n+

    \n Namespaces

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

    \n+Typedefs

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

    \n+Functions

    template<std::size_t k>
    auto Dune::Functions::BasisFactory::raviartThomas ()
     Create a pre-basis factory that can create a Raviart-Thomas pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,52 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-localderivativetraits.hh File Reference\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+ * _\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+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\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:_\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-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:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k > >\n+\u00a0 Basis of a k-th-order Raviart Thomas finite element space.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs ()\n+\u00a0 Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/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: localderivativetraits.hh Source File\n+dune-functions: raviartthomasbasis.hh Source File\n \n \n \n \n \n \n \n@@ -70,72 +70,482 @@\n
    \n \n \n \n \n \n \n
    \n-
    localderivativetraits.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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n-
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n
    5
    \n-
    6
    \n-\n+
    6#include <array>
    \n+
    7#include <dune/common/exceptions.hh>
    \n
    8
    \n-
    9
    \n-
    10namespace Dune {
    \n-
    11namespace Functions {
    \n-
    12
    \n-
    13
    \n-
    26template<class EntitySet, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-
    \n-\n-
    28{
    \n-
    29 using LocalDomain = typename EntitySet::LocalCoordinate;
    \n-
    30 using Domain = typename EntitySet::GlobalCoordinate;
    \n+
    9#include <dune/grid/common/capabilities.hh>
    \n+
    10#include <dune/grid/common/mcmgmapper.hh>
    \n+
    11
    \n+
    12#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n+
    13#include <dune/localfunctions/raviartthomas.hh>
    \n+
    14#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>
    \n+
    15#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>
    \n+
    16#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>
    \n+
    17#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>
    \n+
    18#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>
    \n+
    19#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>
    \n+
    20#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>
    \n+
    21#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>
    \n+
    22
    \n+\n+\n+\n+
    26
    \n+
    27namespace Dune {
    \n+
    28namespace Functions {
    \n+
    29
    \n+
    30namespace Impl {
    \n
    31
    \n-
    32 template<class Signature>
    \n-
    \n-
    33 struct Traits
    \n+
    32 template<int dim, typename D, typename R, std::size_t k>
    \n+
    33 struct RaviartThomasSimplexLocalInfo
    \n
    34 {
    \n-\n-
    36 };
    \n+
    35 // Dummy type, must be something that we can have a std::unique_ptr to
    \n+
    36 using FiniteElement = void*;
    \n+
    37 };
    \n+
    38
    \n+
    39 template<typename D, typename R>
    \n+
    40 struct RaviartThomasSimplexLocalInfo<2,D,R,0>
    \n+
    41 {
    \n+
    42 using FiniteElement = RT02DLocalFiniteElement<D,R>;
    \n+
    43 };
    \n+
    44
    \n+
    45 template<typename D, typename R>
    \n+
    46 struct RaviartThomasSimplexLocalInfo<2,D,R,1>
    \n+
    47 {
    \n+
    48 using FiniteElement = RT12DLocalFiniteElement<D,R>;
    \n+
    49 };
    \n+
    50
    \n+
    51 template<typename D, typename R>
    \n+
    52 struct RaviartThomasSimplexLocalInfo<3,D,R,0>
    \n+
    53 {
    \n+
    54 using FiniteElement = RT03DLocalFiniteElement<D,R>;
    \n+
    55 };
    \n+
    56
    \n+
    57 template<int dim, typename D, typename R, std::size_t k>
    \n+
    58 struct RaviartThomasCubeLocalInfo
    \n+
    59 {
    \n+
    60 // Dummy type, must be something that we can have a std::unique_ptr to
    \n+
    61 using FiniteElement = void*;
    \n+
    62 };
    \n+
    63
    \n+
    64 template<typename D, typename R>
    \n+
    65 struct RaviartThomasCubeLocalInfo<2,D,R,0>
    \n+
    66 {
    \n+
    67 using FiniteElement = RT0Cube2DLocalFiniteElement<D,R>;
    \n+
    68 };
    \n+
    69
    \n+
    70 template<typename D, typename R>
    \n+
    71 struct RaviartThomasCubeLocalInfo<2,D,R,1>
    \n+
    72 {
    \n+
    73 using FiniteElement = RT1Cube2DLocalFiniteElement<D,R>;
    \n+
    74 };
    \n+
    75
    \n+
    76 template<typename D, typename R>
    \n+
    77 struct RaviartThomasCubeLocalInfo<2,D,R,2>
    \n+
    78 {
    \n+
    79 using FiniteElement = RT2Cube2DLocalFiniteElement<D,R>;
    \n+
    80 };
    \n+
    81
    \n+
    82 template<typename D, typename R>
    \n+
    83 struct RaviartThomasCubeLocalInfo<3,D,R,0>
    \n+
    84 {
    \n+
    85 using FiniteElement = RT0Cube3DLocalFiniteElement<D,R>;
    \n+
    86 };
    \n+
    87
    \n+
    88 template<typename D, typename R>
    \n+
    89 struct RaviartThomasCubeLocalInfo<3,D,R,1>
    \n+
    90 {
    \n+
    91 using FiniteElement = RT1Cube3DLocalFiniteElement<D,R>;
    \n+
    92 };
    \n+
    93
    \n+
    94 template<typename GV, int dim, typename R, std::size_t k>
    \n+
    95 class RaviartThomasLocalFiniteElementMap
    \n+
    96 {
    \n+
    97 using D = typename GV::ctype;
    \n+
    98 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n+
    99
    \n+
    100 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo<dim, D, R, k>::FiniteElement;
    \n+
    101 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo<dim, D, R, k>::FiniteElement;
    \n+
    102
    \n+
    103 public:
    \n+
    104
    \n+
    105 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n+
    106
    \n+
    107 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n+
    108 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n+
    109
    \n+
    110 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n+
    111 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n+
    112 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n+
    113
    \n+
    114 // Each element facet can have its orientation reversed, hence there are
    \n+
    115 // 2^#facets different variants.
    \n+
    116 static std::size_t numVariants(GeometryType type)
    \n+
    117 {
    \n+
    118 auto numFacets = referenceElement<D,dim>(type).size(1);
    \n+
    119 return power(2,numFacets);
    \n+
    120 }
    \n+
    121
    \n+
    122 RaviartThomasLocalFiniteElementMap(const GV& gv)
    \n+
    123 : elementMapper_(gv, mcmgElementLayout()),
    \n+
    124 orient_(gv.size(0))
    \n+
    125 {
    \n+
    126 if constexpr (hasFixedElementType)
    \n+
    127 {
    \n+
    128 variants_.resize(numVariants(type));
    \n+
    129 for (size_t i = 0; i < numVariants(type); i++)
    \n+
    130 variants_[i] = FiniteElement(i);
    \n+
    131 }
    \n+
    132 else
    \n+
    133 {
    \n+
    134 // for mixed grids add offset for cubes
    \n+
    135 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));
    \n+
    136 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)
    \n+
    137 variants_[i] = SimplexFiniteElement(i);
    \n+
    138 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)
    \n+
    139 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);
    \n+
    140 }
    \n+
    141
    \n+
    142 for(const auto& cell : elements(gv))
    \n+
    143 {
    \n+
    144 unsigned int myId = elementMapper_.index(cell);
    \n+
    145 orient_[myId] = 0;
    \n+
    146
    \n+
    147 for (const auto& intersection : intersections(gv,cell))
    \n+
    148 {
    \n+
    149 if (intersection.neighbor() && (elementMapper_.index(intersection.outside()) > myId))
    \n+
    150 orient_[myId] |= (1 << intersection.indexInInside());
    \n+
    151 }
    \n+
    152
    \n+
    153 // for mixed grids add offset for cubes
    \n+
    154 if constexpr (!hasFixedElementType)
    \n+
    155 if (cell.type().isCube())
    \n+
    156 orient_[myId] += numVariants(GeometryTypes::simplex(dim));
    \n+
    157 }
    \n+
    158 }
    \n+
    159
    \n+
    160 template<class EntityType>
    \n+
    161 const FiniteElement& find(const EntityType& e) const
    \n+
    162 {
    \n+
    163 return variants_[orient_[elementMapper_.index(e)]];
    \n+
    164 }
    \n+
    165
    \n+
    166 private:
    \n+
    167 std::vector<FiniteElement> variants_;
    \n+
    168 const Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;
    \n+
    169 std::vector<unsigned char> orient_;
    \n+
    170 };
    \n+
    171
    \n+
    172
    \n+
    173} // namespace Impl
    \n+
    174
    \n+
    175
    \n+
    176// *****************************************************************************
    \n+
    177// This is the reusable part of the basis. It contains
    \n+
    178//
    \n+
    179// RaviartThomasPreBasis
    \n+
    180// RaviartThomasNode
    \n+
    181//
    \n+
    182// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    183// state. These components do _not_ depend on the global basis and local view
    \n+
    184// and can be used without a global basis.
    \n+
    185// *****************************************************************************
    \n+
    186
    \n+
    187template<typename GV, int k>
    \n+
    188class RaviartThomasNode;
    \n+
    189
    \n+
    190template<typename GV, int k>
    \n+
    \n+\n+
    192{
    \n+
    193 static const int dim = GV::dimension;
    \n+
    194 using FiniteElementMap = typename Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;
    \n+
    195
    \n+
    196public:
    \n+
    197
    \n+
    199 using GridView = GV;
    \n+
    200 using size_type = std::size_t;
    \n+
    201
    \n+\n+
    203
    \n+
    204 static constexpr size_type maxMultiIndexSize = 1;
    \n+
    205 static constexpr size_type minMultiIndexSize = 1;
    \n+
    206 static constexpr size_type multiIndexBufferSize = 1;
    \n+
    207
    \n+
    \n+\n+
    210 gridView_(gv),
    \n+\n+
    212 {
    \n+
    213 // Currently there are some unresolved bugs with hybrid grids and higher order Raviart-Thomas elements
    \n+
    214 if (gv.indexSet().types(0).size() > 1 and k>0)
    \n+
    215 DUNE_THROW(Dune::NotImplemented, "Raviart-Thomas basis with index k>0 is only implemented for grids with a single element type");
    \n+
    216
    \n+
    217 for(auto type : gv.indexSet().types(0))
    \n+
    218 if (!type.isSimplex() && !type.isCube())
    \n+
    219 DUNE_THROW(Dune::NotImplemented, "Raviart-Thomas elements are only implemented for grids with simplex or cube elements.");
    \n+
    220
    \n+
    221 GeometryType type = gv.template begin<0>()->type();
    \n+
    222 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;
    \n+
    223 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;
    \n+
    224
    \n+
    225 dofsPerCodim_ = {{dofsPerElement, dofsPerFace}};
    \n+
    226 }
    \n
    \n-
    37
    \n-
    38 template<class R>
    \n-
    \n-\n-
    40 {
    \n-
    41 using Range = typename DerivativeTraits<R(Domain)>::Range;
    \n-
    42 };
    \n+
    227
    \n+
    \n+\n+
    229 {
    \n+
    230 codimOffset_[0] = 0;
    \n+
    231 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);
    \n+
    232 }
    \n
    \n-
    43};
    \n+
    233
    \n+
    \n+
    236 const GridView& gridView() const
    \n+
    237 {
    \n+
    238 return gridView_;
    \n+
    239 }
    \n
    \n-
    44
    \n-
    45
    \n-
    46}} // namespace Dune::Functions
    \n-
    47
    \n-
    48#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n-\n+
    240
    \n+
    241 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n+
    \n+
    242 void update (const GridView& gv)
    \n+
    243 {
    \n+
    244 gridView_ = gv;
    \n+
    245 }
    \n+
    \n+
    246
    \n+
    \n+\n+
    251 {
    \n+
    252 return Node{&finiteElementMap_};
    \n+
    253 }
    \n+
    \n+
    254
    \n+
    \n+\n+
    256 {
    \n+
    257 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] * gridView_.size(1);
    \n+
    258 }
    \n+
    \n+
    259
    \n+
    261 template<class SizePrefix>
    \n+
    \n+
    262 size_type size(const SizePrefix& prefix) const
    \n+
    263 {
    \n+
    264 assert(prefix.size() == 0 || prefix.size() == 1);
    \n+
    265 return (prefix.size() == 0) ? size() : 0;
    \n+
    266 }
    \n+
    \n+
    267
    \n+
    \n+\n+
    270 {
    \n+
    271 return size();
    \n+
    272 }
    \n+
    \n+
    273
    \n+
    \n+\n+
    275 {
    \n+
    276 size_type result = 0;
    \n+
    277 for (auto&& type : gridView_.indexSet().types(0))
    \n+
    278 {
    \n+
    279 size_t numFaces = ReferenceElements<double,dim>::general(type).size(1);
    \n+
    280 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;
    \n+
    281 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;
    \n+
    282 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);
    \n+
    283 }
    \n+
    284
    \n+
    285 return result;
    \n+
    286 }
    \n+
    \n+
    287
    \n+
    293 template<typename It>
    \n+
    \n+
    294 It indices(const Node& node, It it) const
    \n+
    295 {
    \n+
    296 const auto& gridIndexSet = gridView().indexSet();
    \n+
    297 const auto& element = node.element();
    \n+
    298
    \n+
    299 // throw if Element is not of predefined type
    \n+
    300 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n+
    301 DUNE_THROW(Dune::NotImplemented, "RaviartThomasBasis only implemented for cube and simplex elements.");
    \n+
    302
    \n+
    303 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n+
    304 {
    \n+
    305 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    306
    \n+
    307 // The dimension of the entity that the current dof is related to
    \n+
    308 size_t subentity = localKey.subEntity();
    \n+
    309 size_t codim = localKey.codim();
    \n+
    310
    \n+
    311 if (not(codim==0 or codim==1))
    \n+
    312 DUNE_THROW(Dune::NotImplemented, "Grid contains elements not supported for the RaviartThomasBasis");
    \n+
    313
    \n+
    314 *it = { codimOffset_[codim] +
    \n+
    315 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \n+
    316 }
    \n+
    317
    \n+
    318 return it;
    \n+
    319 }
    \n+
    \n+
    320
    \n+
    321protected:
    \n+\n+
    323 std::array<size_t,dim+1> codimOffset_;
    \n+
    324 FiniteElementMap finiteElementMap_;
    \n+
    325 // Number of dofs per entity type depending on the entity's codimension and type
    \n+
    326 std::array<int,dim+1> dofsPerCodim_;
    \n+
    327};
    \n+
    \n+
    328
    \n+
    329
    \n+
    330
    \n+
    331template<typename GV, int k>
    \n+
    \n+\n+
    333 public LeafBasisNode
    \n+
    334{
    \n+
    335 static const int dim = GV::dimension;
    \n+
    336
    \n+
    337public:
    \n+
    338
    \n+
    339 using size_type = std::size_t;
    \n+
    340 using Element = typename GV::template Codim<0>::Entity;
    \n+
    341 using FiniteElementMap = typename Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;
    \n+
    342 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,
    \n+
    343 typename FiniteElementMap::FiniteElement,
    \n+
    344 Element>;
    \n+
    345
    \n+
    \n+
    346 RaviartThomasNode(const FiniteElementMap* finiteElementMap) :
    \n+
    347 element_(nullptr),
    \n+
    348 finiteElementMap_(finiteElementMap)
    \n+
    349 { }
    \n+
    \n+
    350
    \n+
    \n+
    352 const Element& element() const
    \n+
    353 {
    \n+
    354 return *element_;
    \n+
    355 }
    \n+
    \n+
    356
    \n+
    \n+\n+
    362 {
    \n+
    363 return finiteElement_;
    \n+
    364 }
    \n+
    \n+
    365
    \n+
    \n+
    367 void bind(const Element& e)
    \n+
    368 {
    \n+
    369 element_ = &e;
    \n+
    370 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n+
    371 this->setSize(finiteElement_.size());
    \n+
    372 }
    \n+
    \n+
    373
    \n+
    374protected:
    \n+
    375
    \n+\n+\n+\n+
    379};
    \n+
    \n+
    380
    \n+
    381namespace BasisFactory {
    \n+
    382
    \n+
    390template<std::size_t k>
    \n+
    \n+\n+
    392{
    \n+
    393 return [](const auto& gridView) {
    \n+
    394 return RaviartThomasPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n+
    395 };
    \n+
    396}
    \n+
    \n+
    397
    \n+
    398} // end namespace BasisFactory
    \n+
    399
    \n+
    400
    \n+
    401
    \n+
    402// *****************************************************************************
    \n+
    403// This is the actual global basis implementation based on the reusable parts.
    \n+
    404// *****************************************************************************
    \n+
    405
    \n+
    413template<typename GV, int k>
    \n+\n+
    415
    \n+
    416} // end namespace Functions
    \n+
    417} // end namespace Dune
    \n+
    418
    \n+
    419
    \n+
    420#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n+\n+\n+\n+
    auto raviartThomas()
    Create a pre-basis factory that can create a Raviart-Thomas pre-basis.
    Definition raviartthomasbasis.hh:391
    \n
    Definition polynomial.hh:10
    \n-
    Dummy range class to be used if no proper type is available.
    Definition defaultderivativetraits.hh:23
    \n-
    Derivative traits for local functions.
    Definition localderivativetraits.hh:28
    \n-
    typename EntitySet::GlobalCoordinate Domain
    Definition localderivativetraits.hh:30
    \n-
    typename EntitySet::LocalCoordinate LocalDomain
    Definition localderivativetraits.hh:29
    \n-
    Definition localderivativetraits.hh:34
    \n-
    InvalidRange Range
    Definition localderivativetraits.hh:35
    \n-
    typename DerivativeTraits< R(Domain)>::Range Range
    Definition localderivativetraits.hh:41
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n+
    size_type size() const
    Definition nodes.hh:142
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n+
    Definition nodes.hh:186
    \n+
    Definition raviartthomasbasis.hh:334
    \n+
    typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap
    Definition raviartthomasbasis.hh:341
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition raviartthomasbasis.hh:367
    \n+
    Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition raviartthomasbasis.hh:344
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition raviartthomasbasis.hh:340
    \n+
    const Element * element_
    Definition raviartthomasbasis.hh:377
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition raviartthomasbasis.hh:361
    \n+
    std::size_t size_type
    Definition raviartthomasbasis.hh:339
    \n+
    RaviartThomasNode(const FiniteElementMap *finiteElementMap)
    Definition raviartthomasbasis.hh:346
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition raviartthomasbasis.hh:352
    \n+
    FiniteElement finiteElement_
    Definition raviartthomasbasis.hh:376
    \n+
    const FiniteElementMap * finiteElementMap_
    Definition raviartthomasbasis.hh:378
    \n+
    Definition raviartthomasbasis.hh:192
    \n+
    static constexpr size_type minMultiIndexSize
    Definition raviartthomasbasis.hh:205
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition raviartthomasbasis.hh:204
    \n+
    Node makeNode() const
    Create tree node.
    Definition raviartthomasbasis.hh:250
    \n+
    std::array< int, dim+1 > dofsPerCodim_
    Definition raviartthomasbasis.hh:326
    \n+
    void update(const GridView &gv)
    Definition raviartthomasbasis.hh:242
    \n+
    RaviartThomasPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition raviartthomasbasis.hh:209
    \n+
    std::size_t size_type
    Definition raviartthomasbasis.hh:200
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition raviartthomasbasis.hh:236
    \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:294
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition raviartthomasbasis.hh:206
    \n+
    FiniteElementMap finiteElementMap_
    Definition raviartthomasbasis.hh:324
    \n+
    size_type size() const
    Definition raviartthomasbasis.hh:255
    \n+
    size_type dimension() const
    Definition raviartthomasbasis.hh:269
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition raviartthomasbasis.hh:199
    \n+
    size_type maxNodeSize() const
    Definition raviartthomasbasis.hh:274
    \n+
    GridView gridView_
    Definition raviartthomasbasis.hh:322
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition raviartthomasbasis.hh:262
    \n+
    void initializeIndices()
    Definition raviartthomasbasis.hh:228
    \n+
    std::array< size_t, dim+1 > codimOffset_
    Definition raviartthomasbasis.hh:323
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,71 +1,560 @@\n dune-functions\u00a02.9.0\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+ * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\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#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n-4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n 5\n-6\n-7#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+6#include \n+7#include \n 8\n-9\n-10namespace _\bD_\bu_\bn_\be {\n-11namespace Functions {\n-12\n-13\n-26template class\n-DerivativeTraits=DefaultDerivativeTraits>\n-_\b2_\b7struct _\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-28{\n-_\b2_\b9 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::LocalCoordinate;\n-_\b3_\b0 using _\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::GlobalCoordinate;\n+9#include \n+10#include \n+11\n+12#include \n+13#include \n+14#include \n+15#include \n+16#include \n+17#include \n+18#include \n+19#include \n+20#include \n+21#include \n+22\n+23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/\n+_\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\n+27namespace _\bD_\bu_\bn_\be {\n+28namespace Functions {\n+29\n+30namespace Impl {\n 31\n-32 template\n-_\b3_\b3 struct _\bT_\br_\ba_\bi_\bt_\bs\n+32 template\n+33 struct RaviartThomasSimplexLocalInfo\n 34 {\n-_\b3_\b5 typedef _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be _\bR_\ba_\bn_\bg_\be;\n-36 };\n-37\n-38 template\n-_\b3_\b9 struct _\bT_\br_\ba_\bi_\bt_\bs\n-40 {\n-_\b4_\b1 using _\bR_\ba_\bn_\bg_\be = typename DerivativeTraits_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n-42 };\n-43};\n+35 // Dummy type, must be something that we can have a std::unique_ptr to\n+36 using FiniteElement = void*;\n+37 };\n+38\n+39 template\n+40 struct RaviartThomasSimplexLocalInfo<2,D,R,0>\n+41 {\n+42 using FiniteElement = RT02DLocalFiniteElement;\n+43 };\n 44\n-45\n-46}} // namespace Dune::Functions\n-47\n-48#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+45 template\n+46 struct RaviartThomasSimplexLocalInfo<2,D,R,1>\n+47 {\n+48 using FiniteElement = RT12DLocalFiniteElement;\n+49 };\n+50\n+51 template\n+52 struct RaviartThomasSimplexLocalInfo<3,D,R,0>\n+53 {\n+54 using FiniteElement = RT03DLocalFiniteElement;\n+55 };\n+56\n+57 template\n+58 struct RaviartThomasCubeLocalInfo\n+59 {\n+60 // Dummy type, must be something that we can have a std::unique_ptr to\n+61 using FiniteElement = void*;\n+62 };\n+63\n+64 template\n+65 struct RaviartThomasCubeLocalInfo<2,D,R,0>\n+66 {\n+67 using FiniteElement = RT0Cube2DLocalFiniteElement;\n+68 };\n+69\n+70 template\n+71 struct RaviartThomasCubeLocalInfo<2,D,R,1>\n+72 {\n+73 using FiniteElement = RT1Cube2DLocalFiniteElement;\n+74 };\n+75\n+76 template\n+77 struct RaviartThomasCubeLocalInfo<2,D,R,2>\n+78 {\n+79 using FiniteElement = RT2Cube2DLocalFiniteElement;\n+80 };\n+81\n+82 template\n+83 struct RaviartThomasCubeLocalInfo<3,D,R,0>\n+84 {\n+85 using FiniteElement = RT0Cube3DLocalFiniteElement;\n+86 };\n+87\n+88 template\n+89 struct RaviartThomasCubeLocalInfo<3,D,R,1>\n+90 {\n+91 using FiniteElement = RT1Cube3DLocalFiniteElement;\n+92 };\n+93\n+94 template\n+95 class RaviartThomasLocalFiniteElementMap\n+96 {\n+97 using D = typename GV::ctype;\n+98 constexpr static bool hasFixedElementType = Capabilities::\n+hasSingleGeometryType::v;\n+99\n+100 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo::FiniteElement;\n+101 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo::FiniteElement;\n+102\n+103 public:\n+104\n+105 using T = LocalBasisTraits, R, dim,\n+FieldVector, FieldMatrix >;\n+106\n+107 constexpr static unsigned int topologyId = Capabilities::\n+hasSingleGeometryType::topologyId; // meaningless if\n+hasFixedElementType is false\n+108 constexpr static GeometryType type = GeometryType(topologyId, GV::\n+dimension);\n+109\n+110 using FiniteElement = std::conditional_t,\n+112 LocalFiniteElementVariant >;\n+113\n+114 // Each element facet can have its orientation reversed, hence there are\n+115 // 2^#facets different variants.\n+116 static std::size_t numVariants(GeometryType type)\n+117 {\n+118 auto numFacets = referenceElement(type).size(1);\n+119 return power(2,numFacets);\n+120 }\n+121\n+122 RaviartThomasLocalFiniteElementMap(const GV& gv)\n+123 : elementMapper_(gv, mcmgElementLayout()),\n+124 orient_(gv.size(0))\n+125 {\n+126 if constexpr (hasFixedElementType)\n+127 {\n+128 variants_.resize(numVariants(type));\n+129 for (size_t i = 0; i < numVariants(type); i++)\n+130 variants_[i] = FiniteElement(i);\n+131 }\n+132 else\n+133 {\n+134 // for mixed grids add offset for cubes\n+135 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n+(GeometryTypes::cube(dim)));\n+136 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n+137 variants_[i] = SimplexFiniteElement(i);\n+138 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n+139 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n+(i);\n+140 }\n+141\n+142 for(const auto& cell : elements(gv))\n+143 {\n+144 unsigned int myId = elementMapper_.index(cell);\n+145 orient_[myId] = 0;\n+146\n+147 for (const auto& intersection : intersections(gv,cell))\n+148 {\n+149 if (intersection.neighbor() && (elementMapper_.index(intersection.outside\n+()) > myId))\n+150 orient_[myId] |= (1 << intersection.indexInInside());\n+151 }\n+152\n+153 // for mixed grids add offset for cubes\n+154 if constexpr (!hasFixedElementType)\n+155 if (cell.type().isCube())\n+156 orient_[myId] += numVariants(GeometryTypes::simplex(dim));\n+157 }\n+158 }\n+159\n+160 template\n+161 const FiniteElement& find(const EntityType& e) const\n+162 {\n+163 return variants_[orient_[elementMapper_.index(e)]];\n+164 }\n+165\n+166 private:\n+167 std::vector variants_;\n+168 const Dune::MultipleCodimMultipleGeomTypeMapper elementMapper_;\n+169 std::vector orient_;\n+170 };\n+171\n+172\n+173} // namespace Impl\n+174\n+175\n+176/\n+/ *****************************************************************************\n+177// This is the reusable part of the basis. It contains\n+178//\n+179// RaviartThomasPreBasis\n+180// RaviartThomasNode\n+181//\n+182// The pre-basis allows to create the others and is the owner of possible\n+shared\n+183// state. These components do _not_ depend on the global basis and local\n+view\n+184// and can be used without a global basis.\n+185/\n+/ *****************************************************************************\n+186\n+187template\n+188class RaviartThomasNode;\n+189\n+190template\n+_\b1_\b9_\b1class _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+192{\n+193 static const int dim = GV::dimension;\n+194 using FiniteElementMap = typename Impl::\n+RaviartThomasLocalFiniteElementMap;\n+195\n+196public:\n+197\n+_\b1_\b9_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b2_\b0_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+201\n+_\b2_\b0_\b2 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+203\n+_\b2_\b0_\b4 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+_\b2_\b0_\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+_\b2_\b0_\b6 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+207\n+_\b2_\b0_\b9 _\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+210 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n+211 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv)\n+212 {\n+213 // Currently there are some unresolved bugs with hybrid grids and higher\n+order Raviart-Thomas elements\n+214 if (gv.indexSet().types(0).size() > 1 and k>0)\n+215 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas basis with index k>0 is\n+only implemented for grids with a single element type\");\n+216\n+217 for(auto type : gv.indexSet().types(0))\n+218 if (!type.isSimplex() && !type.isCube())\n+219 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas elements are only\n+implemented for grids with simplex or cube elements.\");\n+220\n+221 GeometryType type = gv.template begin<0>()->type();\n+222 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim\n+: k*(k+1)*(k+1)*dim) : k*dim;\n+223 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n+1)*k+1 ;\n+224\n+225 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_ = {{dofsPerElement, dofsPerFace}};\n+226 }\n+227\n+_\b2_\b2_\b8 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+229 {\n+230 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] = 0;\n+231 _\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+232 }\n+233\n+_\b2_\b3_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+237 {\n+238 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+239 }\n+240\n+241 /* \\brief Update the stored grid view, to be called if the grid has changed\n+*/\n+_\b2_\b4_\b2 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+243 {\n+244 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+245 }\n+246\n+_\b2_\b5_\b0 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+251 {\n+252 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n+253 }\n+254\n+_\b2_\b5_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+256 {\n+257 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+258 }\n+259\n+261 template\n+_\b2_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+263 {\n+264 assert(prefix.size() == 0 || prefix.size() == 1);\n+265 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n+266 }\n+267\n+_\b2_\b6_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+270 {\n+271 return _\bs_\bi_\bz_\be();\n+272 }\n+273\n+_\b2_\b7_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+275 {\n+276 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n+277 for (auto&& type : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0))\n+278 {\n+279 size_t numFaces = ReferenceElements::general(type).size(1);\n+280 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim\n+: k*(k+1)*(k+1)*dim) : k*dim;\n+281 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n+1)*k+1 ;\n+282 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);\n+283 }\n+284\n+285 return result;\n+286 }\n+287\n+293 template\n+_\b2_\b9_\b4 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+295 {\n+296 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n+297 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+298\n+299 // throw if Element is not of predefined type\n+300 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n+301 DUNE_THROW(Dune::NotImplemented, \"RaviartThomasBasis only implemented for\n+cube and simplex elements.\");\n+302\n+303 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_\b2_\b4 FiniteElementMap _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n+325 // Number of dofs per entity type depending on the entity's codimension and\n+type\n+_\b3_\b2_\b6 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_;\n+327};\n+328\n+329\n+330\n+331template\n+_\b3_\b3_\b2class _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be :\n+333 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+334{\n+335 static const int dim = GV::dimension;\n+336\n+337public:\n+338\n+_\b3_\b3_\b9 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b3_\b4_\b0 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b3_\b4_\b1 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::\n+RaviartThomasLocalFiniteElementMap;\n+_\b3_\b4_\b2 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n+345\n+_\b3_\b4_\b6 _\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+347 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+348 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n+349 { }\n+350\n+_\b3_\b5_\b2 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+353 {\n+354 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+355 }\n+356\n+_\b3_\b6_\b1 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+362 {\n+363 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+364 }\n+365\n+_\b3_\b6_\b7 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+368 {\n+369 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+370 _\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+371 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n+372 }\n+373\n+374protected:\n+375\n+_\b3_\b7_\b6 _\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_\b7_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b3_\b7_\b8 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+379};\n+380\n+381namespace BasisFactory {\n+382\n+390template\n+_\b3_\b9_\b1auto _\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs()\n+392{\n+393 return [](const auto& gridView) {\n+394 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+395 };\n+396}\n+397\n+398} // end namespace BasisFactory\n+399\n+400\n+401\n+402/\n+/ *****************************************************************************\n+403// This is the actual global basis implementation based on the reusable\n+parts.\n+404/\n+/ *****************************************************************************\n+405\n+413template\n+_\b4_\b1_\b4using _\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+415\n+416} // end namespace Functions\n+417} // end namespace Dune\n+418\n+419\n+420#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:391\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:23\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:28\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:30\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:29\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: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:_\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:35\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: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_\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:46\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:142\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:164\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:186\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: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:_\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:341\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:367\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:344\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: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:_\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:377\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:361\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:339\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:346\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:352\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:376\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:378\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:192\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_\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 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_\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 raviartthomasbasis.hh:204\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:250\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:326\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:242\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:209\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:200\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:236\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:294\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_\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 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:_\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:324\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\n+size_type size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:255\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:269\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:199\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:274\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: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_\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 possible values for next position in multi index.\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:_\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:228\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:323\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": "@@ -82,16 +82,16 @@\n
    \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/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"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html", "unified_diff": "@@ -90,16 +90,16 @@\n
    7#include <type_traits>
    \n
    8#include <utility>
    \n
    9
    \n
    10#include <dune/common/reservedvector.hh>
    \n
    11#include <dune/common/typeutilities.hh>
    \n
    12#include <dune/common/concept.hh>
    \n
    13
    \n-\n-\n+\n+\n \n
    17
    \n
    18
    \n
    19
    \n
    20namespace Dune {
    \n
    21namespace Functions {
    \n
    22
    \n@@ -260,16 +260,16 @@\n
    204
    \n
    205} // end namespace Functions
    \n
    206} // end namespace Dune
    \n
    207
    \n
    208
    \n
    209
    \n
    210#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n-\n-\n+\n+\n
    typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:26
    \n
    Definition polynomial.hh:10
    \n
    auto makeBasis(const GridView &gridView, PreBasisFactory &&preBasisFactory)
    Definition defaultglobalbasis.hh:190
    \n
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n
    Dune::ReservedVector< std::size_t, PreBasis::multiIndexBufferSize > SizePrefix
    Type used for prefixes handed to the size() method.
    Definition defaultglobalbasis.hh:69
    \n
    std::size_t size_type
    Type used for indices and size information.
    Definition defaultglobalbasis.hh:60
    \n
    typename PreBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition defaultglobalbasis.hh:57
    \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: subspacelocalview.hh File Reference\n+dune-functions: periodicbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,37 +71,52 @@\n \n \n \n
    \n \n-
    subspacelocalview.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    periodicbasis.hh File Reference
    \n \n
    \n-
    #include <tuple>
    \n-#include <dune/common/concept.hh>
    \n-#include <dune/typetree/childextraction.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/transformedindexbasis.hh>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Classes

    class  Dune::Functions::DefaultGlobalBasis< PB >
    \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::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+Functions

    template<class RawPreBasisIndicator , class PIS >
    auto Dune::Functions::BasisFactory::Experimental::periodic (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)
     Create a pre-basis factory that can create a periodic pre-basis.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,38 @@\n dune-functions\u00a02.9.0\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+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+periodicbasis.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\be_\bd_\bi_\bn_\bd_\be_\bx_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\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:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt\n+\u00a0 Container storing identified indices for a periodic basis. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bE_\bx_\bp_\be_\br_\bi_\bm_\be_\bn_\bt_\ba_\bl_\b:_\b:_\bp_\be_\br_\bi_\bo_\bd_\bi_\bc\n+ (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)\n+\u00a0 Create a pre-basis factory that can create a periodic pre-basis.\n+\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: subspacelocalview.hh Source File\n+dune-functions: periodicbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,186 +74,213 @@\n \n \n
    \n
    \n-
    subspacelocalview.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH
    \n
    5
    \n-
    6
    \n-
    7#include <tuple>
    \n-
    8
    \n-
    9#include <dune/common/concept.hh>
    \n-
    10
    \n-
    11#include <dune/typetree/childextraction.hh>
    \n-
    12
    \n-\n+
    6#include <utility>
    \n+
    7#include <type_traits>
    \n+
    8#include <limits>
    \n+
    9#include <set>
    \n+
    10#include <vector>
    \n+
    11
    \n+\n+\n
    14
    \n
    15
    \n-
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n+
    16namespace Dune::Functions {
    \n+
    17
    \n+
    18namespace BasisFactory {
    \n
    19
    \n-
    20
    \n-
    21
    \n-
    22template<class RB, class PP>
    \n-
    23class SubspaceBasis;
    \n-
    24
    \n+
    20// The PeriodicBasis class is in the Experimental namespace because we are
    \n+
    21// not completely sure yet whether we like it. We reserve the right to
    \n+
    22// modify it without advance warning. Use at your own risk!
    \n+
    23
    \n+
    \n+
    24namespace Experimental {
    \n
    25
    \n
    26
    \n-
    28template<class RLV, class PP>
    \n-
    \n-\n-
    30{
    \n-
    31 using PrefixPath = PP;
    \n-
    32
    \n-
    33public:
    \n-
    34
    \n-
    35 using RootLocalView = RLV;
    \n-
    36
    \n-\n+
    \n+\n+
    36{
    \n+
    37 using IndexPairSet = std::set<std::pair<std::size_t,std::size_t>>;
    \n+
    38public:
    \n
    39
    \n-\n-
    42
    \n-
    44 using Element = typename GridView::template Codim<0>::Entity;
    \n-
    45
    \n-
    47 using size_type = std::size_t;
    \n-
    48
    \n-
    50 using RootTree = typename RootLocalView::Tree;
    \n-
    51
    \n-
    53 using Tree = typename TypeTree::ChildForTreePath<RootTree, PrefixPath>;
    \n-
    54
    \n-
    56 using MultiIndex = typename RootLocalView::MultiIndex;
    \n-
    57
    \n-
    \n-
    59 SubspaceLocalView(const GlobalBasis& globalBasis, const PrefixPath& /*prefixPath*/) :
    \n-\n-
    61 rootLocalView_(globalBasis.rootBasis().localView())
    \n-
    62 {
    \n-
    63// static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to SubspaceLocalView does not model the BasisNode concept.");
    \n-
    64 }
    \n+
    \n+
    47 void unifyIndexPair(std::size_t a, std::size_t b)
    \n+
    48 {
    \n+
    49 if (a>b)
    \n+
    50 std::swap(a,b);
    \n+
    51 if (a==b)
    \n+
    52 return;
    \n+
    53 indexPairSet_.insert(std::make_pair(a,b));
    \n+
    54 }
    \n+
    \n+
    55
    \n+
    \n+
    56 const auto& indexPairSet() const
    \n+
    57 {
    \n+
    58 return indexPairSet_;
    \n+
    59 }
    \n+
    \n+
    60
    \n+
    61private:
    \n+
    62 IndexPairSet indexPairSet_;
    \n+
    63};
    \n
    \n+
    64
    \n
    65
    \n-
    \n-
    71 void bind(const Element& e)
    \n-
    72 {
    \n-
    73 rootLocalView_.bind(e);
    \n-
    74 }
    \n-
    \n+
    66
    \n+
    67namespace Impl {
    \n+
    68
    \n+
    69// An index transformation for a TransformedIndexPreBasis
    \n+
    70// implementing periodic functions by merging indices.
    \n+
    71// Currently only flat indices are supported.
    \n+
    72class PeriodicIndexingTransformation
    \n+
    73{
    \n+
    74public:
    \n
    75
    \n-
    \n-
    80 const Element& element() const
    \n-
    81 {
    \n-
    82 return rootLocalView_.element();
    \n-
    83 }
    \n-
    \n-
    84
    \n-
    \n-
    89 void unbind()
    \n-
    90 {
    \n-
    91 rootLocalView_.unbind();
    \n-
    92 }
    \n-
    \n-
    93
    \n-
    \n-
    96 bool bound() const
    \n-
    97 {
    \n-
    98 return rootLocalView_.bound();
    \n-
    99 }
    \n-
    \n-
    100
    \n-
    \n-
    105 const Tree& tree() const
    \n-
    106 {
    \n-
    107 return TypeTree::child(rootLocalView_.tree(), globalBasis_->prefixPath());
    \n-
    108 }
    \n-
    \n-
    109
    \n-
    \n-\n-
    113 {
    \n-
    114 return rootLocalView_.size();
    \n-
    115 }
    \n-
    \n-
    116
    \n-
    \n-\n-
    124 {
    \n-
    125 return rootLocalView_.maxSize();
    \n-
    126 }
    \n-
    \n-
    127
    \n-
    \n-\n-
    130 {
    \n-
    131 return rootLocalView_.index(i);
    \n-
    132 }
    \n-
    \n-
    133
    \n-
    \n-\n-
    137 {
    \n-
    138 return *globalBasis_;
    \n-
    139 }
    \n-
    \n-
    140
    \n-
    \n-\n-
    142 {
    \n-
    143 return rootLocalView_;
    \n-
    144 }
    \n-
    \n-
    145
    \n-
    146protected:
    \n-\n-\n-
    149};
    \n-
    \n-
    150
    \n-
    151
    \n-
    152
    \n-
    153} // end namespace Functions
    \n-
    154} // end namespace Dune
    \n-
    155
    \n+
    76 static constexpr std::size_t minIndexSize = 1;
    \n+
    77 static constexpr std::size_t maxIndexSize = 1;
    \n+
    78
    \n+
    79 template<class RawPreBasis, class IndexPairSet>
    \n+
    80 PeriodicIndexingTransformation(const RawPreBasis& rawPreBasis, const IndexPairSet& indexPairSet)
    \n+
    81 {
    \n+
    82 static_assert(RawPreBasis::maxMultiIndexSize==1, "PeriodicIndexingTransformation is only implemented for flat multi-indices");
    \n+
    83 std::size_t invalid = {std::numeric_limits<std::size_t>::max()};
    \n+
    84 mappedIdx_.resize(rawPreBasis.size(), invalid);
    \n+
    85 numIndices_ = 0;
    \n+
    86 std::size_t i = 0;
    \n+
    87 for(const auto& [a, b] : indexPairSet)
    \n+
    88 {
    \n+
    89 for(; i<=a; ++i)
    \n+
    90 if (mappedIdx_[i] == invalid)
    \n+
    91 mappedIdx_[i] = numIndices_++;
    \n+
    92 mappedIdx_[b] = mappedIdx_[a];
    \n+
    93 }
    \n+
    94 for(; i<rawPreBasis.size(); ++i)
    \n+
    95 if (mappedIdx_[i] == invalid)
    \n+
    96 mappedIdx_[i] = numIndices_++;
    \n+
    97 }
    \n+
    98
    \n+
    99 template<class MultiIndex, class PreBasis>
    \n+
    100 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const
    \n+
    101 {
    \n+
    102 multiIndex = {{ mappedIdx_[multiIndex[0]] }};
    \n+
    103 }
    \n+
    104
    \n+
    105 template<class Prefix, class PreBasis>
    \n+
    106 std::size_t size(const Prefix& prefix, const PreBasis& preBasis) const
    \n+
    107 {
    \n+
    108 if (prefix.size() == 1)
    \n+
    109 return 0;
    \n+
    110 return numIndices_;
    \n+
    111 }
    \n+
    112
    \n+
    113 template<class PreBasis>
    \n+
    114 auto dimension(const PreBasis& preBasis) const
    \n+
    115 {
    \n+
    116 return numIndices_;
    \n+
    117 }
    \n+
    118
    \n+
    119private:
    \n+
    120 std::vector<std::size_t> mappedIdx_;
    \n+
    121 std::size_t numIndices_;
    \n+
    122};
    \n+
    123
    \n+
    124
    \n+
    125
    \n+
    126template<class RawPreBasisIndicator>
    \n+
    127class PeriodicPreBasisFactory
    \n+
    128{
    \n+
    129public:
    \n+
    130 PeriodicPreBasisFactory()
    \n+
    131 {}
    \n+
    132
    \n+
    133 template<class RPBI, class PIS>
    \n+
    134 PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&& periodicIndexSet) :
    \n+
    135 rawPreBasisIndicator_(std::forward<RPBI>(rawPreBasisIndicator)),
    \n+
    136 periodicIndexSet_(std::forward<PIS>(periodicIndexSet))
    \n+
    137 {}
    \n+
    138
    \n+
    139 template<class GridView,
    \n+
    140 std::enable_if_t<models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n+
    141 auto operator()(const GridView& gridView) const
    \n+
    142 {
    \n+
    143 const auto& rawPreBasis = rawPreBasisIndicator_.preBasis();
    \n+
    144 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n+
    145 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n+
    146 }
    \n+
    147
    \n+
    148 template<class GridView,
    \n+
    149 std::enable_if_t<models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n+
    150 auto operator()(const GridView& gridView) const
    \n+
    151 {
    \n+
    152 const auto& rawPreBasis = rawPreBasisIndicator_;
    \n+
    153 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n+
    154 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n+
    155 }
    \n
    156
    \n-
    157
    \n-
    158#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n-
    Definition polynomial.hh:10
    \n-
    SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >
    \n-
    Definition subspacebasis.hh:38
    \n-
    typename RootBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition subspacebasis.hh:48
    \n-
    const PrefixPath & prefixPath() const
    Definition subspacebasis.hh:118
    \n-
    The restriction of a finite element basis to a single element.
    Definition subspacelocalview.hh:30
    \n-
    typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree
    Tree of local finite elements / local shape function sets.
    Definition subspacelocalview.hh:53
    \n-
    void unbind()
    Unbind from the current element.
    Definition subspacelocalview.hh:89
    \n-
    const Element & element() const
    Return the grid element that the view is bound to.
    Definition subspacelocalview.hh:80
    \n-
    const GlobalBasis * globalBasis_
    Definition subspacelocalview.hh:147
    \n-
    bool bound() const
    Return if the view is bound to a grid element.
    Definition subspacelocalview.hh:96
    \n-
    typename RootLocalView::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition subspacelocalview.hh:56
    \n-
    size_type size() const
    Total number of degrees of freedom on this element.
    Definition subspacelocalview.hh:112
    \n-
    RootLocalView rootLocalView_
    Definition subspacelocalview.hh:148
    \n-
    void bind(const Element &e)
    Bind the view to a grid element.
    Definition subspacelocalview.hh:71
    \n-
    typename GlobalBasis::GridView GridView
    The grid view the global FE basis lives on.
    Definition subspacelocalview.hh:41
    \n-
    SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)
    Construct local view for a given global finite element basis.
    Definition subspacelocalview.hh:59
    \n-
    RLV RootLocalView
    Definition subspacelocalview.hh:35
    \n-
    const RootLocalView & rootLocalView() const
    Definition subspacelocalview.hh:141
    \n-
    std::size_t size_type
    The type used for sizes.
    Definition subspacelocalview.hh:47
    \n-
    typename GridView::template Codim< 0 >::Entity Element
    Type of the grid element we are bound to.
    Definition subspacelocalview.hh:44
    \n-
    const GlobalBasis & globalBasis() const
    Return the global basis that we are a view on.
    Definition subspacelocalview.hh:136
    \n-
    size_type maxSize() const
    Maximum local size for any element on the GridView.
    Definition subspacelocalview.hh:123
    \n-
    const Tree & tree() const
    Return the local ansatz tree associated to the bound entity.
    Definition subspacelocalview.hh:105
    \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:129
    \n-
    typename RootLocalView::Tree RootTree
    Tree of local finite elements / local shape function sets.
    Definition subspacelocalview.hh:50
    \n+
    157 template<class GridView,
    \n+
    158 std::enable_if_t<not models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0,
    \n+
    159 std::enable_if_t<not models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n+
    160 auto operator()(const GridView& gridView) const
    \n+
    161 {
    \n+
    162 auto rawPreBasis = rawPreBasisIndicator_(gridView);
    \n+
    163 rawPreBasis.initializeIndices();
    \n+
    164 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n+
    165 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n+
    166 }
    \n+
    167
    \n+
    168private:
    \n+
    169 RawPreBasisIndicator rawPreBasisIndicator_;
    \n+
    170 PeriodicIndexSet periodicIndexSet_;
    \n+
    171};
    \n+
    172
    \n+
    173} // end namespace BasisFactory::Impl
    \n+
    174
    \n+
    175
    \n+
    176
    \n+
    190template<class RawPreBasisIndicator, class PIS>
    \n+
    \n+\n+
    192 RawPreBasisIndicator&& rawPreBasisIndicator,
    \n+
    193 PIS&& periodicIndexSet
    \n+
    194 )
    \n+
    195{
    \n+
    196 return Impl::PeriodicPreBasisFactory<std::decay_t<RawPreBasisIndicator>>(
    \n+
    197 std::forward<RawPreBasisIndicator>(rawPreBasisIndicator),
    \n+
    198 std::forward<PIS>(periodicIndexSet));
    \n+
    199}
    \n+
    \n+
    200
    \n+
    201} // end namespace Experimental
    \n+
    \n+
    202
    \n+
    203} // end namespace BasisFactory
    \n+
    204
    \n+
    205} // end namespace Dune::Functions
    \n+
    206
    \n+
    207#endif // DUNE_FUFEM_PERIODICBASIS_HH
    \n+\n+
    auto periodic(RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)
    Create a pre-basis factory that can create a periodic pre-basis.
    Definition periodicbasis.hh:191
    \n+
    Definition polynomial.hh:11
    \n+
    Container storing identified indices for a periodic basis.
    Definition periodicbasis.hh:36
    \n+
    void unifyIndexPair(std::size_t a, std::size_t b)
    Insert a pair of indices.
    Definition periodicbasis.hh:47
    \n+
    const auto & indexPairSet() const
    Definition periodicbasis.hh:56
    \n+
    A pre-basis transforming multi-indices.
    Definition transformedindexbasis.hh:52
    \n \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,227 +1,225 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n 5\n-6\n-7#include \n-8\n-9#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/_\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+6#include \n+7#include \n+8#include \n+9#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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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 14\n 15\n-16\n-17namespace _\bD_\bu_\bn_\be {\n-18namespace Functions {\n+16namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+17\n+18namespace BasisFactory {\n 19\n-20\n-21\n-22template\n-23class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs;\n-24\n+20// The PeriodicBasis class is in the Experimental namespace because we are\n+21// not completely sure yet whether we like it. We reserve the right to\n+22// modify it without advance warning. Use at your own risk!\n+23\n+_\b2_\b4namespace Experimental {\n 25\n 26\n-28template\n-_\b2_\b9class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-30{\n-31 using PrefixPath = PP;\n-32\n-33public:\n-34\n-_\b3_\b5 using _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = RLV;\n-36\n-_\b3_\b8 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+_\b3_\b5class _\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt\n+36{\n+37 using IndexPairSet = std::set>;\n+38public:\n 39\n-_\b4_\b1 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-42\n-_\b4_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GridView::template Codim<0>::Entity;\n-45\n-_\b4_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-48\n-_\b5_\b0 using _\bR_\bo_\bo_\bt_\bT_\br_\be_\be = typename RootLocalView::Tree;\n-51\n-_\b5_\b3 using _\bT_\br_\be_\be = typename TypeTree::ChildForTreePath;\n-54\n-_\b5_\b6 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename RootLocalView::MultiIndex;\n-57\n-_\b5_\b9 _\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-60 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(&_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs),\n-61 _\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-62 {\n-63// static_assert(models, Tree>(), \"Tree type\n-passed to SubspaceLocalView does not model the BasisNode concept.\");\n-64 }\n+_\b4_\b7 void _\bu_\bn_\bi_\bf_\by_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br(std::size_t a, std::size_t b)\n+48 {\n+49 if (a>b)\n+50 std::swap(a,b);\n+51 if (a==b)\n+52 return;\n+53 indexPairSet_.insert(std::make_pair(a,b));\n+54 }\n+55\n+_\b5_\b6 const auto& _\bi_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bS_\be_\bt() const\n+57 {\n+58 return indexPairSet_;\n+59 }\n+60\n+61private:\n+62 IndexPairSet indexPairSet_;\n+63};\n+64\n 65\n-_\b7_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-72 {\n-73 _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bind(e);\n-74 }\n+66\n+67namespace Impl {\n+68\n+69// An index transformation for a TransformedIndexPreBasis\n+70// implementing periodic functions by merging indices.\n+71// Currently only flat indices are supported.\n+72class PeriodicIndexingTransformation\n+73{\n+74public:\n 75\n-_\b8_\b0 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+76 static constexpr std::size_t minIndexSize = 1;\n+77 static constexpr std::size_t maxIndexSize = 1;\n+78\n+79 template\n+80 PeriodicIndexingTransformation(const RawPreBasis& rawPreBasis, const\n+IndexPairSet& indexPairSet)\n 81 {\n-82 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.element();\n-83 }\n-84\n-_\b8_\b9 void _\bu_\bn_\bb_\bi_\bn_\bd()\n-90 {\n-91 _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.unbind();\n-92 }\n-93\n-_\b9_\b6 bool _\bb_\bo_\bu_\bn_\bd() const\n-97 {\n-98 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bound();\n-99 }\n-100\n-_\b1_\b0_\b5 const _\bT_\br_\be_\be& _\bt_\br_\be_\be() const\n-106 {\n-107 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-108 }\n-109\n-_\b1_\b1_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-113 {\n-114 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.size();\n-115 }\n-116\n-_\b1_\b2_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bS_\bi_\bz_\be() const\n-124 {\n-125 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize();\n-126 }\n-127\n-_\b1_\b2_\b9 _\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-130 {\n-131 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.index(i);\n-132 }\n-133\n-_\b1_\b3_\b6 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-137 {\n-138 return *_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n-139 }\n-140\n-_\b1_\b4_\b1 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+82 static_assert(RawPreBasis::maxMultiIndexSize==1,\n+\"PeriodicIndexingTransformation is only implemented for flat multi-indices\");\n+83 std::size_t invalid = {std::numeric_limits::max()};\n+84 mappedIdx_.resize(rawPreBasis.size(), invalid);\n+85 numIndices_ = 0;\n+86 std::size_t i = 0;\n+87 for(const auto& [a, b] : indexPairSet)\n+88 {\n+89 for(; i<=a; ++i)\n+90 if (mappedIdx_[i] == invalid)\n+91 mappedIdx_[i] = numIndices_++;\n+92 mappedIdx_[b] = mappedIdx_[a];\n+93 }\n+94 for(; i\n+100 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const\n+101 {\n+102 multiIndex = {{ mappedIdx_[multiIndex[0]] }};\n+103 }\n+104\n+105 template\n+106 std::size_t size(const Prefix& prefix, const PreBasis& preBasis) const\n+107 {\n+108 if (prefix.size() == 1)\n+109 return 0;\n+110 return numIndices_;\n+111 }\n+112\n+113 template\n+114 auto dimension(const PreBasis& preBasis) const\n+115 {\n+116 return numIndices_;\n+117 }\n+118\n+119private:\n+120 std::vector mappedIdx_;\n+121 std::size_t numIndices_;\n+122};\n+123\n+124\n+125\n+126template\n+127class PeriodicPreBasisFactory\n+128{\n+129public:\n+130 PeriodicPreBasisFactory()\n+131 {}\n+132\n+133 template\n+134 PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&&\n+periodicIndexSet) :\n+135 rawPreBasisIndicator_(std::forward(rawPreBasisIndicator)),\n+136 periodicIndexSet_(std::forward(periodicIndexSet))\n+137 {}\n+138\n+139 template,RawPreBasisIndicator>(), int> = 0>\n+141 auto operator()(const GridView& gridView) const\n 142 {\n-143 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n-144 }\n-145\n-146protected:\n-_\b1_\b4_\b7 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_\b4_\b8 _\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-149};\n-150\n-151\n-152\n-153} // end namespace Functions\n-154} // end namespace Dune\n-155\n+143 const auto& rawPreBasis = rawPreBasisIndicator_.preBasis();\n+144 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n+periodicIndexSet_.indexPairSet());\n+145 return _\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+146 }\n+147\n+148 template,RawPreBasisIndicator>\n+(), int> = 0>\n+150 auto operator()(const GridView& gridView) const\n+151 {\n+152 const auto& rawPreBasis = rawPreBasisIndicator_;\n+153 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n+periodicIndexSet_.indexPairSet());\n+154 return _\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+155 }\n 156\n-157\n-158#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:10\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:38\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: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_\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:118\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:30\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:53\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:89\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt\n-const Element & element() const\n-Return the grid element that the view is bound to.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:80\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:147\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:96\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:56\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: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_\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:148\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind the view to a grid element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:71\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:41\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:59\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:35\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:141\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-The type used for sizes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh: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_\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: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_\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:136\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:123\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:105\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: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_\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:50\n+157 template,RawPreBasisIndicator>(), int> = 0,\n+159 std::enable_if_t,RawPreBasisIndicator>(), int> = 0>\n+160 auto operator()(const GridView& gridView) const\n+161 {\n+162 auto rawPreBasis = rawPreBasisIndicator_(gridView);\n+163 rawPreBasis.initializeIndices();\n+164 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n+periodicIndexSet_.indexPairSet());\n+165 return _\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+166 }\n+167\n+168private:\n+169 RawPreBasisIndicator rawPreBasisIndicator_;\n+170 PeriodicIndexSet periodicIndexSet_;\n+171};\n+172\n+173} // end namespace BasisFactory::Impl\n+174\n+175\n+176\n+190template\n+_\b1_\b9_\b1auto _\bp_\be_\br_\bi_\bo_\bd_\bi_\bc(\n+192 RawPreBasisIndicator&& rawPreBasisIndicator,\n+193 PIS&& periodicIndexSet\n+194 )\n+195{\n+196 return Impl::PeriodicPreBasisFactory>(\n+197 std::forward(rawPreBasisIndicator),\n+198 std::forward(periodicIndexSet));\n+199}\n+200\n+201} // end namespace Experimental\n+202\n+203} // end namespace BasisFactory\n+204\n+205} // end namespace Dune::Functions\n+206\n+207#endif // DUNE_FUFEM_PERIODICBASIS_HH\n+_\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:191\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:11\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:36\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: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:_\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:56\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:52\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/a00035.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00035.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: brezzidouglasmarinibasis.hh File Reference\n+dune-functions: hierarchicallagrangebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -74,62 +74,55 @@\n
    \n
    \n \n-
    brezzidouglasmarinibasis.hh File Reference
    \n+
    hierarchicallagrangebasis.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/common/exceptions.hh>
    \n+#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n #include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n+#include <dune/grid/common/mcmgmapper.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::BrezziDouglasMariniPreBasis< GV, k >
    class  Dune::Functions::HierarchicalLagrangePreBasis< GV, k, R >
     A pre-basis for a hierarchical basis. More...
     
    class  Dune::Functions::BrezziDouglasMariniNode< GV, k >
    class  Dune::Functions::HierarchicalLagrangeNode< 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::BrezziDouglasMariniBasis = DefaultGlobalBasis< BrezziDouglasMariniPreBasis< GV, k > >
     Basis of a scalar k-th-order BDM finite element space on simplex and cube grids.
     
    template<typename GV , int k, 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 Functions

    template<std::size_t k>
    auto Dune::Functions::BasisFactory::brezziDouglasMarini ()
     Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.
     
    template<std::size_t k, typename R = double>
    auto Dune::Functions::BasisFactory::hierarchicalLagrange ()
     Create a pre-basis 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": "@@ -2,54 +2,41 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\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+hierarchicallagrangebasis.hh File Reference\n #include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\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 \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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 \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bG_\bV_\b,_\b _\bk_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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 _\bk_\b,_\b _\bR_\b _\b>\n+\u00a0 A pre-basis for a hierarchical 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_\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_\ba_\bl_\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:_\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+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k, R > >\n+\u00a0 Basis of a scalar Hierarchical Lagrange finite element space.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\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+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 Create a pre-basis factory that can create a HierarchicalLagrange 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/a00035_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: brezzidouglasmarinibasis.hh Source File\n+dune-functions: hierarchicallagrangebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,421 +74,301 @@\n \n \n
    \n
    \n-
    brezzidouglasmarinibasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n
    5
    \n-
    6#include <array>
    \n-
    7#include <dune/common/exceptions.hh>
    \n-
    8#include <dune/geometry/referenceelements.hh>
    \n-
    9
    \n-
    10#include <dune/localfunctions/common/virtualinterface.hh>
    \n-
    11#include <dune/localfunctions/common/virtualwrappers.hh>
    \n+
    6#include <dune/common/exceptions.hh>
    \n+
    7#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>
    \n+
    8
    \n+\n+\n+
    11#include <dune/grid/common/mcmgmapper.hh>
    \n
    12
    \n-
    13#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh>
    \n-
    14#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>
    \n-
    15#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>
    \n-
    16#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>
    \n-
    17#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh>
    \n-
    18
    \n-\n-\n-\n-
    22
    \n-
    23namespace Dune {
    \n-
    24namespace Functions {
    \n-
    25
    \n-
    26namespace Impl {
    \n-
    27
    \n-
    28 template<int dim, typename D, typename R, std::size_t k>
    \n-
    29 struct BDMSimplexLocalInfo
    \n-
    30 {
    \n-
    31 static_assert((AlwaysFalse<D>::value),"The requested type of BDM element is not implemented, sorry!");
    \n-
    32 };
    \n-
    33
    \n-
    34 template<typename D, typename R>
    \n-
    35 struct BDMSimplexLocalInfo<2,D,R,1>
    \n-
    36 {
    \n-
    37 using FiniteElement = BDM1Simplex2DLocalFiniteElement<D,R>;
    \n-
    38 static const std::size_t Variants = 8;
    \n-
    39 };
    \n-
    40
    \n-
    41 template<typename D, typename R>
    \n-
    42 struct BDMSimplexLocalInfo<2,D,R,2>
    \n-
    43 {
    \n-
    44 using FiniteElement = BDM2Simplex2DLocalFiniteElement<D,R>;
    \n-
    45 static const std::size_t Variants = 8;
    \n-
    46 };
    \n-
    47
    \n-
    48 template<int dim, typename D, typename R, std::size_t k>
    \n-
    49 struct BDMCubeLocalInfo
    \n-
    50 {
    \n-
    51 static_assert((AlwaysFalse<D>::value),"The requested type of BDM element is not implemented, sorry!");
    \n-
    52 };
    \n+
    13namespace Dune {
    \n+
    14 namespace Functions {
    \n+
    15
    \n+
    16 // *****************************************************************************
    \n+
    17 // Implementation for Hierarchical Lagrange Basis
    \n+
    18 //
    \n+
    19 // -- only order k=2 is implemented up to now --
    \n+
    20 // -- currently only supports simplex grids --
    \n+
    21 //
    \n+
    22 // This is the reusable part of the HierarchicalLagrangeBasis. It contains
    \n+
    23 //
    \n+
    24 // HierarchicalLagrangePreBasis
    \n+
    25 // HierarchicalLagrangeNode
    \n+
    26 //
    \n+
    27 // The pre-basis allows to create the others and is the owner of possible shared
    \n+
    28 // state. These components do _not_ depend on the global basis and can be
    \n+
    29 // used without a global basis.
    \n+
    30 // *****************************************************************************
    \n+
    31
    \n+
    32 template<typename GV, int k, typename R=double>
    \n+
    33 class HierarchicalLagrangeNode;
    \n+
    34
    \n+
    35 template<typename GV, int k, typename R=double>
    \n+
    36 class HierarchicalLagrangePreBasis;
    \n+
    37
    \n+
    47 template<typename GV, int k, typename R>
    \n+
    \n+\n+
    49 {
    \n+
    50 static const int dim = GV::dimension;
    \n+
    51
    \n+
    52 public:
    \n
    53
    \n-
    54 template<typename D, typename R>
    \n-
    55 struct BDMCubeLocalInfo<2,D,R,1>
    \n-
    56 {
    \n-
    57 using FiniteElement = BDM1Cube2DLocalFiniteElement<D,R>;
    \n-
    58 static const std::size_t Variants = 16;
    \n-
    59 };
    \n-
    60
    \n-
    61 template<typename D, typename R>
    \n-
    62 struct BDMCubeLocalInfo<2,D,R,2>
    \n-
    63 {
    \n-
    64 using FiniteElement = BDM2Cube2DLocalFiniteElement<D,R>;
    \n-
    65 static const std::size_t Variants = 16;
    \n-
    66 };
    \n-
    67
    \n-
    68 template<typename D, typename R>
    \n-
    69 struct BDMCubeLocalInfo<3,D,R,1>
    \n-
    70 {
    \n-
    71 using FiniteElement = BDM1Cube3DLocalFiniteElement<D,R>;
    \n-
    72 static const std::size_t Variants = 64;
    \n-
    73 };
    \n-
    74
    \n-
    75 template<typename GV, int dim, typename R, std::size_t k>
    \n-
    76 class BDMLocalFiniteElementMap
    \n-
    77 {
    \n-
    78 using D = typename GV::ctype;
    \n-
    79 using CubeFiniteElement = typename BDMCubeLocalInfo<dim, D, R, k>::FiniteElement;
    \n-
    80 using SimplexFiniteElement = typename BDMSimplexLocalInfo<dim, D, R, k>::FiniteElement;
    \n-
    81
    \n-
    82 public:
    \n+
    55 using GridView = GV;
    \n+
    56
    \n+
    58 using size_type = std::size_t;
    \n+
    59
    \n+\n+
    62
    \n+
    63 static constexpr size_type maxMultiIndexSize = 1;
    \n+
    64 static constexpr size_type minMultiIndexSize = 1;
    \n+
    65 static constexpr size_type multiIndexBufferSize = 1;
    \n+
    66
    \n+
    \n+\n+
    72 {}
    \n+
    \n+
    73
    \n+
    \n+\n+
    76 {}
    \n+
    \n+
    77
    \n+
    \n+
    79 const GridView& gridView() const
    \n+
    80 {
    \n+
    81 return gridView_;
    \n+
    82 }
    \n+
    \n
    83
    \n-
    84 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n-
    85 using FiniteElement = LocalFiniteElementVirtualInterface<T>;
    \n-
    86
    \n-
    87 BDMLocalFiniteElementMap(const GV& gv)
    \n-
    88 : is_(&(gv.indexSet())), orient_(gv.size(0))
    \n-
    89 {
    \n-
    90 cubeVariant_.resize(BDMCubeLocalInfo<dim, D, R, k>::Variants);
    \n-
    91 simplexVariant_.resize(BDMSimplexLocalInfo<dim, D, R, k>::Variants);
    \n-
    92
    \n-
    93 // create all variants
    \n-
    94 for (size_t i = 0; i < cubeVariant_.size(); i++)
    \n-
    95 cubeVariant_[i] = std::make_unique<LocalFiniteElementVirtualImp<CubeFiniteElement> >(CubeFiniteElement(i));
    \n-
    96
    \n-
    97 for (size_t i = 0; i < simplexVariant_.size(); i++)
    \n-
    98 simplexVariant_[i] = std::make_unique<LocalFiniteElementVirtualImp<SimplexFiniteElement> >(SimplexFiniteElement(i));
    \n-
    99
    \n-
    100 // compute orientation for all elements
    \n-
    101 // loop once over the grid
    \n-
    102 for(const auto& cell : elements(gv))
    \n-
    103 {
    \n-
    104 unsigned int myId = is_->index(cell);
    \n-
    105 orient_[myId] = 0;
    \n-
    106
    \n-
    107 for (const auto& intersection : intersections(gv,cell))
    \n-
    108 {
    \n-
    109 if (intersection.neighbor() && (is_->index(intersection.outside()) > myId))
    \n-
    110 orient_[myId] |= (1 << intersection.indexInInside());
    \n-
    111 }
    \n-
    112 }
    \n-
    113 }
    \n-
    114
    \n-
    116 template<class EntityType>
    \n-
    117 const FiniteElement& find(const EntityType& e) const
    \n-
    118 {
    \n-
    119 if (e.type().isCube())
    \n-
    120 return *cubeVariant_[orient_[is_->index(e)]];
    \n-
    121 else
    \n-
    122 return *simplexVariant_[orient_[is_->index(e)]];
    \n-
    123 }
    \n-
    124
    \n-
    125 private:
    \n-
    126 std::vector<std::unique_ptr<LocalFiniteElementVirtualImp<CubeFiniteElement> > > cubeVariant_;
    \n-
    127 std::vector<std::unique_ptr<LocalFiniteElementVirtualImp<SimplexFiniteElement> > > simplexVariant_;
    \n-
    128 const typename GV::IndexSet* is_;
    \n-
    129 std::vector<unsigned char> orient_;
    \n-
    130 };
    \n-
    131
    \n-
    132
    \n-
    133} // namespace Impl
    \n-
    134
    \n-
    135
    \n-
    136// *****************************************************************************
    \n-
    137// This is the reusable part of the basis. It contains
    \n-
    138//
    \n-
    139// BrezziDouglasMariniPreBasis
    \n-
    140// BrezziDouglasMariniNode
    \n-
    141//
    \n-
    142// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    143// state. These components do _not_ depend on the global basis and local view
    \n-
    144// and can be used without a global basis.
    \n-
    145// *****************************************************************************
    \n-
    146
    \n-
    147template<typename GV, int k>
    \n-
    148class BrezziDouglasMariniNode;
    \n+
    \n+
    85 void update (const GridView& gv)
    \n+
    86 {
    \n+
    87 gridView_ = gv;
    \n+
    88 mcmgMapper_.update(gv);
    \n+
    89 }
    \n+
    \n+
    90
    \n+
    \n+
    94 Node makeNode() const
    \n+
    95 {
    \n+
    96 return Node{};
    \n+
    97 }
    \n+
    \n+
    98
    \n+
    \n+\n+
    101 {
    \n+
    102 return mcmgMapper_.size();
    \n+
    103 }
    \n+
    \n+
    104
    \n+
    106 template<class SizePrefix>
    \n+
    \n+
    107 size_type size(const SizePrefix prefix) const
    \n+
    108 {
    \n+
    109 assert(prefix.size() == 0 || prefix.size() == 1);
    \n+
    110 return (prefix.size() == 0) ? size() : 0;
    \n+
    111 }
    \n+
    \n+
    112
    \n+
    \n+\n+
    115 {
    \n+
    116 return size();
    \n+
    117 }
    \n+
    \n+
    118
    \n+
    \n+\n+
    124 {
    \n+
    125 // That cast to unsigned int is necessary because GV::dimension is an enum
    \n+
    126 return Dune::binomial(std::size_t(order() + (unsigned int)GV::dimension),std::size_t(order()));
    \n+
    127 }
    \n+
    \n+
    128
    \n+
    129 template<typename It>
    \n+
    \n+
    130 It indices(const Node& node, It it) const
    \n+
    131 {
    \n+
    132 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it, ++i)
    \n+
    133 {
    \n+
    134 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    135 const auto& element = node.element();
    \n+
    136
    \n+
    137 *it = {{ (size_type)(mcmgMapper_.subIndex(element,localKey.subEntity(),localKey.codim())) }};
    \n+
    138 }
    \n+
    139 return it;
    \n+
    140 }
    \n+
    \n+
    141
    \n+
    142 protected:
    \n+\n+
    144
    \n+
    \n+
    145 unsigned int order() const
    \n+
    146 {
    \n+
    147 return 2;
    \n+
    148 }
    \n+
    \n
    149
    \n-
    150template<typename GV, int k>
    \n-
    \n-\n-
    152{
    \n-
    153 static const int dim = GV::dimension;
    \n-
    154 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;
    \n-
    155
    \n-
    156public:
    \n-
    157
    \n-
    159 using GridView = GV;
    \n-
    160 using size_type = std::size_t;
    \n-
    161
    \n-\n-
    163
    \n-
    164 static constexpr size_type maxMultiIndexSize = 1;
    \n-
    165 static constexpr size_type minMultiIndexSize = 1;
    \n-
    166 static constexpr size_type multiIndexBufferSize = 1;
    \n-
    167
    \n-
    \n-\n-
    170 gridView_(gv),
    \n-\n-
    172 {
    \n-
    173 // There is no inherent reason why the basis shouldn't work for grids with more than one
    \n-
    174 // element types. Somebody simply has to sit down and implement the missing bits.
    \n-
    175 if (gv.indexSet().types(0).size() > 1)
    \n-
    176 DUNE_THROW(Dune::NotImplemented, "Brezzi-Douglas-Marini basis is only implemented for grids with a single element type");
    \n-
    177 }
    \n-
    \n-
    178
    \n-
    \n-\n-
    180 {
    \n-
    181 codimOffset_[0] = 0;
    \n-
    182 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);
    \n-
    183 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] * gridView_.size(1);
    \n-
    184 }
    \n-
    \n-
    185
    \n-
    \n-
    188 const GridView& gridView() const
    \n-
    189 {
    \n-
    190 return gridView_;
    \n-
    191 }
    \n-
    \n-
    192
    \n-
    193 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n-
    \n-
    194 void update (const GridView& gv)
    \n-
    195 {
    \n-
    196 gridView_ = gv;
    \n-
    197 }
    \n+
    150 MultipleCodimMultipleGeomTypeMapper<GridView> mcmgMapper_;
    \n+
    151
    \n+
    152 private:
    \n+
    157 static auto p2Layout()
    \n+
    158 {
    \n+
    159 return [](Dune::GeometryType type, int gridDim)
    \n+
    160 {
    \n+
    161 if (type.isVertex())
    \n+
    162 return 1;
    \n+
    163 if (type.isLine())
    \n+
    164 return 1;
    \n+
    165 if (type.isTriangle())
    \n+
    166 return 0;
    \n+
    167 assert(type.isTetrahedron());
    \n+
    168 return 0;
    \n+
    169 };
    \n+
    170 }
    \n+
    171 };
    \n+
    \n+
    172
    \n+
    173
    \n+
    174
    \n+
    175 template<typename GV, int k, typename R>
    \n+
    \n+\n+
    177 public LeafBasisNode
    \n+
    178 {
    \n+
    179 static const int dim = GV::dimension;
    \n+
    180
    \n+
    181 public:
    \n+
    182
    \n+
    183 using size_type = std::size_t;
    \n+
    184 using Element = typename GV::template Codim<0>::Entity;
    \n+
    185 using FiniteElement = HierarchicalP2LocalFiniteElement<typename GV::ctype,R,dim>;
    \n+
    186
    \n+
    \n+\n+\n+
    189 element_(nullptr)
    \n+
    190 {}
    \n+
    \n+
    191
    \n+
    \n+
    193 const Element& element() const
    \n+
    194 {
    \n+
    195 return *element_;
    \n+
    196 }
    \n
    \n-
    198
    \n+
    197
    \n
    \n-\n-
    203 {
    \n-
    204 return Node{&finiteElementMap_};
    \n-
    205 }
    \n+\n+
    203 {
    \n+
    204 return finiteElement_;
    \n+
    205 }
    \n
    \n
    206
    \n-
    \n-\n-
    208 {
    \n-
    209 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] * gridView_.size(1); // only 2d
    \n-
    210 }
    \n-
    \n+
    \n+
    208 void bind(const Element& e)
    \n+
    209 {
    \n+
    210 element_ = &e;
    \n
    211
    \n-
    213 template<class SizePrefix>
    \n-
    \n-
    214 size_type size(const SizePrefix prefix) const
    \n-
    215 {
    \n-
    216 assert(prefix.size() == 0 || prefix.size() == 1);
    \n-
    217 return (prefix.size() == 0) ? size() : 0;
    \n-
    218 }
    \n-
    \n-
    219
    \n+
    212 if (e.type() != finiteElement_.type())
    \n+
    213 DUNE_THROW(Dune::Exception,
    \n+
    214 "HierarchicalLagrange-elements do not exist for elements of type " << e.type());
    \n+
    215
    \n+
    216 this->setSize(finiteElement_.size());
    \n+
    217 }
    \n+
    \n+
    218
    \n+
    219 protected:
    \n+
    220
    \n
    \n-\n-
    222 {
    \n-
    223 return size();
    \n-
    224 }
    \n+
    221 unsigned int order() const
    \n+
    222 {
    \n+
    223 return 2;
    \n+
    224 }
    \n
    \n
    225
    \n-
    \n-\n-
    227 {
    \n-
    228 // The implementation currently only supports grids with a single element type.
    \n-
    229 // We can therefore return the actual number of dofs here.
    \n-
    230 GeometryType elementType = *(gridView_.indexSet().types(0).begin());
    \n-
    231 size_t numFaces = ReferenceElements<double,dim>::general(elementType).size(1);
    \n-
    232 return dofsPerCodim_[0] + dofsPerCodim_[1] * numFaces;
    \n-
    233 }
    \n-
    \n-
    234
    \n-
    240 template<typename It>
    \n-
    \n-
    241 It indices(const Node& node, It it) const
    \n-
    242 {
    \n-
    243 const auto& gridIndexSet = gridView().indexSet();
    \n-
    244 const auto& element = node.element();
    \n-
    245
    \n-
    246 // throw if element is not of predefined type
    \n-
    247 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n-
    248 DUNE_THROW(Dune::NotImplemented, "BrezziDouglasMariniBasis only implemented for cube and simplex elements.");
    \n-
    249
    \n-
    250 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n-
    251 {
    \n-
    252 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    253
    \n-
    254 // The dimension of the entity that the current dof is related to
    \n-
    255 size_t subentity = localKey.subEntity();
    \n-
    256 size_t codim = localKey.codim();
    \n-
    257
    \n-
    258 *it = { codimOffset_[codim] +
    \n-
    259 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \n-
    260 }
    \n-
    261
    \n-
    262 return it;
    \n-
    263 }
    \n+\n+\n+
    228 };
    \n+
    \n+
    229
    \n+
    230
    \n+
    231
    \n+
    232 namespace BasisFactory {
    \n+
    233
    \n+
    242 template<std::size_t k, typename R=double>
    \n+
    \n+\n+
    244 {
    \n+
    245 return [](const auto& gridView) {
    \n+
    246 return HierarchicalLagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n+
    247 };
    \n+
    248 }
    \n
    \n+
    249
    \n+
    250 } // end namespace BasisFactory
    \n+
    251
    \n+
    262 template<typename GV, int k, typename R=double>
    \n+\n
    264
    \n-
    265protected:
    \n-\n-
    267 std::array<size_t,dim+1> codimOffset_;
    \n-
    268 FiniteElementMap finiteElementMap_;
    \n-
    269 // Number of dofs per entity type depending on the entity's codimension and type
    \n-
    270 std::array<int,2> dofsPerCodim_ {{dim*(k-1)*3, dim+(k-1)}};
    \n-
    271};
    \n-
    \n-
    272
    \n-
    273
    \n-
    274
    \n-
    275template<typename GV, int k>
    \n-
    \n-\n-
    277 public LeafBasisNode
    \n-
    278{
    \n-
    279 static const int dim = GV::dimension;
    \n-
    280
    \n-
    281public:
    \n-
    282
    \n-
    283 using size_type = std::size_t;
    \n-
    284 using Element = typename GV::template Codim<0>::Entity;
    \n-
    285 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;
    \n-
    286 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,
    \n-
    287 typename FiniteElementMap::FiniteElement,
    \n-
    288 Element>;
    \n-
    289
    \n-
    \n-
    290 BrezziDouglasMariniNode(const FiniteElementMap* finiteElementMap) :
    \n-
    291 element_(nullptr),
    \n-
    292 finiteElementMap_(finiteElementMap)
    \n-
    293 {}
    \n-
    \n-
    294
    \n-
    \n-
    296 const Element& element() const
    \n-
    297 {
    \n-
    298 return *element_;
    \n-
    299 }
    \n-
    \n-
    300
    \n-
    \n-\n-
    306 {
    \n-
    307 return finiteElement_;
    \n-
    308 }
    \n-
    \n-
    309
    \n-
    \n-
    311 void bind(const Element& e)
    \n-
    312 {
    \n-
    313 element_ = &e;
    \n-
    314 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n-
    315 this->setSize(finiteElement_.size());
    \n-
    316 }
    \n-
    \n-
    317
    \n-
    318protected:
    \n-
    319
    \n-\n-\n-\n-
    323};
    \n-
    \n-
    324
    \n-
    325
    \n-
    326
    \n-
    327namespace BasisFactory {
    \n-
    328
    \n-
    336template<std::size_t k>
    \n-
    \n-\n-
    338{
    \n-
    339 return [](const auto& gridView) {
    \n-
    340 return BrezziDouglasMariniPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n-
    341 };
    \n-
    342}
    \n-
    \n-
    343
    \n-
    344} // end namespace BasisFactory
    \n-
    345
    \n-
    346
    \n-
    347
    \n-
    348// *****************************************************************************
    \n-
    349// This is the actual global basis implementation based on the reusable parts.
    \n-
    350// *****************************************************************************
    \n-
    351
    \n-
    359template<typename GV, int k>
    \n-\n-
    361
    \n-
    362} // end namespace Functions
    \n-
    363} // end namespace Dune
    \n-
    364
    \n-
    365
    \n-
    366#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH
    \n+
    265 } // end namespace Functions
    \n+
    266} // end namespace Dune
    \n+
    267
    \n+
    268#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n \n-\n-\n-
    auto brezziDouglasMarini()
    Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.
    Definition brezzidouglasmarinibasis.hh:337
    \n+\n+
    auto hierarchicalLagrange()
    Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.
    Definition hierarchicallagrangebasis.hh:243
    \n
    Definition polynomial.hh:10
    \n-
    Definition brezzidouglasmarinibasis.hh:278
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition brezzidouglasmarinibasis.hh:305
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition brezzidouglasmarinibasis.hh:284
    \n-
    const FiniteElementMap * finiteElementMap_
    Definition brezzidouglasmarinibasis.hh:322
    \n-
    std::size_t size_type
    Definition brezzidouglasmarinibasis.hh:283
    \n-
    FiniteElement finiteElement_
    Definition brezzidouglasmarinibasis.hh:320
    \n-
    typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap
    Definition brezzidouglasmarinibasis.hh:285
    \n-
    const Element * element_
    Definition brezzidouglasmarinibasis.hh:321
    \n-
    Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition brezzidouglasmarinibasis.hh:288
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition brezzidouglasmarinibasis.hh:311
    \n-
    BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)
    Definition brezzidouglasmarinibasis.hh:290
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition brezzidouglasmarinibasis.hh:296
    \n-
    Definition brezzidouglasmarinibasis.hh:152
    \n-
    std::size_t size_type
    Definition brezzidouglasmarinibasis.hh:160
    \n-
    std::array< int, 2 > dofsPerCodim_
    Definition brezzidouglasmarinibasis.hh:270
    \n-
    size_type dimension() const
    Definition brezzidouglasmarinibasis.hh:221
    \n-
    static constexpr size_type minMultiIndexSize
    Definition brezzidouglasmarinibasis.hh:165
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition brezzidouglasmarinibasis.hh:164
    \n-
    std::array< size_t, dim+1 > codimOffset_
    Definition brezzidouglasmarinibasis.hh:267
    \n-
    size_type size(const SizePrefix prefix) const
    Return number possible values for next position in multi index.
    Definition brezzidouglasmarinibasis.hh:214
    \n-
    Node makeNode() const
    Create tree node.
    Definition brezzidouglasmarinibasis.hh:202
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition brezzidouglasmarinibasis.hh:159
    \n-
    BrezziDouglasMariniPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition brezzidouglasmarinibasis.hh:169
    \n-
    FiniteElementMap finiteElementMap_
    Definition brezzidouglasmarinibasis.hh:268
    \n-
    void update(const GridView &gv)
    Definition brezzidouglasmarinibasis.hh:194
    \n-
    void initializeIndices()
    Definition brezzidouglasmarinibasis.hh:179
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition brezzidouglasmarinibasis.hh:188
    \n-
    size_type size() const
    Definition brezzidouglasmarinibasis.hh:207
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition brezzidouglasmarinibasis.hh:166
    \n-
    size_type maxNodeSize() const
    Definition brezzidouglasmarinibasis.hh:226
    \n-
    GridView gridView_
    Definition brezzidouglasmarinibasis.hh:266
    \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:241
    \n
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n-
    size_type size() const
    Definition nodes.hh:142
    \n+
    Definition hierarchicallagrangebasis.hh:178
    \n+
    HierarchicalP2LocalFiniteElement< typename GV::ctype, R, dim > FiniteElement
    Definition hierarchicallagrangebasis.hh:185
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition hierarchicallagrangebasis.hh:193
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition hierarchicallagrangebasis.hh:208
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition hierarchicallagrangebasis.hh:202
    \n+
    const Element * element_
    Definition hierarchicallagrangebasis.hh:227
    \n+
    const FiniteElement finiteElement_
    Definition hierarchicallagrangebasis.hh:226
    \n+
    unsigned int order() const
    Definition hierarchicallagrangebasis.hh:221
    \n+
    HierarchicalLagrangeNode()
    Definition hierarchicallagrangebasis.hh:187
    \n+
    std::size_t size_type
    Definition hierarchicallagrangebasis.hh:183
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition hierarchicallagrangebasis.hh:184
    \n+
    A pre-basis for a hierarchical basis.
    Definition hierarchicallagrangebasis.hh:49
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition hierarchicallagrangebasis.hh:58
    \n+
    unsigned int order() const
    Definition hierarchicallagrangebasis.hh:145
    \n+
    Node makeNode() const
    Create tree node.
    Definition hierarchicallagrangebasis.hh:94
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition hierarchicallagrangebasis.hh:123
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition hierarchicallagrangebasis.hh:65
    \n+
    void update(const GridView &gv)
    Update the stored grid view & MultipleCodimMultipleGeomTypeMapper, to be called if the grid has chang...
    Definition hierarchicallagrangebasis.hh:85
    \n+
    MultipleCodimMultipleGeomTypeMapper< GridView > mcmgMapper_
    Definition hierarchicallagrangebasis.hh:150
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition hierarchicallagrangebasis.hh:114
    \n+
    GV GridView
    The grid view that the FE basis is defined on.
    Definition hierarchicallagrangebasis.hh:55
    \n+
    HierarchicalLagrangePreBasis(const GridView &gv)
    Constructor for a given grid view object with layout for second order.
    Definition hierarchicallagrangebasis.hh:71
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition hierarchicallagrangebasis.hh:63
    \n+
    size_type size(const SizePrefix prefix) const
    Return number of possible values for next position in multi index.
    Definition hierarchicallagrangebasis.hh:107
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition hierarchicallagrangebasis.hh:79
    \n+
    GridView gridView_
    Definition hierarchicallagrangebasis.hh:143
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition hierarchicallagrangebasis.hh:100
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition hierarchicallagrangebasis.hh:75
    \n+
    It indices(const Node &node, It it) const
    Definition hierarchicallagrangebasis.hh:130
    \n+
    static constexpr size_type minMultiIndexSize
    Definition hierarchicallagrangebasis.hh:64
    \n
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n
    Definition nodes.hh:186
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,509 +1,354 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n 5\n-6#include \n-7#include \n-8#include \n-9\n-10#include \n-11#include \n+6#include \n+7#include \n+8\n+9#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+11#include \n 12\n-13#include \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/_\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-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/_\bn_\bo_\bd_\be_\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-23namespace _\bD_\bu_\bn_\be {\n-24namespace Functions {\n-25\n-26namespace Impl {\n-27\n-28 template\n-29 struct BDMSimplexLocalInfo\n-30 {\n-31 static_assert((AlwaysFalse::value),\"The requested type of BDM element is\n-not implemented, sorry!\");\n-32 };\n-33\n-34 template\n-35 struct BDMSimplexLocalInfo<2,D,R,1>\n-36 {\n-37 using FiniteElement = BDM1Simplex2DLocalFiniteElement;\n-38 static const std::size_t Variants = 8;\n-39 };\n-40\n-41 template\n-42 struct BDMSimplexLocalInfo<2,D,R,2>\n-43 {\n-44 using FiniteElement = BDM2Simplex2DLocalFiniteElement;\n-45 static const std::size_t Variants = 8;\n-46 };\n-47\n-48 template\n-49 struct BDMCubeLocalInfo\n-50 {\n-51 static_assert((AlwaysFalse::value),\"The requested type of BDM element is\n-not implemented, sorry!\");\n-52 };\n+13namespace _\bD_\bu_\bn_\be {\n+14 namespace Functions {\n+15\n+16 /\n+/ *****************************************************************************\n+17 // Implementation for Hierarchical Lagrange Basis\n+18 //\n+19 // -- only order k=2 is implemented up to now --\n+20 // -- currently only supports simplex grids --\n+21 //\n+22 // This is the reusable part of the HierarchicalLagrangeBasis. It contains\n+23 //\n+24 // HierarchicalLagrangePreBasis\n+25 // HierarchicalLagrangeNode\n+26 //\n+27 // The pre-basis allows to create the others and is the owner of possible\n+shared\n+28 // state. These components do _not_ depend on the global basis and can be\n+29 // used without a global basis.\n+30 /\n+/ *****************************************************************************\n+31\n+32 template\n+33 class HierarchicalLagrangeNode;\n+34\n+35 template\n+36 class HierarchicalLagrangePreBasis;\n+37\n+47 template\n+_\b4_\b8 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+49 {\n+50 static const int dim = GV::dimension;\n+51\n+52 public:\n 53\n-54 template\n-55 struct BDMCubeLocalInfo<2,D,R,1>\n-56 {\n-57 using FiniteElement = BDM1Cube2DLocalFiniteElement;\n-58 static const std::size_t Variants = 16;\n-59 };\n-60\n-61 template\n-62 struct BDMCubeLocalInfo<2,D,R,2>\n-63 {\n-64 using FiniteElement = BDM2Cube2DLocalFiniteElement;\n-65 static const std::size_t Variants = 16;\n-66 };\n-67\n-68 template\n-69 struct BDMCubeLocalInfo<3,D,R,1>\n-70 {\n-71 using FiniteElement = BDM1Cube3DLocalFiniteElement;\n-72 static const std::size_t Variants = 64;\n-73 };\n-74\n-75 template\n-76 class BDMLocalFiniteElementMap\n-77 {\n-78 using D = typename GV::ctype;\n-79 using CubeFiniteElement = typename BDMCubeLocalInfo::\n-FiniteElement;\n-80 using SimplexFiniteElement = typename BDMSimplexLocalInfo::\n-FiniteElement;\n-81\n-82 public:\n+_\b5_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+56\n+_\b5_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+59\n+_\b6_\b1 using _\bN_\bo_\bd_\be = _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b>;\n+62\n+_\b6_\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 = 1;\n+_\b6_\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 = 1;\n+_\b6_\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 = 1;\n+66\n+_\b7_\b1 _\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 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv) ,\n+_\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_(gv,p2Layout())\n+72 {}\n+73\n+_\b7_\b5 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+76 {}\n+77\n+_\b7_\b9 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+80 {\n+81 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+82 }\n 83\n-84 using T = LocalBasisTraits, R, dim,\n-FieldVector, FieldMatrix >;\n-85 using FiniteElement = LocalFiniteElementVirtualInterface;\n-86\n-87 BDMLocalFiniteElementMap(const GV& gv)\n-88 : is_(&(gv.indexSet())), orient_(gv.size(0))\n-89 {\n-90 cubeVariant_.resize(BDMCubeLocalInfo::Variants);\n-91 simplexVariant_.resize(BDMSimplexLocalInfo::Variants);\n-92\n-93 // create all variants\n-94 for (size_t i = 0; i < cubeVariant_.size(); i++)\n-95 cubeVariant_[i] = std::\n-make_unique >(CubeFiniteElement\n-(i));\n-96\n-97 for (size_t i = 0; i < simplexVariant_.size(); i++)\n-98 simplexVariant_[i] = std::\n-make_unique >\n-(SimplexFiniteElement(i));\n-99\n-100 // compute orientation for all elements\n-101 // loop once over the grid\n-102 for(const auto& cell : elements(gv))\n-103 {\n-104 unsigned int myId = is_->index(cell);\n-105 orient_[myId] = 0;\n-106\n-107 for (const auto& intersection : intersections(gv,cell))\n+_\b8_\b5 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+86 {\n+87 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+88 _\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_.update(gv);\n+89 }\n+90\n+_\b9_\b4 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+95 {\n+96 return _\bN_\bo_\bd_\be{};\n+97 }\n+98\n+_\b1_\b0_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+101 {\n+102 return _\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_.size();\n+103 }\n+104\n+106 template\n+_\b1_\b0_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix prefix) const\n 108 {\n-109 if (intersection.neighbor() && (is_->index(intersection.outside()) > myId))\n-110 orient_[myId] |= (1 << intersection.indexInInside());\n+109 assert(prefix.size() == 0 || prefix.size() == 1);\n+110 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n 111 }\n-112 }\n-113 }\n-114\n-116 template\n-117 const FiniteElement& find(const EntityType& e) const\n-118 {\n-119 if (e.type().isCube())\n-120 return *cubeVariant_[orient_[is_->index(e)]];\n-121 else\n-122 return *simplexVariant_[orient_[is_->index(e)]];\n-123 }\n-124\n-125 private:\n-126 std::vector\n-> > cubeVariant_;\n-127 std::vector > >\n-simplexVariant_;\n-128 const typename GV::IndexSet* is_;\n-129 std::vector orient_;\n-130 };\n-131\n-132\n-133} // namespace Impl\n-134\n-135\n-136/\n-/ *****************************************************************************\n-137// This is the reusable part of the basis. It contains\n-138//\n-139// BrezziDouglasMariniPreBasis\n-140// BrezziDouglasMariniNode\n-141//\n-142// The pre-basis allows to create the others and is the owner of possible\n-shared\n-143// state. These components do _not_ depend on the global basis and local\n-view\n-144// and can be used without a global basis.\n-145/\n-/ *****************************************************************************\n-146\n-147template\n-148class BrezziDouglasMariniNode;\n+112\n+_\b1_\b1_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+115 {\n+116 return _\bs_\bi_\bz_\be();\n+117 }\n+118\n+_\b1_\b2_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+124 {\n+125 // That cast to unsigned int is necessary because GV::dimension is an enum\n+126 return Dune::binomial(std::size_t(_\bo_\br_\bd_\be_\br() + (unsigned int)GV::\n+dimension),std::size_t(_\bo_\br_\bd_\be_\br()));\n+127 }\n+128\n+129 template\n+_\b1_\b3_\b0 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+131 {\n+132 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+133 {\n+134 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n+(i);\n+135 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+136\n+137 *it = {{ (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(_\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_.subIndex(element,localKey.subEntity\n+(),localKey.codim())) }};\n+138 }\n+139 return it;\n+140 }\n+141\n+142 protected:\n+_\b1_\b4_\b3 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+144\n+_\b1_\b4_\b5 unsigned int _\bo_\br_\bd_\be_\br() const\n+146 {\n+147 return 2;\n+148 }\n 149\n-150template\n-_\b1_\b5_\b1class _\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-152{\n-153 static const int dim = GV::dimension;\n-154 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap;\n-155\n-156public:\n-157\n-_\b1_\b5_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b1_\b6_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-161\n-_\b1_\b6_\b2 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-163\n-_\b1_\b6_\b4 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-_\b1_\b6_\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-_\b1_\b6_\b6 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-167\n-_\b1_\b6_\b9 _\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-170 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n-171 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv)\n-172 {\n-173 // There is no inherent reason why the basis shouldn't work for grids with\n-more than one\n-174 // element types. Somebody simply has to sit down and implement the missing\n-bits.\n-175 if (gv.indexSet().types(0).size() > 1)\n-176 DUNE_THROW(Dune::NotImplemented, \"Brezzi-Douglas-Marini basis is only\n-implemented for grids with a single element type\");\n-177 }\n-178\n-_\b1_\b7_\b9 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-180 {\n-181 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] = 0;\n-182 _\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-183 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] *\n-gridView_.size(1);\n-184 }\n-185\n-_\b1_\b8_\b8 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-189 {\n-190 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-191 }\n-192\n-193 /* \\brief Update the stored grid view, to be called if the grid has changed\n-*/\n-_\b1_\b9_\b4 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-195 {\n-196 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-197 }\n-198\n-_\b2_\b0_\b2 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+_\b1_\b5_\b0 MultipleCodimMultipleGeomTypeMapper _\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_;\n+151\n+152 private:\n+157 static auto p2Layout()\n+158 {\n+159 return [](Dune::GeometryType type, int gridDim)\n+160 {\n+161 if (type.isVertex())\n+162 return 1;\n+163 if (type.isLine())\n+164 return 1;\n+165 if (type.isTriangle())\n+166 return 0;\n+167 assert(type.isTetrahedron());\n+168 return 0;\n+169 };\n+170 }\n+171 };\n+172\n+173\n+174\n+175 template\n+_\b1_\b7_\b6 class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be :\n+177 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n+178 {\n+179 static const int dim = GV::dimension;\n+180\n+181 public:\n+182\n+_\b1_\b8_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b1_\b8_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n+_\b1_\b8_\b5 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = HierarchicalP2LocalFiniteElement;\n+186\n+_\b1_\b8_\b7 _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be() :\n+188 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(),\n+189 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n+190 {}\n+191\n+_\b1_\b9_\b3 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+194 {\n+195 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+196 }\n+197\n+_\b2_\b0_\b2 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 203 {\n-204 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n+204 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n 205 }\n 206\n-_\b2_\b0_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-208 {\n-209 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-210 }\n+_\b2_\b0_\b8 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+209 {\n+210 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n 211\n-213 template\n-_\b2_\b1_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix prefix) const\n-215 {\n-216 assert(prefix.size() == 0 || prefix.size() == 1);\n-217 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n-218 }\n-219\n-_\b2_\b2_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+212 if (e.type() != _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.type())\n+213 DUNE_THROW(Dune::Exception,\n+214 \"HierarchicalLagrange-elements do not exist for elements of type \" <<\n+e.type());\n+215\n+216 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n+217 }\n+218\n+219 protected:\n+220\n+_\b2_\b2_\b1 unsigned int _\bo_\br_\bd_\be_\br() const\n 222 {\n-223 return _\bs_\bi_\bz_\be();\n+223 return 2;\n 224 }\n 225\n-_\b2_\b2_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-227 {\n-228 // The implementation currently only supports grids with a single element\n-type.\n-229 // We can therefore return the actual number of dofs here.\n-230 GeometryType elementType = *(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0).begin());\n-231 size_t numFaces = ReferenceElements::general(elementType).size\n-(1);\n-232 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-233 }\n-234\n-240 template\n-_\b2_\b4_\b1 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-242 {\n-243 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-244 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-245\n-246 // throw if element is not of predefined type\n-247 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n-248 DUNE_THROW(Dune::NotImplemented, \"BrezziDouglasMariniBasis only implemented\n-for cube and simplex elements.\");\n+_\b2_\b2_\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+_\b2_\b2_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+228 };\n+229\n+230\n+231\n+232 namespace BasisFactory {\n+233\n+242 template\n+_\b2_\b4_\b3 auto _\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be()\n+244 {\n+245 return [](const auto& gridView) {\n+246 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+247 };\n+248 }\n 249\n-250 for(std::size_t i=0, end=node._\bs_\bi_\bz_\be(); i\n+_\b2_\b6_\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 264\n-265protected:\n-_\b2_\b6_\b6 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-_\b2_\b6_\b7 std::array _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b2_\b6_\b8 FiniteElementMap _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n-269 // Number of dofs per entity type depending on the entity's codimension and\n-type\n-_\b2_\b7_\b0 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_ {{dim*(k-1)*3, dim+(k-1)}};\n-271};\n-272\n-273\n-274\n-275template\n-_\b2_\b7_\b6class _\bB_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi_\bN_\bo_\bd_\be :\n-277 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-278{\n-279 static const int dim = GV::dimension;\n-280\n-281public:\n-282\n-_\b2_\b8_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b2_\b8_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b2_\b8_\b5 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::BDMLocalFiniteElementMap;\n-_\b2_\b8_\b6 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n-289\n-_\b2_\b9_\b0 _\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-291 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-292 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n-293 {}\n-294\n-_\b2_\b9_\b6 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-297 {\n-298 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-299 }\n-300\n-_\b3_\b0_\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-306 {\n-307 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-308 }\n-309\n-_\b3_\b1_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-312 {\n-313 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-314 _\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-315 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n-316 }\n-317\n-318protected:\n-319\n-_\b3_\b2_\b0 _\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_\b2_\b1 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b3_\b2_\b2 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-323};\n-324\n-325\n-326\n-327namespace BasisFactory {\n-328\n-336template\n-_\b3_\b3_\b7auto _\bb_\br_\be_\bz_\bz_\bi_\bD_\bo_\bu_\bg_\bl_\ba_\bs_\bM_\ba_\br_\bi_\bn_\bi()\n-338{\n-339 return [](const auto& gridView) {\n-340 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-341 };\n-342}\n-343\n-344} // end namespace BasisFactory\n-345\n-346\n-347\n-348/\n-/ *****************************************************************************\n-349// This is the actual global basis implementation based on the reusable\n-parts.\n-350/\n-/ *****************************************************************************\n-351\n-359template\n-_\b3_\b6_\b0using _\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-361\n-362} // end namespace Functions\n-363} // end namespace Dune\n-364\n-365\n-366#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+265 } // end namespace Functions\n+266} // end namespace Dune\n+267\n+268#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n _\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:337\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+Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:243\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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: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:_\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:_\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:46\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_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:178\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_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+HierarchicalP2LocalFiniteElement< typename GV::ctype, R, dim > FiniteElement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:185\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_\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 hierarchicallagrangebasis.hh:193\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_\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 hierarchicallagrangebasis.hh:208\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_\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:305\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: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_\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:322\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:283\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:320\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:285\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:202\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_\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:321\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:288\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:311\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:290\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:296\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:152\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:227\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_\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 hierarchicallagrangebasis.hh:226\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_\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 hierarchicallagrangebasis.hh:221\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_\bN_\bo_\bd_\be_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n+HierarchicalLagrangeNode()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:187\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_\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:160\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:270\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:221\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_\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 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:_\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 brezzidouglasmarinibasis.hh:164\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:267\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\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 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:_\bm_\ba_\bk_\be_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.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_\ba_\bl_\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 hierarchicallagrangebasis.hh:184\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 basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:49\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:_\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 hierarchicallagrangebasis.hh:58\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:_\bo_\br_\bd_\be_\br\n+unsigned int order() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:145\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:_\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:202\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:159\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:169\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:268\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:94\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:_\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 hierarchicallagrangebasis.hh:123\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:_\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 hierarchicallagrangebasis.hh:65\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:_\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:194\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:179\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+Update the stored grid view & MultipleCodimMultipleGeomTypeMapper, to be called\n+if the grid has chang...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:85\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:_\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_\n+MultipleCodimMultipleGeomTypeMapper< GridView > mcmgMapper_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:150\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:_\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 hierarchicallagrangebasis.hh:114\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_\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 hierarchicallagrangebasis.hh:55\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:_\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 GridView &gv)\n+Constructor for a given grid view object with layout for second order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:71\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:_\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 hierarchicallagrangebasis.hh:63\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:_\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 hierarchicallagrangebasis.hh:107\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_\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:188\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\n-size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn brezzidouglasmarinibasis.hh:207\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_\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 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:_\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:226\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:79\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_\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: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_\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:241\n-_\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:46\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:143\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:_\bs_\bi_\bz_\be\n size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:142\n+Same as size(prefix) with empty prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:100\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:_\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 hierarchicallagrangebasis.hh:75\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:_\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 hierarchicallagrangebasis.hh:130\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:_\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 hierarchicallagrangebasis.hh:64\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:164\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:186\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.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: powerbasis.hh File Reference\n+dune-functions: sizeinfo.hh File Reference\n \n \n \n \n \n \n \n@@ -71,46 +71,41 @@\n \n
    \n
    \n
    \n \n-
    powerbasis.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    sizeinfo.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/nodes.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n+
    #include <array>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::PowerPreBasis< IMS, SPB, C >
     A pre-basis for power bases. More...
    class  Dune::Functions::SizeInfo< B >
     A class encapsulating size information. 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+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,34 +1,26 @@\n dune-functions\u00a02.9.0\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-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/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+_\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 _\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:_\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-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+_\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/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: powerbasis.hh Source File\n+dune-functions: sizeinfo.hh Source File\n \n \n \n \n \n \n \n@@ -74,430 +74,96 @@\n \n \n
    \n
    \n-
    powerbasis.hh
    \n+
    sizeinfo.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n-
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n
    5
    \n-
    6#include <dune/common/reservedvector.hh>
    \n-
    7#include <dune/common/typeutilities.hh>
    \n-
    8#include <dune/common/indices.hh>
    \n-
    9
    \n-\n-\n-\n-\n-\n-\n-
    16
    \n-
    17
    \n-
    18
    \n-
    19namespace Dune {
    \n-
    20namespace Functions {
    \n-
    21
    \n-
    22
    \n-
    23// *****************************************************************************
    \n-
    24// This is the reusable part of the power bases. It contains
    \n-
    25//
    \n-
    26// PowerPreBasis
    \n-
    27//
    \n-
    28// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    29// state. These components do _not_ depend on the global basis and local view
    \n-
    30// and can be used without a global basis.
    \n-
    31// *****************************************************************************
    \n-
    32
    \n-
    43template<class IMS, class SPB, std::size_t C>
    \n-
    \n-\n-
    45{
    \n-
    46 static const std::size_t children = C;
    \n-
    47 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;
    \n-
    48
    \n-
    49public:
    \n-
    50
    \n-
    52 using SubPreBasis = SPB;
    \n-
    53
    \n-
    55 using GridView = typename SPB::GridView;
    \n+
    6#include <array>
    \n+
    7
    \n+
    8namespace Dune {
    \n+
    9namespace Functions {
    \n+
    10
    \n+
    11
    \n+
    12
    \n+
    23template<class B>
    \n+
    \n+\n+
    25{
    \n+
    26public:
    \n+
    27 using Basis = B;
    \n+
    28 using size_type = typename Basis::size_type;
    \n+
    29 using SizePrefix = typename Basis::SizePrefix;
    \n+
    30
    \n+
    \n+
    34 SizeInfo(const Basis& basis) :
    \n+
    35 basis_(&basis)
    \n+
    36 {}
    \n+
    \n+
    37
    \n+
    \n+
    41 size_type operator()(const SizePrefix& prefix) const
    \n+
    42 {
    \n+
    43 return basis_->size(prefix);
    \n+
    44 }
    \n+
    \n+
    45
    \n+
    \n+
    52 size_type size(const SizePrefix& prefix) const
    \n+
    53 {
    \n+
    54 return basis_->size(prefix);
    \n+
    55 }
    \n+
    \n
    56
    \n-
    58 using size_type = std::size_t;
    \n-
    59
    \n-\n-
    62
    \n-
    63 using SubNode = typename SubPreBasis::Node;
    \n-
    64
    \n-\n+
    \n+
    57 operator size_type () const
    \n+
    58 {
    \n+
    59 return basis_->dimension();
    \n+
    60 }
    \n+
    \n+
    61
    \n+
    62protected:
    \n+
    63
    \n+
    64 const Basis* basis_;
    \n+
    65};
    \n+
    \n+
    66
    \n
    67
    \n-
    68 static constexpr size_type maxMultiIndexSize = SubPreBasis::maxMultiIndexSize + isBlocked;
    \n-
    69 static constexpr size_type minMultiIndexSize = SubPreBasis::minMultiIndexSize + isBlocked;
    \n-
    70 static constexpr size_type multiIndexBufferSize = SubPreBasis::multiIndexBufferSize + isBlocked;
    \n-
    71
    \n-
    77 template<class... SFArgs,
    \n-
    78 disableCopyMove<PowerPreBasis, SFArgs...> = 0,
    \n-
    79 enableIfConstructible<SubPreBasis, SFArgs...> = 0>
    \n-
    \n-
    80 PowerPreBasis(SFArgs&&... sfArgs) :
    \n-
    81 subPreBasis_(std::forward<SFArgs>(sfArgs)...)
    \n-
    82 {
    \n-
    83 static_assert(models<Concept::PreBasis<GridView>, SubPreBasis>(), "Subprebasis passed to PowerPreBasis does not model the PreBasis concept.");
    \n-
    84 }
    \n-
    \n-
    85
    \n-
    \n-\n-
    88 {
    \n-
    89 subPreBasis_.initializeIndices();
    \n-
    90 }
    \n-
    \n-
    91
    \n-
    \n-
    93 const GridView& gridView() const
    \n-
    94 {
    \n-
    95 return subPreBasis_.gridView();
    \n-
    96 }
    \n-
    \n-
    97
    \n-
    \n-
    99 void update(const GridView& gv)
    \n-
    100 {
    \n-
    101 subPreBasis_.update(gv);
    \n-
    102 }
    \n-
    \n-
    103
    \n-
    \n-\n-
    108 {
    \n-
    109 auto node = Node{};
    \n-
    110 for (std::size_t i=0; i<children; ++i)
    \n-
    111 node.setChild(i, subPreBasis_.makeNode());
    \n-
    112 return node;
    \n-
    113 }
    \n-
    \n-
    114
    \n-
    \n-\n-
    117 {
    \n-
    118 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n-
    119 }
    \n-
    \n-
    120
    \n-
    122
    \n-
    123 template<class SizePrefix>
    \n-
    \n-
    124 size_type size(const SizePrefix& prefix) const
    \n-
    125 {
    \n-
    126 return size(prefix, IndexMergingStrategy{});
    \n-
    127 }
    \n-
    \n-
    128
    \n-
    129private:
    \n-
    130
    \n-
    131 template<class SizePrefix>
    \n-
    132 size_type size(const SizePrefix& prefix, BasisFactory::FlatInterleaved) const
    \n-
    133 {
    \n-
    134 // The root index size is the root index size of a single subnode
    \n-
    135 // multiplied by the number of subnodes because we enumerate all
    \n-
    136 // child indices in a row.
    \n-
    137 if (prefix.size() == 0)
    \n-
    138 return children*subPreBasis_.size();
    \n-
    139
    \n-
    140 // The first prefix entry refers to one of the (root index size)
    \n-
    141 // subindex trees. Hence we have to first compute the corresponding
    \n-
    142 // prefix entry for a single subnode subnode. The we can append
    \n-
    143 // the other prefix entries unmodified, because the index tree
    \n-
    144 // looks the same after the first level.
    \n-
    145 SizePrefix subPrefix;
    \n-
    146 subPrefix.push_back(prefix[0] / children);
    \n-
    147 for(std::size_t i=1; i<prefix.size(); ++i)
    \n-
    148 subPrefix.push_back(prefix[i]);
    \n-
    149 return subPreBasis_.size(subPrefix);
    \n-
    150 }
    \n-
    151
    \n-
    152 template<class SizePrefix>
    \n-
    153 size_type size(const SizePrefix& prefix, BasisFactory::FlatLexicographic) const
    \n-
    154 {
    \n-
    155 // The size at the index tree root is the size of at the index tree
    \n-
    156 // root of a single subnode multiplied by the number of subnodes
    \n-
    157 // because we enumerate all child indices in a row.
    \n-
    158 if (prefix.size() == 0)
    \n-
    159 return children*subPreBasis_.size();
    \n-
    160
    \n-
    161 // The first prefix entry refers to one of the (root index size)
    \n-
    162 // subindex trees. Hence we have to first compute the corresponding
    \n-
    163 // prefix entry for a single subnode subnode. The we can append
    \n-
    164 // the other prefix entries unmodified, because the index tree
    \n-
    165 // looks the same after the first level.
    \n-
    166 SizePrefix subPrefix;
    \n-
    167 subPrefix.push_back(prefix[0] % children);
    \n-
    168 for(std::size_t i=1; i<prefix.size(); ++i)
    \n-
    169 subPrefix.push_back(prefix[i]);
    \n-
    170 return subPreBasis_.size(subPrefix);
    \n-
    171 }
    \n-
    172
    \n-
    173 template<class SizePrefix>
    \n-
    174 size_type size(const SizePrefix& prefix, BasisFactory::BlockedLexicographic) const
    \n-
    175 {
    \n-
    176 if (prefix.size() == 0)
    \n-
    177 return children;
    \n-
    178 SizePrefix subPrefix;
    \n-
    179 for(std::size_t i=1; i<prefix.size(); ++i)
    \n-
    180 subPrefix.push_back(prefix[i]);
    \n-
    181 return subPreBasis_.size(subPrefix);
    \n-
    182 }
    \n-
    183
    \n-
    184 template<class SizePrefix>
    \n-
    185 size_type size(const SizePrefix& prefix, BasisFactory::BlockedInterleaved) const
    \n-
    186 {
    \n-
    187 if (prefix.size() == 0)
    \n-
    188 return subPreBasis_.size();
    \n-
    189
    \n-
    190 SizePrefix subPrefix;
    \n-
    191 for(std::size_t i=0; i<prefix.size()-1; ++i)
    \n-
    192 subPrefix.push_back(prefix[i]);
    \n-
    193
    \n-
    194 size_type r = subPreBasis_.size(subPrefix);
    \n-
    195 if (r==0)
    \n-
    196 return 0;
    \n-
    197 subPrefix.push_back(prefix.back());
    \n-
    198 r = subPreBasis_.size(subPrefix);
    \n-
    199 if (r==0)
    \n-
    200 return children;
    \n-
    201 return r;
    \n-
    202 }
    \n-
    203
    \n-
    204public:
    \n-
    205
    \n-
    \n-\n-
    208 {
    \n-
    209 return subPreBasis_.dimension() * children;
    \n-
    210 }
    \n-
    \n-
    211
    \n-
    \n-\n-
    214 {
    \n-
    215 return subPreBasis_.maxNodeSize() * children;
    \n-
    216 }
    \n-
    \n-
    217
    \n-
    \n-\n-
    220 {
    \n-
    221 return subPreBasis_;
    \n-
    222 }
    \n-
    \n-
    223
    \n-
    \n-\n-
    226 {
    \n-
    227 return subPreBasis_;
    \n-
    228 }
    \n-
    \n-
    229
    \n-
    231 template<typename It>
    \n-
    \n-
    232 It indices(const Node& node, It it) const
    \n-
    233 {
    \n-
    234 return indices(node, it, IndexMergingStrategy{});
    \n-
    235 }
    \n-
    \n-
    236
    \n-
    237private:
    \n-
    238
    \n-
    239 template<typename It>
    \n-
    240 It indices(const Node& node, It multiIndices, BasisFactory::FlatInterleaved) const
    \n-
    241 {
    \n-
    242 using namespace Dune::Indices;
    \n-
    243 size_type subTreeSize = node.child(_0).size();
    \n-
    244 // Fill indices for first child at the beginning.
    \n-
    245 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n-
    246 // Multiply first component of all indices for first child by
    \n-
    247 // number of children to stretch the index range for interleaving.
    \n-
    248 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    249 multiIndices[i][0] *= children;
    \n-
    250 for (std::size_t child = 1; child<children; ++child)
    \n-
    251 {
    \n-
    252 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    253 {
    \n-
    254 // Copy indices from first child for all other children
    \n-
    255 // and shift them by child index to interleave indices.
    \n-
    256 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n-
    257 // multiIndices[child*subTreeSize+i][0] = multiIndices[i][0]+child;
    \n-
    258 (*next) = multiIndices[i];
    \n-
    259 (*next)[0] = multiIndices[i][0]+child;
    \n-
    260 ++next;
    \n-
    261 }
    \n-
    262 }
    \n-
    263 return next;
    \n-
    264 }
    \n-
    265
    \n-
    266 template<typename It>
    \n-
    267 It indices(const Node& node, It multiIndices, BasisFactory::FlatLexicographic) const
    \n-
    268 {
    \n-
    269 using namespace Dune::Indices;
    \n-
    270 size_type subTreeSize = node.child(_0).size();
    \n-
    271 size_type firstIndexEntrySize = subPreBasis().size();
    \n-
    272 // Fill indices for first child at the beginning.
    \n-
    273 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n-
    274 for (std::size_t child = 1; child<children; ++child)
    \n-
    275 {
    \n-
    276 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    277 {
    \n-
    278 // Copy indices from first child for all other children
    \n-
    279 // and shift them by suitable offset to get lexicographic indices.
    \n-
    280 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n-
    281 // multiIndices[child*subTreeSize+i][0] += child*firstIndexEntrySize;
    \n-
    282 (*next) = multiIndices[i];
    \n-
    283 (*next)[0] += child*firstIndexEntrySize;
    \n-
    284 ++next;
    \n-
    285 }
    \n-
    286 }
    \n-
    287 return next;
    \n-
    288 }
    \n-
    289
    \n-
    290 template<class MultiIndex>
    \n-
    291 static void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n-
    292 {
    \n-
    293 M.resize(M.size()+1);
    \n-
    294 for(std::size_t i=M.size()-1; i>0; --i)
    \n-
    295 M[i] = M[i-1];
    \n-
    296 M[0] = M0;
    \n-
    297 }
    \n-
    298
    \n-
    299 template<typename It>
    \n-
    300 It indices(const Node& node, It multiIndices, BasisFactory::BlockedLexicographic) const
    \n-
    301 {
    \n-
    302 using namespace Dune::Indices;
    \n-
    303 size_type subTreeSize = node.child(_0).size();
    \n-
    304 // Fill indices for first child at the beginning.
    \n-
    305 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n-
    306 // Insert 0 before first component of all indices for first child.
    \n-
    307 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    308 multiIndexPushFront(multiIndices[i], 0);
    \n-
    309 for (std::size_t child = 1; child<children; ++child)
    \n-
    310 {
    \n-
    311 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    312 {
    \n-
    313 // Copy indices from first child for all other children and overwrite
    \n-
    314 // zero in first component as inserted above by child index.
    \n-
    315 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n-
    316 // multiIndices[child*subTreeSize+i][0] = child;
    \n-
    317 (*next) = multiIndices[i];
    \n-
    318 (*next)[0] = child;
    \n-
    319 ++next;
    \n-
    320 }
    \n-
    321 }
    \n-
    322 return next;
    \n-
    323 }
    \n-
    324
    \n-
    325 template<typename It>
    \n-
    326 It indices(const Node& node, It multiIndices, BasisFactory::BlockedInterleaved) const
    \n-
    327 {
    \n-
    328 using namespace Dune::Indices;
    \n-
    329 size_type subTreeSize = node.child(_0).size();
    \n-
    330 // Fill indices for first child at the beginning.
    \n-
    331 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n-
    332 // Append 0 after last component of all indices for first child.
    \n-
    333 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    334 multiIndices[i].push_back(0);
    \n-
    335 for (std::size_t child = 1; child<children; ++child)
    \n-
    336 {
    \n-
    337 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    338 {
    \n-
    339 // Copy indices from first child for all other children and overwrite
    \n-
    340 // zero in last component as appended above by child index.
    \n-
    341 (*next) = multiIndices[i];
    \n-
    342 (*next).back() = child;
    \n-
    343 ++next;
    \n-
    344 }
    \n-
    345 }
    \n-
    346 return next;
    \n-
    347 }
    \n-
    348
    \n-
    349 SubPreBasis subPreBasis_;
    \n-
    350};
    \n-
    \n-
    351
    \n-
    352
    \n-
    353
    \n-
    354namespace BasisFactory {
    \n-
    355
    \n-
    368template<std::size_t k, class ChildPreBasisFactory, class IndexMergingStrategy>
    \n-
    369auto power(ChildPreBasisFactory&& childPreBasisFactory, const IndexMergingStrategy&)
    \n-
    370{
    \n-
    371 return [childPreBasisFactory](const auto& gridView) {
    \n-
    372 auto childPreBasis = childPreBasisFactory(gridView);
    \n-
    373 return PowerPreBasis<IndexMergingStrategy, decltype(childPreBasis), k>(std::move(childPreBasis));
    \n-
    374 };
    \n-
    375}
    \n-
    376
    \n-
    387template<std::size_t k, class ChildPreBasisFactory>
    \n-
    388auto power(ChildPreBasisFactory&& childPreBasisFactory)
    \n-
    389{
    \n-
    390 return [childPreBasisFactory](const auto& gridView) {
    \n-
    391 auto childPreBasis = childPreBasisFactory(gridView);
    \n-
    392 return PowerPreBasis<BlockedInterleaved, decltype(childPreBasis), k>(std::move(childPreBasis));
    \n-
    393 };
    \n-
    394}
    \n-
    395
    \n-
    396} // end namespace BasisFactory
    \n-
    397
    \n-
    398// Backward compatibility
    \n-
    399namespace BasisBuilder {
    \n-
    400
    \n-
    401 using namespace BasisFactory;
    \n-
    402
    \n-
    403}
    \n-
    404
    \n-
    405
    \n-
    406} // end namespace Functions
    \n-
    407} // end namespace Dune
    \n-
    408
    \n-
    409
    \n-
    410#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n-\n-\n-\n-\n-\n-
    typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:26
    \n+
    68template<class Basis>
    \n+
    \n+
    69SizeInfo<Basis> sizeInfo(const Basis& basis)
    \n+
    70{
    \n+
    71 return SizeInfo<Basis>(basis);
    \n+
    72}
    \n+
    \n+
    73
    \n+
    74
    \n+
    75
    \n+
    76} // end namespace Functions
    \n+
    77} // end namespace Dune
    \n+
    78
    \n+
    79#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n
    Definition polynomial.hh:10
    \n-
    Interleaved merging of direct children without blocking.
    Definition basistags.hh:114
    \n-
    Definition nodes.hh:193
    \n-
    A pre-basis for power bases.
    Definition powerbasis.hh:45
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition powerbasis.hh:207
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition powerbasis.hh:58
    \n-
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child factories.
    Definition powerbasis.hh:61
    \n-
    PowerBasisNode< SubNode, children > Node
    Template mapping root tree path to type of created tree node.
    Definition powerbasis.hh:66
    \n-
    typename SPB::GridView GridView
    The grid view that the FE basis is defined on.
    Definition powerbasis.hh:55
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition powerbasis.hh:70
    \n-
    SPB SubPreBasis
    The child pre-basis.
    Definition powerbasis.hh:52
    \n-
    typename SubPreBasis::Node SubNode
    Definition powerbasis.hh:63
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition powerbasis.hh:87
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition powerbasis.hh:99
    \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 powerbasis.hh:232
    \n-
    PowerPreBasis(SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects.
    Definition powerbasis.hh:80
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition powerbasis.hh:116
    \n-
    SubPreBasis & subPreBasis()
    Mutable access to the stored prebasis of the factor in the power space.
    Definition powerbasis.hh:225
    \n-
    Node makeNode() const
    Create tree node.
    Definition powerbasis.hh:107
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition powerbasis.hh:68
    \n-
    static constexpr size_type minMultiIndexSize
    Definition powerbasis.hh:69
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition powerbasis.hh:213
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition powerbasis.hh:93
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition powerbasis.hh:124
    \n-
    const SubPreBasis & subPreBasis() const
    Const access to the stored prebasis of the factor in the power space.
    Definition powerbasis.hh:219
    \n-\n+
    SizeInfo< Basis > sizeInfo(const Basis &basis)
    Definition sizeinfo.hh:69
    \n+
    A class encapsulating size information.
    Definition sizeinfo.hh:25
    \n+
    typename Basis::SizePrefix SizePrefix
    Definition sizeinfo.hh:29
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition sizeinfo.hh:52
    \n+
    size_type operator()(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition sizeinfo.hh:41
    \n+
    typename Basis::size_type size_type
    Definition sizeinfo.hh:28
    \n+
    B Basis
    Definition sizeinfo.hh:27
    \n+
    SizeInfo(const Basis &basis)
    Construct from basis.
    Definition sizeinfo.hh:34
    \n+
    const Basis * basis_
    Definition sizeinfo.hh:64
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,488 +1,100 @@\n dune-functions\u00a02.9.0\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+sizeinfo.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n-3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n 5\n-6#include \n-7#include \n-8#include \n-9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\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/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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\n-17\n-18\n-19namespace _\bD_\bu_\bn_\be {\n-20namespace Functions {\n-21\n-22\n-23/\n-/ *****************************************************************************\n-24// This is the reusable part of the power bases. It contains\n-25//\n-26// PowerPreBasis\n-27//\n-28// The pre-basis allows to create the others and is the owner of possible\n-shared\n-29// state. These components do _not_ depend on the global basis and local view\n-30// and can be used without a global basis.\n-31/\n-/ *****************************************************************************\n-32\n-43template\n-_\b4_\b4class _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-45{\n-46 static const std::size_t children = C;\n-47 static const bool isBlocked = std::is_same_v or std::is_same_v;\n-48\n-49public:\n-50\n-_\b5_\b2 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = SPB;\n-53\n-_\b5_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename SPB::GridView;\n+6#include \n+7\n+8namespace _\bD_\bu_\bn_\be {\n+9namespace Functions {\n+10\n+11\n+12\n+23template\n+_\b2_\b4class _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo\n+25{\n+26public:\n+_\b2_\b7 using _\bB_\ba_\bs_\bi_\bs = B;\n+_\b2_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = typename Basis::size_type;\n+_\b2_\b9 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = typename Basis::SizePrefix;\n+30\n+_\b3_\b4 _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo(const _\bB_\ba_\bs_\bi_\bs& basis) :\n+35 _\bb_\ba_\bs_\bi_\bs_\b_(&basis)\n+36 {}\n+37\n+_\b4_\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+42 {\n+43 return _\bb_\ba_\bs_\bi_\bs_\b_->size(prefix);\n+44 }\n+45\n+_\b5_\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+53 {\n+54 return _\bb_\ba_\bs_\bi_\bs_\b_->size(prefix);\n+55 }\n 56\n-_\b5_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-59\n-_\b6_\b1 using _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n-62\n-_\b6_\b3 using _\bS_\bu_\bb_\bN_\bo_\bd_\be = typename SubPreBasis::Node;\n-64\n-_\b6_\b6 using _\bN_\bo_\bd_\be = _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bS_\bu_\bb_\bN_\bo_\bd_\be_\b,_\b _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b>;\n+_\b5_\b7 operator _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be () const\n+58 {\n+59 return _\bb_\ba_\bs_\bi_\bs_\b_->dimension();\n+60 }\n+61\n+62protected:\n+63\n+_\b6_\b4 const _\bB_\ba_\bs_\bi_\bs* _\bb_\ba_\bs_\bi_\bs_\b_;\n+65};\n+66\n 67\n-_\b6_\b8 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = SubPreBasis::\n-maxMultiIndexSize + isBlocked;\n-_\b6_\b9 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bi_\bn_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = SubPreBasis::\n-minMultiIndexSize + isBlocked;\n-_\b7_\b0 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bB_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be = SubPreBasis::\n-multiIndexBufferSize + isBlocked;\n-71\n-77 template = 0,\n-79 _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be<_\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, SFArgs...> = 0>\n-_\b8_\b0 _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(SFArgs&&... sfArgs) :\n-81 subPreBasis_(std::forward(sfArgs)...)\n-82 {\n-83 static_assert(models, _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(),\n-\"Subprebasis passed to PowerPreBasis does not model the PreBasis concept.\");\n-84 }\n-85\n-_\b8_\b7 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-88 {\n-89 subPreBasis_.initializeIndices();\n-90 }\n-91\n-_\b9_\b3 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-94 {\n-95 return subPreBasis_.gridView();\n-96 }\n-97\n-_\b9_\b9 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-100 {\n-101 subPreBasis_.update(gv);\n-102 }\n-103\n-_\b1_\b0_\b7 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-108 {\n-109 auto node = _\bN_\bo_\bd_\be{};\n-110 for (std::size_t i=0; i{});\n-119 }\n-120\n-122\n-123 template\n-_\b1_\b2_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-125 {\n-126 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-127 }\n-128\n-129private:\n-130\n-131 template\n-132 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, _\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-const\n-133 {\n-134 // The root index size is the root index size of a single subnode\n-135 // multiplied by the number of subnodes because we enumerate all\n-136 // child indices in a row.\n-137 if (prefix.size() == 0)\n-138 return children*subPreBasis_.size();\n-139\n-140 // The first prefix entry refers to one of the (root index size)\n-141 // subindex trees. Hence we have to first compute the corresponding\n-142 // prefix entry for a single subnode subnode. The we can append\n-143 // the other prefix entries unmodified, because the index tree\n-144 // looks the same after the first level.\n-145 SizePrefix subPrefix;\n-146 subPrefix.push_back(prefix[0] / children);\n-147 for(std::size_t i=1; i\n-153 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, BasisFactory::FlatLexicographic)\n-const\n-154 {\n-155 // The size at the index tree root is the size of at the index tree\n-156 // root of a single subnode multiplied by the number of subnodes\n-157 // because we enumerate all child indices in a row.\n-158 if (prefix.size() == 0)\n-159 return children*subPreBasis_.size();\n-160\n-161 // The first prefix entry refers to one of the (root index size)\n-162 // subindex trees. Hence we have to first compute the corresponding\n-163 // prefix entry for a single subnode subnode. The we can append\n-164 // the other prefix entries unmodified, because the index tree\n-165 // looks the same after the first level.\n-166 SizePrefix subPrefix;\n-167 subPrefix.push_back(prefix[0] % children);\n-168 for(std::size_t i=1; i\n-174 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, BasisFactory::\n-BlockedLexicographic) const\n-175 {\n-176 if (prefix.size() == 0)\n-177 return children;\n-178 SizePrefix subPrefix;\n-179 for(std::size_t i=1; i\n-185 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, BasisFactory::BlockedInterleaved)\n-const\n-186 {\n-187 if (prefix.size() == 0)\n-188 return subPreBasis_.size();\n-189\n-190 SizePrefix subPrefix;\n-191 for(std::size_t i=0; i\n-_\b2_\b3_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-233 {\n-234 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-235 }\n-236\n-237private:\n-238\n-239 template\n-240 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_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n-241 {\n-242 using namespace Dune::Indices;\n-243 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n-244 // Fill indices for first child at the beginning.\n-245 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n-246 // Multiply first component of all indices for first child by\n-247 // number of children to stretch the index range for interleaving.\n-248 for (std::size_t i = 0; i\n-267 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n-FlatLexicographic) const\n-268 {\n-269 using namespace Dune::Indices;\n-270 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n-271 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be firstIndexEntrySize = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().size();\n-272 // Fill indices for first child at the beginning.\n-273 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n-274 for (std::size_t child = 1; child\n-291 static void multiIndexPushFront(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n-292 {\n-293 M.resize(M.size()+1);\n-294 for(std::size_t i=M.size()-1; i>0; --i)\n-295 M[i] = M[i-1];\n-296 M[0] = M0;\n-297 }\n-298\n-299 template\n-300 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n-BlockedLexicographic) const\n-301 {\n-302 using namespace Dune::Indices;\n-303 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n-304 // Fill indices for first child at the beginning.\n-305 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n-306 // Insert 0 before first component of all indices for first child.\n-307 for (std::size_t i = 0; i\n-326 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n-BlockedInterleaved) const\n-327 {\n-328 using namespace Dune::Indices;\n-329 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n-330 // Fill indices for first child at the beginning.\n-331 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n-332 // Append 0 after last component of all indices for first child.\n-333 for (std::size_t i = 0; i\n-369auto power(ChildPreBasisFactory&& childPreBasisFactory, const\n-IndexMergingStrategy&)\n-370{\n-371 return [childPreBasisFactory](const auto& gridView) {\n-372 auto childPreBasis = childPreBasisFactory(gridView);\n-373 return PowerPreBasis\n-(std::move(childPreBasis));\n-374 };\n-375}\n-376\n-387template\n-388auto power(ChildPreBasisFactory&& childPreBasisFactory)\n-389{\n-390 return [childPreBasisFactory](const auto& gridView) {\n-391 auto childPreBasis = childPreBasisFactory(gridView);\n-392 return PowerPreBasis(std::\n-move(childPreBasis));\n-393 };\n-394}\n-395\n-396} // end namespace BasisFactory\n-397\n-398// Backward compatibility\n-399namespace BasisBuilder {\n-400\n-401 using namespace BasisFactory;\n-402\n-403}\n-404\n-405\n-406} // end namespace Functions\n-407} // end namespace Dune\n-408\n-409\n-410#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n-_\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-_\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_\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-typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n-type enableIfConstructible\n-Helper to constrain forwarding constructors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:26\n+68template\n+_\b6_\b9_\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+70{\n+71 return _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b<_\bB_\ba_\bs_\bi_\bs_\b>(basis);\n+72}\n+73\n+74\n+75\n+76} // end namespace Functions\n+77} // end namespace Dune\n+78\n+79#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:114\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:193\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:45\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:_\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 powerbasis.hh:207\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-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 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:_\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:61\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:_\bN_\bo_\bd_\be\n-PowerBasisNode< SubNode, children > 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 powerbasis.hh:66\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:_\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 powerbasis.hh:55\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_\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 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_\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: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:_\bS_\bu_\bb_\bN_\bo_\bd_\be\n-typename SubPreBasis::Node SubNode\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:63\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_\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 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:_\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 powerbasis.hh:99\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 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:232\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.\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:116\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-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 powerbasis.hh:225\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:107\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_\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 powerbasis.hh:68\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_\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 powerbasis.hh:69\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_\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 powerbasis.hh:213\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:_\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 powerbasis.hh:93\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+_\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:69\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:25\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:29\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b:_\b:_\bs_\bi_\bz_\be\n size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:124\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-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 powerbasis.hh:219\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+Return number possible values for next position in multi index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:52\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:41\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:28\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:27\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:34\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: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/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: lagrangebasis.hh File Reference\n+dune-functions: basistags.hh File Reference\n \n \n \n \n \n \n \n@@ -72,63 +72,78 @@\n
  • dune
  • functions
  • functionspacebases
  • \n
    \n \n
    \n \n-
    lagrangebasis.hh File Reference
    \n+
    basistags.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/pqkfactory.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \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

    \n Classes

    class  Dune::Functions::LagrangePreBasis< GV, k, R >
     A pre-basis for a PQ-lagrange bases with given order. More...
    struct  Dune::Functions::Concept::IndexMergingStrategy
     
    class  Dune::Functions::LagrangeNode< GV, k, R >
    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 Namespaces

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

    \n-Typedefs

    template<typename GV , int k = -1, typename R = double>
    using Dune::Functions::LagrangeBasis = DefaultGlobalBasis< LagrangePreBasis< GV, k, R > >
     Nodal basis of a scalar k-th-order Lagrangean finite element space.
     
    namespace  Dune::Functions::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 Functions

    template<std::size_t k, typename R = double>
    auto Dune::Functions::BasisFactory::lagrange ()
     Create a pre-basis factory that can create a Lagrange pre-basis.
     
    template<typename R = double>
    auto Dune::Functions::BasisFactory::lagrange (int order)
     Create a pre-basis factory that can create a Lagrange pre-basis with a run-time order.
     
    template<typename T >
    static constexpr bool Dune::Functions::Concept::isIndexMergingStrategy ()
     
    template<typename T >
    static constexpr bool Dune::Functions::Concept::isIndexMergingStrategy (T &&t)
     
    void Dune::Functions::BasisFactory::registerIndexMergingStrategy (IndexMergingStrategy)
     
    constexpr FlatLexicographic Dune::Functions::BasisFactory::flatLexicographic ()
     Creates a lexicographic merging of direct children without blocking.
     
    constexpr FlatInterleaved Dune::Functions::BasisFactory::flatInterleaved ()
     Creates an interleaved merging of direct children without blocking.
     
    constexpr BlockedLexicographic Dune::Functions::BasisFactory::blockedLexicographic ()
     Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
     
    constexpr BlockedInterleaved Dune::Functions::BasisFactory::blockedInterleaved ()
     Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each).
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,48 +1,80 @@\n dune-functions\u00a02.9.0\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+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+basistags.hh File Reference\n #include \n-#include \n-#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 \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+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-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+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-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs<\n- GV, k, R > >\n-\u00a0 Nodal basis of a scalar k-th-order Lagrangean finite element space.\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\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:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n-\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be (int order)\n-\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis with a\n- run-time order.\n+template\n+ 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/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: lagrangebasis.hh Source File\n+dune-functions: basistags.hh Source File\n \n \n \n \n \n \n \n@@ -74,607 +74,146 @@\n \n \n \n
    \n-
    lagrangebasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n
    5
    \n
    6#include <type_traits>
    \n-
    7#include <dune/common/exceptions.hh>
    \n+
    7#include <dune/common/concept.hh>
    \n
    8
    \n-
    9#include <dune/localfunctions/lagrange.hh>
    \n-
    10#include <dune/localfunctions/lagrange/equidistantpoints.hh>
    \n-
    11#include <dune/localfunctions/lagrange/pqkfactory.hh>
    \n-
    12
    \n-\n-\n-
    15
    \n-
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n-
    19
    \n-
    20// *****************************************************************************
    \n-
    21// This is the reusable part of the LagrangeBasis. It contains
    \n-
    22//
    \n-
    23// LagrangePreBasis
    \n-
    24// LagrangeNode
    \n-
    25//
    \n-
    26// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    27// state. These components do _not_ depend on the global basis and local view
    \n-
    28// and can be used without a global basis.
    \n-
    29// *****************************************************************************
    \n-
    30
    \n-
    31template<typename GV, int k, typename R=double>
    \n-
    32class LagrangeNode;
    \n+
    9namespace Dune {
    \n+
    10namespace Functions {
    \n+
    11
    \n+
    12 namespace Concept {
    \n+
    13
    \n+
    \n+\n+
    15 {
    \n+
    16 template<typename T>
    \n+
    17 auto require(T&& t) -> decltype(
    \n+
    18 registerIndexMergingStrategy(t)
    \n+
    19 );
    \n+
    20 };
    \n+
    \n+
    21
    \n+
    22 template<typename T>
    \n+
    \n+
    23 static constexpr bool isIndexMergingStrategy()
    \n+
    24 {
    \n+
    25 return models<Concept::IndexMergingStrategy,T>();
    \n+
    26 }
    \n+
    \n+
    27
    \n+
    28 template<typename T>
    \n+
    \n+
    29 static constexpr bool isIndexMergingStrategy(T&& t)
    \n+
    30 {
    \n+
    31 return models<Concept::IndexMergingStrategy,std::decay_t<T>>();
    \n+
    32 }
    \n+
    \n
    33
    \n-
    34template<typename GV, int k, typename R=double>
    \n-
    35class LagrangePreBasis;
    \n+
    34 } // namespace Concept
    \n+
    35
    \n
    36
    \n-
    37
    \n+
    \n+
    37namespace BasisFactory {
    \n
    38
    \n-
    53template<typename GV, int k, typename R>
    \n-
    \n-\n-
    55{
    \n-
    56 static const int dim = GV::dimension;
    \n-
    57 static const bool useDynamicOrder = (k<0);
    \n-
    58
    \n-
    59public:
    \n-
    60
    \n-
    62 using GridView = GV;
    \n-
    63
    \n-
    65 using size_type = std::size_t;
    \n-
    66
    \n-\n-
    69
    \n-
    70 static constexpr size_type maxMultiIndexSize = 1;
    \n-
    71 static constexpr size_type minMultiIndexSize = 1;
    \n-
    72 static constexpr size_type multiIndexBufferSize = 1;
    \n-
    73
    \n-
    \n-\n-
    76 : LagrangePreBasis(gv, std::numeric_limits<unsigned int>::max())
    \n-
    77 {}
    \n-
    \n-
    78
    \n-
    \n-
    80 LagrangePreBasis(const GridView& gv, unsigned int order) :
    \n-\n-
    82 {
    \n-
    83 if (!useDynamicOrder && order!=std::numeric_limits<unsigned int>::max())
    \n-
    84 DUNE_THROW(RangeError, "Template argument k has to be -1 when supplying a run-time order!");
    \n-
    85
    \n-
    86 for (int i=0; i<=dim; i++)
    \n-
    87 {
    \n-\n-\n-
    90 }
    \n-\n-\n-
    93 }
    \n-
    \n-
    94
    \n-
    \n-\n-
    97 {
    \n-
    98 vertexOffset_ = 0;
    \n-\n-
    100
    \n-
    101 if (dim>=2)
    \n-
    102 {
    \n-\n-
    104
    \n-
    105 quadrilateralOffset_ = triangleOffset_ + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle));
    \n-
    106 }
    \n-
    107
    \n-
    108 if (dim==3) {
    \n-
    109 tetrahedronOffset_ = quadrilateralOffset_ + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));
    \n-
    110
    \n-
    111 prismOffset_ = tetrahedronOffset_ + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::tetrahedron));
    \n-
    112
    \n-
    113 hexahedronOffset_ = prismOffset_ + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism));
    \n-
    114
    \n-
    115 pyramidOffset_ = hexahedronOffset_ + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::hexahedron));
    \n-
    116 }
    \n-
    117 }
    \n-
    \n-
    118
    \n-
    \n-
    120 const GridView& gridView() const
    \n-
    121 {
    \n-
    122 return gridView_;
    \n-
    123 }
    \n-
    \n-
    124
    \n-
    \n-
    126 void update (const GridView& gv)
    \n-
    127 {
    \n-
    128 gridView_ = gv;
    \n-
    129 }
    \n-
    \n-
    130
    \n-
    \n-\n-
    135 {
    \n-
    136 return Node{order_};
    \n-
    137 }
    \n-
    \n-
    138
    \n-
    \n-\n-
    141 {
    \n-
    142 switch (dim)
    \n-
    143 {
    \n-
    144 case 1:
    \n-
    145 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n-
    146 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1));
    \n-
    147 case 2:
    \n-
    148 {
    \n-
    149 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n-
    150 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))
    \n-
    151 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle))
    \n-
    152 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));
    \n-
    153 }
    \n-
    154 case 3:
    \n-
    155 {
    \n-
    156 return dofsPerCube(0) * ((size_type)gridView_.size(dim))
    \n-
    157 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))
    \n-
    158 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::triangle))
    \n-
    159 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::quadrilateral))
    \n-
    160 + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::tetrahedron))
    \n-
    161 + dofsPerPyramid() * ((size_type)gridView_.size(Dune::GeometryTypes::pyramid))
    \n-
    162 + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism))
    \n-
    163 + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::hexahedron));
    \n-
    164 }
    \n-
    165 }
    \n-
    166 DUNE_THROW(Dune::NotImplemented, "No size method for " << dim << "d grids available yet!");
    \n-
    167 }
    \n-
    \n-
    168
    \n-
    170 template<class SizePrefix>
    \n-
    \n-
    171 size_type size(const SizePrefix& prefix) const
    \n-
    172 {
    \n-
    173 assert(prefix.size() == 0 || prefix.size() == 1);
    \n-
    174 return (prefix.size() == 0) ? size() : 0;
    \n-
    175 }
    \n-
    \n-
    176
    \n-
    \n-\n-
    179 {
    \n-
    180 return size();
    \n-
    181 }
    \n-
    \n+\n+
    45
    \n+\n+
    47
    \n+
    \n+\n+\n+
    80 {};
    \n+
    \n+
    81
    \n+
    \n+\n+
    113 : public IndexMergingStrategy
    \n+
    114 {};
    \n+
    \n+
    115
    \n+
    \n+\n+
    147 : public IndexMergingStrategy
    \n+
    148 {};
    \n+
    \n+
    149
    \n+\n+
    181
    \n
    182
    \n-
    \n-\n-
    185 {
    \n-
    186 // That cast to unsigned int is necessary because GV::dimension is an enum,
    \n-
    187 // which is not recognized by the power method as an integer type...
    \n-
    188 return power(order()+1, (unsigned int)GV::dimension);
    \n-
    189 }
    \n-
    \n-
    190
    \n-
    191 template<typename It>
    \n-
    \n-
    192 It indices(const Node& node, It it) const
    \n-
    193 {
    \n-
    194 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it, ++i)
    \n-
    195 {
    \n-
    196 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    197 const auto& gridIndexSet = gridView().indexSet();
    \n-
    198 const auto& element = node.element();
    \n-
    199
    \n-
    200 // The dimension of the entity that the current dof is related to
    \n-
    201 auto dofDim = dim - localKey.codim();
    \n+
    \n+\n+
    189 {
    \n+
    190 return {};
    \n+
    191 }
    \n+
    \n+
    192
    \n+
    \n+\n+
    199 {
    \n+
    200 return {};
    \n+
    201 }
    \n+
    \n
    202
    \n-
    203 // Test for a vertex dof
    \n-
    204 // The test for k==1 is redundant, but having it here allows the compiler to conclude
    \n-
    205 // at compile-time that the dofDim==0 case is the only one that will ever happen.
    \n-
    206 // This leads to measurable speed-up: see
    \n-
    207 // https://gitlab.dune-project.org/staging/dune-functions/issues/30
    \n-
    208 if (k==1 || dofDim==0) {
    \n-
    209 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity(),dim)) }};
    \n-
    210 continue;
    \n-
    211 }
    \n+
    \n+\n+
    209 {
    \n+
    210 return {};
    \n+
    211 }
    \n+
    \n
    212
    \n-
    213 if (dofDim==1)
    \n-
    214 { // edge dof
    \n-
    215 if (dim==1) // element dof -- any local numbering is fine
    \n-
    216 {
    \n-
    217 *it = {{ edgeOffset_
    \n-
    218 + dofsPerCube(1) * ((size_type)gridIndexSet.subIndex(element,0,0))
    \n-
    219 + localKey.index() }};
    \n-
    220 continue;
    \n-
    221 }
    \n-
    222 else
    \n-
    223 {
    \n-
    224 const auto refElement
    \n-
    225 = Dune::referenceElement<double,dim>(element.type());
    \n-
    226
    \n-
    227 // We have to reverse the numbering if the local element edge is
    \n-
    228 // not aligned with the global edge.
    \n-
    229 auto v0 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),0,dim),dim);
    \n-
    230 auto v1 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),1,dim),dim);
    \n-
    231 bool flip = (v0 > v1);
    \n-
    232 *it = {{ (flip)
    \n-\n-
    234 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))
    \n-
    235 + (dofsPerCube(1)-1)-localKey.index()
    \n-\n-
    237 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))
    \n-
    238 + localKey.index() }};
    \n-
    239 continue;
    \n-
    240 }
    \n-
    241 }
    \n-
    242
    \n-
    243 if (dofDim==2)
    \n-
    244 {
    \n-
    245 if (dim==2) // element dof -- any local numbering is fine
    \n-
    246 {
    \n-
    247 if (element.type().isTriangle())
    \n-
    248 {
    \n-
    249 *it = {{ triangleOffset_ + dofsPerSimplex(2)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    250 continue;
    \n-
    251 }
    \n-
    252 else if (element.type().isQuadrilateral())
    \n-
    253 {
    \n-
    254 *it = {{ quadrilateralOffset_ + dofsPerCube(2)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    255 continue;
    \n-
    256 }
    \n-
    257 else
    \n-
    258 DUNE_THROW(Dune::NotImplemented, "2d elements have to be triangles or quadrilaterals");
    \n-
    259 } else
    \n-
    260 {
    \n-
    261 const auto refElement
    \n-
    262 = Dune::referenceElement<double,dim>(element.type());
    \n-
    263
    \n-
    264 if (order()>3)
    \n-
    265 DUNE_THROW(Dune::NotImplemented, "LagrangeBasis for 3D grids is only implemented if k<=3");
    \n-
    266
    \n-
    267 if (order()==3 and !refElement.type(localKey.subEntity(), localKey.codim()).isTriangle())
    \n-
    268 DUNE_THROW(Dune::NotImplemented, "LagrangeBasis for 3D grids with k==3 is only implemented if the grid is a simplex grid");
    \n-
    269
    \n-
    270 *it = {{ triangleOffset_ + ((size_type)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim())) }};
    \n-
    271 continue;
    \n-
    272 }
    \n-
    273 }
    \n-
    274
    \n-
    275 if (dofDim==3)
    \n-
    276 {
    \n-
    277 if (dim==3) // element dof -- any local numbering is fine
    \n-
    278 {
    \n-
    279 if (element.type().isTetrahedron())
    \n-
    280 {
    \n-
    281 *it = {{ tetrahedronOffset_ + dofsPerSimplex(3)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    282 continue;
    \n-
    283 }
    \n-
    284 else if (element.type().isHexahedron())
    \n-
    285 {
    \n-
    286 *it = {{ hexahedronOffset_ + dofsPerCube(3)*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    287 continue;
    \n-
    288 }
    \n-
    289 else if (element.type().isPrism())
    \n-
    290 {
    \n-
    291 *it = {{ prismOffset_ + dofsPerPrism()*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    292 continue;
    \n-
    293 }
    \n-
    294 else if (element.type().isPyramid())
    \n-
    295 {
    \n-
    296 *it = {{ pyramidOffset_ + dofsPerPyramid()*((size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};
    \n-
    297 continue;
    \n-
    298 }
    \n-
    299 else
    \n-
    300 DUNE_THROW(Dune::NotImplemented, "3d elements have to be tetrahedra, hexahedra, prisms, or pyramids");
    \n-
    301 } else
    \n-
    302 DUNE_THROW(Dune::NotImplemented, "Grids of dimension larger than 3 are no supported");
    \n-
    303 }
    \n-
    304 DUNE_THROW(Dune::NotImplemented, "Grid contains elements not supported for the LagrangeBasis");
    \n-
    305 }
    \n-
    306 return it;
    \n-
    307 }
    \n-
    \n-
    308
    \n-
    \n-
    310 unsigned int order() const
    \n-
    311 {
    \n-
    312 return (useDynamicOrder) ? order_ : k;
    \n-
    313 }
    \n-
    \n-
    314
    \n-
    315protected:
    \n-\n-
    317
    \n-
    318 // Run-time order, only valid if k<0
    \n-
    319 const unsigned int order_;
    \n-
    320
    \n-
    \n-
    322 size_type dofsPerSimplex(std::size_t simplexDim) const
    \n-
    323 {
    \n-
    324 return useDynamicOrder ? dofsPerSimplex_[simplexDim] : computeDofsPerSimplex(simplexDim);
    \n-
    325 }
    \n-
    \n-
    326
    \n-
    \n-
    328 size_type dofsPerCube(std::size_t cubeDim) const
    \n-
    329 {
    \n-
    330 return useDynamicOrder ? dofsPerCube_[cubeDim] : computeDofsPerCube(cubeDim);
    \n-
    331 }
    \n-
    \n-
    332
    \n-
    \n-\n-
    334 {
    \n-
    335 return useDynamicOrder ? dofsPerPrism_ : computeDofsPerPrism();
    \n-
    336 }
    \n-
    \n-
    337
    \n-
    \n-\n-
    339 {
    \n-
    340 return useDynamicOrder ? dofsPerPyramid_ : computeDofsPerPyramid();
    \n-
    341 }
    \n-
    \n-
    342
    \n-
    \n-
    344 size_type computeDofsPerSimplex(std::size_t simplexDim) const
    \n-
    345 {
    \n-
    346 return order() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::size_t(order()-1),simplexDim);
    \n-
    347 }
    \n-
    \n-
    348
    \n-
    \n-
    350 size_type computeDofsPerCube(std::size_t cubeDim) const
    \n-
    351 {
    \n-
    352 return order() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(order()-1, cubeDim);
    \n-
    353 }
    \n-
    \n-
    354
    \n-
    \n-\n-
    356 {
    \n-
    357 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-1)*(order()-1)*(order()-2)/2;
    \n-
    358 }
    \n-
    \n-
    359
    \n-
    \n-\n-
    361 {
    \n-
    362 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-2)*(order()-1)*(2*order()-3)/6;
    \n-
    363 }
    \n-
    \n-
    364
    \n-
    365 // When the order is given at run-time, the following numbers are pre-computed:
    \n-
    366 std::array<size_type,dim+1> dofsPerSimplex_;
    \n-
    367 std::array<size_type,dim+1> dofsPerCube_;
    \n-\n-\n-
    370
    \n-\n-\n-\n-\n-\n-\n-\n-\n-
    379
    \n-
    380};
    \n-
    \n-
    381
    \n-
    382
    \n-
    383
    \n-
    384template<typename GV, int k, typename R>
    \n-
    \n-\n-
    386 public LeafBasisNode
    \n-
    387{
    \n-
    388 // Stores LocalFiniteElement implementations with run-time order as a function of GeometryType
    \n-
    389 template<typename Domain, typename Range, int dim>
    \n-
    390 class LagrangeRunTimeLFECache
    \n-
    391 {
    \n-
    392 public:
    \n-
    393 using FiniteElementType = LagrangeLocalFiniteElement<EquidistantPointSet,dim,Domain,Range>;
    \n-
    394
    \n-
    395 const FiniteElementType& get(GeometryType type)
    \n-
    396 {
    \n-
    397 auto i = data_.find(type);
    \n-
    398 if (i==data_.end())
    \n-
    399 i = data_.emplace(type,FiniteElementType(type,order_)).first;
    \n-
    400 return (*i).second;
    \n-
    401 }
    \n-
    402
    \n-
    403 std::map<GeometryType, FiniteElementType> data_;
    \n-
    404 unsigned int order_;
    \n-
    405 };
    \n-
    406
    \n-
    407 static constexpr int dim = GV::dimension;
    \n-
    408 static constexpr bool useDynamicOrder = (k<0);
    \n-
    409
    \n-
    410 using FiniteElementCache = typename std::conditional<(useDynamicOrder),
    \n-
    411 LagrangeRunTimeLFECache<typename GV::ctype, R, dim>,
    \n-
    412 PQkLocalFiniteElementCache<typename GV::ctype, R, dim, k>
    \n-
    413 >::type;
    \n-
    414
    \n-
    415public:
    \n-
    416
    \n-
    417 using size_type = std::size_t;
    \n-
    418 using Element = typename GV::template Codim<0>::Entity;
    \n-
    419 using FiniteElement = typename FiniteElementCache::FiniteElementType;
    \n-
    420
    \n-
    \n-\n-
    423 finiteElement_(nullptr),
    \n-
    424 element_(nullptr)
    \n-
    425 {}
    \n-
    \n-
    426
    \n-
    \n-
    428 LagrangeNode(unsigned int order) :
    \n-
    429 order_(order),
    \n-
    430 finiteElement_(nullptr),
    \n-
    431 element_(nullptr)
    \n-
    432 {
    \n-
    433 // Only the cache for the run-time-order case (i.e., k<0), has the 'order_' member
    \n-
    434 if constexpr (useDynamicOrder)
    \n-
    435 cache_.order_ = order;
    \n-
    436 }
    \n-
    \n-
    437
    \n-
    \n-
    439 const Element& element() const
    \n-
    440 {
    \n-
    441 return *element_;
    \n-
    442 }
    \n-
    \n-
    443
    \n-
    \n-\n-
    449 {
    \n-
    450 return *finiteElement_;
    \n-
    451 }
    \n-
    \n-
    452
    \n-
    \n-
    454 void bind(const Element& e)
    \n-
    455 {
    \n-
    456 element_ = &e;
    \n-
    457 finiteElement_ = &(cache_.get(element_->type()));
    \n-
    458 this->setSize(finiteElement_->size());
    \n-
    459 }
    \n-
    \n-
    460
    \n-
    461protected:
    \n-
    462
    \n-
    \n-
    463 unsigned int order() const
    \n-
    464 {
    \n-
    465 return (useDynamicOrder) ? order_ : k;
    \n-
    466 }
    \n-
    \n-
    467
    \n-
    468 // Run-time order, only valid if k<0
    \n-
    469 unsigned int order_;
    \n-
    470
    \n-
    471 FiniteElementCache cache_;
    \n-\n-\n-
    474};
    \n-
    \n-
    475
    \n-
    476
    \n-
    477
    \n-
    478namespace BasisFactory {
    \n-
    479
    \n-
    488template<std::size_t k, typename R=double>
    \n-
    \n-\n-
    490{
    \n-
    491 return [](const auto& gridView) {
    \n-
    492 return LagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n-
    493 };
    \n-
    494}
    \n-
    \n-
    495
    \n-
    503template<typename R=double>
    \n-
    \n-
    504auto lagrange(int order)
    \n-
    505{
    \n-
    506 return [=](const auto& gridView) {
    \n-
    507 return LagrangePreBasis<std::decay_t<decltype(gridView)>, -1, R>(gridView, order);
    \n-
    508 };
    \n-
    509}
    \n-
    \n-
    510
    \n-
    511} // end namespace BasisFactory
    \n-
    512
    \n-
    513
    \n-
    514
    \n-
    538template<typename GV, int k=-1, typename R=double>
    \n-\n-
    540
    \n-
    541
    \n-
    542
    \n-
    543
    \n-
    544
    \n-
    545} // end namespace Functions
    \n-
    546} // end namespace Dune
    \n-
    547
    \n-
    548
    \n-
    549#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH
    \n-\n-\n-
    auto lagrange()
    Create a pre-basis factory that can create a Lagrange pre-basis.
    Definition lagrangebasis.hh:489
    \n+
    \n+\n+
    219 {
    \n+
    220 return {};
    \n+
    221 }
    \n+
    \n+
    222
    \n+
    223} // end namespace BasisFactory
    \n+
    \n+
    224
    \n+
    225// Backward compatibility
    \n+
    \n+
    226namespace BasisBuilder {
    \n+
    227
    \n+
    228 using namespace BasisFactory;
    \n+
    229
    \n+
    230}
    \n+
    \n+
    231
    \n+
    232} // end namespace Functions
    \n+
    233} // end namespace Dune
    \n+
    234
    \n+
    235
    \n+
    236#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n+
    constexpr FlatLexicographic flatLexicographic()
    Creates a lexicographic merging of direct children without blocking.
    Definition basistags.hh:188
    \n+
    constexpr BlockedInterleaved blockedInterleaved()
    Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves c...
    Definition basistags.hh:218
    \n+
    constexpr FlatInterleaved flatInterleaved()
    Creates an interleaved merging of direct children without blocking.
    Definition basistags.hh:198
    \n+
    constexpr BlockedLexicographic blockedLexicographic()
    Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct ...
    Definition basistags.hh:208
    \n
    Definition polynomial.hh:10
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n-
    Definition lagrangebasis.hh:387
    \n-
    LagrangeNode(unsigned int order)
    Constructor with a run-time order.
    Definition lagrangebasis.hh:428
    \n-
    unsigned int order() const
    Definition lagrangebasis.hh:463
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition lagrangebasis.hh:448
    \n-
    const Element * element_
    Definition lagrangebasis.hh:473
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition lagrangebasis.hh:439
    \n-
    FiniteElementCache cache_
    Definition lagrangebasis.hh:471
    \n-
    typename FiniteElementCache::FiniteElementType FiniteElement
    Definition lagrangebasis.hh:419
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition lagrangebasis.hh:454
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition lagrangebasis.hh:418
    \n-
    const FiniteElement * finiteElement_
    Definition lagrangebasis.hh:472
    \n-
    unsigned int order_
    Definition lagrangebasis.hh:469
    \n-
    std::size_t size_type
    Definition lagrangebasis.hh:417
    \n-
    LagrangeNode()
    Constructor without order (uses the compile-time value)
    Definition lagrangebasis.hh:422
    \n-
    A pre-basis for a PQ-lagrange bases with given order.
    Definition lagrangebasis.hh:55
    \n-
    size_type dofsPerPrism() const
    Definition lagrangebasis.hh:333
    \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:350
    \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:344
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition lagrangebasis.hh:70
    \n-
    size_type computeDofsPerPrism() const
    Definition lagrangebasis.hh:355
    \n-
    size_type edgeOffset_
    Definition lagrangebasis.hh:372
    \n-
    std::array< size_type, dim+1 > dofsPerSimplex_
    Definition lagrangebasis.hh:366
    \n-
    It indices(const Node &node, It it) const
    Definition lagrangebasis.hh:192
    \n-
    size_type vertexOffset_
    Definition lagrangebasis.hh:371
    \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:322
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition lagrangebasis.hh:65
    \n-
    size_type pyramidOffset_
    Definition lagrangebasis.hh:376
    \n-
    size_type prismOffset_
    Definition lagrangebasis.hh:377
    \n-
    size_type tetrahedronOffset_
    Definition lagrangebasis.hh:375
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition lagrangebasis.hh:96
    \n-
    size_type computeDofsPerPyramid() const
    Definition lagrangebasis.hh:360
    \n-
    LagrangePreBasis(const GridView &gv, unsigned int order)
    Constructor for a given grid view object and run-time order.
    Definition lagrangebasis.hh:80
    \n-
    size_type dofsPerPyramid_
    Definition lagrangebasis.hh:369
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition lagrangebasis.hh:178
    \n-
    LagrangePreBasis(const GridView &gv)
    Constructor for a given grid view object with compile-time order.
    Definition lagrangebasis.hh:75
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition lagrangebasis.hh:126
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition lagrangebasis.hh:171
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition lagrangebasis.hh:72
    \n-
    GV GridView
    The grid view that the FE basis is defined on.
    Definition lagrangebasis.hh:62
    \n-
    size_type quadrilateralOffset_
    Definition lagrangebasis.hh:374
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition lagrangebasis.hh:120
    \n-
    GridView gridView_
    Definition lagrangebasis.hh:316
    \n-
    Node makeNode() const
    Create tree node.
    Definition lagrangebasis.hh:134
    \n-
    unsigned int order() const
    Polynomial order used in the local Lagrange finite-elements.
    Definition lagrangebasis.hh:310
    \n-
    const unsigned int order_
    Definition lagrangebasis.hh:319
    \n-
    std::array< size_type, dim+1 > dofsPerCube_
    Definition lagrangebasis.hh:367
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition lagrangebasis.hh:184
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition lagrangebasis.hh:140
    \n-
    size_type dofsPerPrism_
    Definition lagrangebasis.hh:368
    \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:328
    \n-
    size_type triangleOffset_
    Definition lagrangebasis.hh:373
    \n-
    size_type hexahedronOffset_
    Definition lagrangebasis.hh:378
    \n-
    static constexpr size_type minMultiIndexSize
    Definition lagrangebasis.hh:71
    \n-
    size_type dofsPerPyramid() const
    Definition lagrangebasis.hh:338
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n-
    Definition nodes.hh:186
    \n+
    static constexpr bool isIndexMergingStrategy()
    Definition basistags.hh:23
    \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:44
    \n+
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:80
    \n+
    Interleaved merging of direct children without blocking.
    Definition basistags.hh:114
    \n+
    Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
    Definition basistags.hh:148
    \n+
    Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...
    Definition basistags.hh:180
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,736 +1,148 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n 5\n 6#include \n-7#include \n+7#include \n 8\n-9#include \n-10#include \n-11#include \n-12\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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-15\n-16\n-17namespace _\bD_\bu_\bn_\be {\n-18namespace Functions {\n-19\n-20/\n-/ *****************************************************************************\n-21// This is the reusable part of the LagrangeBasis. It contains\n-22//\n-23// LagrangePreBasis\n-24// LagrangeNode\n-25//\n-26// The pre-basis allows to create the others and is the owner of possible\n-shared\n-27// state. These components do _not_ depend on the global basis and local view\n-28// and can be used without a global basis.\n-29/\n-/ *****************************************************************************\n-30\n-31template\n-32class LagrangeNode;\n+9namespace _\bD_\bu_\bn_\be {\n+10namespace Functions {\n+11\n+12 namespace Concept {\n+13\n+_\b1_\b4 struct _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+15 {\n+16 template\n+_\b1_\b7 auto _\br_\be_\bq_\bu_\bi_\br_\be(T&& t) -> decltype(\n+18 registerIndexMergingStrategy(t)\n+19 );\n+20 };\n+21\n+22 template\n+_\b2_\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()\n+24 {\n+25 return models();\n+26 }\n+27\n+28 template\n+_\b2_\b9 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+30 {\n+31 return models>();\n+32 }\n 33\n-34template\n-35class LagrangePreBasis;\n+34 } // namespace Concept\n+35\n 36\n-37\n+_\b3_\b7namespace BasisFactory {\n 38\n-53template\n-_\b5_\b4class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-55{\n-56 static const int dim = GV::dimension;\n-57 static const bool useDynamicOrder = (k<0);\n-58\n-59public:\n-60\n-_\b6_\b2 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-63\n-_\b6_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-66\n-_\b6_\b8 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-69\n-_\b7_\b0 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-_\b7_\b1 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-_\b7_\b2 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-73\n-_\b7_\b5 _\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-76 : _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(gv, std::numeric_limits::max())\n-77 {}\n-78\n-_\b8_\b0 _\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-81 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv), _\bo_\br_\bd_\be_\br_\b_(_\bo_\br_\bd_\be_\br)\n-82 {\n-83 if (!useDynamicOrder && _\bo_\br_\bd_\be_\br!=std::numeric_limits::max())\n-84 DUNE_THROW(RangeError, \"Template argument k has to be -1 when supplying a\n-run-time order!\");\n-85\n-86 for (int i=0; i<=dim; i++)\n-87 {\n-88 _\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-89 _\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-90 }\n-91 _\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-92 _\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-93 }\n-94\n-_\b9_\b6 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-97 {\n-98 _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_ = 0;\n-99 _\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-100\n-101 if (dim>=2)\n-102 {\n-103 _\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-104\n-105 _\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-106 }\n-107\n-108 if (dim==3) {\n-109 _\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-110\n-111 _\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-112\n-113 _\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-114\n-115 _\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-116 }\n-117 }\n-118\n-_\b1_\b2_\b0 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-121 {\n-122 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-123 }\n-124\n-_\b1_\b2_\b6 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-127 {\n-128 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-129 }\n-130\n-_\b1_\b3_\b4 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-135 {\n-136 return _\bN_\bo_\bd_\be{_\bo_\br_\bd_\be_\br_\b_};\n-137 }\n-138\n-_\b1_\b4_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-141 {\n-142 switch (dim)\n-143 {\n-144 case 1:\n-145 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-146 + _\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-147 case 2:\n-148 {\n-149 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-150 + _\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-151 + _\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-152 + _\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-153 }\n-154 case 3:\n-155 {\n-156 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-157 + _\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-158 + _\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-159 + _\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-160 + _\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-161 + _\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-162 + _\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-163 + _\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-164 }\n-165 }\n-166 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n-available yet!\");\n-167 }\n-168\n-170 template\n-_\b1_\b7_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-172 {\n-173 assert(prefix.size() == 0 || prefix.size() == 1);\n-174 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n-175 }\n-176\n-_\b1_\b7_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-179 {\n-180 return _\bs_\bi_\bz_\be();\n-181 }\n+_\b4_\b4 struct _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by {};\n+45\n+_\b4_\b6 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+47\n+_\b7_\b8 struct _\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+79 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+80 {};\n+81\n+_\b1_\b1_\b2 struct _\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n+113 : public _\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_\b4_\b6 struct _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n+147 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n+148 {};\n+149\n+_\b1_\b8_\b0 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+181\n 182\n-_\b1_\b8_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-185 {\n-186 // That cast to unsigned int is necessary because GV::dimension is an enum,\n-187 // which is not recognized by the power method as an integer type...\n-188 return power(_\bo_\br_\bd_\be_\br()+1, (unsigned int)GV::dimension);\n-189 }\n-190\n-191 template\n-_\b1_\b9_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-193 {\n-194 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-195 {\n-196 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n-(i);\n-197 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-198 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-199\n-200 // The dimension of the entity that the current dof is related to\n-201 auto dofDim = dim - localKey.codim();\n+_\b1_\b8_\b8 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+189 {\n+190 return {};\n+191 }\n+192\n+_\b1_\b9_\b8 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+199 {\n+200 return {};\n+201 }\n 202\n-203 // Test for a vertex dof\n-204 // The test for k==1 is redundant, but having it here allows the compiler\n-to conclude\n-205 // at compile-time that the dofDim==0 case is the only one that will ever\n-happen.\n-206 // This leads to measurable speed-up: see\n-207 // https://gitlab.dune-project.org/staging/dune-functions/issues/30\n-208 if (k==1 || dofDim==0) {\n-209 *it = {{ (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(gridIndexSet.subIndex(element,localKey.subEntity\n-(),dim)) }};\n-210 continue;\n+_\b2_\b0_\b8 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+209 {\n+210 return {};\n 211 }\n 212\n-213 if (dofDim==1)\n-214 { // edge dof\n-215 if (dim==1) // element dof -- any local numbering is fine\n-216 {\n-217 *it = {{ _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-218 + _\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-219 + localKey.index() }};\n-220 continue;\n+_\b2_\b1_\b8 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+219 {\n+220 return {};\n 221 }\n-222 else\n-223 {\n-224 const auto refElement\n-225 = Dune::referenceElement(element.type());\n-226\n-227 // We have to reverse the numbering if the local element edge is\n-228 // not aligned with the global edge.\n-229 auto v0 = (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)gridIndexSet.subIndex(element,refElement.subEntity\n-(localKey.subEntity(),localKey.codim(),0,dim),dim);\n-230 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-231 bool flip = (v0 > v1);\n-232 *it = {{ (flip)\n-233 ? _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-234 + _\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-235 + (_\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be(1)-1)-localKey.index()\n-236 : _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_\n-237 + _\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-238 + localKey.index() }};\n-239 continue;\n-240 }\n-241 }\n-242\n-243 if (dofDim==2)\n-244 {\n-245 if (dim==2) // element dof -- any local numbering is fine\n-246 {\n-247 if (element.type().isTriangle())\n-248 {\n-249 *it = {{ _\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-250 continue;\n-251 }\n-252 else if (element.type().isQuadrilateral())\n-253 {\n-254 *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-255 continue;\n-256 }\n-257 else\n-258 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n-quadrilaterals\");\n-259 } else\n-260 {\n-261 const auto refElement\n-262 = Dune::referenceElement(element.type());\n-263\n-264 if (_\bo_\br_\bd_\be_\br()>3)\n-265 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids is only\n-implemented if k<=3\");\n-266\n-267 if (_\bo_\br_\bd_\be_\br()==3 and !refElement.type(localKey.subEntity(), localKey.codim\n-()).isTriangle())\n-268 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids with k==3 is\n-only implemented if the grid is a simplex grid\");\n-269\n-270 *it = {{ _\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-271 continue;\n-272 }\n-273 }\n-274\n-275 if (dofDim==3)\n-276 {\n-277 if (dim==3) // element dof -- any local numbering is fine\n-278 {\n-279 if (element.type().isTetrahedron())\n-280 {\n-281 *it = {{ _\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-282 continue;\n-283 }\n-284 else if (element.type().isHexahedron())\n-285 {\n-286 *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-287 continue;\n-288 }\n-289 else if (element.type().isPrism())\n-290 {\n-291 *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-292 continue;\n-293 }\n-294 else if (element.type().isPyramid())\n-295 {\n-296 *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-297 continue;\n-298 }\n-299 else\n-300 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedra,\n-hexahedra, prisms, or pyramids\");\n-301 } else\n-302 DUNE_THROW(Dune::NotImplemented, \"Grids of dimension larger than 3 are no\n-supported\");\n-303 }\n-304 DUNE_THROW(Dune::NotImplemented, \"Grid contains elements not supported for\n-the LagrangeBasis\");\n-305 }\n-306 return it;\n-307 }\n-308\n-_\b3_\b1_\b0 unsigned int _\bo_\br_\bd_\be_\br() const\n-311 {\n-312 return (useDynamicOrder) ? _\bo_\br_\bd_\be_\br_\b_ : k;\n-313 }\n-314\n-315protected:\n-_\b3_\b1_\b6 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-317\n-318 // Run-time order, only valid if k<0\n-_\b3_\b1_\b9 const unsigned int _\bo_\br_\bd_\be_\br_\b_;\n-320\n-_\b3_\b2_\b2 _\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-323 {\n-324 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-325 }\n-326\n-_\b3_\b2_\b8 _\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-329 {\n-330 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-331 }\n-332\n-_\b3_\b3_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm() const\n-334 {\n-335 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-336 }\n-337\n-_\b3_\b3_\b8 _\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-339 {\n-340 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-341 }\n-342\n-_\b3_\b4_\b4 _\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-345 {\n-346 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-347 }\n-348\n-_\b3_\b5_\b0 _\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-351 {\n-352 return _\bo_\br_\bd_\be_\br() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(_\bo_\br_\bd_\be_\br()-1,\n-cubeDim);\n-353 }\n-354\n-_\b3_\b5_\b5 _\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-356 {\n-357 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-358 }\n-359\n-_\b3_\b6_\b0 _\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-361 {\n-362 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-363 }\n-364\n-365 // When the order is given at run-time, the following numbers are pre-\n-computed:\n-_\b3_\b6_\b6 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b_;\n-_\b3_\b6_\b7 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bu_\bb_\be_\b_;\n-_\b3_\b6_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm_\b_;\n-_\b3_\b6_\b9 _\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-370\n-_\b3_\b7_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bv_\be_\br_\bt_\be_\bx_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b7_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\be_\bd_\bg_\be_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b7_\b3 _\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_\b7_\b4 _\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_\b7_\b5 _\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_\b7_\b6 _\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_\b7_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b3_\b7_\b8 _\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-379\n-380};\n-381\n-382\n-383\n-384template\n-_\b3_\b8_\b5class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be :\n-386 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-387{\n-388 // Stores LocalFiniteElement implementations with run-time order as a\n-function of GeometryType\n-389 template\n-390 class LagrangeRunTimeLFECache\n-391 {\n-392 public:\n-393 using FiniteElementType =\n-LagrangeLocalFiniteElement;\n-394\n-395 const FiniteElementType& get(GeometryType type)\n-396 {\n-397 auto i = data_.find(type);\n-398 if (i==data_.end())\n-399 i = data_.emplace(type,FiniteElementType(type,order_)).first;\n-400 return (*i).second;\n-401 }\n-402\n-403 std::map data_;\n-404 unsigned int order_;\n-405 };\n-406\n-407 static constexpr int dim = GV::dimension;\n-408 static constexpr bool useDynamicOrder = (k<0);\n-409\n-410 using FiniteElementCache = typename std::conditional<(useDynamicOrder),\n-411 LagrangeRunTimeLFECache,\n-412 PQkLocalFiniteElementCache\n-413 >::type;\n-414\n-415public:\n-416\n-_\b4_\b1_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b4_\b1_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b4_\b1_\b9 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = typename FiniteElementCache::FiniteElementType;\n-420\n-_\b4_\b2_\b2 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be() :\n-423 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-424 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n-425 {}\n-426\n-_\b4_\b2_\b8 _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be(unsigned int _\bo_\br_\bd_\be_\br) :\n-429 _\bo_\br_\bd_\be_\br_\b_(_\bo_\br_\bd_\be_\br),\n-430 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-431 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n-432 {\n-433 // Only the cache for the run-time-order case (i.e., k<0), has the 'order_'\n-member\n-434 if constexpr (useDynamicOrder)\n-435 _\bc_\ba_\bc_\bh_\be_\b_.order_ = _\bo_\br_\bd_\be_\br;\n-436 }\n-437\n-_\b4_\b3_\b9 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-440 {\n-441 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-442 }\n-443\n-_\b4_\b4_\b8 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-449 {\n-450 return *_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-451 }\n-452\n-_\b4_\b5_\b4 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-455 {\n-456 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-457 _\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-458 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_->size());\n-459 }\n-460\n-461protected:\n-462\n-_\b4_\b6_\b3 unsigned int _\bo_\br_\bd_\be_\br() const\n-464 {\n-465 return (useDynamicOrder) ? _\bo_\br_\bd_\be_\br_\b_ : k;\n-466 }\n-467\n-468 // Run-time order, only valid if k<0\n-_\b4_\b6_\b9 unsigned int _\bo_\br_\bd_\be_\br_\b_;\n-470\n-_\b4_\b7_\b1 FiniteElementCache _\bc_\ba_\bc_\bh_\be_\b_;\n-_\b4_\b7_\b2 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_\b7_\b3 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-474};\n-475\n-476\n-477\n-478namespace BasisFactory {\n-479\n-488template\n-_\b4_\b8_\b9auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be()\n-490{\n-491 return [](const auto& gridView) {\n-492 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k, R>(gridView);\n-493 };\n-494}\n-495\n-503template\n-_\b5_\b0_\b4auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be(int order)\n-505{\n-506 return [=](const auto& gridView) {\n-507 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, -1, R>(gridView,\n-order);\n-508 };\n-509}\n-510\n-511} // end namespace BasisFactory\n-512\n-513\n-514\n-538template\n-_\b5_\b3_\b9using _\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-540\n-541\n-542\n-543\n-544\n-545} // end namespace Functions\n-546} // end namespace Dune\n-547\n-548\n-549#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n-_\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:489\n+222\n+223} // end namespace BasisFactory\n+224\n+225// Backward compatibility\n+_\b2_\b2_\b6namespace BasisBuilder {\n+227\n+228 using namespace BasisFactory;\n+229\n+230}\n+231\n+232} // end namespace Functions\n+233} // end namespace Dune\n+234\n+235\n+236#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:188\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:218\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:198\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:208\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n-_\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:46\n-_\bD_\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:387\n-_\bD_\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:428\n-_\bD_\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:463\n-_\bD_\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:448\n-_\bD_\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:473\n-_\bD_\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:439\n-_\bD_\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:471\n-_\bD_\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:419\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bb_\bi_\bn_\bd\n-void bind(const Element &e)\n-Bind to element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:454\n-_\bD_\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:418\n-_\bD_\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:472\n-_\bD_\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:469\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:417\n-_\bD_\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:422\n-_\bD_\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: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_\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:333\n-_\bD_\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:350\n-_\bD_\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:344\n-_\bD_\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_\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 lagrangebasis.hh:70\n-_\bD_\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: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:_\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:372\n-_\bD_\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: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:_\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: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_\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:371\n-_\bD_\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:322\n-_\bD_\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:65\n-_\bD_\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:376\n-_\bD_\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:377\n-_\bD_\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: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:_\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:96\n-_\bD_\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: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:_\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:80\n-_\bD_\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:369\n-_\bD_\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:178\n-_\bD_\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:75\n-_\bD_\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:126\n-_\bD_\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\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 lagrangebasis.hh:171\n-_\bD_\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_\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 lagrangebasis.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_\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:62\n-_\bD_\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:374\n-_\bD_\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:120\n-_\bD_\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: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:_\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:134\n-_\bD_\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: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:_\bo_\br_\bd_\be_\br_\b_\n-const unsigned int order_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:319\n-_\bD_\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:367\n-_\bD_\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:184\n-_\bD_\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\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 lagrangebasis.hh:140\n-_\bD_\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:368\n-_\bD_\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:328\n-_\bD_\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:373\n-_\bD_\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:378\n-_\bD_\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_\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 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:_\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:338\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:164\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:186\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:23\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:15\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:44\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:80\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:114\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:148\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:180\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": "@@ -76,15 +76,15 @@\n \n
    boundarydofs.hh File Reference
    \n \n
    \n \n

    Go to the source code of this file.

    \n \n \n \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html", "unified_diff": "@@ -84,15 +84,15 @@\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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n
    5
    \n
    6#include <utility>
    \n
    7
    \n-\n+\n
    9
    \n
    10namespace Dune {
    \n
    11namespace Functions {
    \n
    12
    \n
    13
    \n
    14
    \n
    34template<class Basis, class F,
    \n@@ -157,15 +157,15 @@\n
    124
    \n
    125
    \n
    126
    \n
    127} // namespace Functions
    \n
    128} // namespace Dune
    \n
    129
    \n
    130#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH
    \n-\n+\n
    auto subEntityDOFs(const T &)
    Create SubEntityDOFs object.
    Definition subentitydofs.hh:160
    \n
    void forEachBoundaryDOF(const Basis &basis, F &&f)
    Loop over all DOFs on the boundary.
    Definition boundarydofs.hh:36
    \n
    Definition polynomial.hh:10
    \n
    \n \n
    \n Generated by \"doxygen\"/ 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: hierarchicvectorwrapper.hh File Reference\n+dune-functions: subspacebasis.hh File Reference\n \n \n \n \n \n \n \n@@ -73,51 +73,53 @@\n \n \n
    \n \n-
    hierarchicvectorwrapper.hh File Reference
    \n+
    subspacebasis.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/common/reservedvector.hh>
    \n+#include <dune/common/typeutilities.hh>
    \n+#include <dune/common/concept.hh>
    \n+#include <dune/functions/common/type_traits.hh>
    \n+#include <dune/functions/functionspacebases/subspacelocalview.hh>
    \n #include <dune/functions/functionspacebases/concepts.hh>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

    namespace  Dune
     
    \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::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+\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 , typename std::enable_if< models< Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0>
    V & Dune::Functions::makeHierarchicVectorForMultiIndex (V &v)
     
    template<class MultiIndex , class V , typename std::enable_if< not models< Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0>
    HierarchicVectorWrapper< V > Dune::Functions::makeHierarchicVectorForMultiIndex (V &v)
     
    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": "@@ -2,41 +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 | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-hierarchicvectorwrapper.hh File Reference\n+subspacebasis.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/_\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/_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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:_\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-_\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 >::type = 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 >::type = 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+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/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: hierarchicvectorwrapper.hh Source File\n+dune-functions: subspacebasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,299 +74,206 @@\n \n \n \n
    \n-
    hierarchicvectorwrapper.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n
    5
    \n-
    6#include <dune/common/concept.hh>
    \n-
    7#include <dune/common/hybridutilities.hh>
    \n-
    8#include <dune/common/indices.hh>
    \n+
    6#include <dune/common/reservedvector.hh>
    \n+
    7#include <dune/common/typeutilities.hh>
    \n+
    8#include <dune/common/concept.hh>
    \n
    9
    \n-\n-\n-\n-\n+\n+\n+\n+
    13
    \n
    14
    \n
    15
    \n
    16namespace Dune {
    \n
    17namespace Functions {
    \n
    18
    \n
    19
    \n
    20
    \n-
    21namespace Imp {
    \n+
    21namespace Impl {
    \n
    22
    \n-
    23 // Construct default coefficient type from vector and multiindex type
    \n-
    24 // This requires that MultiIndex has a static size. Otherwise the
    \n-
    25 // vector type itself is returned.
    \n-
    26 template<class V, class MultiIndex>
    \n-
    27 struct CoefficientType
    \n-
    28 {
    \n-
    29 template<class E, std::size_t size>
    \n-
    30 struct DefaultCoefficientTypeHelper
    \n-
    31 {
    \n-
    32 using E0 = decltype(std::declval<E>()[Dune::Indices::_0]);
    \n-
    33 using type = typename DefaultCoefficientTypeHelper<E0, size-1>::type;
    \n-
    34 };
    \n+
    23 template<class... Inner, class... Outer>
    \n+
    24 auto joinTreePaths(const TypeTree::HybridTreePath<Inner...>& inner, const TypeTree::HybridTreePath<Outer...> outer)
    \n+
    25 {
    \n+
    26 return TypeTree::HybridTreePath<Inner..., Outer...>(std::tuple_cat(inner._data, outer._data));
    \n+
    27 }
    \n+
    28
    \n+
    29 template<class InnerTP, class OuterTP>
    \n+
    30 using JoinTreePath_t = std::decay_t<decltype(joinTreePaths(std::declval<InnerTP>(), std::declval<OuterTP>()))>;
    \n+
    31
    \n+
    32}
    \n+
    33
    \n+
    34
    \n
    35
    \n-
    36 template<class E>
    \n-
    37 struct DefaultCoefficientTypeHelper<E, 0>
    \n-
    38 {
    \n-
    39 using type = E;
    \n-
    40 };
    \n-
    41
    \n-
    42 template<class MI,
    \n-
    43 typename std::enable_if<HasStaticSize<MI>::value, int>::type = 0>
    \n-
    44 static constexpr std::size_t getStaticSizeOrZero()
    \n-
    45 {
    \n-
    46 return StaticSize<MI>::value;
    \n-
    47 }
    \n-
    48
    \n-
    49 template<class MI,
    \n-
    50 typename std::enable_if<not HasStaticSize<MI>::value, int>::type = 0>
    \n-
    51 static constexpr std::size_t getStaticSizeOrZero()
    \n-
    52 {
    \n-
    53 return 0;
    \n-
    54 }
    \n-
    55
    \n-
    56 using type = typename DefaultCoefficientTypeHelper<V, getStaticSizeOrZero<MultiIndex>()>::type;
    \n-
    57 };
    \n-
    58
    \n+
    36template<class RB, class TP>
    \n+
    \n+\n+
    38{
    \n+
    39public:
    \n+
    40
    \n+
    41 using RootBasis = RB;
    \n+
    42
    \n+
    43 using RootLocalView = typename RootBasis::LocalView;
    \n+
    44
    \n+
    45 using PrefixPath = TP;
    \n+
    46
    \n+
    48 using GridView = typename RootBasis::GridView;
    \n+
    49
    \n+
    51 using MultiIndex = typename RootBasis::MultiIndex;
    \n+
    52
    \n+
    53 using size_type = std::size_t;
    \n+
    54
    \n+\n+
    57
    \n+
    58 using SizePrefix = typename RootBasis::SizePrefix;
    \n
    59
    \n
    60
    \n-
    61 // This tag class is used as Coefficient template parameter
    \n-
    62 // for HierarchicVectorWrapper if the coefficient type should
    \n-
    63 // be deduced.
    \n-
    64 struct DeducedCoefficientTag {};
    \n-
    65
    \n-
    66} // namespace Imp
    \n-
    67
    \n-
    68
    \n-
    69
    \n-
    90template<class V, class CO=Imp::DeducedCoefficientTag>
    \n-
    \n-\n-
    92{
    \n-
    93 template<class MultiIndex>
    \n-
    94 using Coefficient = typename std::conditional< std::is_same<Imp::DeducedCoefficientTag,CO>::value and HasStaticSize<MultiIndex>::value,
    \n-
    95 typename Imp::CoefficientType<V, MultiIndex>::type,
    \n-
    96 CO
    \n-
    97 >::type;
    \n+\n+
    66
    \n+
    72 template<class RootRootBasis, class InnerTP, class OuterTP>
    \n+\n+
    76
    \n+
    77
    \n+
    \n+
    80 const GridView& gridView() const
    \n+
    81 {
    \n+
    82 return rootBasis_->gridView();
    \n+
    83 }
    \n+
    \n+
    84
    \n+
    \n+\n+
    89 {
    \n+
    90 return rootBasis_->dimension();
    \n+
    91 }
    \n+
    \n+
    92
    \n+
    \n+\n+
    95 {
    \n+
    96 return rootBasis_->size();
    \n+
    97 }
    \n+
    \n
    98
    \n-
    99
    \n-
    100 using size_type = std::size_t;
    \n-
    101
    \n-
    102 template<class C, class SizeProvider,
    \n-
    103 typename std::enable_if< not models<Concept::HasResize, C>(), int>::type = 0,
    \n-
    104 typename std::enable_if< not models<Concept::HasSizeMethod, C>(), int>::type = 0>
    \n-
    105 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    106 {
    \n-
    107 auto size = sizeProvider.size(prefix);
    \n-
    108 if (size != 0)
    \n-
    109 DUNE_THROW(RangeError, "Can't resize scalar vector entry v[" << prefix << "] to size(" << prefix << ")=" << size);
    \n-
    110 }
    \n-
    111
    \n-
    112 struct StaticResizeHelper
    \n-
    113 {
    \n-
    114 template<class I, class C, class SizeProvider>
    \n-
    115 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    116 {
    \n-
    117 prefix.back() = i;
    \n-
    118 resizeHelper(c[i], sizeProvider, prefix);
    \n-
    119 }
    \n-
    120 };
    \n-
    121
    \n-
    122 template<class C, class SizeProvider,
    \n-
    123 typename std::enable_if< not models<Concept::HasResize, C>(), int>::type = 0,
    \n-
    124 typename std::enable_if< models<Concept::HasSizeMethod, C>(), int>::type = 0>
    \n-
    125 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    126 {
    \n-
    127 auto size = sizeProvider.size(prefix);
    \n-
    128 if (size == 0)
    \n-
    129 return;
    \n-
    130
    \n-
    131 if (c.size() != size)
    \n-
    132 DUNE_THROW(RangeError, "Can't resize statically sized vector entry v[" << prefix << "] of size " << c.size() << " to size(" << prefix << ")=" << size);
    \n-
    133
    \n-
    134 using namespace Dune::Hybrid;
    \n-
    135 prefix.push_back(0);
    \n-
    136 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {
    \n-
    137 StaticResizeHelper::apply(i, c, sizeProvider, prefix);
    \n-
    138 });
    \n-
    139 }
    \n-
    140
    \n-
    141 template<class C, class SizeProvider,
    \n-
    142 typename std::enable_if< models<Concept::HasResize, C>(), int>::type = 0>
    \n-
    143 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    144 {
    \n-
    145 auto size = sizeProvider.size(prefix);
    \n-
    146 if (size==0)
    \n-
    147 {
    \n-
    148 if (c.size()==0)
    \n-
    149 DUNE_THROW(RangeError, "Can't resize dynamically sized vector entry v[" << prefix << "]. Its size is 0 but the target size is unknown due to size(" << prefix << ")=0.");
    \n-
    150 else
    \n-
    151 return;
    \n-
    152 }
    \n-
    153
    \n-
    154 c.resize(size);
    \n-
    155 prefix.push_back(0);
    \n-
    156 for(std::size_t i=0; i<size; ++i)
    \n-
    157 {
    \n-
    158 prefix.back() = i;
    \n-
    159 resizeHelper(c[i], sizeProvider, prefix);
    \n-
    160 }
    \n-
    161 }
    \n+
    \n+
    100 size_type size(const SizePrefix& prefix) const
    \n+
    101 {
    \n+
    102 return rootBasis_->size(prefix);
    \n+
    103 }
    \n+
    \n+
    104
    \n+
    \n+\n+
    109 {
    \n+
    110 return LocalView(*this, prefixPath_);
    \n+
    111 }
    \n+
    \n+
    112
    \n+
    \n+
    113 const RootBasis& rootBasis() const
    \n+
    114 {
    \n+
    115 return *rootBasis_;
    \n+
    116 }
    \n+
    \n+
    117
    \n+
    \n+
    118 const PrefixPath& prefixPath() const
    \n+
    119 {
    \n+
    120 return prefixPath_;
    \n+
    121 }
    \n+
    \n+
    122
    \n+
    123protected:
    \n+\n+\n+
    126};
    \n+
    \n+
    127
    \n+
    128
    \n+
    129// CTAD guide for a non-SubspaceBasis root basis
    \n+
    130template<class RB, class TP>
    \n+
    131SubspaceBasis(const RB&, const TP) -> SubspaceBasis<RB, TP>;
    \n+
    132
    \n+
    133// CTAD guide for a SubspaceBasis root basis
    \n+
    134template<class RootRootBasis, class InnerTP, class OuterTP>
    \n+
    135SubspaceBasis(const SubspaceBasis<RootRootBasis, InnerTP>& rootBasis, const OuterTP& prefixPath)
    \n+
    136 -> SubspaceBasis<std::decay_t<decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t<InnerTP, OuterTP>>;
    \n+
    137
    \n+
    138
    \n+
    139
    \n+
    150template<class RootBasis, class... PrefixTreeIndices>
    \n+
    \n+
    151auto subspaceBasis(const RootBasis& rootBasis, const TypeTree::HybridTreePath<PrefixTreeIndices...>& prefixPath)
    \n+
    152{
    \n+
    153 return SubspaceBasis(rootBasis, prefixPath);
    \n+
    154}
    \n+
    \n+
    155
    \n+
    156template<class RootBasis, class... PrefixTreeIndices>
    \n+
    \n+
    157auto subspaceBasis(const RootBasis& rootBasis, const PrefixTreeIndices&... prefixTreeIndices)
    \n+
    158{
    \n+
    159 return subspaceBasis(rootBasis, TypeTree::hybridTreePath(prefixTreeIndices...));
    \n+
    160}
    \n+
    \n+
    161
    \n
    162
    \n
    163
    \n-
    164
    \n-
    165public:
    \n+
    164} // end namespace Functions
    \n+
    165} // end namespace Dune
    \n
    166
    \n-
    167 using Vector = V;
    \n+
    167
    \n
    168
    \n-
    169 template<class MultiIndex>
    \n-
    170 using Entry = Coefficient<MultiIndex>;
    \n-
    171
    \n-
    \n-\n-
    173 vector_(&vector)
    \n-
    174 {}
    \n-
    \n-
    175
    \n-
    176 template<class SizeProvider>
    \n-
    \n-
    177 void resize(const SizeProvider& sizeProvider)
    \n-
    178 {
    \n-
    179 typename SizeProvider::SizePrefix prefix;
    \n-
    180 prefix.resize(0);
    \n-
    181 resizeHelper(*vector_, sizeProvider, prefix);
    \n-
    182 }
    \n-
    \n-
    183
    \n-
    184 template<class MultiIndex>
    \n-
    \n-
    185 const Entry<MultiIndex>& operator[](const MultiIndex& index) const
    \n-
    186 {
    \n-
    187 static_assert(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n-
    188 return hybridMultiIndexAccess<const Entry<MultiIndex>&>(*vector_, index);
    \n-
    189 }
    \n-
    \n-
    190
    \n-
    191 template<class MultiIndex>
    \n-
    \n-
    192 Entry<MultiIndex>& operator[](const MultiIndex& index)
    \n-
    193 {
    \n-
    194 static_assert(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n-
    195 return hybridMultiIndexAccess<Entry<MultiIndex>&>(*vector_, index);
    \n-
    196 }
    \n-
    \n-
    197
    \n-
    198 template<class MultiIndex>
    \n-
    \n-
    199 const Entry<MultiIndex>& operator()(const MultiIndex& index) const
    \n-
    200 {
    \n-
    201 static_assert(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n-
    202 return (*this)[index];
    \n-
    203 }
    \n-
    \n-
    204
    \n-
    205 template<class MultiIndex>
    \n-
    \n-
    206 Entry<MultiIndex>& operator()(const MultiIndex& index)
    \n-
    207 {
    \n-
    208 static_assert(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n-
    209 return (*this)[index];
    \n-
    210 }
    \n-
    \n-
    211
    \n-
    \n-
    212 const Vector& vector() const
    \n-
    213 {
    \n-
    214 return *vector_;
    \n-
    215 }
    \n-
    \n-
    216
    \n-
    \n-\n-
    218 {
    \n-
    219 return *vector_;
    \n-
    220 }
    \n-
    \n-
    221
    \n-
    222private:
    \n-
    223
    \n-
    224 Vector* vector_;
    \n-
    225};
    \n-
    \n-
    226
    \n-
    227
    \n-
    228
    \n-
    229
    \n-
    230template<class V>
    \n-\n-
    235
    \n-
    236
    \n-
    237
    \n-
    238template<class MultiIndex, class V,
    \n-
    239 typename std::enable_if< models<Concept::HasIndexAccess, V, MultiIndex>(), int>::type = 0>
    \n-
    \n-\n-
    241{
    \n-
    242 return v;
    \n-
    243}
    \n-
    \n-
    244
    \n-
    245
    \n-
    246
    \n-
    247template<class MultiIndex, class V,
    \n-
    248 typename std::enable_if< not models<Concept::HasIndexAccess, V, MultiIndex>(), int>::type = 0>
    \n-\n-
    253
    \n-
    254
    \n-
    255
    \n-
    256} // namespace Dune::Functions
    \n-
    257} // namespace Dune
    \n-
    258
    \n-
    259
    \n-
    260#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n-\n-\n-\n+
    169#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n+\n+\n
    Definition polynomial.hh:10
    \n-
    V & makeHierarchicVectorForMultiIndex(V &v)
    Definition hierarchicvectorwrapper.hh:240
    \n-
    HierarchicVectorWrapper< V > hierarchicVector(V &v)
    Definition hierarchicvectorwrapper.hh:231
    \n-
    Check if type is a statically sized container.
    Definition type_traits.hh:83
    \n-
    A wrapper providing multiindex access to vector entries.
    Definition hierarchicvectorwrapper.hh:92
    \n-
    Entry< MultiIndex > & operator()(const MultiIndex &index)
    Definition hierarchicvectorwrapper.hh:206
    \n-
    Entry< MultiIndex > & operator[](const MultiIndex &index)
    Definition hierarchicvectorwrapper.hh:192
    \n-
    const Entry< MultiIndex > & operator[](const MultiIndex &index) const
    Definition hierarchicvectorwrapper.hh:185
    \n-
    Vector & vector()
    Definition hierarchicvectorwrapper.hh:217
    \n-
    V Vector
    Definition hierarchicvectorwrapper.hh:167
    \n-
    Coefficient< MultiIndex > Entry
    Definition hierarchicvectorwrapper.hh:170
    \n-
    const Vector & vector() const
    Definition hierarchicvectorwrapper.hh:212
    \n-
    HierarchicVectorWrapper(Vector &vector)
    Definition hierarchicvectorwrapper.hh:172
    \n-
    const Entry< MultiIndex > & operator()(const MultiIndex &index) const
    Definition hierarchicvectorwrapper.hh:199
    \n-
    void resize(const SizeProvider &sizeProvider)
    Definition hierarchicvectorwrapper.hh:177
    \n+
    auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)
    Create SubspaceBasis from a root basis and a prefixPath.
    Definition subspacebasis.hh:151
    \n+
    Definition subspacebasis.hh:38
    \n+
    typename RootBasis::LocalView RootLocalView
    Definition subspacebasis.hh:43
    \n+
    LocalView localView() const
    Return local view for basis.
    Definition subspacebasis.hh:108
    \n+
    const RootBasis * rootBasis_
    Definition subspacebasis.hh:124
    \n+
    typename RootBasis::SizePrefix SizePrefix
    Definition subspacebasis.hh:58
    \n+
    TP PrefixPath
    Definition subspacebasis.hh:45
    \n+
    SubspaceLocalView< RootLocalView, PrefixPath > LocalView
    Type of the local view on the restriction of the basis to a single element.
    Definition subspacebasis.hh:56
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition subspacebasis.hh:100
    \n+
    typename RootBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition subspacebasis.hh:48
    \n+
    const PrefixPath & prefixPath() const
    Definition subspacebasis.hh:118
    \n+
    SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath)
    Constructor from another SubspaceBasis.
    Definition subspacebasis.hh:73
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition subspacebasis.hh:80
    \n+
    RB RootBasis
    Definition subspacebasis.hh:41
    \n+
    PrefixPath prefixPath_
    Definition subspacebasis.hh:125
    \n+
    size_type size() const
    Return number of possible values for next position in empty multi index.
    Definition subspacebasis.hh:94
    \n+
    const RootBasis & rootBasis() const
    Definition subspacebasis.hh:113
    \n+
    typename RootBasis::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition subspacebasis.hh:51
    \n+
    size_type dimension() const
    Definition subspacebasis.hh:88
    \n+
    std::size_t size_type
    Definition subspacebasis.hh:53
    \n+
    SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)
    Constructor for a given grid view object.
    Definition subspacebasis.hh:62
    \n+
    The restriction of a finite element basis to a single element.
    Definition subspacelocalview.hh:30
    \n \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,327 +1,243 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n 5\n-6#include \n-7#include \n-8#include \n+6#include \n+7#include \n+8#include \n 9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n-12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\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+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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+13\n 14\n 15\n 16namespace _\bD_\bu_\bn_\be {\n 17namespace Functions {\n 18\n 19\n 20\n-21namespace Imp {\n+21namespace Impl {\n 22\n-23 // Construct default coefficient type from vector and multiindex type\n-24 // This requires that MultiIndex has a static size. Otherwise the\n-25 // vector type itself is returned.\n-26 template\n-27 struct CoefficientType\n-28 {\n-29 template\n-30 struct DefaultCoefficientTypeHelper\n-31 {\n-32 using E0 = decltype(std::declval()[Dune::Indices::_0]);\n-33 using type = typename DefaultCoefficientTypeHelper::type;\n-34 };\n+23 template\n+24 auto joinTreePaths(const TypeTree::HybridTreePath& inner, const\n+TypeTree::HybridTreePath outer)\n+25 {\n+26 return TypeTree::HybridTreePath(std::tuple_cat\n+(inner._data, outer._data));\n+27 }\n+28\n+29 template\n+30 using JoinTreePath_t = std::decay_t(), std::declval()))>;\n+31\n+32}\n+33\n+34\n 35\n-36 template\n-37 struct DefaultCoefficientTypeHelper\n-38 {\n-39 using type = E;\n-40 };\n-41\n-42 template::value, int>::type = 0>\n-44 static constexpr std::size_t getStaticSizeOrZero()\n-45 {\n-46 return StaticSize::value;\n-47 }\n-48\n-49 template::value, int>::type = 0>\n-51 static constexpr std::size_t getStaticSizeOrZero()\n-52 {\n-53 return 0;\n-54 }\n-55\n-56 using type = typename DefaultCoefficientTypeHelper()>::type;\n-57 };\n-58\n+36template\n+_\b3_\b7class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n+38{\n+39public:\n+40\n+_\b4_\b1 using _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs = RB;\n+42\n+_\b4_\b3 using _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = typename RootBasis::LocalView;\n+44\n+_\b4_\b5 using _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh = TP;\n+46\n+_\b4_\b8 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename RootBasis::GridView;\n+49\n+_\b5_\b1 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename RootBasis::MultiIndex;\n+52\n+_\b5_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+54\n+_\b5_\b6 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+57\n+_\b5_\b8 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = typename RootBasis::SizePrefix;\n 59\n 60\n-61 // This tag class is used as Coefficient template parameter\n-62 // for HierarchicVectorWrapper if the coefficient type should\n-63 // be deduced.\n-64 struct DeducedCoefficientTag {};\n-65\n-66} // namespace Imp\n-67\n-68\n-69\n-90template\n-_\b9_\b1class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br\n-92{\n-93 template\n-94 using Coefficient = typename std::conditional< std::is_same::value and _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be,\n-95 typename Imp::CoefficientType::type,\n-96 CO\n-97 >::type;\n+_\b6_\b2 _\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+63 _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_(&_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs),\n+64 _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_(_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh)\n+65 {}\n+66\n+72 template\n+_\b7_\b3 _\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+74 _\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+75 {}\n+76\n+77\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 _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->gridView();\n+83 }\n+84\n+_\b8_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+89 {\n+90 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->dimension();\n+91 }\n+92\n+_\b9_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+95 {\n+96 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->size();\n+97 }\n 98\n-99\n-100 using size_type = std::size_t;\n-101\n-102 template(), int>::type =\n-0,\n-104 typename std::enable_if< not models(), int>::\n-type = 0>\n-105 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-106 {\n-107 auto size = sizeProvider.size(prefix);\n-108 if (size != 0)\n-109 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n-\"] to size(\" << prefix << \")=\" << size);\n-110 }\n-111\n-112 struct StaticResizeHelper\n-113 {\n-114 template\n-115 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-116 {\n-117 prefix.back() = i;\n-118 resizeHelper(c[i], sizeProvider, prefix);\n-119 }\n-120 };\n-121\n-122 template(), int>::type =\n-0,\n-124 typename std::enable_if< models(), int>::type =\n-0>\n-125 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-126 {\n-127 auto size = sizeProvider.size(prefix);\n-128 if (size == 0)\n-129 return;\n-130\n-131 if (c.size() != size)\n-132 DUNE_THROW(RangeError, \"Can't resize statically sized vector entry v[\" <<\n-prefix << \"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n-133\n-134 using namespace Dune::Hybrid;\n-135 prefix.push_back(0);\n-136 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n-137 StaticResizeHelper::apply(i, c, sizeProvider, prefix);\n-138 });\n-139 }\n-140\n-141 template(), int>::type = 0>\n-143 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-144 {\n-145 auto size = sizeProvider.size(prefix);\n-146 if (size==0)\n-147 {\n-148 if (c.size()==0)\n-149 DUNE_THROW(RangeError, \"Can't resize dynamically sized vector entry v[\" <<\n-prefix << \"]. Its size is 0 but the target size is unknown due to size(\" <<\n-prefix << \")=0.\");\n-150 else\n-151 return;\n-152 }\n-153\n-154 c.resize(size);\n-155 prefix.push_back(0);\n-156 for(std::size_t i=0; isize(prefix);\n+103 }\n+104\n+_\b1_\b0_\b8 _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n+109 {\n+110 return _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(*this, _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_);\n+111 }\n+112\n+_\b1_\b1_\b3 const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs() const\n+114 {\n+115 return *_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_;\n+116 }\n+117\n+_\b1_\b1_\b8 const _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh() const\n+119 {\n+120 return _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n+121 }\n+122\n+123protected:\n+_\b1_\b2_\b4 const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs* _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_;\n+_\b1_\b2_\b5 _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n+126};\n+127\n+128\n+129// CTAD guide for a non-SubspaceBasis root basis\n+130template\n+_\b1_\b3_\b1_\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+132\n+133// CTAD guide for a SubspaceBasis root basis\n+134template\n+_\b1_\b3_\b5_\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+136 -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs, Impl::\n+JoinTreePath_t>;\n+137\n+138\n+139\n+150template\n+_\b1_\b5_\b1auto _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RootBasis& rootBasis, const TypeTree::\n+HybridTreePath& prefixPath)\n+152{\n+153 return _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(rootBasis, prefixPath);\n+154}\n+155\n+156template\n+_\b1_\b5_\b7auto _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RootBasis& rootBasis, const PrefixTreeIndices&...\n+prefixTreeIndices)\n+158{\n+159 return _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(rootBasis, TypeTree::hybridTreePath\n+(prefixTreeIndices...));\n+160}\n+161\n 162\n 163\n-164\n-165public:\n+164} // end namespace Functions\n+165} // end namespace Dune\n 166\n-_\b1_\b6_\b7 using _\bV_\be_\bc_\bt_\bo_\br = V;\n+167\n 168\n-169 template\n-_\b1_\b7_\b0 using _\bE_\bn_\bt_\br_\by = Coefficient;\n-171\n-_\b1_\b7_\b2 _\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& _\bv_\be_\bc_\bt_\bo_\br) :\n-173 vector_(&_\bv_\be_\bc_\bt_\bo_\br)\n-174 {}\n-175\n-176 template\n-_\b1_\b7_\b7 void _\br_\be_\bs_\bi_\bz_\be(const SizeProvider& sizeProvider)\n-178 {\n-179 typename SizeProvider::SizePrefix prefix;\n-180 prefix.resize(0);\n-181 resizeHelper(*vector_, sizeProvider, prefix);\n-182 }\n-183\n-184 template\n-_\b1_\b8_\b5 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-186 {\n-187 static_assert(not std::is_same>::value, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n-188 return hybridMultiIndexAccess&>(*vector_, index);\n-189 }\n-190\n-191 template\n-_\b1_\b9_\b2 _\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-193 {\n-194 static_assert(not std::is_same>::value, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n-195 return hybridMultiIndexAccess&>(*vector_, index);\n-196 }\n-197\n-198 template\n-_\b1_\b9_\b9 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-200 {\n-201 static_assert(not std::is_same>::value, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n-202 return (*this)[index];\n-203 }\n-204\n-205 template\n-_\b2_\b0_\b6 _\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-207 {\n-208 static_assert(not std::is_same>::value, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n-209 return (*this)[index];\n-210 }\n-211\n-_\b2_\b1_\b2 const _\bV_\be_\bc_\bt_\bo_\br& _\bv_\be_\bc_\bt_\bo_\br() const\n-213 {\n-214 return *vector_;\n-215 }\n-216\n-_\b2_\b1_\b7 _\bV_\be_\bc_\bt_\bo_\br& _\bv_\be_\bc_\bt_\bo_\br()\n-218 {\n-219 return *vector_;\n-220 }\n-221\n-222private:\n-223\n-224 _\bV_\be_\bc_\bt_\bo_\br* vector_;\n-225};\n-226\n-227\n-228\n-229\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-238template(),\n-int>::type = 0>\n-_\b2_\b4_\b0V& _\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-241{\n-242 return v;\n-243}\n-244\n-245\n-246\n-247template\n-(), int>::type = 0>\n-_\b2_\b4_\b9_\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-250{\n-251 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-252}\n-253\n-254\n-255\n-256} // namespace Dune::Functions\n-257} // namespace Dune\n-258\n-259\n-260#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+169#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh\n _\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh\n-_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:240\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_\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:83\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:92\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:206\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:192\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:185\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:217\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:167\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: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:_\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:212\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:172\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:199\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:177\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: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_\bB_\ba_\bs_\bi_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:38\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:43\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:108\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:124\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:58\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: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:_\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:56\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: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_\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: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_\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:118\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:73\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:80\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:41\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:125\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:94\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:113\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: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_\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:88\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:53\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: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_\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:30\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: subentitydofs.hh File Reference\n+dune-functions: hierarchicvectorwrapper.hh File Reference\n \n \n \n \n \n \n \n@@ -73,50 +73,51 @@\n \n \n
    \n \n-
    subentitydofs.hh File Reference
    \n+
    hierarchicvectorwrapper.hh File Reference
    \n
    \n
    \n-
    #include <vector>
    \n-#include <dune/geometry/referenceelements.hh>
    \n-#include <dune/typetree/traversal.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 \n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::Functions::SubEntityDOFs< GridView >
     Range of DOFs associated to sub-entity. More...
    class  Dune::Functions::HierarchicVectorWrapper< V, CO >
     A wrapper providing multiindex access to vector entries. 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 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<class V >
    HierarchicVectorWrapper< V > Dune::Functions::hierarchicVector (V &v)
     
    template<class MultiIndex , class V , typename std::enable_if< models< Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0>
    V & Dune::Functions::makeHierarchicVectorForMultiIndex (V &v)
     
    template<class MultiIndex , class V , typename std::enable_if< not models< Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0>
    HierarchicVectorWrapper< V > Dune::Functions::makeHierarchicVectorForMultiIndex (V &v)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,38 +2,41 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-subentitydofs.hh File Reference\n-#include \n-#include \n-#include \n+hierarchicvectorwrapper.hh File Reference\n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs_\b<_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b _\b>\n-\u00a0 Range of DOFs associated to sub-entity. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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 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+_\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 >::type = 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 >::type = 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/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: subentitydofs.hh Source File\n+dune-functions: hierarchicvectorwrapper.hh Source File\n \n \n \n \n \n \n \n@@ -74,170 +74,300 @@\n \n \n
    \n
    \n-
    subentitydofs.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n
    5
    \n-
    6#include <vector>
    \n-
    7
    \n-
    8#include <dune/geometry/referenceelements.hh>
    \n-
    9#include <dune/typetree/traversal.hh>
    \n-
    10
    \n-
    11
    \n-
    12
    \n-
    13namespace Dune {
    \n-
    14namespace Functions {
    \n+
    6#include <dune/common/concept.hh>
    \n+
    7#include <dune/common/hybridutilities.hh>
    \n+
    8#include <dune/common/indices.hh>
    \n+
    9
    \n+\n+\n+\n+\n+
    14
    \n
    15
    \n-
    16
    \n-
    17
    \n-
    40template<class GridView>
    \n-
    \n-\n-
    42{
    \n-
    43 static const int dim = GridView::dimension;
    \n-
    44
    \n-
    45public:
    \n-
    46
    \n-
    63 template<class LocalView>
    \n-
    \n-
    64 SubEntityDOFs& bind(const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    \n-
    65 {
    \n-
    66 // fill vector with local indices of all DOFs contained in subentity
    \n-
    67 containedDOFs_.clear();
    \n-
    68 dofIsContained_.assign(localView.size(), false);
    \n+
    16namespace Dune {
    \n+
    17namespace Functions {
    \n+
    18
    \n+
    19
    \n+
    20
    \n+
    21namespace Imp {
    \n+
    22
    \n+
    23 // Construct default coefficient type from vector and multiindex type
    \n+
    24 // This requires that MultiIndex has a static size. Otherwise the
    \n+
    25 // vector type itself is returned.
    \n+
    26 template<class V, class MultiIndex>
    \n+
    27 struct CoefficientType
    \n+
    28 {
    \n+
    29 template<class E, std::size_t size>
    \n+
    30 struct DefaultCoefficientTypeHelper
    \n+
    31 {
    \n+
    32 using E0 = decltype(std::declval<E>()[Dune::Indices::_0]);
    \n+
    33 using type = typename DefaultCoefficientTypeHelper<E0, size-1>::type;
    \n+
    34 };
    \n+
    35
    \n+
    36 template<class E>
    \n+
    37 struct DefaultCoefficientTypeHelper<E, 0>
    \n+
    38 {
    \n+
    39 using type = E;
    \n+
    40 };
    \n+
    41
    \n+
    42 template<class MI,
    \n+
    43 typename std::enable_if<HasStaticSize<MI>::value, int>::type = 0>
    \n+
    44 static constexpr std::size_t getStaticSizeOrZero()
    \n+
    45 {
    \n+
    46 return StaticSize<MI>::value;
    \n+
    47 }
    \n+
    48
    \n+
    49 template<class MI,
    \n+
    50 typename std::enable_if<not HasStaticSize<MI>::value, int>::type = 0>
    \n+
    51 static constexpr std::size_t getStaticSizeOrZero()
    \n+
    52 {
    \n+
    53 return 0;
    \n+
    54 }
    \n+
    55
    \n+
    56 using type = typename DefaultCoefficientTypeHelper<V, getStaticSizeOrZero<MultiIndex>()>::type;
    \n+
    57 };
    \n+
    58
    \n+
    59
    \n+
    60
    \n+
    61 // This tag class is used as Coefficient template parameter
    \n+
    62 // for HierarchicVectorWrapper if the coefficient type should
    \n+
    63 // be deduced.
    \n+
    64 struct DeducedCoefficientTag {};
    \n+
    65
    \n+
    66} // namespace Imp
    \n+
    67
    \n+
    68
    \n
    69
    \n-
    70 auto re = Dune::referenceElement<double,dim>(localView.element().type());
    \n-
    71
    \n-
    72 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /*treePath*/) {
    \n-
    73 const auto& localCoefficients = node.finiteElement().localCoefficients();
    \n-
    74 std::size_t localSize = localCoefficients.size();
    \n-
    75 for(std::size_t i=0; i<localSize; ++i)
    \n-
    76 {
    \n-
    77 auto localKey = localCoefficients.localKey(i);
    \n-
    78 if (re.subEntities(subEntityIndex, subEntityCodim, localKey.codim()).contains(localKey.subEntity()))
    \n-
    79 {
    \n-
    80 containedDOFs_.push_back(node.localIndex(i));
    \n-
    81 dofIsContained_[node.localIndex(i)] = true;
    \n-
    82 }
    \n-
    83 }
    \n-
    84 });
    \n-
    85 return *this;
    \n-
    86 }
    \n-
    \n-
    87
    \n-
    103 template<class LocalView, class Intersection>
    \n-
    \n-
    104 SubEntityDOFs& bind(const LocalView& localView, const Intersection& intersection)
    \n-
    105 {
    \n-
    106 return bind(localView, intersection.indexInInside(), 1);
    \n-
    107 }
    \n-
    \n-
    108
    \n-
    \n-
    110 auto begin() const
    \n-
    111 {
    \n-
    112 return containedDOFs_.cbegin();
    \n-
    113 }
    \n-
    \n-
    114
    \n-
    \n-
    116 auto end() const
    \n-
    117 {
    \n-
    118 return containedDOFs_.cend();
    \n-
    119 }
    \n-
    \n-
    120
    \n-
    \n-
    122 auto size() const
    \n-
    123 {
    \n-
    124 return containedDOFs_.size();
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    \n-
    128 decltype(auto) operator[](std::size_t i) const
    \n-
    129 {
    \n-
    130 return containedDOFs_[i];
    \n-
    131 }
    \n-
    \n-
    132
    \n-
    \n-
    134 bool contains(std::size_t localIndex) const
    \n-
    135 {
    \n-
    136 return dofIsContained_[localIndex];
    \n-
    137 }
    \n-
    \n-
    138
    \n-
    139private:
    \n+
    90template<class V, class CO=Imp::DeducedCoefficientTag>
    \n+
    \n+\n+
    92{
    \n+
    93 template<class MultiIndex>
    \n+
    94 using Coefficient = typename std::conditional< std::is_same<Imp::DeducedCoefficientTag,CO>::value and HasStaticSize<MultiIndex>::value,
    \n+
    95 typename Imp::CoefficientType<V, MultiIndex>::type,
    \n+
    96 CO
    \n+
    97 >::type;
    \n+
    98
    \n+
    99
    \n+
    100 using size_type = std::size_t;
    \n+
    101
    \n+
    102 template<class C, class SizeProvider,
    \n+
    103 typename std::enable_if< not models<Concept::HasResize, C>(), int>::type = 0,
    \n+
    104 typename std::enable_if< not models<Concept::HasSizeMethod, C>(), int>::type = 0>
    \n+
    105 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    106 {
    \n+
    107 auto size = sizeProvider.size(prefix);
    \n+
    108 if (size != 0)
    \n+
    109 DUNE_THROW(RangeError, "Can't resize scalar vector entry v[" << prefix << "] to size(" << prefix << ")=" << size);
    \n+
    110 }
    \n+
    111
    \n+
    112 struct StaticResizeHelper
    \n+
    113 {
    \n+
    114 template<class I, class C, class SizeProvider>
    \n+
    115 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    116 {
    \n+
    117 prefix.back() = i;
    \n+
    118 resizeHelper(c[i], sizeProvider, prefix);
    \n+
    119 }
    \n+
    120 };
    \n+
    121
    \n+
    122 template<class C, class SizeProvider,
    \n+
    123 typename std::enable_if< not models<Concept::HasResize, C>(), int>::type = 0,
    \n+
    124 typename std::enable_if< models<Concept::HasSizeMethod, C>(), int>::type = 0>
    \n+
    125 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    126 {
    \n+
    127 auto size = sizeProvider.size(prefix);
    \n+
    128 if (size == 0)
    \n+
    129 return;
    \n+
    130
    \n+
    131 if (c.size() != size)
    \n+
    132 DUNE_THROW(RangeError, "Can't resize statically sized vector entry v[" << prefix << "] of size " << c.size() << " to size(" << prefix << ")=" << size);
    \n+
    133
    \n+
    134 using namespace Dune::Hybrid;
    \n+
    135 prefix.push_back(0);
    \n+
    136 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {
    \n+
    137 StaticResizeHelper::apply(i, c, sizeProvider, prefix);
    \n+
    138 });
    \n+
    139 }
    \n
    140
    \n-
    141 std::vector<std::size_t> containedDOFs_;
    \n-
    142 std::vector<bool> dofIsContained_;
    \n-
    143};
    \n-
    \n-
    144
    \n-
    145
    \n-
    146
    \n-
    159template<class T>
    \n-
    \n-
    160auto subEntityDOFs(const T&)
    \n-
    161{
    \n-\n-
    163}
    \n-
    \n+
    141 template<class C, class SizeProvider,
    \n+
    142 typename std::enable_if< models<Concept::HasResize, C>(), int>::type = 0>
    \n+
    143 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    144 {
    \n+
    145 auto size = sizeProvider.size(prefix);
    \n+
    146 if (size==0)
    \n+
    147 {
    \n+
    148 if (c.size()==0)
    \n+
    149 DUNE_THROW(RangeError, "Can't resize dynamically sized vector entry v[" << prefix << "]. Its size is 0 but the target size is unknown due to size(" << prefix << ")=0.");
    \n+
    150 else
    \n+
    151 return;
    \n+
    152 }
    \n+
    153
    \n+
    154 c.resize(size);
    \n+
    155 prefix.push_back(0);
    \n+
    156 for(std::size_t i=0; i<size; ++i)
    \n+
    157 {
    \n+
    158 prefix.back() = i;
    \n+
    159 resizeHelper(c[i], sizeProvider, prefix);
    \n+
    160 }
    \n+
    161 }
    \n+
    162
    \n+
    163
    \n
    164
    \n-
    165
    \n+
    165public:
    \n
    166
    \n-
    186template<class LocalView>
    \n-
    \n-
    187auto subEntityDOFs(const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
    \n-
    188{
    \n-
    189 using GridView = typename LocalView::GridView;
    \n-\n-
    191 subEntityDOFs.bind(localView, subEntityIndex, subEntityCodim);
    \n-
    192 return subEntityDOFs;
    \n-
    193}
    \n-
    \n-
    194
    \n-
    195
    \n-
    196
    \n-
    215template<class LocalView, class Intersection>
    \n-
    \n-
    216auto subEntityDOFs(const LocalView& localView, const Intersection& intersection)
    \n-
    217{
    \n-
    218 using GridView = typename LocalView::GridView;
    \n-\n-
    220 subEntityDOFs.bind(localView, intersection);
    \n-
    221 return subEntityDOFs;
    \n-
    222}
    \n+
    167 using Vector = V;
    \n+
    168
    \n+
    169 template<class MultiIndex>
    \n+
    170 using Entry = Coefficient<MultiIndex>;
    \n+
    171
    \n+
    \n+\n+
    173 vector_(&vector)
    \n+
    174 {}
    \n+
    \n+
    175
    \n+
    176 template<class SizeProvider>
    \n+
    \n+
    177 void resize(const SizeProvider& sizeProvider)
    \n+
    178 {
    \n+
    179 typename SizeProvider::SizePrefix prefix;
    \n+
    180 prefix.resize(0);
    \n+
    181 resizeHelper(*vector_, sizeProvider, prefix);
    \n+
    182 }
    \n+
    \n+
    183
    \n+
    184 template<class MultiIndex>
    \n+
    \n+
    185 const Entry<MultiIndex>& operator[](const MultiIndex& index) const
    \n+
    186 {
    \n+
    187 static_assert(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n+
    188 return hybridMultiIndexAccess<const Entry<MultiIndex>&>(*vector_, index);
    \n+
    189 }
    \n+
    \n+
    190
    \n+
    191 template<class MultiIndex>
    \n+
    \n+
    192 Entry<MultiIndex>& operator[](const MultiIndex& index)
    \n+
    193 {
    \n+
    194 static_assert(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n+
    195 return hybridMultiIndexAccess<Entry<MultiIndex>&>(*vector_, index);
    \n+
    196 }
    \n+
    \n+
    197
    \n+
    198 template<class MultiIndex>
    \n+
    \n+
    199 const Entry<MultiIndex>& operator()(const MultiIndex& index) const
    \n+
    200 {
    \n+
    201 static_assert(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n+
    202 return (*this)[index];
    \n+
    203 }
    \n+
    \n+
    204
    \n+
    205 template<class MultiIndex>
    \n+
    \n+
    206 Entry<MultiIndex>& operator()(const MultiIndex& index)
    \n+
    207 {
    \n+
    208 static_assert(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, "Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!");
    \n+
    209 return (*this)[index];
    \n+
    210 }
    \n+
    \n+
    211
    \n+
    \n+
    212 const Vector& vector() const
    \n+
    213 {
    \n+
    214 return *vector_;
    \n+
    215 }
    \n+
    \n+
    216
    \n+
    \n+\n+
    218 {
    \n+
    219 return *vector_;
    \n+
    220 }
    \n
    \n+
    221
    \n+
    222private:
    \n
    223
    \n-
    224
    \n-
    225
    \n-
    226} // namespace Functions
    \n-
    227} // namespace Dune
    \n+
    224 Vector* vector_;
    \n+
    225};
    \n+
    \n+
    226
    \n+
    227
    \n
    228
    \n-
    229#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
    \n-
    auto subEntityDOFs(const T &)
    Create SubEntityDOFs object.
    Definition subentitydofs.hh:160
    \n+
    229
    \n+
    230template<class V>
    \n+\n+
    235
    \n+
    236
    \n+
    237
    \n+
    238template<class MultiIndex, class V,
    \n+
    239 typename std::enable_if< models<Concept::HasIndexAccess, V, MultiIndex>(), int>::type = 0>
    \n+
    \n+\n+
    241{
    \n+
    242 return v;
    \n+
    243}
    \n+
    \n+
    244
    \n+
    245
    \n+
    246
    \n+
    247template<class MultiIndex, class V,
    \n+
    248 typename std::enable_if< not models<Concept::HasIndexAccess, V, MultiIndex>(), int>::type = 0>
    \n+\n+
    253
    \n+
    254
    \n+
    255
    \n+
    256} // namespace Dune::Functions
    \n+
    257} // namespace Dune
    \n+
    258
    \n+
    259
    \n+
    260#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH
    \n+\n+\n+\n
    Definition polynomial.hh:10
    \n-
    Range of DOFs associated to sub-entity.
    Definition subentitydofs.hh:42
    \n-
    auto begin() const
    Create begin iterator for access to range of contained local indices.
    Definition subentitydofs.hh:110
    \n-
    auto size() const
    Return number of contained DOFs.
    Definition subentitydofs.hh:122
    \n-
    SubEntityDOFs & bind(const LocalView &localView, const Intersection &intersection)
    Bind SubEntityDOFs object to LocalView and sub-entity.
    Definition subentitydofs.hh:104
    \n-
    bool contains(std::size_t localIndex) const
    Check if given local index is contained in this range of DOFs.
    Definition subentitydofs.hh:134
    \n-
    auto end() const
    Create end iterator for access to range of contained local indices.
    Definition subentitydofs.hh:116
    \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:64
    \n+
    V & makeHierarchicVectorForMultiIndex(V &v)
    Definition hierarchicvectorwrapper.hh:240
    \n+
    HierarchicVectorWrapper< V > hierarchicVector(V &v)
    Definition hierarchicvectorwrapper.hh:231
    \n+
    Check if type is a statically sized container.
    Definition type_traits.hh:83
    \n+
    A wrapper providing multiindex access to vector entries.
    Definition hierarchicvectorwrapper.hh:92
    \n+
    Entry< MultiIndex > & operator()(const MultiIndex &index)
    Definition hierarchicvectorwrapper.hh:206
    \n+
    Entry< MultiIndex > & operator[](const MultiIndex &index)
    Definition hierarchicvectorwrapper.hh:192
    \n+
    const Entry< MultiIndex > & operator[](const MultiIndex &index) const
    Definition hierarchicvectorwrapper.hh:185
    \n+
    Vector & vector()
    Definition hierarchicvectorwrapper.hh:217
    \n+
    V Vector
    Definition hierarchicvectorwrapper.hh:167
    \n+
    Coefficient< MultiIndex > Entry
    Definition hierarchicvectorwrapper.hh:170
    \n+
    const Vector & vector() const
    Definition hierarchicvectorwrapper.hh:212
    \n+
    HierarchicVectorWrapper(Vector &vector)
    Definition hierarchicvectorwrapper.hh:172
    \n+
    const Entry< MultiIndex > & operator()(const MultiIndex &index) const
    Definition hierarchicvectorwrapper.hh:199
    \n+
    void resize(const SizeProvider &sizeProvider)
    Definition hierarchicvectorwrapper.hh:177
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,174 +1,327 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n 5\n-6#include \n-7\n-8#include \n-9#include \n-10\n-11\n-12\n-13namespace _\bD_\bu_\bn_\be {\n-14namespace Functions {\n+6#include \n+7#include \n+8#include \n+9\n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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\n 15\n-16\n-17\n-40template\n-_\b4_\b1class _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs\n-42{\n-43 static const int dim = GridView::dimension;\n-44\n-45public:\n-46\n-63 template\n-_\b6_\b4 _\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-65 {\n-66 // fill vector with local indices of all DOFs contained in subentity\n-67 containedDOFs_.clear();\n-68 dofIsContained_.assign(localView.size(), false);\n+16namespace _\bD_\bu_\bn_\be {\n+17namespace Functions {\n+18\n+19\n+20\n+21namespace Imp {\n+22\n+23 // Construct default coefficient type from vector and multiindex type\n+24 // This requires that MultiIndex has a static size. Otherwise the\n+25 // vector type itself is returned.\n+26 template\n+27 struct CoefficientType\n+28 {\n+29 template\n+30 struct DefaultCoefficientTypeHelper\n+31 {\n+32 using E0 = decltype(std::declval()[Dune::Indices::_0]);\n+33 using type = typename DefaultCoefficientTypeHelper::type;\n+34 };\n+35\n+36 template\n+37 struct DefaultCoefficientTypeHelper\n+38 {\n+39 using type = E;\n+40 };\n+41\n+42 template::value, int>::type = 0>\n+44 static constexpr std::size_t getStaticSizeOrZero()\n+45 {\n+46 return StaticSize::value;\n+47 }\n+48\n+49 template::value, int>::type = 0>\n+51 static constexpr std::size_t getStaticSizeOrZero()\n+52 {\n+53 return 0;\n+54 }\n+55\n+56 using type = typename DefaultCoefficientTypeHelper()>::type;\n+57 };\n+58\n+59\n+60\n+61 // This tag class is used as Coefficient template parameter\n+62 // for HierarchicVectorWrapper if the coefficient type should\n+63 // be deduced.\n+64 struct DeducedCoefficientTag {};\n+65\n+66} // namespace Imp\n+67\n+68\n 69\n-70 auto re = Dune::referenceElement(localView.element().type());\n-71\n-72 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /\n-*treePath*/) {\n-73 const auto& localCoefficients = node.finiteElement().localCoefficients();\n-74 std::size_t localSize = localCoefficients.size();\n-75 for(std::size_t i=0; i\n-_\b1_\b0_\b4 _\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-105 {\n-106 return bind(localView, intersection.indexInInside(), 1);\n-107 }\n-108\n-_\b1_\b1_\b0 auto _\bb_\be_\bg_\bi_\bn() const\n-111 {\n-112 return containedDOFs_.cbegin();\n-113 }\n-114\n-_\b1_\b1_\b6 auto _\be_\bn_\bd() const\n-117 {\n-118 return containedDOFs_.cend();\n+90template\n+_\b9_\b1class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\bW_\br_\ba_\bp_\bp_\be_\br\n+92{\n+93 template\n+94 using Coefficient = typename std::conditional< std::is_same::value and _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b<_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be,\n+95 typename Imp::CoefficientType::type,\n+96 CO\n+97 >::type;\n+98\n+99\n+100 using size_type = std::size_t;\n+101\n+102 template(), int>::type =\n+0,\n+104 typename std::enable_if< not models(), int>::\n+type = 0>\n+105 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+106 {\n+107 auto size = sizeProvider.size(prefix);\n+108 if (size != 0)\n+109 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n+\"] to size(\" << prefix << \")=\" << size);\n+110 }\n+111\n+112 struct StaticResizeHelper\n+113 {\n+114 template\n+115 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+116 {\n+117 prefix.back() = i;\n+118 resizeHelper(c[i], sizeProvider, prefix);\n 119 }\n-120\n-_\b1_\b2_\b2 auto _\bs_\bi_\bz_\be() const\n-123 {\n-124 return containedDOFs_.size();\n-125 }\n-126\n-_\b1_\b2_\b8 decltype(auto) operator[](std::size_t i) const\n-129 {\n-130 return containedDOFs_[i];\n-131 }\n-132\n-_\b1_\b3_\b4 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(std::size_t localIndex) const\n-135 {\n-136 return dofIsContained_[localIndex];\n-137 }\n-138\n-139private:\n+120 };\n+121\n+122 template(), int>::type =\n+0,\n+124 typename std::enable_if< models(), int>::type =\n+0>\n+125 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+126 {\n+127 auto size = sizeProvider.size(prefix);\n+128 if (size == 0)\n+129 return;\n+130\n+131 if (c.size() != size)\n+132 DUNE_THROW(RangeError, \"Can't resize statically sized vector entry v[\" <<\n+prefix << \"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n+133\n+134 using namespace Dune::Hybrid;\n+135 prefix.push_back(0);\n+136 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n+137 StaticResizeHelper::apply(i, c, sizeProvider, prefix);\n+138 });\n+139 }\n 140\n-141 std::vector containedDOFs_;\n-142 std::vector dofIsContained_;\n-143};\n-144\n-145\n-146\n-159template\n-_\b1_\b6_\b0auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const T&)\n-161{\n-162 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-163}\n+141 template(), int>::type = 0>\n+143 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+144 {\n+145 auto size = sizeProvider.size(prefix);\n+146 if (size==0)\n+147 {\n+148 if (c.size()==0)\n+149 DUNE_THROW(RangeError, \"Can't resize dynamically sized vector entry v[\" <<\n+prefix << \"]. Its size is 0 but the target size is unknown due to size(\" <<\n+prefix << \")=0.\");\n+150 else\n+151 return;\n+152 }\n+153\n+154 c.resize(size);\n+155 prefix.push_back(0);\n+156 for(std::size_t i=0; i\n-_\b1_\b8_\b7auto _\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-188{\n-189 using GridView = typename LocalView::GridView;\n-190 _\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-191 _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs.bind(localView, subEntityIndex, subEntityCodim);\n-192 return _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n-193}\n-194\n-195\n-196\n-215template\n-_\b2_\b1_\b6auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs(const LocalView& localView, const Intersection&\n-intersection)\n-217{\n-218 using GridView = typename LocalView::GridView;\n-219 _\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-220 _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs.bind(localView, intersection);\n-221 return _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bD_\bO_\bF_\bs;\n-222}\n+_\b1_\b6_\b7 using _\bV_\be_\bc_\bt_\bo_\br = V;\n+168\n+169 template\n+_\b1_\b7_\b0 using _\bE_\bn_\bt_\br_\by = Coefficient;\n+171\n+_\b1_\b7_\b2 _\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& _\bv_\be_\bc_\bt_\bo_\br) :\n+173 vector_(&_\bv_\be_\bc_\bt_\bo_\br)\n+174 {}\n+175\n+176 template\n+_\b1_\b7_\b7 void _\br_\be_\bs_\bi_\bz_\be(const SizeProvider& sizeProvider)\n+178 {\n+179 typename SizeProvider::SizePrefix prefix;\n+180 prefix.resize(0);\n+181 resizeHelper(*vector_, sizeProvider, prefix);\n+182 }\n+183\n+184 template\n+_\b1_\b8_\b5 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+186 {\n+187 static_assert(not std::is_same>::value, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+188 return hybridMultiIndexAccess&>(*vector_, index);\n+189 }\n+190\n+191 template\n+_\b1_\b9_\b2 _\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+193 {\n+194 static_assert(not std::is_same>::value, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+195 return hybridMultiIndexAccess&>(*vector_, index);\n+196 }\n+197\n+198 template\n+_\b1_\b9_\b9 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+200 {\n+201 static_assert(not std::is_same>::value, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+202 return (*this)[index];\n+203 }\n+204\n+205 template\n+_\b2_\b0_\b6 _\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+207 {\n+208 static_assert(not std::is_same>::value, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+209 return (*this)[index];\n+210 }\n+211\n+_\b2_\b1_\b2 const _\bV_\be_\bc_\bt_\bo_\br& _\bv_\be_\bc_\bt_\bo_\br() const\n+213 {\n+214 return *vector_;\n+215 }\n+216\n+_\b2_\b1_\b7 _\bV_\be_\bc_\bt_\bo_\br& _\bv_\be_\bc_\bt_\bo_\br()\n+218 {\n+219 return *vector_;\n+220 }\n+221\n+222private:\n 223\n-224\n-225\n-226} // namespace Functions\n-227} // namespace Dune\n+224 _\bV_\be_\bc_\bt_\bo_\br* vector_;\n+225};\n+226\n+227\n 228\n-229#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:160\n+229\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+238template(),\n+int>::type = 0>\n+_\b2_\b4_\b0V& _\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+241{\n+242 return v;\n+243}\n+244\n+245\n+246\n+247template\n+(), int>::type = 0>\n+_\b2_\b4_\b9_\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+250{\n+251 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+252}\n+253\n+254\n+255\n+256} // namespace Dune::Functions\n+257} // namespace Dune\n+258\n+259\n+260#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+_\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+_\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:10\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:42\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:110\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:122\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:104\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:134\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:116\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:64\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:240\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_\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:83\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:92\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:206\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:192\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:185\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:217\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:167\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: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:_\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:212\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:172\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:199\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:177\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/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: bsplinebasis.hh File Reference\n+dune-functions: subspacelocalview.hh File Reference\n \n \n \n \n \n \n \n@@ -71,80 +71,38 @@\n \n
    \n \n
    \n \n-
    bsplinebasis.hh File Reference
    \n+Namespaces
    \n+
    subspacelocalview.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 <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-\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::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 >
    using Dune::Functions::BSplineBasis = DefaultGlobalBasis< BSplinePreBasis< GV > >
     A global B-spline basis.
     
    \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.
     
    \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,64 +1,25 @@\n dune-functions\u00a02.9.0\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-#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+_\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:_\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_\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:_\bB_\bS_\bp_\bl_\bi_\bn_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs< _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV\n- > >\n-\u00a0 A global B-spline basis.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bb_\bS_\bp_\bl_\bi_\bn_\be (const std::vector< double >\n- &knotVector, unsigned int order, bool makeOpen=true)\n-\u00a0 Create a pre-basis factory that can create a B-spline pre-basis.\n-\u00a0\n-*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The B-spline global function space basis.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/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: bsplinebasis.hh Source File\n+dune-functions: subspacelocalview.hh Source File\n \n \n \n \n \n \n \n@@ -74,1307 +74,187 @@\n \n \n \n
    \n-
    bsplinebasis.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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n
    5
    \n-
    10#include <array>
    \n-
    11#include <numeric>
    \n+
    6
    \n+
    7#include <tuple>
    \n+
    8
    \n+
    9#include <dune/common/concept.hh>
    \n+
    10
    \n+
    11#include <dune/typetree/childextraction.hh>
    \n
    12
    \n-
    14#include <dune/common/dynmatrix.hh>
    \n+\n+
    14
    \n
    15
    \n-
    16#include <dune/localfunctions/common/localbasis.hh>
    \n-
    17#include <dune/common/diagonalmatrix.hh>
    \n-
    18#include <dune/localfunctions/common/localkey.hh>
    \n-
    19#include <dune/localfunctions/common/localfiniteelementtraits.hh>
    \n-
    20#include <dune/geometry/type.hh>
    \n-\n-\n-
    23
    \n-
    24namespace Dune
    \n-
    25{
    \n-
    26namespace Functions {
    \n-
    27
    \n-
    28// A maze of dependencies between the different parts of this. We need a few forward declarations
    \n-
    29template<typename GV, typename R>
    \n-\n-
    31
    \n-
    32template<typename GV>
    \n-
    33class BSplinePreBasis;
    \n+
    16
    \n+
    17namespace Dune {
    \n+
    18namespace Functions {
    \n+
    19
    \n+
    20
    \n+
    21
    \n+
    22template<class RB, class PP>
    \n+
    23class SubspaceBasis;
    \n+
    24
    \n+
    25
    \n+
    26
    \n+
    28template<class RLV, class PP>
    \n+
    \n+\n+
    30{
    \n+
    31 using PrefixPath = PP;
    \n+
    32
    \n+
    33public:
    \n
    34
    \n-
    35
    \n-
    44template<class GV, class R>
    \n-
    \n-\n-
    46{
    \n-
    47 friend class BSplineLocalFiniteElement<GV,R>;
    \n+
    35 using RootLocalView = RLV;
    \n+
    36
    \n+\n+
    39
    \n+\n+
    42
    \n+
    44 using Element = typename GridView::template Codim<0>::Entity;
    \n+
    45
    \n+
    47 using size_type = std::size_t;
    \n
    48
    \n-
    49 typedef typename GV::ctype D;
    \n-
    50 enum {dim = GV::dimension};
    \n-
    51public:
    \n-
    52
    \n-
    54 typedef LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,
    \n-
    55 FieldMatrix<R,1,dim> > Traits;
    \n-
    56
    \n-
    \n-\n-\n-
    63 : preBasis_(preBasis),
    \n-
    64 lFE_(lFE)
    \n-
    65 {}
    \n+
    50 using RootTree = typename RootLocalView::Tree;
    \n+
    51
    \n+
    53 using Tree = typename TypeTree::ChildForTreePath<RootTree, PrefixPath>;
    \n+
    54
    \n+
    56 using MultiIndex = typename RootLocalView::MultiIndex;
    \n+
    57
    \n+
    \n+
    59 SubspaceLocalView(const GlobalBasis& globalBasis, const PrefixPath& /*prefixPath*/) :
    \n+\n+
    61 rootLocalView_(globalBasis.rootBasis().localView())
    \n+
    62 {
    \n+
    63// static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to SubspaceLocalView does not model the BasisNode concept.");
    \n+
    64 }
    \n+
    \n+
    65
    \n+
    \n+
    71 void bind(const Element& e)
    \n+
    72 {
    \n+
    73 rootLocalView_.bind(e);
    \n+
    74 }
    \n
    \n-
    66
    \n-
    \n-
    70 void evaluateFunction (const FieldVector<D,dim>& in,
    \n-
    71 std::vector<FieldVector<R,1> >& out) const
    \n-
    72 {
    \n-
    73 FieldVector<D,dim> globalIn = offset_;
    \n-
    74 scaling_.umv(in,globalIn);
    \n
    75
    \n-
    76 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);
    \n-
    77 }
    \n-
    \n-
    78
    \n-
    \n-
    82 void evaluateJacobian (const FieldVector<D,dim>& in,
    \n-
    83 std::vector<FieldMatrix<D,1,dim> >& out) const
    \n-
    84 {
    \n-
    85 FieldVector<D,dim> globalIn = offset_;
    \n-
    86 scaling_.umv(in,globalIn);
    \n-
    87
    \n-
    88 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);
    \n-
    89
    \n-
    90 for (size_t i=0; i<out.size(); i++)
    \n-
    91 for (int j=0; j<dim; j++)
    \n-
    92 out[i][0][j] *= scaling_[j][j];
    \n-
    93 }
    \n-
    \n-
    94
    \n-
    96 template<size_t k>
    \n-
    \n-
    97 inline void evaluate (const typename std::array<int,k>& directions,
    \n-
    98 const typename Traits::DomainType& in,
    \n-
    99 std::vector<typename Traits::RangeType>& out) const
    \n-
    100 {
    \n-
    101 switch(k)
    \n-
    102 {
    \n-
    103 case 0:
    \n-
    104 evaluateFunction(in, out);
    \n-
    105 break;
    \n-
    106 case 1:
    \n-
    107 {
    \n-
    108 FieldVector<D,dim> globalIn = offset_;
    \n-
    109 scaling_.umv(in,globalIn);
    \n-
    110
    \n-
    111 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);
    \n-
    112
    \n-
    113 for (size_t i=0; i<out.size(); i++)
    \n-
    114 out[i][0] *= scaling_[directions[0]][directions[0]];
    \n-
    115 break;
    \n-
    116 }
    \n-
    117 case 2:
    \n-
    118 {
    \n-
    119 FieldVector<D,dim> globalIn = offset_;
    \n-
    120 scaling_.umv(in,globalIn);
    \n-
    121
    \n-
    122 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);
    \n-
    123
    \n-
    124 for (size_t i=0; i<out.size(); i++)
    \n-
    125 out[i][0] *= scaling_[directions[0]][directions[0]]*scaling_[directions[1]][directions[1]];
    \n-
    126 break;
    \n-
    127 }
    \n-
    128 default:
    \n-
    129 DUNE_THROW(NotImplemented, "B-Spline derivatives of order " << k << " not implemented yet!");
    \n-
    130 }
    \n-
    131 }
    \n-
    \n-
    132
    \n-
    \n-
    140 unsigned int order () const
    \n-
    141 {
    \n-
    142 return *std::max_element(preBasis_.order_.begin(), preBasis_.order_.end());
    \n-
    143 }
    \n-
    \n-
    144
    \n-
    \n-
    147 std::size_t size() const
    \n-
    148 {
    \n-
    149 return lFE_.size();
    \n-
    150 }
    \n+
    \n+
    80 const Element& element() const
    \n+
    81 {
    \n+
    82 return rootLocalView_.element();
    \n+
    83 }
    \n+
    \n+
    84
    \n+
    \n+
    89 void unbind()
    \n+
    90 {
    \n+
    91 rootLocalView_.unbind();
    \n+
    92 }
    \n+
    \n+
    93
    \n+
    \n+
    96 bool bound() const
    \n+
    97 {
    \n+
    98 return rootLocalView_.bound();
    \n+
    99 }
    \n+
    \n+
    100
    \n+
    \n+
    105 const Tree& tree() const
    \n+
    106 {
    \n+
    107 return TypeTree::child(rootLocalView_.tree(), globalBasis_->prefixPath());
    \n+
    108 }
    \n+
    \n+
    109
    \n+
    \n+\n+
    113 {
    \n+
    114 return rootLocalView_.size();
    \n+
    115 }
    \n+
    \n+
    116
    \n+
    \n+\n+
    124 {
    \n+
    125 return rootLocalView_.maxSize();
    \n+
    126 }
    \n+
    \n+
    127
    \n+
    \n+\n+
    130 {
    \n+
    131 return rootLocalView_.index(i);
    \n+
    132 }
    \n+
    \n+
    133
    \n+
    \n+\n+
    137 {
    \n+
    138 return *globalBasis_;
    \n+
    139 }
    \n+
    \n+
    140
    \n+
    \n+\n+
    142 {
    \n+
    143 return rootLocalView_;
    \n+
    144 }
    \n+
    \n+
    145
    \n+
    146protected:
    \n+\n+\n+
    149};
    \n
    \n+
    150
    \n
    151
    \n-
    152private:
    \n-
    153 const BSplinePreBasis<GV>& preBasis_;
    \n-
    154
    \n-\n+
    152
    \n+
    153} // end namespace Functions
    \n+
    154} // end namespace Dune
    \n+
    155
    \n
    156
    \n-
    157 // Coordinates in a single knot span differ from coordinates on the B-spline patch
    \n-
    158 // by an affine transformation. This transformation is stored in offset_ and scaling_.
    \n-
    159 FieldVector<D,dim> offset_;
    \n-
    160 DiagonalMatrix<D,dim> scaling_;
    \n-
    161};
    \n-
    \n-
    162
    \n-
    176template<int dim>
    \n-
    \n-\n-
    178{
    \n-
    179 // Return i as a d-digit number in the (k+1)-nary system
    \n-
    180 std::array<unsigned int,dim> multiindex (unsigned int i) const
    \n-
    181 {
    \n-
    182 std::array<unsigned int,dim> alpha;
    \n-
    183 for (int j=0; j<dim; j++)
    \n-
    184 {
    \n-
    185 alpha[j] = i % sizes_[j];
    \n-
    186 i = i/sizes_[j];
    \n-
    187 }
    \n-
    188 return alpha;
    \n-
    189 }
    \n-
    190
    \n-
    192 void setup1d(std::vector<unsigned int>& subEntity)
    \n-
    193 {
    \n-
    194 if (sizes_[0]==1)
    \n-
    195 {
    \n-
    196 subEntity[0] = 0;
    \n-
    197 return;
    \n-
    198 }
    \n-
    199
    \n-
    200 /* edge and vertex numbering
    \n-
    201 0----0----1
    \n-
    202 */
    \n-
    203 unsigned lastIndex=0;
    \n-
    204 subEntity[lastIndex++] = 0; // corner 0
    \n-
    205 for (unsigned i = 0; i < sizes_[0] - 2; ++i)
    \n-
    206 subEntity[lastIndex++] = 0; // inner dofs of element (0)
    \n-
    207
    \n-
    208 subEntity[lastIndex++] = 1; // corner 1
    \n-
    209
    \n-
    210 assert(size()==lastIndex);
    \n-
    211 }
    \n-
    212
    \n-
    213 void setup2d(std::vector<unsigned int>& subEntity)
    \n-
    214 {
    \n-
    215 unsigned lastIndex=0;
    \n-
    216
    \n-
    217 // LocalKey: entity number , entity codim, dof indices within each entity
    \n-
    218 /* edge and vertex numbering
    \n-
    219 2----3----3
    \n-
    220 | |
    \n-
    221 | |
    \n-
    222 0 1
    \n-
    223 | |
    \n-
    224 | |
    \n-
    225 0----2----1
    \n-
    226 */
    \n-
    227
    \n-
    228 // lower edge (2)
    \n-
    229 subEntity[lastIndex++] = 0; // corner 0
    \n-
    230 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n-
    231 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)
    \n-
    232
    \n-
    233 subEntity[lastIndex++] = 1; // corner 1
    \n-
    234
    \n-
    235 // iterate from bottom to top over inner edge dofs
    \n-
    236 for (unsigned e = 0; e < sizes_[1]-2; ++e)
    \n-
    237 {
    \n-
    238 subEntity[lastIndex++] = 0; // left edge (0)
    \n-
    239 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n-
    240 subEntity[lastIndex++] = 0; // face dofs
    \n-
    241 subEntity[lastIndex++] = 1; // right edge (1)
    \n-
    242 }
    \n-
    243
    \n-
    244 // upper edge (3)
    \n-
    245 subEntity[lastIndex++] = 2; // corner 2
    \n-
    246 for (unsigned i = 0; i < sizes_[0]-2; ++i)
    \n-
    247 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)
    \n-
    248
    \n-
    249 subEntity[lastIndex++] = 3; // corner 3
    \n-
    250
    \n-
    251 assert(size()==lastIndex);
    \n-
    252 }
    \n-
    253
    \n-
    254
    \n-
    255public:
    \n-
    \n-
    256 void init(const std::array<unsigned,dim>& sizes)
    \n-
    257 {
    \n-
    258 sizes_ = sizes;
    \n-
    259
    \n-
    260 li_.resize(size());
    \n-
    261
    \n-
    262 // Set up array of codimension-per-dof-number
    \n-
    263 std::vector<unsigned int> codim(li_.size());
    \n-
    264
    \n-
    265 for (std::size_t i=0; i<codim.size(); i++)
    \n-
    266 {
    \n-
    267 codim[i] = 0;
    \n-
    268 // Codimension gets increased by 1 for each coordinate direction
    \n-
    269 // where dof is on boundary
    \n-
    270 std::array<unsigned int,dim> mIdx = multiindex(i);
    \n-
    271 for (int j=0; j<dim; j++)
    \n-
    272 if (mIdx[j]==0 or mIdx[j]==sizes[j]-1)
    \n-
    273 codim[i]++;
    \n-
    274 }
    \n-
    275
    \n-
    276 // Set up index vector (the index of the dof in the set of dofs of a given subentity)
    \n-
    277 // Algorithm: the 'index' has the same ordering as the dof number 'i'.
    \n-
    278 // To make it consecutive we interpret 'i' in the (k+1)-adic system, omit all digits
    \n-
    279 // that correspond to axes where the dof is on the element boundary, and transform the
    \n-
    280 // rest to the (k-1)-adic system.
    \n-
    281 std::vector<unsigned int> index(size());
    \n-
    282
    \n-
    283 for (std::size_t i=0; i<index.size(); i++)
    \n-
    284 {
    \n-
    285 index[i] = 0;
    \n-
    286
    \n-
    287 std::array<unsigned int,dim> mIdx = multiindex(i);
    \n-
    288
    \n-
    289 for (int j=dim-1; j>=0; j--)
    \n-
    290 if (mIdx[j]>0 and mIdx[j]<sizes[j]-1)
    \n-
    291 index[i] = (sizes[j]-1)*index[i] + (mIdx[j]-1);
    \n-
    292 }
    \n-
    293
    \n-
    294 // Set up entity and dof numbers for each (supported) dimension separately
    \n-
    295 std::vector<unsigned int> subEntity(li_.size());
    \n-
    296
    \n-
    297 if (subEntity.size() > 0)
    \n-
    298 {
    \n-
    299 if (dim==1) {
    \n-
    300
    \n-
    301 setup1d(subEntity);
    \n-
    302
    \n-
    303 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {
    \n-
    304
    \n-
    305 setup2d(subEntity);
    \n-
    306
    \n-
    307 }
    \n-
    308 }
    \n-
    309
    \n-
    310 for (size_t i=0; i<li_.size(); i++)
    \n-
    311 li_[i] = LocalKey(subEntity[i], codim[i], index[i]);
    \n-
    312 }
    \n-
    \n-
    313
    \n-
    \n-
    315 std::size_t size () const
    \n-
    316 {
    \n-
    317 return std::accumulate(sizes_.begin(), sizes_.end(), 1, std::multiplies<unsigned int>());
    \n-
    318 }
    \n-
    \n-
    319
    \n-
    \n-
    321 const LocalKey& localKey (std::size_t i) const
    \n-
    322 {
    \n-
    323 return li_[i];
    \n-
    324 }
    \n-
    \n-
    325
    \n-
    326private:
    \n-
    327
    \n-
    328 // Number of shape functions on this element per coordinate direction
    \n-
    329 std::array<unsigned, dim> sizes_;
    \n-
    330
    \n-
    331 std::vector<LocalKey> li_;
    \n-
    332};
    \n-
    \n-
    333
    \n-
    338template<int dim, class LB>
    \n-
    \n-\n-
    340{
    \n-
    341public:
    \n-
    343 template<typename F, typename C>
    \n-
    \n-
    344 void interpolate (const F& f, std::vector<C>& out) const
    \n-
    345 {
    \n-
    346 DUNE_THROW(NotImplemented, "BSplineLocalInterpolation::interpolate");
    \n-
    347 }
    \n-
    \n-
    348
    \n-
    349};
    \n-
    \n-
    350
    \n-
    360template<class GV, class R>
    \n-
    \n-\n-
    362{
    \n-
    363 typedef typename GV::ctype D;
    \n-
    364 enum {dim = GV::dimension};
    \n-
    365 friend class BSplineLocalBasis<GV,R>;
    \n-
    366public:
    \n-
    367
    \n-
    370 typedef LocalFiniteElementTraits<BSplineLocalBasis<GV,R>,
    \n-\n-\n-
    373
    \n-
    \n-\n-
    377 : preBasis_(preBasis),
    \n-
    378 localBasis_(preBasis,*this)
    \n-
    379 {}
    \n-
    \n-
    380
    \n-
    \n-\n-
    384 : preBasis_(other.preBasis_),
    \n-\n-
    386 {}
    \n-
    \n-
    387
    \n-
    \n-
    394 void bind(const std::array<unsigned,dim>& elementIdx)
    \n-
    395 {
    \n-
    396 /* \\todo In the long run we need to precompute a table for this */
    \n-
    397 for (size_t i=0; i<elementIdx.size(); i++)
    \n-
    398 {
    \n-
    399 currentKnotSpan_[i] = 0;
    \n-
    400
    \n-
    401 // Skip over degenerate knot spans
    \n-
    402 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] < preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)
    \n-
    403 currentKnotSpan_[i]++;
    \n-
    404
    \n-
    405 for (size_t j=0; j<elementIdx[i]; j++)
    \n-
    406 {
    \n-
    407 currentKnotSpan_[i]++;
    \n-
    408
    \n-
    409 // Skip over degenerate knot spans
    \n-
    410 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] < preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)
    \n-
    411 currentKnotSpan_[i]++;
    \n-
    412 }
    \n-
    413
    \n-
    414 // Compute the geometric transformation from knotspan-local to global coordinates
    \n-
    415 localBasis_.offset_[i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]];
    \n-
    416 localBasis_.scaling_[i][i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] - preBasis_.knotVectors_[i][currentKnotSpan_[i]];
    \n-
    417 }
    \n-
    418
    \n-
    419 // Set up the LocalCoefficients object
    \n-
    420 std::array<unsigned int, dim> sizes;
    \n-
    421 for (size_t i=0; i<dim; i++)
    \n-
    422 sizes[i] = size(i);
    \n-
    423 localCoefficients_.init(sizes);
    \n-
    424 }
    \n-
    \n-
    425
    \n-
    \n-\n-
    428 {
    \n-
    429 return localBasis_;
    \n-
    430 }
    \n-
    \n-
    431
    \n-
    \n-\n-
    434 {
    \n-
    435 return localCoefficients_;
    \n-
    436 }
    \n-
    \n-
    437
    \n-\n-
    443
    \n-
    \n-
    445 unsigned size () const
    \n-
    446 {
    \n-
    447 std::size_t r = 1;
    \n-
    448 for (int i=0; i<dim; i++)
    \n-
    449 r *= size(i);
    \n-
    450 return r;
    \n-
    451 }
    \n-
    \n-
    452
    \n-
    \n-
    455 GeometryType type () const
    \n-
    456 {
    \n-
    457 return GeometryTypes::cube(dim);
    \n-
    458 }
    \n-
    \n-
    459
    \n-
    460//private:
    \n-
    461
    \n-
    \n-
    463 unsigned int size(int i) const
    \n-
    464 {
    \n-
    465 const auto& order = preBasis_.order_;
    \n-
    466 unsigned int r = order[i]+1; // The 'normal' value
    \n-
    467 if (currentKnotSpan_[i]<order[i]) // Less near the left end of the knot vector
    \n-
    468 r -= (order[i] - currentKnotSpan_[i]);
    \n-
    469 if ( order[i] > (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] - 2) )
    \n-
    470 r -= order[i] - (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] - 2);
    \n-
    471 return r;
    \n-
    472 }
    \n-
    \n-
    473
    \n-\n-
    475
    \n-\n-\n-\n-
    479
    \n-
    480 // The knot span we are bound to
    \n-
    481 std::array<unsigned,dim> currentKnotSpan_;
    \n-
    482};
    \n-
    \n-
    483
    \n-
    484
    \n-
    485template<typename GV>
    \n-
    486class BSplineNode;
    \n-
    487
    \n-
    497template<typename GV>
    \n-
    \n-\n-
    499{
    \n-
    500 static const int dim = GV::dimension;
    \n-
    501
    \n-
    503 class MultiDigitCounter
    \n-
    504 {
    \n-
    505 public:
    \n-
    506
    \n-
    510 MultiDigitCounter(const std::array<unsigned int,dim>& limits)
    \n-
    511 : limits_(limits)
    \n-
    512 {
    \n-
    513 std::fill(counter_.begin(), counter_.end(), 0);
    \n-
    514 }
    \n-
    515
    \n-
    517 MultiDigitCounter& operator++()
    \n-
    518 {
    \n-
    519 for (int i=0; i<dim; i++)
    \n-
    520 {
    \n-
    521 ++counter_[i];
    \n-
    522
    \n-
    523 // no overflow?
    \n-
    524 if (counter_[i] < limits_[i])
    \n-
    525 break;
    \n-
    526
    \n-
    527 counter_[i] = 0;
    \n-
    528 }
    \n-
    529 return *this;
    \n-
    530 }
    \n-
    531
    \n-
    533 const unsigned int& operator[](int i) const
    \n-
    534 {
    \n-
    535 return counter_[i];
    \n-
    536 }
    \n-
    537
    \n-
    539 unsigned int cycle() const
    \n-
    540 {
    \n-
    541 unsigned int r = 1;
    \n-
    542 for (int i=0; i<dim; i++)
    \n-
    543 r *= limits_[i];
    \n-
    544 return r;
    \n-
    545 }
    \n-
    546
    \n-
    547 private:
    \n-
    548
    \n-
    550 const std::array<unsigned int,dim> limits_;
    \n-
    551
    \n-
    553 std::array<unsigned int,dim> counter_;
    \n-
    554
    \n-
    555 };
    \n-
    556
    \n-
    557public:
    \n-
    558
    \n-
    560 using GridView = GV;
    \n-
    561 using size_type = std::size_t;
    \n-
    562
    \n-\n-
    564
    \n-
    565 static constexpr size_type maxMultiIndexSize = 1;
    \n-
    566 static constexpr size_type minMultiIndexSize = 1;
    \n-
    567 static constexpr size_type multiIndexBufferSize = 1;
    \n-
    568
    \n-
    569 // Type used for function values
    \n-
    570 using R = double;
    \n-
    571
    \n-
    \n-\n-
    591 const std::vector<double>& knotVector,
    \n-
    592 unsigned int order,
    \n-
    593 bool makeOpen = true)
    \n-\n-
    595 {
    \n-
    596 // \\todo Detection of duplicate knots
    \n-
    597 std::fill(elements_.begin(), elements_.end(), knotVector.size()-1);
    \n-
    598
    \n-
    599 // Mediocre sanity check: we don't know the number of grid elements in each direction.
    \n-
    600 // but at least we know the total number of elements.
    \n-
    601 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::multiplies<unsigned>()) == gridView_.size(0) );
    \n-
    602
    \n-
    603 for (int i=0; i<dim; i++)
    \n-
    604 {
    \n-
    605 // Prepend the correct number of additional knots to open the knot vector
    \n-
    607 if (makeOpen)
    \n-
    608 for (unsigned int j=0; j<order; j++)
    \n-
    609 knotVectors_[i].push_back(knotVector[0]);
    \n-
    610
    \n-
    611 knotVectors_[i].insert(knotVectors_[i].end(), knotVector.begin(), knotVector.end());
    \n-
    612
    \n-
    613 if (makeOpen)
    \n-
    614 for (unsigned int j=0; j<order; j++)
    \n-
    615 knotVectors_[i].push_back(knotVector.back());
    \n-
    616 }
    \n-
    617
    \n-
    618 std::fill(order_.begin(), order_.end(), order);
    \n-
    619 }
    \n-
    \n-
    620
    \n-
    \n-\n-
    643 const FieldVector<double,dim>& lowerLeft,
    \n-
    644 const FieldVector<double,dim>& upperRight,
    \n-
    645 const std::array<unsigned int,dim>& elements,
    \n-
    646 unsigned int order,
    \n-
    647 bool makeOpen = true)
    \n-
    648 : elements_(elements),
    \n-\n-
    650 {
    \n-
    651 // Mediocre sanity check: we don't know the number of grid elements in each direction.
    \n-
    652 // but at least we know the total number of elements.
    \n-
    653 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::multiplies<unsigned>()) == gridView_.size(0) );
    \n-
    654
    \n-
    655 for (int i=0; i<dim; i++)
    \n-
    656 {
    \n-
    657 // Prepend the correct number of additional knots to open the knot vector
    \n-
    659 if (makeOpen)
    \n-
    660 for (unsigned int j=0; j<order; j++)
    \n-
    661 knotVectors_[i].push_back(lowerLeft[i]);
    \n-
    662
    \n-
    663 // Construct the actual knot vector
    \n-
    664 for (size_t j=0; j<elements[i]+1; j++)
    \n-
    665 knotVectors_[i].push_back(lowerLeft[i] + j*(upperRight[i]-lowerLeft[i]) / elements[i]);
    \n-
    666
    \n-
    667 if (makeOpen)
    \n-
    668 for (unsigned int j=0; j<order; j++)
    \n-
    669 knotVectors_[i].push_back(upperRight[i]);
    \n-
    670 }
    \n-
    671
    \n-
    672 std::fill(order_.begin(), order_.end(), order);
    \n-
    673 }
    \n-
    \n-
    674
    \n-
    \n-\n-
    677 {}
    \n-
    \n-
    678
    \n-
    \n-
    680 const GridView& gridView() const
    \n-
    681 {
    \n-
    682 return gridView_;
    \n-
    683 }
    \n-
    \n-
    684
    \n-
    \n-
    686 void update(const GridView& gv)
    \n-
    687 {
    \n-
    688 gridView_ = gv;
    \n-
    689 }
    \n-
    \n-
    690
    \n-
    \n-\n-
    695 {
    \n-
    696 return Node{this};
    \n-
    697 }
    \n-
    \n-
    698
    \n-
    699 // Ideally this method should be implemented as
    \n-
    700 //
    \n-
    701 // template<class SizePrefix>
    \n-
    702 // size_type size(const SizePrefix& prefix) const
    \n-
    703 //
    \n-
    704 // But leads to ambiguity with the other size method:
    \n-
    705 //
    \n-
    706 // unsigned int size (size_t d) const
    \n-
    707 //
    \n-
    708 // Once the latter is removed, this implementation should be changed.
    \n-
    709
    \n-
    711 template<class ST, int i>
    \n-
    \n-
    712 size_type size(const Dune::ReservedVector<ST, i>& prefix) const
    \n-
    713 {
    \n-
    714 assert(prefix.size() == 0 || prefix.size() == 1);
    \n-
    715 return (prefix.size() == 0) ? size() : 0;
    \n-
    716 }
    \n-
    \n-
    717
    \n-
    \n-\n-
    720 {
    \n-
    721 return size();
    \n-
    722 }
    \n-
    \n-
    723
    \n-
    \n-\n-
    726 {
    \n-
    727 size_type result = 1;
    \n-
    728 for (int i=0; i<dim; i++)
    \n-
    729 result *= order_[i]+1;
    \n-
    730 return result;
    \n-
    731 }
    \n-
    \n-
    732
    \n-
    734 template<typename It>
    \n-
    \n-
    735 It indices(const Node& node, It it) const
    \n-
    736 {
    \n-
    737 // Local degrees of freedom are arranged in a lattice.
    \n-
    738 // We need the lattice dimensions to be able to compute lattice coordinates from a local index
    \n-
    739 std::array<unsigned int, dim> localSizes;
    \n-
    740 for (int i=0; i<dim; i++)
    \n-
    741 localSizes[i] = node.finiteElement().size(i);
    \n-
    742 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n-
    743 {
    \n-
    744 std::array<unsigned int,dim> localIJK = getIJK(i, localSizes);
    \n-
    745
    \n-
    746 const auto currentKnotSpan = node.finiteElement().currentKnotSpan_;
    \n-
    747 const auto order = order_;
    \n-
    748
    \n-
    749 std::array<unsigned int,dim> globalIJK;
    \n-
    750 for (int i=0; i<dim; i++)
    \n-
    751 globalIJK[i] = std::max((int)currentKnotSpan[i] - (int)order[i], 0) + localIJK[i]; // needs to be a signed type!
    \n-
    752
    \n-
    753 // Make one global flat index from the globalIJK tuple
    \n-
    754 size_type globalIdx = globalIJK[dim-1];
    \n-
    755
    \n-
    756 for (int i=dim-2; i>=0; i--)
    \n-
    757 globalIdx = globalIdx * size(i) + globalIJK[i];
    \n-
    758
    \n-
    759 *it = {{globalIdx}};
    \n-
    760 }
    \n-
    761 return it;
    \n-
    762 }
    \n-
    \n-
    763
    \n-
    \n-
    765 unsigned int size () const
    \n-
    766 {
    \n-
    767 unsigned int result = 1;
    \n-
    768 for (size_t i=0; i<dim; i++)
    \n-
    769 result *= size(i);
    \n-
    770 return result;
    \n-
    771 }
    \n-
    \n-
    772
    \n-
    \n-
    774 unsigned int size (size_t d) const
    \n-
    775 {
    \n-
    776 return knotVectors_[d].size() - order_[d] - 1;
    \n-
    777 }
    \n-
    \n-
    778
    \n-
    \n-
    781 void evaluateFunction (const FieldVector<typename GV::ctype,dim>& in,
    \n-
    782 std::vector<FieldVector<R,1> >& out,
    \n-
    783 const std::array<unsigned,dim>& currentKnotSpan) const
    \n-
    784 {
    \n-
    785 // Evaluate
    \n-
    786 std::array<std::vector<R>, dim> oneDValues;
    \n-
    787
    \n-
    788 for (size_t i=0; i<dim; i++)
    \n-
    789 evaluateFunction(in[i], oneDValues[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n-
    790
    \n-
    791 std::array<unsigned int, dim> limits;
    \n-
    792 for (int i=0; i<dim; i++)
    \n-
    793 limits[i] = oneDValues[i].size();
    \n-
    794
    \n-
    795 MultiDigitCounter ijkCounter(limits);
    \n-
    796
    \n-
    797 out.resize(ijkCounter.cycle());
    \n-
    798
    \n-
    799 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n-
    800 {
    \n-
    801 out[i] = R(1.0);
    \n-
    802 for (size_t j=0; j<dim; j++)
    \n-
    803 out[i] *= oneDValues[j][ijkCounter[j]];
    \n-
    804 }
    \n-
    805 }
    \n-
    \n-
    806
    \n-
    \n-
    812 void evaluateJacobian (const FieldVector<typename GV::ctype,dim>& in,
    \n-
    813 std::vector<FieldMatrix<R,1,dim> >& out,
    \n-
    814 const std::array<unsigned,dim>& currentKnotSpan) const
    \n-
    815 {
    \n-
    816 // How many shape functions to we have in each coordinate direction?
    \n-
    817 std::array<unsigned int, dim> limits;
    \n-
    818 for (int i=0; i<dim; i++)
    \n-
    819 {
    \n-
    820 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries of the knot vector
    \n-
    821 if (currentKnotSpan[i]<order_[i])
    \n-
    822 limits[i] -= (order_[i] - currentKnotSpan[i]);
    \n-
    823 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )
    \n-
    824 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] - 2);
    \n-
    825 }
    \n-
    826
    \n-
    827 // The lowest knot spans that we need values from
    \n-
    828 std::array<unsigned int, dim> offset;
    \n-
    829 for (int i=0; i<dim; i++)
    \n-
    830 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);
    \n-
    831
    \n-
    832 // Evaluate 1d function values (needed for the product rule)
    \n-
    833 std::array<std::vector<R>, dim> oneDValues;
    \n-
    834
    \n-
    835 // Evaluate 1d function values of one order lower (needed for the derivative formula)
    \n-
    836 std::array<std::vector<R>, dim> lowOrderOneDValues;
    \n-
    837
    \n-
    838 std::array<DynamicMatrix<R>, dim> values;
    \n-
    839
    \n-
    840 for (size_t i=0; i<dim; i++)
    \n-
    841 {
    \n-
    842 evaluateFunctionFull(in[i], values[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n-
    843 oneDValues[i].resize(knotVectors_[i].size()-order_[i]-1);
    \n-
    844 for (size_t j=0; j<oneDValues[i].size(); j++)
    \n-
    845 oneDValues[i][j] = values[i][order_[i]][j];
    \n-
    846
    \n-
    847 if (order_[i]!=0)
    \n-
    848 {
    \n-
    849 lowOrderOneDValues[i].resize(knotVectors_[i].size()-(order_[i]-1)-1);
    \n-
    850 for (size_t j=0; j<lowOrderOneDValues[i].size(); j++)
    \n-
    851 lowOrderOneDValues[i][j] = values[i][order_[i]-1][j];
    \n-
    852 }
    \n-
    853 }
    \n-
    854
    \n-
    855
    \n-
    856 // Evaluate 1d function derivatives
    \n-
    857 std::array<std::vector<R>, dim> oneDDerivatives;
    \n-
    858 for (size_t i=0; i<dim; i++)
    \n-
    859 {
    \n-
    860 oneDDerivatives[i].resize(limits[i]);
    \n-
    861
    \n-
    862 if (order_[i]==0) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n-
    863 std::fill(oneDDerivatives[i].begin(), oneDDerivatives[i].end(), R(0.0));
    \n-
    864 else
    \n-
    865 {
    \n-
    866 for (size_t j=offset[i]; j<offset[i]+limits[i]; j++)
    \n-
    867 {
    \n-
    868 R derivativeAddend1 = lowOrderOneDValues[i][j] / (knotVectors_[i][j+order_[i]]-knotVectors_[i][j]);
    \n-
    869 R derivativeAddend2 = lowOrderOneDValues[i][j+1] / (knotVectors_[i][j+order_[i]+1]-knotVectors_[i][j+1]);
    \n-
    870 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n-
    871 if (std::isnan(derivativeAddend1))
    \n-
    872 derivativeAddend1 = 0;
    \n-
    873 if (std::isnan(derivativeAddend2))
    \n-
    874 derivativeAddend2 = 0;
    \n-
    875 oneDDerivatives[i][j-offset[i]] = order_[i] * ( derivativeAddend1 - derivativeAddend2 );
    \n-
    876 }
    \n-
    877 }
    \n-
    878 }
    \n-
    879
    \n-
    880 // Working towards computing only the parts that we really need:
    \n-
    881 // Let's copy them out into a separate array
    \n-
    882 std::array<std::vector<R>, dim> oneDValuesShort;
    \n-
    883
    \n-
    884 for (int i=0; i<dim; i++)
    \n-
    885 {
    \n-
    886 oneDValuesShort[i].resize(limits[i]);
    \n-
    887
    \n-
    888 for (size_t j=0; j<limits[i]; j++)
    \n-
    889 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];
    \n-
    890 }
    \n-
    891
    \n-
    892
    \n-
    893
    \n-
    894 // Set up a multi-index to go from consecutive indices to integer coordinates
    \n-
    895 MultiDigitCounter ijkCounter(limits);
    \n-
    896
    \n-
    897 out.resize(ijkCounter.cycle());
    \n-
    898
    \n-
    899 // Complete Jacobian is given by the product rule
    \n-
    900 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n-
    901 for (int j=0; j<dim; j++)
    \n-
    902 {
    \n-
    903 out[i][0][j] = 1.0;
    \n-
    904 for (int k=0; k<dim; k++)
    \n-
    905 out[i][0][j] *= (j==k) ? oneDDerivatives[k][ijkCounter[k]]
    \n-
    906 : oneDValuesShort[k][ijkCounter[k]];
    \n-
    907 }
    \n-
    908
    \n-
    909 }
    \n-
    \n-
    910
    \n-
    912 template <size_type k>
    \n-
    \n-
    913 void evaluate(const typename std::array<int,k>& directions,
    \n-
    914 const FieldVector<typename GV::ctype,dim>& in,
    \n-
    915 std::vector<FieldVector<R,1> >& out,
    \n-
    916 const std::array<unsigned,dim>& currentKnotSpan) const
    \n-
    917 {
    \n-
    918 if (k != 1 && k != 2)
    \n-
    919 DUNE_THROW(RangeError, "Differentiation order greater than 2 is not supported!");
    \n-
    920
    \n-
    921 // Evaluate 1d function values (needed for the product rule)
    \n-
    922 std::array<std::vector<R>, dim> oneDValues;
    \n-
    923 std::array<std::vector<R>, dim> oneDDerivatives;
    \n-
    924 std::array<std::vector<R>, dim> oneDSecondDerivatives;
    \n-
    925
    \n-
    926 // Evaluate 1d function derivatives
    \n-
    927 if (k==1)
    \n-
    928 for (size_t i=0; i<dim; i++)
    \n-
    929 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], false, oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n-
    930 else
    \n-
    931 for (size_t i=0; i<dim; i++)
    \n-
    932 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], true, oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);
    \n-
    933
    \n-
    934 // The lowest knot spans that we need values from
    \n-
    935 std::array<unsigned int, dim> offset;
    \n-
    936 for (int i=0; i<dim; i++)
    \n-
    937 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);
    \n-
    938
    \n-
    939 // Set up a multi-index to go from consecutive indices to integer coordinates
    \n-
    940 std::array<unsigned int, dim> limits;
    \n-
    941 for (int i=0; i<dim; i++)
    \n-
    942 {
    \n-
    943 // In a proper implementation, the following line would do
    \n-
    944 //limits[i] = oneDValues[i].size();
    \n-
    945 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries of the knot vector
    \n-
    946 if (currentKnotSpan[i]<order_[i])
    \n-
    947 limits[i] -= (order_[i] - currentKnotSpan[i]);
    \n-
    948 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )
    \n-
    949 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] - 2);
    \n-
    950 }
    \n-
    951
    \n-
    952 // Working towards computing only the parts that we really need:
    \n-
    953 // Let's copy them out into a separate array
    \n-
    954 std::array<std::vector<R>, dim> oneDValuesShort;
    \n-
    955
    \n-
    956 for (int i=0; i<dim; i++)
    \n-
    957 {
    \n-
    958 oneDValuesShort[i].resize(limits[i]);
    \n-
    959
    \n-
    960 for (size_t j=0; j<limits[i]; j++)
    \n-
    961 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];
    \n-
    962 }
    \n-
    963
    \n-
    964
    \n-
    965 MultiDigitCounter ijkCounter(limits);
    \n-
    966
    \n-
    967 out.resize(ijkCounter.cycle());
    \n-
    968
    \n-
    969 if (k == 1)
    \n-
    970 {
    \n-
    971 // Complete Jacobian is given by the product rule
    \n-
    972 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n-
    973 {
    \n-
    974 out[i][0] = 1.0;
    \n-
    975 for (int l=0; l<dim; l++)
    \n-
    976 out[i][0] *= (directions[0]==l) ? oneDDerivatives[l][ijkCounter[l]]
    \n-
    977 : oneDValuesShort[l][ijkCounter[l]];
    \n-
    978 }
    \n-
    979 }
    \n-
    980
    \n-
    981 if (k == 2)
    \n-
    982 {
    \n-
    983 // Complete derivation by deriving the tensor product
    \n-
    984 for (size_t i=0; i<out.size(); i++, ++ijkCounter)
    \n-
    985 {
    \n-
    986 out[i][0] = 1.0;
    \n-
    987 for (int j=0; j<dim; j++)
    \n-
    988 {
    \n-
    989 if (directions[0] != directions[1]) //derivation in two different variables
    \n-
    990 if (directions[0] == j || directions[1] == j) //the spline has to be derived (once) in this direction
    \n-
    991 out[i][0] *= oneDDerivatives[j][ijkCounter[j]];
    \n-
    992 else //no derivation in this direction
    \n-
    993 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];
    \n-
    994 else //spline is derived two times in the same direction
    \n-
    995 if (directions[0] == j) //the spline is derived two times in this direction
    \n-
    996 out[i][0] *= oneDSecondDerivatives[j][ijkCounter[j]];
    \n-
    997 else //no derivation in this direction
    \n-
    998 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];
    \n-
    999 }
    \n-
    1000 }
    \n-
    1001 }
    \n-
    1002 }
    \n-
    \n-
    1003
    \n-
    1004
    \n-
    \n-
    1009 static std::array<unsigned int,dim> getIJK(typename GridView::IndexSet::IndexType idx, std::array<unsigned int,dim> elements)
    \n-
    1010 {
    \n-
    1011 std::array<unsigned,dim> result;
    \n-
    1012 for (int i=0; i<dim; i++)
    \n-
    1013 {
    \n-
    1014 result[i] = idx%elements[i];
    \n-
    1015 idx /= elements[i];
    \n-
    1016 }
    \n-
    1017 return result;
    \n-
    1018 }
    \n-
    \n-
    1019
    \n-
    \n-
    1028 static void evaluateFunction (const typename GV::ctype& in, std::vector<R>& out,
    \n-
    1029 const std::vector<R>& knotVector,
    \n-
    1030 unsigned int order,
    \n-
    1031 unsigned int currentKnotSpan)
    \n-
    1032 {
    \n-
    1033 std::size_t outSize = order+1; // The 'standard' value away from the boundaries of the knot vector
    \n-
    1034 if (currentKnotSpan<order) // Less near the left end of the knot vector
    \n-
    1035 outSize -= (order - currentKnotSpan);
    \n-
    1036 if ( order > (knotVector.size() - currentKnotSpan - 2) )
    \n-
    1037 outSize -= order - (knotVector.size() - currentKnotSpan - 2);
    \n-
    1038 out.resize(outSize);
    \n-
    1039
    \n-
    1040 // It's not really a matrix that is needed here, a plain 2d array would do
    \n-
    1041 DynamicMatrix<R> N(order+1, knotVector.size()-1);
    \n-
    1042
    \n-
    1043 // The text books on splines use the following geometric condition here to fill the array N
    \n-
    1044 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition
    \n-
    1045 // only works if splines are never evaluated exactly on the knots.
    \n-
    1046 //
    \n-
    1047 // for (size_t i=0; i<knotVector.size()-1; i++)
    \n-
    1048 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);
    \n-
    1049 for (size_t i=0; i<knotVector.size()-1; i++)
    \n-
    1050 N[0][i] = (i == currentKnotSpan);
    \n-
    1051
    \n-
    1052 for (size_t r=1; r<=order; r++)
    \n-
    1053 for (size_t i=0; i<knotVector.size()-r-1; i++)
    \n-
    1054 {
    \n-
    1055 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)
    \n-
    1056 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])
    \n-
    1057 : 0;
    \n-
    1058 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)
    \n-
    1059 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])
    \n-
    1060 : 0;
    \n-
    1061 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];
    \n-
    1062 }
    \n-
    1063
    \n-
    1068 for (size_t i=0; i<out.size(); i++) {
    \n-
    1069 out[i] = N[order][std::max((int)(currentKnotSpan - order),0) + i];
    \n-
    1070 }
    \n-
    1071 }
    \n-
    \n-
    1072
    \n-
    \n-
    1085 static void evaluateFunctionFull(const typename GV::ctype& in,
    \n-
    1086 DynamicMatrix<R>& out,
    \n-
    1087 const std::vector<R>& knotVector,
    \n-
    1088 unsigned int order,
    \n-
    1089 unsigned int currentKnotSpan)
    \n-
    1090 {
    \n-
    1091 // It's not really a matrix that is needed here, a plain 2d array would do
    \n-
    1092 DynamicMatrix<R>& N = out;
    \n-
    1093
    \n-
    1094 N.resize(order+1, knotVector.size()-1);
    \n-
    1095
    \n-
    1096 // The text books on splines use the following geometric condition here to fill the array N
    \n-
    1097 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition
    \n-
    1098 // only works if splines are never evaluated exactly on the knots.
    \n-
    1099 //
    \n-
    1100 // for (size_t i=0; i<knotVector.size()-1; i++)
    \n-
    1101 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);
    \n-
    1102 for (size_t i=0; i<knotVector.size()-1; i++)
    \n-
    1103 N[0][i] = (i == currentKnotSpan);
    \n-
    1104
    \n-
    1105 for (size_t r=1; r<=order; r++)
    \n-
    1106 for (size_t i=0; i<knotVector.size()-r-1; i++)
    \n-
    1107 {
    \n-
    1108 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)
    \n-
    1109 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])
    \n-
    1110 : 0;
    \n-
    1111 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)
    \n-
    1112 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])
    \n-
    1113 : 0;
    \n-
    1114 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];
    \n-
    1115 }
    \n-
    1116 }
    \n-
    \n-
    1117
    \n-
    1118
    \n-
    \n-
    1128 static void evaluateAll(const typename GV::ctype& in,
    \n-
    1129 std::vector<R>& out,
    \n-
    1130 bool evaluateJacobian, std::vector<R>& outJac,
    \n-
    1131 bool evaluateHessian, std::vector<R>& outHess,
    \n-
    1132 const std::vector<R>& knotVector,
    \n-
    1133 unsigned int order,
    \n-
    1134 unsigned int currentKnotSpan)
    \n-
    1135 {
    \n-
    1136 // How many shape functions to we have in each coordinate direction?
    \n-
    1137 unsigned int limit;
    \n-
    1138 limit = order+1; // The 'standard' value away from the boundaries of the knot vector
    \n-
    1139 if (currentKnotSpan<order)
    \n-
    1140 limit -= (order - currentKnotSpan);
    \n-
    1141 if ( order > (knotVector.size() - currentKnotSpan - 2) )
    \n-
    1142 limit -= order - (knotVector.size() - currentKnotSpan - 2);
    \n-
    1143
    \n-
    1144 // The lowest knot spans that we need values from
    \n-
    1145 unsigned int offset;
    \n-
    1146 offset = std::max((int)(currentKnotSpan - order),0);
    \n-
    1147
    \n-
    1148 // Evaluate 1d function values (needed for the product rule)
    \n-
    1149 DynamicMatrix<R> values;
    \n-
    1150
    \n-
    1151 evaluateFunctionFull(in, values, knotVector, order, currentKnotSpan);
    \n-
    1152
    \n-
    1153 out.resize(knotVector.size()-order-1);
    \n-
    1154 for (size_t j=0; j<out.size(); j++)
    \n-
    1155 out[j] = values[order][j];
    \n-
    1156
    \n-
    1157 // Evaluate 1d function values of one order lower (needed for the derivative formula)
    \n-
    1158 std::vector<R> lowOrderOneDValues;
    \n-
    1159
    \n-
    1160 if (order!=0)
    \n-
    1161 {
    \n-
    1162 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);
    \n-
    1163 for (size_t j=0; j<lowOrderOneDValues.size(); j++)
    \n-
    1164 lowOrderOneDValues[j] = values[order-1][j];
    \n-
    1165 }
    \n-
    1166
    \n-
    1167 // Evaluate 1d function values of two order lower (needed for the (second) derivative formula)
    \n-
    1168 std::vector<R> lowOrderTwoDValues;
    \n-
    1169
    \n-
    1170 if (order>1 && evaluateHessian)
    \n-
    1171 {
    \n-
    1172 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);
    \n-
    1173 for (size_t j=0; j<lowOrderTwoDValues.size(); j++)
    \n-
    1174 lowOrderTwoDValues[j] = values[order-2][j];
    \n-
    1175 }
    \n-
    1176
    \n-
    1177 // Evaluate 1d function derivatives
    \n-
    1178 if (evaluateJacobian)
    \n-
    1179 {
    \n-
    1180 outJac.resize(limit);
    \n-
    1181
    \n-
    1182 if (order==0) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n-
    1183 std::fill(outJac.begin(), outJac.end(), R(0.0));
    \n-
    1184 else
    \n-
    1185 {
    \n-
    1186 for (size_t j=offset; j<offset+limit; j++)
    \n-
    1187 {
    \n-
    1188 R derivativeAddend1 = lowOrderOneDValues[j] / (knotVector[j+order]-knotVector[j]);
    \n-
    1189 R derivativeAddend2 = lowOrderOneDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]);
    \n-
    1190 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n-
    1191 if (std::isnan(derivativeAddend1))
    \n-
    1192 derivativeAddend1 = 0;
    \n-
    1193 if (std::isnan(derivativeAddend2))
    \n-
    1194 derivativeAddend2 = 0;
    \n-
    1195 outJac[j-offset] = order * ( derivativeAddend1 - derivativeAddend2 );
    \n-
    1196 }
    \n-
    1197 }
    \n-
    1198 }
    \n-
    1199
    \n-
    1200 // Evaluate 1d function second derivatives
    \n-
    1201 if (evaluateHessian)
    \n-
    1202 {
    \n-
    1203 outHess.resize(limit);
    \n-
    1204
    \n-
    1205 if (order<2) // order-zero functions are piecewise constant, hence all derivatives are zero
    \n-
    1206 std::fill(outHess.begin(), outHess.end(), R(0.0));
    \n-
    1207 else
    \n-
    1208 {
    \n-
    1209 for (size_t j=offset; j<offset+limit; j++)
    \n-
    1210 {
    \n-
    1211 assert(j+2 < lowOrderTwoDValues.size());
    \n-
    1212 R derivativeAddend1 = lowOrderTwoDValues[j] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order-1]-knotVector[j]);
    \n-
    1213 R derivativeAddend2 = lowOrderTwoDValues[j+1] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order]-knotVector[j+1]);
    \n-
    1214 R derivativeAddend3 = lowOrderTwoDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+order]-knotVector[j+1]);
    \n-
    1215 R derivativeAddend4 = lowOrderTwoDValues[j+2] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+1+order]-knotVector[j+2]);
    \n-
    1216 // The two previous terms may evaluate as 0/0. This is to be interpreted as 0.
    \n-
    1217
    \n-
    1218 if (std::isnan(derivativeAddend1))
    \n-
    1219 derivativeAddend1 = 0;
    \n-
    1220 if (std::isnan(derivativeAddend2))
    \n-
    1221 derivativeAddend2 = 0;
    \n-
    1222 if (std::isnan(derivativeAddend3))
    \n-
    1223 derivativeAddend3 = 0;
    \n-
    1224 if (std::isnan(derivativeAddend4))
    \n-
    1225 derivativeAddend4 = 0;
    \n-
    1226 outHess[j-offset] = order * (order-1) * ( derivativeAddend1 - derivativeAddend2 -derivativeAddend3 + derivativeAddend4 );
    \n-
    1227 }
    \n-
    1228 }
    \n-
    1229 }
    \n-
    1230 }
    \n-
    \n-
    1231
    \n-
    1232
    \n-
    1234 std::array<unsigned int, dim> order_;
    \n-
    1235
    \n-
    1237 std::array<std::vector<double>, dim> knotVectors_;
    \n-
    1238
    \n-
    1240 std::array<unsigned,dim> elements_;
    \n-
    1241
    \n-\n-
    1243};
    \n-
    \n-
    1244
    \n-
    1245
    \n-
    1246
    \n-
    1247template<typename GV>
    \n-
    \n-\n-
    1249 public LeafBasisNode
    \n-
    1250{
    \n-
    1251 static const int dim = GV::dimension;
    \n-
    1252
    \n-
    1253public:
    \n-
    1254
    \n-
    1255 using size_type = std::size_t;
    \n-
    1256 using Element = typename GV::template Codim<0>::Entity;
    \n-\n-
    1258
    \n-
    \n-\n-
    1260 preBasis_(preBasis),
    \n-
    1261 finiteElement_(*preBasis)
    \n-
    1262 {}
    \n-
    \n-
    1263
    \n-
    \n-
    1265 const Element& element() const
    \n-
    1266 {
    \n-
    1267 return element_;
    \n-
    1268 }
    \n-
    \n-
    1269
    \n-
    \n-\n-
    1275 {
    \n-
    1276 return finiteElement_;
    \n-
    1277 }
    \n-
    \n-
    1278
    \n-
    \n-
    1280 void bind(const Element& e)
    \n-
    1281 {
    \n-
    1282 element_ = e;
    \n-
    1283 auto elementIndex = preBasis_->gridView().indexSet().index(e);
    \n-
    1284 finiteElement_.bind(preBasis_->getIJK(elementIndex,preBasis_->elements_));
    \n-
    1285 this->setSize(finiteElement_.size());
    \n-
    1286 }
    \n-
    \n-
    1287
    \n-
    1288protected:
    \n-
    1289
    \n-\n-
    1291
    \n-\n-\n-
    1294};
    \n-
    \n-
    1295
    \n-
    1296
    \n-
    1297
    \n-
    1298namespace BasisFactory {
    \n-
    1299
    \n-
    \n-
    1306inline auto bSpline(const std::vector<double>& knotVector,
    \n-
    1307 unsigned int order,
    \n-
    1308 bool makeOpen = true)
    \n-
    1309{
    \n-
    1310 return [&knotVector, order, makeOpen](const auto& gridView) {
    \n-
    1311 return BSplinePreBasis<std::decay_t<decltype(gridView)>>(gridView, knotVector, order, makeOpen);
    \n-
    1312 };
    \n-
    1313}
    \n-
    \n-
    1314
    \n-
    1315} // end namespace BasisFactory
    \n-
    1316
    \n-
    1317// *****************************************************************************
    \n-
    1318// This is the actual global basis implementation based on the reusable parts.
    \n-
    1319// *****************************************************************************
    \n-
    1320
    \n-
    1327template<typename GV>
    \n-\n-
    1329
    \n-
    1330
    \n-
    1331} // namespace Functions
    \n-
    1332
    \n-
    1333} // namespace Dune
    \n-
    1334
    \n-
    1335#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH
    \n-\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:1306
    \n+
    157
    \n+
    158#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH
    \n
    Definition polynomial.hh:10
    \n-
    LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grid...
    Definition bsplinebasis.hh:362
    \n-
    BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)
    Copy constructor.
    Definition bsplinebasis.hh:383
    \n-
    const BSplinePreBasis< GV > & preBasis_
    Definition bsplinebasis.hh:474
    \n-
    const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > & localInterpolation() const
    Hand out a LocalInterpolation object.
    Definition bsplinebasis.hh:439
    \n-
    LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients< dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits
    Export various types related to this LocalFiniteElement.
    Definition bsplinebasis.hh:372
    \n-
    std::array< unsigned, dim > currentKnotSpan_
    Definition bsplinebasis.hh:481
    \n-
    BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)
    Constructor with a given B-spline basis.
    Definition bsplinebasis.hh:376
    \n-
    const BSplineLocalCoefficients< dim > & localCoefficients() const
    Hand out a LocalCoefficients object.
    Definition bsplinebasis.hh:433
    \n-
    void bind(const std::array< unsigned, dim > &elementIdx)
    Bind LocalFiniteElement to a specific knot span of the spline patch.
    Definition bsplinebasis.hh:394
    \n-
    BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > localInterpolation_
    Definition bsplinebasis.hh:478
    \n-
    GeometryType type() const
    Return the reference element that the local finite element is defined on (here, a hypercube)
    Definition bsplinebasis.hh:455
    \n-
    unsigned size() const
    Number of shape functions in this finite element.
    Definition bsplinebasis.hh:445
    \n-
    BSplineLocalCoefficients< dim > localCoefficients_
    Definition bsplinebasis.hh:477
    \n-
    unsigned int size(int i) const
    Number of degrees of freedom for one coordinate direction.
    Definition bsplinebasis.hh:463
    \n-
    BSplineLocalBasis< GV, R > localBasis_
    Definition bsplinebasis.hh:476
    \n-
    const BSplineLocalBasis< GV, R > & localBasis() const
    Hand out a LocalBasis object.
    Definition bsplinebasis.hh:427
    \n-
    Pre-basis for B-spline basis.
    Definition bsplinebasis.hh:499
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition bsplinebasis.hh:567
    \n-
    std::array< unsigned, dim > elements_
    Number of grid elements in the different coordinate directions.
    Definition bsplinebasis.hh:1240
    \n-
    GridView gridView_
    Definition bsplinebasis.hh:1242
    \n-
    double R
    Definition bsplinebasis.hh:570
    \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:1085
    \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:781
    \n-
    std::array< unsigned int, dim > order_
    Order of the B-spline for each space dimension.
    Definition bsplinebasis.hh:1234
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition bsplinebasis.hh:719
    \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:1128
    \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:1028
    \n-
    unsigned int size(size_t d) const
    Number of shape functions in one direction.
    Definition bsplinebasis.hh:774
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition bsplinebasis.hh:560
    \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:735
    \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:913
    \n-
    std::size_t size_type
    Definition bsplinebasis.hh:561
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition bsplinebasis.hh:565
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition bsplinebasis.hh:686
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition bsplinebasis.hh:676
    \n-
    size_type size(const Dune::ReservedVector< ST, i > &prefix) const
    Return number of possible values for next position in multi index.
    Definition bsplinebasis.hh:712
    \n-
    unsigned int size() const
    Total number of B-spline basis functions.
    Definition bsplinebasis.hh:765
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition bsplinebasis.hh:680
    \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:1009
    \n-
    Node makeNode() const
    Create tree node.
    Definition bsplinebasis.hh:694
    \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:590
    \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:812
    \n-
    static constexpr size_type minMultiIndexSize
    Definition bsplinebasis.hh:566
    \n-
    std::array< std::vector< double >, dim > knotVectors_
    The knot vectors, one for each space dimension.
    Definition bsplinebasis.hh:1237
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition bsplinebasis.hh:725
    \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:642
    \n-
    LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch ...
    Definition bsplinebasis.hh:46
    \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:55
    \n-
    unsigned int order() const
    Polynomial order of the shape functions.
    Definition bsplinebasis.hh:140
    \n-
    std::size_t size() const
    Return the number of basis functions on the current knot span.
    Definition bsplinebasis.hh:147
    \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:97
    \n-
    void evaluateFunction(const FieldVector< D, dim > &in, std::vector< FieldVector< R, 1 > > &out) const
    Evaluate all shape functions.
    Definition bsplinebasis.hh:70
    \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:82
    \n-
    BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const BSplineLocalFiniteElement< GV, R > &lFE)
    Constructor with a given B-spline patch.
    Definition bsplinebasis.hh:61
    \n-
    Attaches a shape function to an entity.
    Definition bsplinebasis.hh:178
    \n-
    const LocalKey & localKey(std::size_t i) const
    get i'th index
    Definition bsplinebasis.hh:321
    \n-
    void init(const std::array< unsigned, dim > &sizes)
    Definition bsplinebasis.hh:256
    \n-
    std::size_t size() const
    number of coefficients
    Definition bsplinebasis.hh:315
    \n-
    Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product gri...
    Definition bsplinebasis.hh:340
    \n-
    void interpolate(const F &f, std::vector< C > &out) const
    Local interpolation of a function.
    Definition bsplinebasis.hh:344
    \n-
    Definition bsplinebasis.hh:1250
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition bsplinebasis.hh:1274
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition bsplinebasis.hh:1256
    \n-
    const BSplinePreBasis< GV > * preBasis_
    Definition bsplinebasis.hh:1290
    \n-
    Element element_
    Definition bsplinebasis.hh:1293
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition bsplinebasis.hh:1280
    \n-
    BSplineNode(const BSplinePreBasis< GV > *preBasis)
    Definition bsplinebasis.hh:1259
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition bsplinebasis.hh:1265
    \n-
    FiniteElement finiteElement_
    Definition bsplinebasis.hh:1292
    \n-
    std::size_t size_type
    Definition bsplinebasis.hh:1255
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n-
    size_type size() const
    Definition nodes.hh:142
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n-
    Definition nodes.hh:186
    \n+
    SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >
    \n+
    Definition subspacebasis.hh:38
    \n+
    typename RootBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition subspacebasis.hh:48
    \n+
    const PrefixPath & prefixPath() const
    Definition subspacebasis.hh:118
    \n+
    The restriction of a finite element basis to a single element.
    Definition subspacelocalview.hh:30
    \n+
    typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree
    Tree of local finite elements / local shape function sets.
    Definition subspacelocalview.hh:53
    \n+
    void unbind()
    Unbind from the current element.
    Definition subspacelocalview.hh:89
    \n+
    const Element & element() const
    Return the grid element that the view is bound to.
    Definition subspacelocalview.hh:80
    \n+
    const GlobalBasis * globalBasis_
    Definition subspacelocalview.hh:147
    \n+
    bool bound() const
    Return if the view is bound to a grid element.
    Definition subspacelocalview.hh:96
    \n+
    typename RootLocalView::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition subspacelocalview.hh:56
    \n+
    size_type size() const
    Total number of degrees of freedom on this element.
    Definition subspacelocalview.hh:112
    \n+
    RootLocalView rootLocalView_
    Definition subspacelocalview.hh:148
    \n+
    void bind(const Element &e)
    Bind the view to a grid element.
    Definition subspacelocalview.hh:71
    \n+
    typename GlobalBasis::GridView GridView
    The grid view the global FE basis lives on.
    Definition subspacelocalview.hh:41
    \n+
    SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)
    Construct local view for a given global finite element basis.
    Definition subspacelocalview.hh:59
    \n+
    RLV RootLocalView
    Definition subspacelocalview.hh:35
    \n+
    const RootLocalView & rootLocalView() const
    Definition subspacelocalview.hh:141
    \n+
    std::size_t size_type
    The type used for sizes.
    Definition subspacelocalview.hh:47
    \n+
    typename GridView::template Codim< 0 >::Entity Element
    Type of the grid element we are bound to.
    Definition subspacelocalview.hh:44
    \n+
    const GlobalBasis & globalBasis() const
    Return the global basis that we are a view on.
    Definition subspacelocalview.hh:136
    \n+
    size_type maxSize() const
    Maximum local size for any element on the GridView.
    Definition subspacelocalview.hh:123
    \n+
    const Tree & tree() const
    Return the local ansatz tree associated to the bound entity.
    Definition subspacelocalview.hh:105
    \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:129
    \n+
    typename RootLocalView::Tree RootTree
    Tree of local finite elements / local shape function sets.
    Definition subspacelocalview.hh:50
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,1500 +1,227 @@\n dune-functions\u00a02.9.0\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+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-_\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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n 5\n-10#include \n-11#include \n+6\n+7#include \n+8\n+9#include \n+10\n+11#include \n 12\n-14#include \n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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\n 15\n-16#include \n-17#include \n-18#include \n-19#include \n-20#include \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/_\bn_\bo_\bd_\be_\bs_\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/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-23\n-24namespace _\bD_\bu_\bn_\be\n-25{\n-26namespace Functions {\n-27\n-28// A maze of dependencies between the different parts of this. We need a few\n-forward declarations\n-29template\n-30class _\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-31\n-32template\n-33class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs;\n+16\n+17namespace _\bD_\bu_\bn_\be {\n+18namespace Functions {\n+19\n+20\n+21\n+22template\n+23class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs;\n+24\n+25\n+26\n+28template\n+_\b2_\b9class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n+30{\n+31 using PrefixPath = PP;\n+32\n+33public:\n 34\n-35\n-44template\n-_\b4_\b5class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs\n-46{\n-47 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+_\b3_\b5 using _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = RLV;\n+36\n+_\b3_\b8 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+39\n+_\b4_\b1 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+42\n+_\b4_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GridView::template Codim<0>::Entity;\n+45\n+_\b4_\b7 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n 48\n-49 typedef typename GV::ctype D;\n-50 enum {dim = GV::dimension};\n-51public:\n-52\n-54 typedef LocalBasisTraits,R,1,FieldVector,\n-_\b5_\b5 FieldMatrix > _\bT_\br_\ba_\bi_\bt_\bs;\n-56\n-_\b6_\b1 _\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-62 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-63 : preBasis_(preBasis),\n-64 lFE_(lFE)\n-65 {}\n-66\n-_\b7_\b0 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (const FieldVector& in,\n-71 std::vector >& out) const\n+_\b5_\b0 using _\bR_\bo_\bo_\bt_\bT_\br_\be_\be = typename RootLocalView::Tree;\n+51\n+_\b5_\b3 using _\bT_\br_\be_\be = typename TypeTree::ChildForTreePath;\n+54\n+_\b5_\b6 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename RootLocalView::MultiIndex;\n+57\n+_\b5_\b9 _\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+60 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(&_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs),\n+61 _\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+62 {\n+63// static_assert(models, Tree>(), \"Tree type\n+passed to SubspaceLocalView does not model the BasisNode concept.\");\n+64 }\n+65\n+_\b7_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n 72 {\n-73 FieldVector globalIn = offset_;\n-74 scaling_.umv(in,globalIn);\n+73 _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bind(e);\n+74 }\n 75\n-76 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);\n-77 }\n-78\n-_\b8_\b2 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn (const FieldVector& in,\n-83 std::vector >& out) const\n-84 {\n-85 FieldVector globalIn = offset_;\n-86 scaling_.umv(in,globalIn);\n-87\n-88 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);\n-89\n-90 for (size_t i=0; i\n-_\b9_\b7 inline void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be (const typename std::array& directions,\n-98 const typename Traits::DomainType& in,\n-99 std::vector& out) const\n-100 {\n-101 switch(k)\n-102 {\n-103 case 0:\n-104 _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(in, out);\n-105 break;\n-106 case 1:\n-107 {\n-108 FieldVector globalIn = offset_;\n-109 scaling_.umv(in,globalIn);\n-110\n-111 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n-112\n-113 for (size_t i=0; i globalIn = offset_;\n-120 scaling_.umv(in,globalIn);\n-121\n-122 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n-123\n-124 for (size_t i=0; i_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh());\n+108 }\n+109\n+_\b1_\b1_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+113 {\n+114 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.size();\n+115 }\n+116\n+_\b1_\b2_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bS_\bi_\bz_\be() const\n+124 {\n+125 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize();\n+126 }\n+127\n+_\b1_\b2_\b9 _\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+130 {\n+131 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.index(i);\n+132 }\n+133\n+_\b1_\b3_\b6 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+137 {\n+138 return *_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n+139 }\n+140\n+_\b1_\b4_\b1 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+142 {\n+143 return _\br_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n+144 }\n+145\n+146protected:\n+_\b1_\b4_\b7 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_\b4_\b8 _\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+149};\n+150\n 151\n-152private:\n-153 const _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b<_\bG_\bV_\b>& preBasis_;\n-154\n-155 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+152\n+153} // end namespace Functions\n+154} // end namespace Dune\n+155\n 156\n-157 // Coordinates in a single knot span differ from coordinates on the B-\n-spline patch\n-158 // by an affine transformation. This transformation is stored in offset_\n-and scaling_.\n-159 FieldVector offset_;\n-160 DiagonalMatrix scaling_;\n-161};\n-162\n-176template\n-_\b1_\b7_\b7class _\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-178{\n-179 // Return i as a d-digit number in the (k+1)-nary system\n-180 std::array multiindex (unsigned int i) const\n-181 {\n-182 std::array alpha;\n-183 for (int j=0; j& subEntity)\n-193 {\n-194 if (sizes_[0]==1)\n-195 {\n-196 subEntity[0] = 0;\n-197 return;\n-198 }\n-199\n-200 /* edge and vertex numbering\n-201 0----0----1\n-202 */\n-203 unsigned lastIndex=0;\n-204 subEntity[lastIndex++] = 0; // corner 0\n-205 for (unsigned i = 0; i < sizes_[0] - 2; ++i)\n-206 subEntity[lastIndex++] = 0; // inner dofs of element (0)\n-207\n-208 subEntity[lastIndex++] = 1; // corner 1\n-209\n-210 assert(_\bs_\bi_\bz_\be()==lastIndex);\n-211 }\n-212\n-213 void setup2d(std::vector& subEntity)\n-214 {\n-215 unsigned lastIndex=0;\n-216\n-217 // LocalKey: entity number , entity codim, dof indices within each entity\n-218 /* edge and vertex numbering\n-219 2----3----3\n-220 | |\n-221 | |\n-222 0 1\n-223 | |\n-224 | |\n-225 0----2----1\n-226 */\n-227\n-228 // lower edge (2)\n-229 subEntity[lastIndex++] = 0; // corner 0\n-230 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n-231 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)\n-232\n-233 subEntity[lastIndex++] = 1; // corner 1\n-234\n-235 // iterate from bottom to top over inner edge dofs\n-236 for (unsigned e = 0; e < sizes_[1]-2; ++e)\n-237 {\n-238 subEntity[lastIndex++] = 0; // left edge (0)\n-239 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n-240 subEntity[lastIndex++] = 0; // face dofs\n-241 subEntity[lastIndex++] = 1; // right edge (1)\n-242 }\n-243\n-244 // upper edge (3)\n-245 subEntity[lastIndex++] = 2; // corner 2\n-246 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n-247 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)\n-248\n-249 subEntity[lastIndex++] = 3; // corner 3\n-250\n-251 assert(_\bs_\bi_\bz_\be()==lastIndex);\n-252 }\n-253\n-254\n-255public:\n-_\b2_\b5_\b6 void _\bi_\bn_\bi_\bt(const std::array& sizes)\n-257 {\n-258 sizes_ = sizes;\n-259\n-260 li_.resize(_\bs_\bi_\bz_\be());\n-261\n-262 // Set up array of codimension-per-dof-number\n-263 std::vector codim(li_.size());\n-264\n-265 for (std::size_t i=0; i mIdx = multiindex(i);\n-271 for (int j=0; j index(_\bs_\bi_\bz_\be());\n-282\n-283 for (std::size_t i=0; i mIdx = multiindex(i);\n-288\n-289 for (int j=dim-1; j>=0; j--)\n-290 if (mIdx[j]>0 and mIdx[j] subEntity(li_.size());\n-296\n-297 if (subEntity.size() > 0)\n-298 {\n-299 if (dim==1) {\n-300\n-301 setup1d(subEntity);\n-302\n-303 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {\n-304\n-305 setup2d(subEntity);\n-306\n-307 }\n-308 }\n-309\n-310 for (size_t i=0; i());\n-318 }\n-319\n-_\b3_\b2_\b1 const LocalKey& _\bl_\bo_\bc_\ba_\bl_\bK_\be_\by (std::size_t i) const\n-322 {\n-323 return li_[i];\n-324 }\n-325\n-326private:\n-327\n-328 // Number of shape functions on this element per coordinate direction\n-329 std::array sizes_;\n-330\n-331 std::vector li_;\n-332};\n-333\n-338template\n-_\b3_\b3_\b9class _\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-340{\n-341public:\n-343 template\n-_\b3_\b4_\b4 void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const F& f, std::vector& out) const\n-345 {\n-346 DUNE_THROW(NotImplemented, \"BSplineLocalInterpolation::interpolate\");\n-347 }\n-348\n-349};\n-350\n-360template\n-_\b3_\b6_\b1class _\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-362{\n-_\b3_\b6_\b3 typedef typename GV::ctype D;\n-364 enum {dim = GV::dimension};\n-365 friend class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bL_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs;\n-366public:\n-367\n-370 typedef LocalFiniteElementTraits,\n-371 _\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_\b2 _\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-373\n-_\b3_\b7_\b6 _\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-377 : _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(preBasis),\n-378 _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(preBasis,*this)\n-379 {}\n-380\n-_\b3_\b8_\b3 _\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-384 : _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(other._\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_),\n-385 _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(_\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_,*this)\n-386 {}\n-387\n-_\b3_\b9_\b4 void _\bb_\bi_\bn_\bd(const std::array& elementIdx)\n-395 {\n-396 /* \\todo In the long run we need to precompute a table for this */\n-397 for (size_t i=0; i sizes;\n-421 for (size_t i=0; i& _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs() const\n-428 {\n-429 return _\bl_\bo_\bc_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n-430 }\n-431\n-_\b4_\b3_\b3 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-434 {\n-435 return _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs_\b_;\n-436 }\n-437\n-_\b4_\b3_\b9 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-440 {\n-441 return _\bl_\bo_\bc_\ba_\bl_\bI_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\bi_\bo_\bn_\b_;\n-442 }\n-443\n-_\b4_\b4_\b5 unsigned _\bs_\bi_\bz_\be () const\n-446 {\n-447 std::size_t r = 1;\n-448 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-470 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-471 return r;\n-472 }\n-473\n-_\b4_\b7_\b4 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-475\n-_\b4_\b7_\b6 _\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_\b7_\b7 _\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_\b7_\b8 _\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-479\n-480 // The knot span we are bound to\n-_\b4_\b8_\b1 std::array _\bc_\bu_\br_\br_\be_\bn_\bt_\bK_\bn_\bo_\bt_\bS_\bp_\ba_\bn_\b_;\n-482};\n-483\n-484\n-485template\n-486class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be;\n-487\n-497template\n-_\b4_\b9_\b8class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-499{\n-500 static const int dim = GV::dimension;\n-501\n-503 class MultiDigitCounter\n-504 {\n-505 public:\n-506\n-510 MultiDigitCounter(const std::array& limits)\n-511 : limits_(limits)\n-512 {\n-513 std::fill(counter_.begin(), counter_.end(), 0);\n-514 }\n-515\n-517 MultiDigitCounter& operator++()\n-518 {\n-519 for (int i=0; i limits_;\n-551\n-553 std::array counter_;\n-554\n-555 };\n-556\n-557public:\n-558\n-_\b5_\b6_\b0 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b5_\b6_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-562\n-_\b5_\b6_\b3 using _\bN_\bo_\bd_\be = _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b>;\n-564\n-_\b5_\b6_\b5 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-_\b5_\b6_\b6 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-_\b5_\b6_\b7 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-568\n-569 // Type used for function values\n-_\b5_\b7_\b0 using _\bR = double;\n-571\n-_\b5_\b9_\b0 _\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-591 const std::vector& knotVector,\n-592 unsigned int order,\n-593 bool makeOpen = true)\n-594 : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)\n-595 {\n-596 // \\todo Detection of duplicate knots\n-597 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-598\n-599 // Mediocre sanity check: we don't know the number of grid elements in each\n-direction.\n-600 // but at least we know the total number of elements.\n-601 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-602\n-603 for (int i=0; i& lowerLeft,\n-644 const FieldVector& upperRight,\n-645 const std::array& elements,\n-646 unsigned int order,\n-647 bool makeOpen = true)\n-648 : _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_(elements),\n-649 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw)\n-650 {\n-651 // Mediocre sanity check: we don't know the number of grid elements in each\n-direction.\n-652 // but at least we know the total number of elements.\n-653 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-654\n-655 for (int i=0; i\n-702 // size_type size(const SizePrefix& prefix) const\n-703 //\n-704 // But leads to ambiguity with the other size method:\n-705 //\n-706 // unsigned int size (size_t d) const\n-707 //\n-708 // Once the latter is removed, this implementation should be changed.\n-709\n-711 template\n-_\b7_\b1_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const Dune::ReservedVector& prefix) const\n-713 {\n-714 assert(prefix.size() == 0 || prefix.size() == 1);\n-715 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n-716 }\n-717\n-_\b7_\b1_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-720 {\n-721 return _\bs_\bi_\bz_\be();\n-722 }\n-723\n-_\b7_\b2_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-726 {\n-727 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 1;\n-728 for (int i=0; i\n-_\b7_\b3_\b5 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-736 {\n-737 // Local degrees of freedom are arranged in a lattice.\n-738 // We need the lattice dimensions to be able to compute lattice coordinates\n-from a local index\n-739 std::array localSizes;\n-740 for (int i=0; i localIJK = _\bg_\be_\bt_\bI_\bJ_\bK(i, localSizes);\n-745\n-746 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-747 const auto order = _\bo_\br_\bd_\be_\br_\b_;\n-748\n-749 std::array globalIJK;\n-750 for (int i=0; i=0; i--)\n-757 globalIdx = globalIdx * _\bs_\bi_\bz_\be(i) + globalIJK[i];\n-758\n-759 *it = {{globalIdx}};\n-760 }\n-761 return it;\n-762 }\n-763\n-_\b7_\b6_\b5 unsigned int _\bs_\bi_\bz_\be () const\n-766 {\n-767 unsigned int result = 1;\n-768 for (size_t i=0; i& in,\n-782 std::vector >& out,\n-783 const std::array& currentKnotSpan) const\n-784 {\n-785 // Evaluate\n-786 std::array, dim> oneDValues;\n-787\n-788 for (size_t i=0; i limits;\n-792 for (int i=0; i& in,\n-813 std::vector >& out,\n-814 const std::array& currentKnotSpan) const\n-815 {\n-816 // How many shape functions to we have in each coordinate direction?\n-817 std::array limits;\n-818 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-824 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-825 }\n-826\n-827 // The lowest knot spans that we need values from\n-828 std::array offset;\n-829 for (int i=0; i, dim> oneDValues;\n-834\n-835 // Evaluate 1d function values of one order lower (needed for the\n-derivative formula)\n-836 std::array, dim> lowOrderOneDValues;\n-837\n-838 std::array, dim> values;\n-839\n-840 for (size_t i=0; i, dim> oneDDerivatives;\n-858 for (size_t i=0; i, dim> oneDValuesShort;\n-883\n-884 for (int i=0; i\n-_\b9_\b1_\b3 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const typename std::array& directions,\n-914 const FieldVector& in,\n-915 std::vector >& out,\n-916 const std::array& currentKnotSpan) const\n-917 {\n-918 if (k != 1 && k != 2)\n-919 DUNE_THROW(RangeError, \"Differentiation order greater than 2 is not\n-supported!\");\n-920\n-921 // Evaluate 1d function values (needed for the product rule)\n-922 std::array, dim> oneDValues;\n-923 std::array, dim> oneDDerivatives;\n-924 std::array, dim> oneDSecondDerivatives;\n-925\n-926 // Evaluate 1d function derivatives\n-927 if (k==1)\n-928 for (size_t i=0; i offset;\n-936 for (int i=0; i limits;\n-941 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-949 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-950 }\n-951\n-952 // Working towards computing only the parts that we really need:\n-953 // Let's copy them out into a separate array\n-954 std::array, dim> oneDValuesShort;\n-955\n-956 for (int i=0; i _\bg_\be_\bt_\bI_\bJ_\bK(typename GridView::IndexSet::\n-IndexType idx, std::array elements)\n-1010 {\n-1011 std::array result;\n-1012 for (int i=0; i& out,\n-1029 const std::vector& knotVector,\n-1030 unsigned int order,\n-1031 unsigned int currentKnotSpan)\n-1032 {\n-1033 std::size_t outSize = order+1; // The 'standard' value away from the\n-boundaries of the knot vector\n-1034 if (currentKnotSpan (knotVector.size() - currentKnotSpan - 2) )\n-1037 outSize -= order - (knotVector.size() - currentKnotSpan - 2);\n-1038 out.resize(outSize);\n-1039\n-1040 // It's not really a matrix that is needed here, a plain 2d array would do\n-1041 DynamicMatrix N(order+1, knotVector.size()-1);\n-1042\n-1043 // The text books on splines use the following geometric condition here to\n-fill the array N\n-1044 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n-this condition\n-1045 // only works if splines are never evaluated exactly on the knots.\n-1046 //\n-1047 // for (size_t i=0; i 1e-10)\n-1056 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n-1057 : 0;\n-1058 _\bR factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n-1059 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n-1060 : 0;\n-1061 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n-1062 }\n-1063\n-1068 for (size_t i=0; i& out,\n-1087 const std::vector& knotVector,\n-1088 unsigned int order,\n-1089 unsigned int currentKnotSpan)\n-1090 {\n-1091 // It's not really a matrix that is needed here, a plain 2d array would do\n-1092 DynamicMatrix& N = out;\n-1093\n-1094 N.resize(order+1, knotVector.size()-1);\n-1095\n-1096 // The text books on splines use the following geometric condition here to\n-fill the array N\n-1097 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n-this condition\n-1098 // only works if splines are never evaluated exactly on the knots.\n-1099 //\n-1100 // for (size_t i=0; i 1e-10)\n-1109 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n-1110 : 0;\n-1111 _\bR factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n-1112 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n-1113 : 0;\n-1114 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n-1115 }\n-1116 }\n-1117\n-1118\n-_\b1_\b1_\b2_\b8 static void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bA_\bl_\bl(const typename GV::ctype& in,\n-1129 std::vector& out,\n-1130 bool _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn, std::vector& outJac,\n-1131 bool evaluateHessian, std::vector& outHess,\n-1132 const std::vector& knotVector,\n-1133 unsigned int order,\n-1134 unsigned int currentKnotSpan)\n-1135 {\n-1136 // How many shape functions to we have in each coordinate direction?\n-1137 unsigned int limit;\n-1138 limit = order+1; // The 'standard' value away from the boundaries of the\n-knot vector\n-1139 if (currentKnotSpan (knotVector.size() - currentKnotSpan - 2) )\n-1142 limit -= order - (knotVector.size() - currentKnotSpan - 2);\n-1143\n-1144 // The lowest knot spans that we need values from\n-1145 unsigned int offset;\n-1146 offset = std::max((int)(currentKnotSpan - order),0);\n-1147\n-1148 // Evaluate 1d function values (needed for the product rule)\n-1149 DynamicMatrix values;\n-1150\n-1151 _\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-1152\n-1153 out.resize(knotVector.size()-order-1);\n-1154 for (size_t j=0; j lowOrderOneDValues;\n-1159\n-1160 if (order!=0)\n-1161 {\n-1162 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);\n-1163 for (size_t j=0; j lowOrderTwoDValues;\n-1169\n-1170 if (order>1 && evaluateHessian)\n-1171 {\n-1172 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);\n-1173 for (size_t j=0; j _\bo_\br_\bd_\be_\br_\b_;\n-1235\n-_\b1_\b2_\b3_\b7 std::array, dim> _\bk_\bn_\bo_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs_\b_;\n-1238\n-_\b1_\b2_\b4_\b0 std::array _\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b_;\n-1241\n-_\b1_\b2_\b4_\b2 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-1243};\n-1244\n-1245\n-1246\n-1247template\n-_\b1_\b2_\b4_\b8class _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bN_\bo_\bd_\be :\n-1249 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-1250{\n-1251 static const int dim = GV::dimension;\n-1252\n-1253public:\n-1254\n-_\b1_\b2_\b5_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b1_\b2_\b5_\b6 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b1_\b2_\b5_\b7 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-1258\n-_\b1_\b2_\b5_\b9 _\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-1260 _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(preBasis),\n-1261 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(*preBasis)\n-1262 {}\n-1263\n-_\b1_\b2_\b6_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-1266 {\n-1267 return _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-1268 }\n-1269\n-_\b1_\b2_\b7_\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-1275 {\n-1276 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-1277 }\n-1278\n-_\b1_\b2_\b8_\b0 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-1281 {\n-1282 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = e;\n-1283 auto elementIndex = _\bp_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_->gridView().indexSet().index(e);\n-1284 _\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-1285 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-1286 }\n-1287\n-1288protected:\n-1289\n-_\b1_\b2_\b9_\b0 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-1291\n-_\b1_\b2_\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_\b2_\b9_\b3 _\bE_\bl_\be_\bm_\be_\bn_\bt _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-1294};\n-1295\n-1296\n-1297\n-1298namespace BasisFactory {\n-1299\n-_\b1_\b3_\b0_\b6inline auto _\bb_\bS_\bp_\bl_\bi_\bn_\be(const std::vector& knotVector,\n-1307 unsigned int order,\n-1308 bool makeOpen = true)\n-1309{\n-1310 return [&knotVector, order, makeOpen](const auto& gridView) {\n-1311 return _\bB_\bS_\bp_\bl_\bi_\bn_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(gridView,\n-knotVector, order, makeOpen);\n-1312 };\n-1313}\n-1314\n-1315} // end namespace BasisFactory\n-1316\n-1317/\n-/ *****************************************************************************\n-1318// This is the actual global basis implementation based on the reusable\n-parts.\n-1319/\n-/ *****************************************************************************\n-1320\n-1327template\n-_\b1_\b3_\b2_\b8using _\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-1329\n-1330\n-1331} // namespace Functions\n-1332\n-1333} // namespace Dune\n-1334\n-1335#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-_\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:1306\n+157\n+158#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:10\n-_\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:362\n-_\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:383\n-_\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:474\n-_\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:439\n-_\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:372\n-_\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: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:_\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:376\n-_\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:433\n-_\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:394\n-_\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:478\n-_\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:455\n-_\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:445\n-_\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:477\n-_\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:463\n-_\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:476\n-_\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:427\n-_\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:499\n-_\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_\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 bsplinebasis.hh:567\n-_\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: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_\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:1242\n-_\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:570\n-_\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:1085\n-_\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:781\n-_\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:1234\n-_\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-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 bsplinebasis.hh:719\n-_\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:1128\n-_\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:1028\n-_\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:774\n-_\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+_\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:38\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 bsplinebasis.hh:560\n-_\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:735\n-_\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:913\n-_\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:561\n-_\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_\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 bsplinebasis.hh:565\n-_\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:686\n-_\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:676\n-_\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-size_type size(const Dune::ReservedVector< ST, i > &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 bsplinebasis.hh:712\n-_\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() const\n-Total number of B-spline basis functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bsplinebasis.hh:765\n-_\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: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_\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: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:_\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:694\n-_\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:590\n-_\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:812\n-_\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_\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 bsplinebasis.hh:566\n-_\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: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_\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:725\n-_\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:642\n-_\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:46\n-_\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:55\n-_\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:140\n-_\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:147\n-_\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:97\n-_\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:70\n-_\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:82\n-_\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:61\n-_\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:178\n-_\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:321\n-_\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:256\n-_\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:315\n-_\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:340\n-_\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:344\n-_\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:1250\n-_\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: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:_\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:1256\n-_\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:1290\n-_\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:1293\n-_\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:1280\n-_\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:1259\n-_\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.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_\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:118\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:30\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:53\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:89\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 bsplinebasis.hh:1265\n-_\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:1292\n-_\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:1255\n-_\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:46\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+Return the grid element that the view is bound to.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:80\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:147\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:96\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:56\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:142\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:164\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:186\n+Total number of degrees of freedom on this element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.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_\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:148\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bb_\bi_\bn_\bd\n+void bind(const Element &e)\n+Bind the view to a grid element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh:71\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:41\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:59\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:35\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:141\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+std::size_t size_type\n+The type used for sizes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacelocalview.hh: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_\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: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_\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:136\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:123\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:105\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: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_\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:50\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/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: hierarchicnodetorangemap.hh File Reference\n+dune-functions: lagrangedgbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,38 +71,59 @@\n \n
    \n
    \n
    \n \n-
    hierarchicnodetorangemap.hh File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    lagrangedgbasis.hh File Reference
    \n
    \n
    \n-
    #include <utility>
    \n-#include <type_traits>
    \n-#include <dune/common/concept.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n-#include <dune/functions/common/indexaccess.hh>
    \n+
    #include <array>
    \n+#include <dune/common/exceptions.hh>
    \n+#include <dune/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
    \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::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,26 +1,42 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-hierarchicnodetorangemap.hh File Reference\n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+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 _\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:_\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/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: hierarchicnodetorangemap.hh Source File\n+dune-functions: lagrangedgbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,73 +74,308 @@\n \n \n
    \n
    \n-
    hierarchicnodetorangemap.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n
    5
    \n-
    6
    \n-
    7#include <utility>
    \n-
    8#include <type_traits>
    \n+
    6#include <array>
    \n+
    7#include <dune/common/exceptions.hh>
    \n+
    8#include <dune/common/math.hh>
    \n
    9
    \n-
    10#include <dune/common/concept.hh>
    \n-
    11
    \n-\n-\n+\n+\n+\n+
    13
    \n
    14
    \n-
    15namespace Dune {
    \n-
    16namespace Functions {
    \n-
    17
    \n-
    18
    \n+
    15
    \n+
    16
    \n+
    17namespace Dune {
    \n+
    18namespace Functions {
    \n
    19
    \n-
    \n-\n-
    30{
    \n-
    31 template<class Node, class TreePath, class Range,
    \n-
    32 std::enable_if_t< models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), int> = 0>
    \n-
    \n-
    33 decltype(auto) operator()(const Node&, const TreePath& treePath, Range&& y) const
    \n-
    34 {
    \n-
    35 return resolveStaticMultiIndex(y, treePath);
    \n-
    36 }
    \n-
    \n-
    37
    \n-
    38 template<class Node, class TreePath, class Range,
    \n-
    39 std::enable_if_t<not models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), int> = 0>
    \n-
    \n-
    40 decltype(auto) operator()(const Node&, const TreePath&, Range&& y) const
    \n-
    41 {
    \n-
    42 return std::forward<Range>(y);
    \n-
    43 }
    \n-
    \n-
    44};
    \n-
    \n-
    45
    \n+
    20
    \n+
    21
    \n+
    22// *****************************************************************************
    \n+
    23// This is the reusable part of the basis. It contains
    \n+
    24//
    \n+
    25// LagrangeDGPreBasis
    \n+
    26// LagrangeDGNode
    \n+
    27//
    \n+
    28// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    29// state. These components do _not_ depend on the global basis and local view
    \n+
    30// and can be used without a global basis.
    \n+
    31// *****************************************************************************
    \n+
    32
    \n+
    33template<typename GV, int k>
    \n+\n+
    35
    \n+
    36template<typename GV, int k>
    \n+
    \n+\n+
    38{
    \n+
    39 static const int dim = GV::dimension;
    \n+
    40
    \n+
    41public:
    \n+
    42
    \n+
    44 using GridView = GV;
    \n+
    45 using size_type = std::size_t;
    \n
    46
    \n
    47
    \n-
    48} // namespace Dune::Functions
    \n-
    49} // namespace Dune
    \n-
    50
    \n-
    51
    \n-
    52#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:398
    \n+
    48 // Precompute the number of dofs per entity type
    \n+
    49 const static int dofsPerEdge = k+1;
    \n+
    50 const static int dofsPerTriangle = (k+1)*(k+2)/2;
    \n+
    51 const static int dofsPerQuad = (k+1)*(k+1);
    \n+
    52 const static int dofsPerTetrahedron = (k+1)*(k+2)*(k+3)/6;
    \n+
    53 const static int dofsPerPrism = (k+1)*(k+1)*(k+2)/2;
    \n+
    54 const static int dofsPerHexahedron = (k+1)*(k+1)*(k+1);
    \n+
    55 const static int dofsPerPyramid = (k+1)*(k+2)*(2*k+3)/6;
    \n+
    56
    \n+
    57
    \n+\n+
    59
    \n+
    60 static constexpr size_type maxMultiIndexSize = 1;
    \n+
    61 static constexpr size_type minMultiIndexSize = 1;
    \n+
    62 static constexpr size_type multiIndexBufferSize = 1;
    \n+
    63
    \n+
    \n+\n+
    66 gridView_(gv)
    \n+
    67 {}
    \n+
    \n+
    68
    \n+
    69
    \n+
    \n+\n+
    71 {
    \n+
    72 switch (dim)
    \n+
    73 {
    \n+
    74 case 1:
    \n+
    75 {
    \n+
    76 break;
    \n+
    77 }
    \n+
    78 case 2:
    \n+
    79 {
    \n+
    80 quadrilateralOffset_ = dofsPerTriangle * gridView_.size(Dune::GeometryTypes::triangle);
    \n+
    81 break;
    \n+
    82 }
    \n+
    83 case 3:
    \n+
    84 {
    \n+
    85 prismOffset_ = dofsPerTetrahedron * gridView_.size(Dune::GeometryTypes::tetrahedron);
    \n+
    86
    \n+
    87 hexahedronOffset_ = prismOffset_ + dofsPerPrism * gridView_.size(Dune::GeometryTypes::prism);
    \n+
    88
    \n+
    89 pyramidOffset_ = hexahedronOffset_ + dofsPerHexahedron * gridView_.size(Dune::GeometryTypes::hexahedron);
    \n+
    90 break;
    \n+
    91 }
    \n+
    92 }
    \n+
    93 }
    \n+
    \n+
    94
    \n+
    \n+
    97 const GridView& gridView() const
    \n+
    98 {
    \n+
    99 return gridView_;
    \n+
    100 }
    \n+
    \n+
    101
    \n+
    \n+
    102 void update(const GridView& gv)
    \n+
    103 {
    \n+
    104 gridView_ = gv;
    \n+
    105 }
    \n+
    \n+
    106
    \n+
    \n+\n+
    111 {
    \n+
    112 return Node{};
    \n+
    113 }
    \n+
    \n+
    114
    \n+
    \n+\n+
    116 {
    \n+
    117 switch (dim)
    \n+
    118 {
    \n+
    119 case 1:
    \n+
    120 return dofsPerEdge*gridView_.size(0);
    \n+
    121 case 2:
    \n+
    122 {
    \n+
    123 return dofsPerTriangle*gridView_.size(Dune::GeometryTypes::triangle) + dofsPerQuad*gridView_.size(Dune::GeometryTypes::quadrilateral);
    \n+
    124 }
    \n+
    125 case 3:
    \n+
    126 {
    \n+
    127 return dofsPerTetrahedron*gridView_.size(Dune::GeometryTypes::tetrahedron)
    \n+
    128 + dofsPerPyramid*gridView_.size(Dune::GeometryTypes::pyramid)
    \n+
    129 + dofsPerPrism*gridView_.size(Dune::GeometryTypes::prism)
    \n+
    130 + dofsPerHexahedron*gridView_.size(Dune::GeometryTypes::hexahedron);
    \n+
    131 }
    \n+
    132 }
    \n+
    133 DUNE_THROW(Dune::NotImplemented, "No size method for " << dim << "d grids available yet!");
    \n+
    134 }
    \n+
    \n+
    135
    \n+
    137 template<class SizePrefix>
    \n+
    \n+
    138 size_type size(const SizePrefix& prefix) const
    \n+
    139 {
    \n+
    140 assert(prefix.size() == 0 || prefix.size() == 1);
    \n+
    141 return (prefix.size() == 0) ? size() : 0;
    \n+
    142 }
    \n+
    \n+
    143
    \n+
    \n+\n+
    146 {
    \n+
    147 return size();
    \n+
    148 }
    \n+
    \n+
    149
    \n+
    \n+\n+
    151 {
    \n+
    152 return Dune::power(k+1, int(GV::dimension));
    \n+
    153 }
    \n+
    \n+
    154
    \n+
    155 template<typename It>
    \n+
    \n+
    156 It indices(const Node& node, It it) const
    \n+
    157 {
    \n+
    158 const auto& gridIndexSet = gridView().indexSet();
    \n+
    159 const auto& element = node.element();
    \n+
    160
    \n+
    161 size_type offset = 0;
    \n+
    162 if constexpr (dim==1)
    \n+
    163 offset = dofsPerEdge*gridIndexSet.subIndex(element,0,0);
    \n+
    164 else if constexpr (dim==2)
    \n+
    165 {
    \n+
    166 if (element.type().isTriangle())
    \n+
    167 offset = dofsPerTriangle*gridIndexSet.subIndex(element,0,0);
    \n+
    168 else if (element.type().isQuadrilateral())
    \n+
    169 offset = quadrilateralOffset_ + dofsPerQuad*gridIndexSet.subIndex(element,0,0);
    \n+
    170 else
    \n+
    171 DUNE_THROW(Dune::NotImplemented, "2d elements have to be triangles or quadrilaterals");
    \n+
    172 }
    \n+
    173 else if constexpr (dim==3)
    \n+
    174 {
    \n+
    175 if (element.type().isTetrahedron())
    \n+
    176 offset = dofsPerTetrahedron*gridIndexSet.subIndex(element,0,0);
    \n+
    177 else if (element.type().isPrism())
    \n+
    178 offset = prismOffset_ + dofsPerPrism*gridIndexSet.subIndex(element,0,0);
    \n+
    179 else if (element.type().isHexahedron())
    \n+
    180 offset = hexahedronOffset_ + dofsPerHexahedron*gridIndexSet.subIndex(element,0,0);
    \n+
    181 else if (element.type().isPyramid())
    \n+
    182 offset = pyramidOffset_ + dofsPerPyramid*gridIndexSet.subIndex(element,0,0);
    \n+
    183 else
    \n+
    184 DUNE_THROW(Dune::NotImplemented, "3d elements have to be tetrahedrons, prisms, hexahedrons or pyramids");
    \n+
    185 }
    \n+
    186 else
    \n+
    187 DUNE_THROW(Dune::NotImplemented, "No index method for " << dim << "d grids available yet!");
    \n+
    188 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n+
    189 *it = {offset + i};
    \n+
    190 return it;
    \n+
    191 }
    \n+
    \n+
    192
    \n+
    \n+
    194 unsigned int order() const
    \n+
    195 {
    \n+
    196 return k;
    \n+
    197 }
    \n+
    \n+
    198
    \n+
    199protected:
    \n+\n+
    201
    \n+\n+\n+\n+\n+
    206};
    \n+
    \n+
    207
    \n+
    208
    \n+
    209
    \n+
    210namespace BasisFactory {
    \n+
    211
    \n+
    219template<std::size_t k>
    \n+
    \n+\n+
    221{
    \n+
    222 return [](const auto& gridView) {
    \n+
    223 return LagrangeDGPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n+
    224 };
    \n+
    225}
    \n+
    \n+
    226
    \n+
    227} // end namespace BasisFactory
    \n+
    228
    \n+
    229
    \n+
    230
    \n+
    231// *****************************************************************************
    \n+
    232// This is the actual global basis implementation based on the reusable parts.
    \n+
    233// *****************************************************************************
    \n+
    234
    \n+
    242template<typename GV, int k>
    \n+\n+
    244
    \n+
    245
    \n+
    246
    \n+
    247} // end namespace Functions
    \n+
    248} // end namespace Dune
    \n+
    249
    \n+
    250
    \n+
    251#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n+\n+\n+\n+
    auto lagrangeDG()
    Create a pre-basis factory that can create a LagrangeDG pre-basis.
    Definition lagrangedgbasis.hh:220
    \n
    Definition polynomial.hh:10
    \n-
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:30
    \n-
    decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y) const
    Definition hierarchicnodetorangemap.hh:33
    \n-
    decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const
    Definition hierarchicnodetorangemap.hh:40
    \n-\n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n+
    Definition lagrangebasis.hh:387
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition lagrangebasis.hh:439
    \n+
    Definition lagrangedgbasis.hh:38
    \n+
    size_type size() const
    Definition lagrangedgbasis.hh:115
    \n+
    It indices(const Node &node, It it) const
    Definition lagrangedgbasis.hh:156
    \n+
    size_type maxNodeSize() const
    Definition lagrangedgbasis.hh:150
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition lagrangedgbasis.hh:62
    \n+
    unsigned int order() const
    Polynomial order used in the local Lagrange finite-elements.
    Definition lagrangedgbasis.hh:194
    \n+
    void update(const GridView &gv)
    Definition lagrangedgbasis.hh:102
    \n+
    size_t hexahedronOffset_
    Definition lagrangedgbasis.hh:205
    \n+
    Node makeNode() const
    Create tree node.
    Definition lagrangedgbasis.hh:110
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition lagrangedgbasis.hh:60
    \n+
    static const int dofsPerHexahedron
    Definition lagrangedgbasis.hh:54
    \n+
    LagrangeDGPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition lagrangedgbasis.hh:65
    \n+
    size_t pyramidOffset_
    Definition lagrangedgbasis.hh:203
    \n+
    static const int dofsPerTetrahedron
    Definition lagrangedgbasis.hh:52
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition lagrangedgbasis.hh:138
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition lagrangedgbasis.hh:44
    \n+
    void initializeIndices()
    Definition lagrangedgbasis.hh:70
    \n+
    size_t quadrilateralOffset_
    Definition lagrangedgbasis.hh:202
    \n+
    static const int dofsPerEdge
    Definition lagrangedgbasis.hh:49
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition lagrangedgbasis.hh:97
    \n+
    static const int dofsPerQuad
    Definition lagrangedgbasis.hh:51
    \n+
    static const int dofsPerTriangle
    Definition lagrangedgbasis.hh:50
    \n+
    static const int dofsPerPyramid
    Definition lagrangedgbasis.hh:55
    \n+
    GridView gridView_
    Definition lagrangedgbasis.hh:200
    \n+
    static constexpr size_type minMultiIndexSize
    Definition lagrangedgbasis.hh:61
    \n+
    std::size_t size_type
    Definition lagrangedgbasis.hh:45
    \n+
    size_type dimension() const
    Definition lagrangedgbasis.hh:145
    \n+
    size_t prismOffset_
    Definition lagrangedgbasis.hh:204
    \n+
    static const int dofsPerPrism
    Definition lagrangedgbasis.hh:53
    \n+
    size_type size() const
    Definition nodes.hh:142
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,76 +1,369 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n 5\n-6\n-7#include \n-8#include \n+6#include \n+7#include \n+8#include \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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\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/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+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/_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+13\n 14\n-15namespace _\bD_\bu_\bn_\be {\n-16namespace Functions {\n-17\n-18\n+15\n+16\n+17namespace _\bD_\bu_\bn_\be {\n+18namespace Functions {\n 19\n-_\b2_\b9struct _\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-30{\n-31 template>(), int> = 0>\n-_\b3_\b3 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Node&, const TreePath& treePath, Range&& y)\n-const\n-34 {\n-35 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-36 }\n-37\n-38 template>(), int> = 0>\n-_\b4_\b0 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Node&, const TreePath&, Range&& y) const\n-41 {\n-42 return std::forward(y);\n-43 }\n-44};\n-45\n+20\n+21\n+22/\n+/ *****************************************************************************\n+23// This is the reusable part of the basis. It contains\n+24//\n+25// LagrangeDGPreBasis\n+26// LagrangeDGNode\n+27//\n+28// The pre-basis allows to create the others and is the owner of possible\n+shared\n+29// state. These components do _not_ depend on the global basis and local view\n+30// and can be used without a global basis.\n+31/\n+/ *****************************************************************************\n+32\n+33template\n+_\b3_\b4using _\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+35\n+36template\n+_\b3_\b7class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+38{\n+39 static const int dim = GV::dimension;\n+40\n+41public:\n+42\n+_\b4_\b4 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b4_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n 46\n 47\n-48} // namespace Dune::Functions\n-49} // namespace Dune\n-50\n-51\n-52#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n-_\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:398\n+48 // Precompute the number of dofs per entity type\n+_\b4_\b9 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be = k+1;\n+_\b5_\b0 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_\b1 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bQ_\bu_\ba_\bd = (k+1)*(k+1);\n+_\b5_\b2 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_\b3 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm = (k+1)*(k+1)*(k+2)/2;\n+_\b5_\b4 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+_\b5_\b5 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+56\n+57\n+_\b5_\b8 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+59\n+_\b6_\b0 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+_\b6_\b1 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+_\b6_\b2 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+63\n+_\b6_\b5 _\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+66 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv)\n+67 {}\n+68\n+69\n+_\b7_\b0 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+71 {\n+72 switch (dim)\n+73 {\n+74 case 1:\n+75 {\n+76 break;\n+77 }\n+78 case 2:\n+79 {\n+80 _\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+81 break;\n+82 }\n+83 case 3:\n+84 {\n+85 _\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+86\n+87 _\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+88\n+89 _\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+90 break;\n+91 }\n+92 }\n+93 }\n+94\n+_\b9_\b7 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+98 {\n+99 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+100 }\n+101\n+_\b1_\b0_\b2 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+103 {\n+104 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+105 }\n+106\n+_\b1_\b1_\b0 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+111 {\n+112 return _\bN_\bo_\bd_\be{};\n+113 }\n+114\n+_\b1_\b1_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+116 {\n+117 switch (dim)\n+118 {\n+119 case 1:\n+120 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0);\n+121 case 2:\n+122 {\n+123 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+124 }\n+125 case 3:\n+126 {\n+127 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+128 + _\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+129 + _\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+130 + _\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+131 }\n+132 }\n+133 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n+available yet!\");\n+134 }\n+135\n+137 template\n+_\b1_\b3_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+139 {\n+140 assert(prefix.size() == 0 || prefix.size() == 1);\n+141 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n+142 }\n+143\n+_\b1_\b4_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+146 {\n+147 return _\bs_\bi_\bz_\be();\n+148 }\n+149\n+_\b1_\b5_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+151 {\n+152 return Dune::power(k+1, int(GV::dimension));\n+153 }\n+154\n+155 template\n+_\b1_\b5_\b6 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+157 {\n+158 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n+159 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+160\n+161 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be offset = 0;\n+162 if constexpr (dim==1)\n+163 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be*gridIndexSet.subIndex(element,0,0);\n+164 else if constexpr (dim==2)\n+165 {\n+166 if (element.type().isTriangle())\n+167 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be*gridIndexSet.subIndex(element,0,0);\n+168 else if (element.type().isQuadrilateral())\n+169 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+170 else\n+171 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n+quadrilaterals\");\n+172 }\n+173 else if constexpr (dim==3)\n+174 {\n+175 if (element.type().isTetrahedron())\n+176 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn*gridIndexSet.subIndex(element,0,0);\n+177 else if (element.type().isPrism())\n+178 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+179 else if (element.type().isHexahedron())\n+180 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+181 else if (element.type().isPyramid())\n+182 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+183 else\n+184 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedrons,\n+prisms, hexahedrons or pyramids\");\n+185 }\n+186 else\n+187 DUNE_THROW(Dune::NotImplemented, \"No index method for \" << dim << \"d grids\n+available yet!\");\n+188 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0, end = node._\bs_\bi_\bz_\be() ; i < end ; ++i, ++it)\n+189 *it = {offset + i};\n+190 return it;\n+191 }\n+192\n+_\b1_\b9_\b4 unsigned int _\bo_\br_\bd_\be_\br() const\n+195 {\n+196 return k;\n+197 }\n+198\n+199protected:\n+_\b2_\b0_\b0 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+201\n+_\b2_\b0_\b2 size_t _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b2_\b0_\b3 size_t _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b2_\b0_\b4 size_t _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+_\b2_\b0_\b5 size_t _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n+206};\n+207\n+208\n+209\n+210namespace BasisFactory {\n+211\n+219template\n+_\b2_\b2_\b0auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG()\n+221{\n+222 return [](const auto& gridView) {\n+223 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k>(gridView);\n+224 };\n+225}\n+226\n+227} // end namespace BasisFactory\n+228\n+229\n+230\n+231/\n+/ *****************************************************************************\n+232// This is the actual global basis implementation based on the reusable\n+parts.\n+233/\n+/ *****************************************************************************\n+234\n+242template\n+_\b2_\b4_\b3using _\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+244\n+245\n+246\n+247} // end namespace Functions\n+248} // end namespace Dune\n+249\n+250\n+251#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n+_\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:220\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:30\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:33\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: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:_\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:46\n+_\bD_\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:387\n+_\bD_\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:439\n+_\bD_\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:38\n+_\bD_\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\n+size_type size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:115\n+_\bD_\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:156\n+_\bD_\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:150\n+_\bD_\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_\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 lagrangedgbasis.hh:62\n+_\bD_\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:194\n+_\bD_\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:102\n+_\bD_\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:205\n+_\bD_\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:110\n+_\bD_\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_\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 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:_\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:54\n+_\bD_\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:65\n+_\bD_\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:203\n+_\bD_\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:52\n+_\bD_\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\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 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:_\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: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_\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:70\n+_\bD_\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:202\n+_\bD_\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:49\n+_\bD_\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:97\n+_\bD_\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: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_\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: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:_\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: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_\b_\n+GridView gridView_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:200\n+_\bD_\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_\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 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:_\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:45\n+_\bD_\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:145\n+_\bD_\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:204\n+_\bD_\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: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:142\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: flatvectorview.hh File Reference\n+dune-functions: nedelecbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -70,48 +70,62 @@\n \n \n
    \n \n-
    flatvectorview.hh File Reference
    \n+
    nedelecbasis.hh File Reference
    \n
    \n
    \n
    #include <array>
    \n-#include <dune/common/concept.hh>
    \n-#include <dune/common/hybridutilities.hh>
    \n-#include <dune/common/indices.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n+#include <dune/common/exceptions.hh>
    \n+#include <dune/grid/common/capabilities.hh>
    \n+#include <dune/grid/common/mcmgmapper.hh>
    \n+#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n+#include <dune/localfunctions/nedelec.hh>
    \n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n+#include <dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n
    \n

    Go to the source code of this file.

    \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 >
     
    \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<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<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,35 +1,45 @@\n dune-functions\u00a02.9.0\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+_\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 <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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/_\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:_\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+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:_\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:_\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/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: flatvectorview.hh Source File\n+dune-functions: nedelecbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,215 +74,414 @@\n \n \n \n
    \n-
    flatvectorview.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n
    5
    \n-
    6
    \n-
    7#include <array>
    \n+
    6#include <array>
    \n+
    7#include <dune/common/exceptions.hh>
    \n
    8
    \n-
    9#include <dune/common/concept.hh>
    \n-
    10#include <dune/common/hybridutilities.hh>
    \n-
    11#include <dune/common/indices.hh>
    \n-
    12
    \n-\n+
    9#include <dune/grid/common/capabilities.hh>
    \n+
    10#include <dune/grid/common/mcmgmapper.hh>
    \n+
    11
    \n+
    12#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n+
    13#include <dune/localfunctions/nedelec.hh>
    \n
    14
    \n-
    15
    \n-
    16
    \n-
    17
    \n-
    18namespace Dune {
    \n-
    19namespace Functions {
    \n-
    20namespace Impl {
    \n+\n+\n+\n+
    18
    \n+
    19namespace Dune::Functions
    \n+
    20{
    \n
    21
    \n-
    22
    \n-
    23template<class V>
    \n-
    24struct FlatVectorBackend
    \n-
    25{
    \n-
    26
    \n-
    27 template<class VV, class Index,
    \n-
    28 typename std::enable_if< models<Concept::HasIndexAccess, VV, Index>(), int>::type = 0>
    \n-
    29 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n-
    30 {
    \n-
    31 return v[i];
    \n-
    32 }
    \n-
    33
    \n-
    34 template<class VV, class Index,
    \n-
    35 typename std::enable_if< not models<Concept::HasIndexAccess, VV, Index>(), int>::type = 0>
    \n-
    36 static decltype(auto) getEntry(VV&& v, const Index&)
    \n-
    37 {
    \n-
    38 return std::forward<VV>(v);
    \n-
    39 }
    \n-
    40
    \n-
    41 template<class VV,
    \n-
    42 typename std::enable_if< models<Concept::HasSizeMethod, VV>(), int>::type = 0>
    \n-
    43 static auto size(VV&& v)
    \n-
    44 {
    \n-
    45 return Dune::Hybrid::size(v);
    \n-
    46 }
    \n-
    47
    \n-
    48 template<class VV,
    \n-
    49 typename std::enable_if< not models<Concept::HasSizeMethod, VV>(), int>::type = 0>
    \n-
    50 static auto size(VV&&)
    \n-
    51 {
    \n-
    52 return Dune::index_constant<1>{};
    \n-
    53 }
    \n-
    54};
    \n-
    55
    \n-
    56
    \n-
    57
    \n-
    58
    \n-
    59template<class K, int n, int m>
    \n-
    60struct FlatVectorBackend<typename Dune::FieldMatrix<K, n, m> >
    \n-
    61{
    \n-
    62
    \n-
    63 template<class VV, class Index>
    \n-
    64 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n-
    65 {
    \n-
    66 return v[i/m][i%m];
    \n-
    67 }
    \n-
    68
    \n-
    69 template<class VV>
    \n-
    70 static auto size(VV&& v)
    \n-
    71 {
    \n-
    72 return Dune::index_constant<n*m>{};
    \n-
    73 }
    \n-
    74};
    \n-
    75
    \n-
    76
    \n+
    22namespace Impl
    \n+
    23{
    \n+
    24 template<typename GV, int dim, typename R, std::size_t order>
    \n+
    25 class Nedelec1stKindLocalFiniteElementMap
    \n+
    26 {
    \n+
    27 using D = typename GV::ctype;
    \n+
    28 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n+
    29
    \n+
    30 using CubeFiniteElement = Nedelec1stKindCubeLocalFiniteElement<D,R,dim,order>;
    \n+
    31 using SimplexFiniteElement = Nedelec1stKindSimplexLocalFiniteElement<D,R,dim,order>;
    \n+
    32
    \n+
    33 public:
    \n+
    34
    \n+
    35 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n+
    36
    \n+
    37 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n+
    38 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n+
    39
    \n+
    40 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n+
    41 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n+
    42 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n+
    43
    \n+
    44 static std::size_t numVariants(GeometryType type)
    \n+
    45 {
    \n+
    46 if (order!=1) // I am not sure whether the formula below is correct for all orders.
    \n+
    47 DUNE_THROW(NotImplemented, "Only Nedelec elements of order 1 are implemented!");
    \n+
    48
    \n+
    49 auto numEdges = referenceElement<D,dim>(type).size(dim-1);
    \n+
    50 return power(2,numEdges);
    \n+
    51 }
    \n+
    52
    \n+
    53 Nedelec1stKindLocalFiniteElementMap(const GV& gv)
    \n+
    54 : elementMapper_(gv, mcmgElementLayout()),
    \n+
    55 orientation_(gv.size(0))
    \n+
    56 {
    \n+
    57 // create all variants
    \n+
    58 if constexpr (hasFixedElementType)
    \n+
    59 {
    \n+
    60 variants_.resize(numVariants(type));
    \n+
    61 for (size_t i = 0; i < numVariants(type); i++)
    \n+
    62 variants_[i] = FiniteElement(i);
    \n+
    63 }
    \n+
    64 else
    \n+
    65 {
    \n+
    66 // for mixed grids add offset for cubes
    \n+
    67 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));
    \n+
    68 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)
    \n+
    69 variants_[i] = SimplexFiniteElement(i);
    \n+
    70 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)
    \n+
    71 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);
    \n+
    72 }
    \n+
    73
    \n+
    74
    \n+
    75 // compute orientation for all elements
    \n+
    76 const auto& indexSet = gv.indexSet();
    \n
    77
    \n-
    78template<class K, std::size_t n>
    \n-
    79struct FlatVectorBackend< std::array<K, n> >
    \n-
    80{
    \n-
    81
    \n-
    82 template<class VV, class Index>
    \n-
    83 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n-
    84 {
    \n-
    85 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;
    \n-
    86 return FlatVectorBackend<K>::getEntry(v[i/innerSize], i%innerSize);
    \n-
    87 }
    \n-
    88
    \n-
    89 template<class VV>
    \n-
    90 static auto size(VV&& v)
    \n-
    91 {
    \n-
    92 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;
    \n-
    93 return Dune::index_constant<n*innerSize>{};
    \n-
    94 }
    \n-
    95
    \n-
    96};
    \n-
    97
    \n-
    98
    \n-
    99
    \n-
    100
    \n-
    101template<class T>
    \n-
    102class FlatVectorView
    \n-
    103{
    \n-
    104 using Backend = FlatVectorBackend<std::decay_t<T>>;
    \n-
    105public:
    \n-
    106 FlatVectorView(T& t) :
    \n-
    107 t_(&t)
    \n-
    108 {}
    \n+
    78 for(const auto& element : elements(gv))
    \n+
    79 {
    \n+
    80 const auto& refElement = referenceElement(element);
    \n+
    81 auto elementIndex = elementMapper_.index(element);
    \n+
    82 orientation_[elementIndex] = 0;
    \n+
    83
    \n+
    84 for (std::size_t i=0; i<element.subEntities(dim-1); i++)
    \n+
    85 {
    \n+
    86 // Local vertex indices within the element
    \n+
    87 auto localV0 = refElement.subEntity(i,dim-1, 0,dim);
    \n+
    88 auto localV1 = refElement.subEntity(i,dim-1, 1,dim);
    \n+
    89
    \n+
    90 // Global vertex indices within the grid
    \n+
    91 auto globalV0 = indexSet.subIndex(element,localV0,dim);
    \n+
    92 auto globalV1 = indexSet.subIndex(element,localV1,dim);
    \n+
    93
    \n+
    94 if ( (localV0<localV1 && globalV0>globalV1) || (localV0>localV1 && globalV0<globalV1) )
    \n+
    95 orientation_[elementIndex] |= (1 << i);
    \n+
    96 }
    \n+
    97 // for mixed grids add offset for cubes
    \n+
    98 if constexpr (!hasFixedElementType)
    \n+
    99 if (element.type().isCube())
    \n+
    100 orientation_[elementIndex] += numVariants(GeometryTypes::simplex(dim));
    \n+
    101 }
    \n+
    102 }
    \n+
    103
    \n+
    104 template<class Element>
    \n+
    105 const auto& find(const Element& element) const
    \n+
    106 {
    \n+
    107 return variants_[orientation_[elementMapper_.index(element)]];
    \n+
    108 }
    \n
    109
    \n-
    110 auto size() const
    \n-
    111 {
    \n-
    112 return Backend::size(*t_);
    \n-
    113 }
    \n-
    114
    \n-
    115 template<class Index>
    \n-
    116 decltype(auto) operator[](const Index& i) const
    \n-
    117 {
    \n-
    118 return Backend::getEntry(*t_, i);
    \n-
    119 }
    \n-
    120
    \n-
    121 template<class Index>
    \n-
    122 decltype(auto) operator[](const Index& i)
    \n-
    123 {
    \n-
    124 return Backend::getEntry(*t_, i);
    \n-
    125 }
    \n-
    126
    \n-
    127private:
    \n-
    128 T* t_;
    \n-
    129};
    \n+
    110 private:
    \n+
    111 std::vector<FiniteElement> variants_;
    \n+
    112 const Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;
    \n+
    113 std::vector<unsigned short> orientation_;
    \n+
    114 };
    \n+
    115
    \n+
    116
    \n+
    117} // namespace Impl
    \n+
    118
    \n+
    119
    \n+
    120// *****************************************************************************
    \n+
    121// This is the reusable part of the basis. It contains
    \n+
    122//
    \n+
    123// NedelecPreBasis
    \n+
    124// NedelecNode
    \n+
    125//
    \n+
    126// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    127// state. These components do _not_ depend on the global basis and local view
    \n+
    128// and can be used without a global basis.
    \n+
    129// *****************************************************************************
    \n
    130
    \n-
    131
    \n-
    132template<class T>
    \n-
    133class FlatVectorView<T&&>
    \n-
    134{
    \n-
    135 using Backend = FlatVectorBackend<std::decay_t<T>>;
    \n-
    136public:
    \n-
    137 FlatVectorView(T&& t) :
    \n-
    138 t_(std::move(t))
    \n-
    139 {}
    \n+
    131template<typename GV, typename Range, std::size_t kind, int order>
    \n+
    132class NedelecNode;
    \n+
    133
    \n+
    134template<typename GV, typename Range, std::size_t kind, int order>
    \n+
    \n+\n+
    136{
    \n+
    137 static const int dim = GV::dimension;
    \n+
    138 static_assert(kind==1, "Only the Nedelec basis of the first kind is currently implemented!");
    \n+
    139 using FiniteElementMap = typename Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;
    \n
    140
    \n-
    141 auto size() const
    \n-
    142 {
    \n-
    143 return Backend::size(t_);
    \n-
    144 }
    \n-
    145
    \n-
    146 template<class Index>
    \n-
    147 decltype(auto) operator[](const Index& i) const
    \n-
    148 {
    \n-
    149 return Backend::getEntry(t_, i);
    \n-
    150 }
    \n-
    151
    \n-
    152 template<class Index>
    \n-
    153 decltype(auto) operator[](const Index& i)
    \n-
    154 {
    \n-
    155 return Backend::getEntry(t_, i);
    \n-
    156 }
    \n-
    157
    \n-
    158private:
    \n-
    159 T t_;
    \n-
    160};
    \n-
    161
    \n-
    162} // namespace Impl
    \n-
    163
    \n-
    164
    \n-
    165
    \n-
    178template<class T>
    \n+
    141 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper<GV>;
    \n+
    142public:
    \n+
    143
    \n+
    145 using GridView = GV;
    \n+
    146 using size_type = std::size_t;
    \n+
    147
    \n+\n+
    149
    \n+
    150 static constexpr size_type maxMultiIndexSize = 1;
    \n+
    151 static constexpr size_type minMultiIndexSize = 1;
    \n+
    152 static constexpr size_type multiIndexBufferSize = 1;
    \n+
    153
    \n+
    \n+\n+
    156 gridView_(gv),
    \n+\n+
    158 mapper_(gridView_, mcmgLayout(Dim<1>{}))
    \n+
    159 {
    \n+
    160 if (kind!=1)
    \n+
    161 DUNE_THROW(NotImplemented, "Only Nedelec elements of the first kind are implemented!");
    \n+
    162
    \n+
    163 // There is no inherent reason why the basis shouldn't work for grids with more than two
    \n+
    164 // element types. Somebody simply has to sit down and implement the missing bits.
    \n+
    165 if (gv.indexSet().types(0).size() > 2)
    \n+
    166 DUNE_THROW(NotImplemented, "N\u00e9d\u00e9lec basis is only implemented for grids with simplex and cube elements");
    \n+
    167
    \n+
    168 for(auto type : gv.indexSet().types(0))
    \n+
    169 if (!type.isSimplex() && !type.isCube())
    \n+
    170 DUNE_THROW(NotImplemented, "N\u00e9d\u00e9lec basis is only implemented for grids with simplex or cube elements.");
    \n+
    171
    \n+
    172 if (order>1)
    \n+
    173 DUNE_THROW(NotImplemented, "Only first-order elements are implemented");
    \n+
    174
    \n+
    175 if (dim!=2 && dim!=3)
    \n+
    176 DUNE_THROW(NotImplemented, "Only 2d and 3d N\u00e9d\u00e9lec elements are implemented");
    \n+
    177 }
    \n+
    \n+
    178
    \n
    \n-\n-
    180{
    \n-
    181 return Impl::FlatVectorView<T>(t);
    \n-
    182}
    \n-
    \n-
    183
    \n-
    196template<class T>
    \n-
    \n-
    197auto flatVectorView(const T& t)
    \n-
    198{
    \n-
    199 return Impl::FlatVectorView<const T>(t);
    \n-
    200}
    \n-
    \n-
    201
    \n-
    214template<class T>
    \n-
    \n-
    215auto flatVectorView(T&& t)
    \n-
    216{
    \n-
    217 return Impl::FlatVectorView<T&&>(std::move(t));
    \n-
    218}
    \n-
    \n-
    219
    \n-
    220
    \n-
    221} // namespace Dune::Functions
    \n-
    222} // namespace Dune
    \n-
    223
    \n-
    224
    \n-
    225#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH
    \n-
    Definition polynomial.hh:10
    \n-
    auto flatVectorView(T &t)
    Create flat vector view of passed mutable container.
    Definition flatvectorview.hh:179
    \n-\n+\n+
    180 {}
    \n+
    \n+
    181
    \n+
    \n+
    184 const GridView& gridView() const
    \n+
    185 {
    \n+
    186 return gridView_;
    \n+
    187 }
    \n+
    \n+
    188
    \n+
    189 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n+
    \n+
    190 void update (const GridView& gv)
    \n+
    191 {
    \n+
    192 gridView_ = gv;
    \n+
    193 mapper_.update(gridView_);
    \n+
    194 }
    \n+
    \n+
    195
    \n+
    \n+\n+
    200 {
    \n+
    201 return Node{&finiteElementMap_};
    \n+
    202 }
    \n+
    \n+
    203
    \n+
    \n+\n+
    205 {
    \n+
    206 return mapper_.size();
    \n+
    207 }
    \n+
    \n+
    208
    \n+
    210 template<class SizePrefix>
    \n+
    \n+
    211 size_type size(const SizePrefix& prefix) const
    \n+
    212 {
    \n+
    213 assert(prefix.size() == 0 || prefix.size() == 1);
    \n+
    214 return (prefix.size() == 0) ? size() : 0;
    \n+
    215 }
    \n+
    \n+
    216
    \n+
    \n+\n+
    218 {
    \n+
    219 return size();
    \n+
    220 }
    \n+
    \n+
    221
    \n+
    \n+\n+
    223 {
    \n+
    224 size_type result = 0;
    \n+
    225 for (auto&& type : gridView_.indexSet().types(0))
    \n+
    226 {
    \n+
    227 size_type numEdges = referenceElement<typename GV::ctype,dim>(type).size(dim-1);
    \n+
    228 result = std::max(result, numEdges);
    \n+
    229 }
    \n+
    230
    \n+
    231 return result;
    \n+
    232 }
    \n+
    \n+
    233
    \n+
    237 template<typename It>
    \n+
    \n+
    238 It indices(const Node& node, It it) const
    \n+
    239 {
    \n+
    240 const auto& element = node.element();
    \n+
    241
    \n+
    242 // throw if Element is not of predefined type
    \n+
    243 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n+
    244 DUNE_THROW(NotImplemented, "NedelecBasis only implemented for cube and simplex elements.");
    \n+
    245
    \n+
    246 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n+
    247 {
    \n+
    248 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n+
    249 *it = { mapper_.subIndex(element, localKey.subEntity(), localKey.codim()) + localKey.index() };
    \n+
    250 }
    \n+
    251
    \n+
    252 return it;
    \n+
    253 }
    \n+
    \n+
    254
    \n+
    255protected:
    \n+\n+
    257 FiniteElementMap finiteElementMap_;
    \n+
    258 Mapper mapper_;
    \n+
    259};
    \n+
    \n+
    260
    \n+
    261
    \n+
    262
    \n+
    263template<typename GV, typename Range, size_t kind, int order>
    \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 static_assert(kind==1, "Only Nedelec elements of the first kind are implemented!");
    \n+
    274 using FiniteElementMap = typename Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;
    \n+
    275 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::CovariantPiolaTransformator,
    \n+
    276 typename FiniteElementMap::FiniteElement,
    \n+
    277 Element>;
    \n+
    278
    \n+
    \n+
    279 NedelecNode(const FiniteElementMap* finiteElementMap) :
    \n+
    280 element_(nullptr),
    \n+
    281 finiteElementMap_(finiteElementMap)
    \n+
    282 { }
    \n+
    \n+
    283
    \n+
    \n+
    285 const Element& element() const
    \n+
    286 {
    \n+
    287 return *element_;
    \n+
    288 }
    \n+
    \n+
    289
    \n+
    \n+\n+
    295 {
    \n+
    296 return finiteElement_;
    \n+
    297 }
    \n+
    \n+
    298
    \n+
    \n+
    300 void bind(const Element& e)
    \n+
    301 {
    \n+
    302 element_ = &e;
    \n+
    303 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n+
    304 this->setSize(finiteElement_.size());
    \n+
    305 }
    \n+
    \n+
    306
    \n+
    307protected:
    \n+
    308
    \n+\n+\n+\n+
    312};
    \n+
    \n+
    313
    \n+
    314
    \n+
    315
    \n+
    316namespace BasisFactory {
    \n+
    317
    \n+
    327template<std::size_t kind, std::size_t order, typename Range=double>
    \n+
    \n+\n+
    329{
    \n+
    330 return [](const auto& gridView) {
    \n+
    331 return NedelecPreBasis<std::decay_t<decltype(gridView)>, Range, kind, order>(gridView);
    \n+
    332 };
    \n+
    333}
    \n+
    \n+
    334
    \n+
    335} // end namespace BasisFactory
    \n+
    336
    \n+
    337
    \n+
    338
    \n+
    339// *****************************************************************************
    \n+
    340// This is the actual global basis implementation based on the reusable parts.
    \n+
    341// *****************************************************************************
    \n+
    342
    \n+
    350template<typename GV, std::size_t kind, std::size_t order, typename Range=double>
    \n+\n+
    352
    \n+
    353} // end namespace Dune::Functions
    \n+
    354
    \n+
    355
    \n+
    356#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n+\n+\n+\n+
    auto nedelec()
    Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.
    Definition nedelecbasis.hh:328
    \n+
    Definition polynomial.hh:11
    \n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n+
    Definition nedelecbasis.hh:266
    \n+
    const FiniteElementMap * finiteElementMap_
    Definition nedelecbasis.hh:311
    \n+
    FiniteElement finiteElement_
    Definition nedelecbasis.hh:309
    \n+
    Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition nedelecbasis.hh:277
    \n+
    void bind(const Element &e)
    Bind to element.
    Definition nedelecbasis.hh:300
    \n+
    const Element & element() const
    Return current element, throw if unbound.
    Definition nedelecbasis.hh:285
    \n+
    typename GV::template Codim< 0 >::Entity Element
    Definition nedelecbasis.hh:272
    \n+
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition nedelecbasis.hh:294
    \n+
    NedelecNode(const FiniteElementMap *finiteElementMap)
    Definition nedelecbasis.hh:279
    \n+
    typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order > FiniteElementMap
    Definition nedelecbasis.hh:274
    \n+
    const Element * element_
    Definition nedelecbasis.hh:310
    \n+
    std::size_t size_type
    Definition nedelecbasis.hh:271
    \n+
    Definition nedelecbasis.hh:136
    \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:238
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition nedelecbasis.hh:211
    \n+
    std::size_t size_type
    Definition nedelecbasis.hh:146
    \n+
    NedelecPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition nedelecbasis.hh:155
    \n+
    GV GridView
    The grid view that the FE space is defined on.
    Definition nedelecbasis.hh:145
    \n+
    size_type dimension() const
    Definition nedelecbasis.hh:217
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition nedelecbasis.hh:150
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition nedelecbasis.hh:152
    \n+
    GridView gridView_
    Definition nedelecbasis.hh:256
    \n+
    FiniteElementMap finiteElementMap_
    Definition nedelecbasis.hh:257
    \n+
    static constexpr size_type minMultiIndexSize
    Definition nedelecbasis.hh:151
    \n+
    void initializeIndices()
    Definition nedelecbasis.hh:179
    \n+
    void update(const GridView &gv)
    Definition nedelecbasis.hh:190
    \n+
    size_type maxNodeSize() const
    Definition nedelecbasis.hh:222
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition nedelecbasis.hh:184
    \n+
    Node makeNode() const
    Create tree node.
    Definition nedelecbasis.hh:199
    \n+
    size_type size() const
    Definition nedelecbasis.hh:204
    \n+
    Mapper mapper_
    Definition nedelecbasis.hh:258
    \n+
    size_type size() const
    Definition nodes.hh:142
    \n+
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n+
    Definition nodes.hh:186
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,211 +1,496 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n 5\n-6\n-7#include \n+6#include \n+7#include \n 8\n-9#include \n-10#include \n-11#include \n-12\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\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+9#include \n+10#include \n+11\n+12#include \n+13#include \n 14\n-15\n-16\n-17\n-18namespace _\bD_\bu_\bn_\be {\n-19namespace Functions {\n-20namespace Impl {\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/\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+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+19namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+20{\n 21\n-22\n-23template\n-24struct FlatVectorBackend\n-25{\n-26\n-27 template(),\n-int>::type = 0>\n-29 static decltype(auto) getEntry(VV&& v, const Index& i)\n-30 {\n-31 return v[i];\n-32 }\n-33\n-34 template(),\n-int>::type = 0>\n-36 static decltype(auto) getEntry(VV&& v, const Index&)\n-37 {\n-38 return std::forward(v);\n-39 }\n-40\n-41 template(), int>::type =\n-0>\n-43 static auto size(VV&& v)\n-44 {\n-45 return Dune::Hybrid::size(v);\n-46 }\n-47\n-48 template(), int>::\n-type = 0>\n-50 static auto size(VV&&)\n-51 {\n-52 return Dune::index_constant<1>{};\n-53 }\n-54};\n-55\n-56\n-57\n-58\n-59template\n-60struct FlatVectorBackend >\n-61{\n-62\n-63 template\n-64 static decltype(auto) getEntry(VV&& v, const Index& i)\n+22namespace Impl\n+23{\n+24 template\n+25 class Nedelec1stKindLocalFiniteElementMap\n+26 {\n+27 using D = typename GV::ctype;\n+28 constexpr static bool hasFixedElementType = Capabilities::\n+hasSingleGeometryType::v;\n+29\n+30 using CubeFiniteElement =\n+Nedelec1stKindCubeLocalFiniteElement;\n+31 using SimplexFiniteElement =\n+Nedelec1stKindSimplexLocalFiniteElement;\n+32\n+33 public:\n+34\n+35 using T = LocalBasisTraits, R, dim,\n+FieldVector, FieldMatrix >;\n+36\n+37 constexpr static unsigned int topologyId = Capabilities::\n+hasSingleGeometryType::topologyId; // meaningless if\n+hasFixedElementType is false\n+38 constexpr static GeometryType type = GeometryType(topologyId, GV::\n+dimension);\n+39\n+40 using FiniteElement = std::conditional_t,\n+42 LocalFiniteElementVariant >;\n+43\n+44 static std::size_t numVariants(GeometryType type)\n+45 {\n+46 if (order!=1) // I am not sure whether the formula below is correct for all\n+orders.\n+47 DUNE_THROW(NotImplemented, \"Only Nedelec elements of order 1 are\n+implemented!\");\n+48\n+49 auto numEdges = referenceElement(type).size(dim-1);\n+50 return power(2,numEdges);\n+51 }\n+52\n+53 Nedelec1stKindLocalFiniteElementMap(const GV& gv)\n+54 : elementMapper_(gv, mcmgElementLayout()),\n+55 orientation_(gv.size(0))\n+56 {\n+57 // create all variants\n+58 if constexpr (hasFixedElementType)\n+59 {\n+60 variants_.resize(numVariants(type));\n+61 for (size_t i = 0; i < numVariants(type); i++)\n+62 variants_[i] = FiniteElement(i);\n+63 }\n+64 else\n 65 {\n-66 return v[i/m][i%m];\n-67 }\n-68\n-69 template\n-70 static auto size(VV&& v)\n-71 {\n-72 return Dune::index_constant{};\n-73 }\n-74};\n-75\n-76\n+66 // for mixed grids add offset for cubes\n+67 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n+(GeometryTypes::cube(dim)));\n+68 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n+69 variants_[i] = SimplexFiniteElement(i);\n+70 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n+71 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n+(i);\n+72 }\n+73\n+74\n+75 // compute orientation for all elements\n+76 const auto& indexSet = gv.indexSet();\n 77\n-78template\n-79struct FlatVectorBackend< std::array >\n-80{\n-81\n-82 template\n-83 static decltype(auto) getEntry(VV&& v, const Index& i)\n-84 {\n-85 const auto innerSize = decltype(FlatVectorBackend::size(v[0]))::value;\n-86 return FlatVectorBackend::getEntry(v[i/innerSize], i%innerSize);\n-87 }\n-88\n-89 template\n-90 static auto size(VV&& v)\n-91 {\n-92 const auto innerSize = decltype(FlatVectorBackend::size(v[0]))::value;\n-93 return Dune::index_constant{};\n-94 }\n-95\n-96};\n-97\n-98\n-99\n-100\n-101template\n-102class FlatVectorView\n-103{\n-104 using Backend = FlatVectorBackend>;\n-105public:\n-106 FlatVectorView(T& t) :\n-107 t_(&t)\n-108 {}\n+78 for(const auto& element : elements(gv))\n+79 {\n+80 const auto& refElement = referenceElement(element);\n+81 auto elementIndex = elementMapper_.index(element);\n+82 orientation_[elementIndex] = 0;\n+83\n+84 for (std::size_t i=0; iglobalV1) || (localV0>localV1 &&\n+globalV0\n+105 const auto& find(const Element& element) const\n+106 {\n+107 return variants_[orientation_[elementMapper_.index(element)]];\n+108 }\n 109\n-110 auto size() const\n-111 {\n-112 return Backend::size(*t_);\n-113 }\n-114\n-115 template\n-116 decltype(auto) operator[](const Index& i) const\n-117 {\n-118 return Backend::getEntry(*t_, i);\n-119 }\n-120\n-121 template\n-122 decltype(auto) operator[](const Index& i)\n-123 {\n-124 return Backend::getEntry(*t_, i);\n-125 }\n-126\n-127private:\n-128 T* t_;\n-129};\n+110 private:\n+111 std::vector variants_;\n+112 const Dune::MultipleCodimMultipleGeomTypeMapper elementMapper_;\n+113 std::vector orientation_;\n+114 };\n+115\n+116\n+117} // namespace Impl\n+118\n+119\n+120/\n+/ *****************************************************************************\n+121// This is the reusable part of the basis. It contains\n+122//\n+123// NedelecPreBasis\n+124// NedelecNode\n+125//\n+126// The pre-basis allows to create the others and is the owner of possible\n+shared\n+127// state. These components do _not_ depend on the global basis and local\n+view\n+128// and can be used without a global basis.\n+129/\n+/ *****************************************************************************\n 130\n-131\n-132template\n-133class FlatVectorView\n-134{\n-135 using Backend = FlatVectorBackend>;\n-136public:\n-137 FlatVectorView(T&& t) :\n-138 t_(std::move(t))\n-139 {}\n+131template\n+132class NedelecNode;\n+133\n+134template\n+_\b1_\b3_\b5class _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+136{\n+137 static const int dim = GV::dimension;\n+138 static_assert(kind==1, \"Only the Nedelec basis of the first kind is\n+currently implemented!\");\n+139 using FiniteElementMap = typename Impl::\n+Nedelec1stKindLocalFiniteElementMap;\n 140\n-141 auto size() const\n-142 {\n-143 return Backend::size(t_);\n-144 }\n-145\n-146 template\n-147 decltype(auto) operator[](const Index& i) const\n-148 {\n-149 return Backend::getEntry(t_, i);\n-150 }\n-151\n-152 template\n-153 decltype(auto) operator[](const Index& i)\n-154 {\n-155 return Backend::getEntry(t_, i);\n-156 }\n-157\n-158private:\n-159 T t_;\n-160};\n-161\n-162} // namespace Impl\n-163\n-164\n-165\n-178template\n-_\b1_\b7_\b9auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(T& t)\n-180{\n-181 return Impl::FlatVectorView(t);\n-182}\n-183\n-196template\n-_\b1_\b9_\b7auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(const T& t)\n-198{\n-199 return Impl::FlatVectorView(t);\n-200}\n-201\n-214template\n-_\b2_\b1_\b5auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(T&& t)\n-216{\n-217 return Impl::FlatVectorView(std::move(t));\n-218}\n-219\n-220\n-221} // namespace Dune::Functions\n-222} // namespace Dune\n-223\n-224\n-225#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n-_\bD_\bu_\bn_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:179\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+141 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper;\n+142public:\n+143\n+_\b1_\b4_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b1_\b4_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+147\n+_\b1_\b4_\b8 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+149\n+_\b1_\b5_\b0 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+_\b1_\b5_\b1 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+_\b1_\b5_\b2 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+153\n+_\b1_\b5_\b5 _\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+156 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n+157 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv),\n+158 _\bm_\ba_\bp_\bp_\be_\br_\b_(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_, mcmgLayout(Dim<1>{}))\n+159 {\n+160 if (kind!=1)\n+161 DUNE_THROW(NotImplemented, \"Only Nedelec elements of the first kind are\n+implemented!\");\n+162\n+163 // There is no inherent reason why the basis shouldn't work for grids with\n+more than two\n+164 // element types. Somebody simply has to sit down and implement the missing\n+bits.\n+165 if (gv.indexSet().types(0).size() > 2)\n+166 DUNE_THROW(NotImplemented, \"N\u00c3\u00a9d\u00c3\u00a9lec basis is only implemented for grids\n+with simplex and cube elements\");\n+167\n+168 for(auto type : gv.indexSet().types(0))\n+169 if (!type.isSimplex() && !type.isCube())\n+170 DUNE_THROW(NotImplemented, \"N\u00c3\u00a9d\u00c3\u00a9lec basis is only implemented for grids\n+with simplex or cube elements.\");\n+171\n+172 if (order>1)\n+173 DUNE_THROW(NotImplemented, \"Only first-order elements are implemented\");\n+174\n+175 if (dim!=2 && dim!=3)\n+176 DUNE_THROW(NotImplemented, \"Only 2d and 3d N\u00c3\u00a9d\u00c3\u00a9lec elements are\n+implemented\");\n+177 }\n+178\n+_\b1_\b7_\b9 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+180 {}\n+181\n+_\b1_\b8_\b4 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+185 {\n+186 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+187 }\n+188\n+189 /* \\brief Update the stored grid view, to be called if the grid has changed\n+*/\n+_\b1_\b9_\b0 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+191 {\n+192 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n+193 _\bm_\ba_\bp_\bp_\be_\br_\b_.update(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_);\n+194 }\n+195\n+_\b1_\b9_\b9 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+200 {\n+201 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n+202 }\n+203\n+_\b2_\b0_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+205 {\n+206 return _\bm_\ba_\bp_\bp_\be_\br_\b_.size();\n+207 }\n+208\n+210 template\n+_\b2_\b1_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+212 {\n+213 assert(prefix.size() == 0 || prefix.size() == 1);\n+214 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n+215 }\n+216\n+_\b2_\b1_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+218 {\n+219 return _\bs_\bi_\bz_\be();\n+220 }\n+221\n+_\b2_\b2_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+223 {\n+224 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n+225 for (auto&& type : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0))\n+226 {\n+227 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be numEdges = referenceElement(type).size\n+(dim-1);\n+228 result = std::max(result, numEdges);\n+229 }\n+230\n+231 return result;\n+232 }\n+233\n+237 template\n+_\b2_\b3_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+239 {\n+240 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n+241\n+242 // throw if Element is not of predefined type\n+243 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n+244 DUNE_THROW(NotImplemented, \"NedelecBasis only implemented for cube and\n+simplex elements.\");\n+245\n+246 for(std::size_t i=0, end=node._\bs_\bi_\bz_\be(); i\n+_\b2_\b6_\b4class _\bN_\be_\bd_\be_\bl_\be_\bc_\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+273 static_assert(kind==1, \"Only Nedelec elements of the first kind are\n+implemented!\");\n+_\b2_\b7_\b4 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::\n+Nedelec1stKindLocalFiniteElementMap;\n+_\b2_\b7_\b5 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n+278\n+_\b2_\b7_\b9 _\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+280 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n+281 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n+282 { }\n+283\n+_\b2_\b8_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+286 {\n+287 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+288 }\n+289\n+_\b2_\b9_\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+295 {\n+296 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+297 }\n+298\n+_\b3_\b0_\b0 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n+301 {\n+302 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n+303 _\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+304 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n+305 }\n+306\n+307protected:\n+308\n+_\b3_\b0_\b9 _\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_\b1_\b0 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n+_\b3_\b1_\b1 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+312};\n+313\n+314\n+315\n+316namespace BasisFactory {\n+317\n+327template\n+_\b3_\b2_\b8auto _\bn_\be_\bd_\be_\bl_\be_\bc()\n+329{\n+330 return [](const auto& gridView) {\n+331 return _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, Range, kind,\n+order>(gridView);\n+332 };\n+333}\n+334\n+335} // end namespace BasisFactory\n+336\n+337\n+338\n+339/\n+/ *****************************************************************************\n+340// This is the actual global basis implementation based on the reusable\n+parts.\n+341/\n+/ *****************************************************************************\n+342\n+350template\n+_\b3_\b5_\b1using _\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+352\n+353} // end namespace Dune::Functions\n+354\n+355\n+356#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n+_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:328\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:11\n+_\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:46\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: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:_\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:311\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:309\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:277\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: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:_\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:285\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:272\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:294\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:279\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: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_\b_\n+const Element * element_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:310\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:271\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:136\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:238\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\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 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:_\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:146\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:155\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:145\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:217\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_\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 nedelecbasis.hh:150\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_\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 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:_\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:256\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:257\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_\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 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:_\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:179\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:190\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:222\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:184\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:199\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\n+size_type size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:204\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:258\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:142\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:164\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:186\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: rannacherturekbasis.hh File Reference\n+dune-functions: nodes.hh File Reference\n \n \n \n \n \n \n \n@@ -72,59 +72,58 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    rannacherturekbasis.hh File Reference
    \n+
    nodes.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 <cassert>
    \n+#include <memory>
    \n+#include <dune/common/indices.hh>
    \n+#include <dune/typetree/leafnode.hh>
    \n+#include <dune/typetree/powernode.hh>
    \n+#include <dune/typetree/compositenode.hh>
    \n+#include <dune/typetree/traversal.hh>
    \n+#include <dune/typetree/visitor.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\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::BasisNodeMixin
     
    class  Dune::Functions::RannacherTurekNode< GV >
    class  Dune::Functions::LeafBasisNode
     
    class  Dune::Functions::PowerBasisNode< T, n >
     
    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 >
    using Dune::Functions::RannacherTurekBasis = DefaultGlobalBasis< RannacherTurekPreBasis< GV > >
     Rannacher-Turek basis.
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class Dummy = void>
    auto Dune::Functions::BasisFactory::rannacherTurek ()
     Create a pre-basis factory that can create a Rannacher-Turek 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,43 +1,46 @@\n dune-functions\u00a02.9.0\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+_\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 _\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+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_\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_\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:_\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_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV > >\n-\u00a0 Rannacher-Turek basis.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk ()\n-\u00a0 Create a pre-basis factory that can create a Rannacher-Turek pre-basis.\n+template\n+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/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: rannacherturekbasis.hh Source File\n+dune-functions: nodes.hh Source File\n \n \n \n \n \n \n \n@@ -74,285 +74,354 @@\n \n \n
    \n
    \n-
    rannacherturekbasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n
    5
    \n-
    6#include <dune/common/exceptions.hh>
    \n-
    7
    \n-
    8#include <dune/grid/common/capabilities.hh>
    \n-
    9
    \n-
    10#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n-
    11#include <dune/localfunctions/rannacherturek.hh>
    \n-
    12#include <dune/localfunctions/crouzeixraviart.hh>
    \n-
    13
    \n-\n-\n+
    6#include <cassert>
    \n+
    7#include <memory>
    \n+
    8
    \n+
    9#include <dune/common/indices.hh>
    \n+
    10
    \n+
    11#include <dune/typetree/leafnode.hh>
    \n+
    12#include <dune/typetree/powernode.hh>
    \n+
    13#include <dune/typetree/compositenode.hh>
    \n+
    14#include <dune/typetree/traversal.hh>
    \n+
    15#include <dune/typetree/visitor.hh>
    \n
    16
    \n-
    17
    \n-
    18namespace Dune {
    \n-
    19namespace Functions {
    \n+
    17namespace Dune {
    \n+
    18 namespace Functions {
    \n+
    19
    \n
    20
    \n-
    21// *****************************************************************************
    \n-
    22// This is the reusable part of the basis. It contains
    \n-
    23//
    \n-
    24// RannacherTurekPreBasis
    \n-
    25// RannacherTurekNode
    \n-
    26//
    \n-
    27// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    28// state. These components do _not_ depend on the global basis and local view
    \n-
    29// and can be used without a global basis.
    \n-
    30// *****************************************************************************
    \n-
    31
    \n-
    32template<typename GV>
    \n-
    33class RannacherTurekNode;
    \n-
    34
    \n-
    35template<typename GV>
    \n-
    36class RannacherTurekPreBasis;
    \n-
    37
    \n-
    50template<typename GV>
    \n-
    \n-\n-
    52{
    \n-
    53 static const int dim = GV::dimension;
    \n-
    54
    \n-
    55public:
    \n+
    21 namespace Impl {
    \n+
    22
    \n+
    23
    \n+
    24 struct ClearSizeVisitor
    \n+
    25 : public TypeTree::TreeVisitor
    \n+
    26 , public TypeTree::DynamicTraversal
    \n+
    27 {
    \n+
    28
    \n+
    29 template<typename Node, typename TreePath>
    \n+
    30 void pre(Node& node, TreePath treePath)
    \n+
    31 {
    \n+
    32 leaf(node,treePath);
    \n+
    33 node.setSize(0);
    \n+
    34 }
    \n+
    35
    \n+
    36 template<typename Node, typename TreePath>
    \n+
    37 void leaf(Node& node, TreePath treePath)
    \n+
    38 {
    \n+
    39 node.setOffset(offset_);
    \n+
    40 }
    \n+
    41
    \n+
    42 ClearSizeVisitor(std::size_t offset)
    \n+
    43 : offset_(offset)
    \n+
    44 {}
    \n+
    45
    \n+
    46 const std::size_t offset_;
    \n+
    47
    \n+
    48 };
    \n+
    49
    \n+
    50
    \n+
    51 template<typename Entity>
    \n+
    52 struct BindVisitor
    \n+
    53 : public TypeTree::TreeVisitor
    \n+
    54 , public TypeTree::DynamicTraversal
    \n+
    55 {
    \n
    56
    \n-
    58 using GridView = GV;
    \n-
    59
    \n-
    61 using size_type = std::size_t;
    \n+
    57 template<typename Node, typename TreePath>
    \n+
    58 void pre(Node& node, TreePath)
    \n+
    59 {
    \n+
    60 node.setOffset(offset_);
    \n+
    61 }
    \n
    62
    \n-\n-
    65
    \n-
    66 static constexpr size_type maxMultiIndexSize = 1;
    \n-
    67 static constexpr size_type minMultiIndexSize = 1;
    \n-
    68 static constexpr size_type multiIndexBufferSize = 1;
    \n-
    69
    \n-
    \n-\n-
    72 gridView_(gv)
    \n-
    73 {
    \n-
    74 for(auto type : gv.indexSet().types(0))
    \n-
    75 if (!type.isSimplex() && !type.isCube())
    \n-
    76 DUNE_THROW(Dune::NotImplemented, "Rannacher-Turek or Crouzeix-Raviart elements are only implemented for grids with simplex or cube elements.");
    \n-
    77 }
    \n-
    \n-
    78
    \n-
    \n-\n-
    81 {}
    \n-
    \n-
    82
    \n-
    \n-
    84 const GridView& gridView() const
    \n-
    85 {
    \n-
    86 return gridView_;
    \n-
    87 }
    \n-
    \n-
    88
    \n-
    \n-
    90 void update (const GridView& gv)
    \n-
    91 {
    \n-
    92 gridView_ = gv;
    \n-
    93 }
    \n-
    \n-
    94
    \n-
    \n-
    98 Node makeNode() const
    \n-
    99 {
    \n-
    100 return Node{};
    \n-
    101 }
    \n-
    \n-
    102
    \n-
    \n-\n-
    105 {
    \n-
    106 return (size_type)(gridView_.size(1));
    \n-
    107 }
    \n-
    \n-
    108
    \n-
    110 template<class SizePrefix>
    \n-
    \n-
    111 size_type size(const SizePrefix prefix) const
    \n-
    112 {
    \n-
    113 assert(prefix.size() == 0 || prefix.size() == 1);
    \n-
    114 return (prefix.size() == 0) ? size() : 0;
    \n-
    115 }
    \n-
    \n-
    116
    \n-
    \n-\n-
    119 {
    \n-
    120 return size();
    \n-
    121 }
    \n-
    \n-
    122
    \n-
    \n-\n-
    125 {
    \n-
    126 return 2*GV::dimension;
    \n-
    127 }
    \n-
    \n-
    128
    \n-
    129 template<typename It>
    \n+
    63 template<typename Node, typename TreePath>
    \n+
    64 void post(Node& node, TreePath)
    \n+
    65 {
    \n+
    66 node.setSize(offset_ - node.offset());
    \n+
    67 }
    \n+
    68
    \n+
    69 template<typename Node, typename TreePath>
    \n+
    70 void leaf(Node& node, TreePath)
    \n+
    71 {
    \n+
    72 node.setOffset(offset_);
    \n+
    73 node.bind(entity_);
    \n+
    74 offset_ += node.size();
    \n+
    75 }
    \n+
    76
    \n+
    77 BindVisitor(const Entity& entity, std::size_t offset = 0)
    \n+
    78 : entity_(entity)
    \n+
    79 , offset_(offset)
    \n+
    80 {}
    \n+
    81
    \n+
    82 const Entity& entity_;
    \n+
    83 std::size_t offset_;
    \n+
    84
    \n+
    85 };
    \n+
    86
    \n+
    87
    \n+
    88 struct InitializeTreeVisitor :
    \n+
    89 public TypeTree::TreeVisitor,
    \n+
    90 public TypeTree::DynamicTraversal
    \n+
    91 {
    \n+
    92 template<typename Node, typename TreePath>
    \n+
    93 void pre(Node& node, TreePath)
    \n+
    94 {
    \n+
    95 node.setTreeIndex(treeIndex_);
    \n+
    96 ++treeIndex_;
    \n+
    97 }
    \n+
    98
    \n+
    99 template<typename Node, typename TreePath>
    \n+
    100 void leaf(Node& node, TreePath)
    \n+
    101 {
    \n+
    102 node.setTreeIndex(treeIndex_);
    \n+
    103 ++treeIndex_;
    \n+
    104 }
    \n+
    105
    \n+
    106 InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :
    \n+
    107 treeIndex_(treeIndexOffset)
    \n+
    108 {}
    \n+
    109
    \n+
    110 std::size_t treeIndex_;
    \n+
    111 };
    \n+
    112
    \n+
    113 } // end namespace Impl
    \n+
    114
    \n+
    115
    \n+
    \n+\n+
    117 {
    \n+
    118
    \n+
    119 friend struct Impl::ClearSizeVisitor;
    \n+
    120
    \n+
    121 template<typename>
    \n+
    122 friend struct Impl::BindVisitor;
    \n+
    123
    \n+
    124 friend struct Impl::InitializeTreeVisitor;
    \n+
    125
    \n+
    126 public:
    \n+
    127
    \n+
    128 using size_type = std::size_t;
    \n+
    129
    \n
    \n-
    130 It indices(const Node& node, It it) const
    \n-
    131 {
    \n-
    132 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n-
    133 {
    \n-
    134 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    135 const auto& gridIndexSet = gridView().indexSet();
    \n-
    136 const auto& element = node.element();
    \n-
    137
    \n-
    138 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity(),1)) }};
    \n-
    139 }
    \n-
    140 return it;
    \n-
    141 }
    \n-
    \n-
    142
    \n-
    143protected:
    \n-\n-
    145};
    \n+\n+
    131 offset_(0),
    \n+
    132 size_(0),
    \n+
    133 treeIndex_(0)
    \n+
    134 {}
    \n+
    \n+
    135
    \n+
    \n+\n+
    137 {
    \n+
    138 assert(i < size_);
    \n+
    139 return offset_ + i;
    \n+
    140 }
    \n+
    \n+
    141
    \n+
    \n+\n+
    143 {
    \n+
    144 return size_;
    \n+
    145 }
    \n
    \n
    146
    \n-
    147
    \n-
    148
    \n-
    149template<typename GV>
    \n-
    \n-\n-
    151 public LeafBasisNode
    \n-
    152{
    \n-
    153 static const int dim = GV::dimension;
    \n-
    154 static const int maxSize = 2*dim;
    \n-
    155
    \n-
    156 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n-
    157
    \n-
    158 using CubeFiniteElement = RannacherTurekLocalFiniteElement<typename GV::ctype,double,dim>;
    \n-
    159 using SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement<typename GV::ctype,double,dim>;
    \n-
    160
    \n-
    161 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n-
    162 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n+
    \n+\n+
    148 {
    \n+
    149 return treeIndex_;
    \n+
    150 }
    \n+
    \n+
    151
    \n+
    152 protected:
    \n+
    153
    \n+
    \n+\n+
    155 {
    \n+
    156 return offset_;
    \n+
    157 }
    \n+
    \n+
    158
    \n+
    \n+\n+
    160 {
    \n+
    161 offset_ = offset;
    \n+
    162 }
    \n+
    \n
    163
    \n-
    164public:
    \n-
    165
    \n-
    166 using size_type = std::size_t;
    \n-
    167 using Element = typename GV::template Codim<0>::Entity;
    \n-
    168 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n-
    169 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n-
    170 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n-
    171
    \n-
    \n-\n-\n-
    174 element_(nullptr)
    \n-
    175 {}
    \n-
    \n-
    176
    \n-
    \n-
    178 const Element& element() const
    \n-
    179 {
    \n-
    180 return *element_;
    \n-
    181 }
    \n+
    \n+\n+
    165 {
    \n+
    166 size_ = size;
    \n+
    167 }
    \n+
    \n+
    168
    \n+
    \n+\n+
    170 {
    \n+
    171 treeIndex_ = treeIndex;
    \n+
    172 }
    \n+
    \n+
    173
    \n+
    174 private:
    \n+
    175
    \n+
    176 size_type offset_;
    \n+
    177 size_type size_;
    \n+
    178 size_type treeIndex_;
    \n+
    179
    \n+
    180 };
    \n
    \n+
    181
    \n
    182
    \n-
    \n-\n-
    188 {
    \n-
    189 return finiteElement_;
    \n-
    190 }
    \n-
    \n-
    191
    \n-
    \n-
    193 void bind(const Element& e)
    \n-
    194 {
    \n-
    195 element_ = &e;
    \n-
    196 if constexpr (!hasFixedElementType)
    \n-
    197 finiteElement_ = e.type().isCube() ? static_cast<FiniteElement>(CubeFiniteElement())
    \n-
    198 : static_cast<FiniteElement>(SimplexFiniteElement()) ;
    \n-
    199 this->setSize(finiteElement_.size());
    \n-
    200 }
    \n-
    \n-
    201
    \n-
    202protected:
    \n-
    203
    \n-\n-\n-
    206};
    \n-
    \n-
    207
    \n-
    208
    \n-
    209
    \n-
    210namespace BasisFactory {
    \n+
    \n+\n+
    184 public BasisNodeMixin,
    \n+
    185 public TypeTree::LeafNode
    \n+
    186 {};
    \n+
    \n+
    187
    \n+
    188
    \n+
    189 template<typename T, std::size_t n>
    \n+
    \n+\n+
    191 public BasisNodeMixin,
    \n+
    192 public TypeTree::PowerNode<T,n>
    \n+
    193 {
    \n+
    194
    \n+
    195 using Node = TypeTree::PowerNode<T,n>;
    \n+
    196
    \n+
    197 public:
    \n+
    198
    \n+
    199 using Element = typename T::Element;
    \n+
    200
    \n+
    201 PowerBasisNode() = default;
    \n+
    202
    \n+
    \n+
    203 PowerBasisNode(const typename Node::NodeStorage& children) :
    \n+
    204 Node(children)
    \n+
    205 {}
    \n+
    \n+
    206
    \n+
    \n+
    207 const Element& element() const
    \n+
    208 {
    \n+
    209 return this->child(Dune::Indices::_0).element();
    \n+
    210 }
    \n+
    \n
    211
    \n-
    217template<class Dummy=void>
    \n-
    \n-\n-
    219{
    \n-
    220 return [](const auto& gridView) {
    \n-
    221 return RannacherTurekPreBasis<std::decay_t<decltype(gridView)>>(gridView);
    \n-
    222 };
    \n-
    223}
    \n+
    212 };
    \n
    \n+
    213
    \n+
    214
    \n+
    215 template<typename... T>
    \n+
    \n+\n+
    217 public BasisNodeMixin,
    \n+
    218 public TypeTree::CompositeNode<T...>
    \n+
    219 {
    \n+
    220
    \n+
    221 using Node = TypeTree::CompositeNode<T...>;
    \n+
    222
    \n+
    223 public:
    \n
    224
    \n-
    225} // end namespace BasisFactory
    \n+
    225 using Element = typename Node::template Child<0>::Type::Element;
    \n
    226
    \n-
    227
    \n+\n
    228
    \n-
    229
    \n-
    241template<typename GV>
    \n-\n-
    243
    \n-
    244} // end namespace Functions
    \n-
    245} // end namespace Dune
    \n-
    246
    \n-
    247#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH
    \n-\n-\n-
    auto rannacherTurek()
    Create a pre-basis factory that can create a Rannacher-Turek pre-basis.
    Definition rannacherturekbasis.hh:218
    \n+
    \n+
    229 CompositeBasisNode(const typename Node::NodeStorage& children) :
    \n+
    230 Node(children)
    \n+
    231 {}
    \n+
    \n+
    232
    \n+
    233 template<typename... Children>
    \n+
    \n+
    234 CompositeBasisNode(const std::shared_ptr<Children>&... children) :
    \n+
    235 Node(children...)
    \n+
    236 {}
    \n+
    \n+
    237
    \n+
    \n+
    238 const Element& element() const
    \n+
    239 {
    \n+
    240 return this->child(Dune::Indices::_0).element();
    \n+
    241 }
    \n+
    \n+
    242
    \n+
    243 };
    \n+
    \n+
    244
    \n+
    245
    \n+
    246 template<typename Tree>
    \n+
    \n+
    247 void clearSize(Tree& tree, std::size_t offset)
    \n+
    248 {
    \n+
    249 TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));
    \n+
    250 }
    \n+
    \n+
    251
    \n+
    252 template<typename Tree, typename Entity>
    \n+
    \n+
    253 void bindTree(Tree& tree, const Entity& entity, std::size_t offset = 0)
    \n+
    254 {
    \n+
    255 Impl::BindVisitor<Entity> visitor(entity,offset);
    \n+
    256 TypeTree::applyToTree(tree,visitor);
    \n+
    257 }
    \n+
    \n+
    258
    \n+
    259 template<typename Tree>
    \n+
    \n+
    260 void initializeTree(Tree& tree, std::size_t treeIndexOffset = 0)
    \n+
    261 {
    \n+
    262 Impl::InitializeTreeVisitor visitor(treeIndexOffset);
    \n+
    263 TypeTree::applyToTree(tree,visitor);
    \n+
    264 }
    \n+
    \n+
    265
    \n+
    266
    \n+
    267 } // namespace Functions
    \n+
    268
    \n+
    269} // namespace Dune
    \n+
    270
    \n+
    271#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH
    \n
    Definition polynomial.hh:10
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n+
    void clearSize(Tree &tree, std::size_t offset)
    Definition nodes.hh:247
    \n+
    void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)
    Definition nodes.hh:253
    \n+
    void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)
    Definition nodes.hh:260
    \n+
    Definition nodes.hh:117
    \n+
    size_type treeIndex() const
    Definition nodes.hh:147
    \n+
    size_type localIndex(size_type i) const
    Definition nodes.hh:136
    \n+
    size_type offset() const
    Definition nodes.hh:154
    \n
    size_type size() const
    Definition nodes.hh:142
    \n+
    void setOffset(const size_type offset)
    Definition nodes.hh:159
    \n+
    std::size_t size_type
    Definition nodes.hh:128
    \n+
    BasisNodeMixin()
    Definition nodes.hh:130
    \n
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n+
    void setTreeIndex(size_type treeIndex)
    Definition nodes.hh:169
    \n
    Definition nodes.hh:186
    \n-
    Definition rannacherturekbasis.hh:152
    \n-
    std::conditional_t< hasFixedElementType, std::conditional_t< type.isCube(), CubeFiniteElement, SimplexFiniteElement >, LocalFiniteElementVariant< CubeFiniteElement, SimplexFiniteElement > > FiniteElement
    Definition rannacherturekbasis.hh:170
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition rannacherturekbasis.hh:193
    \n-
    FiniteElement finiteElement_
    Definition rannacherturekbasis.hh:204
    \n-
    std::size_t size_type
    Definition rannacherturekbasis.hh:166
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition rannacherturekbasis.hh:167
    \n-
    RannacherTurekNode()
    Definition rannacherturekbasis.hh:172
    \n-
    const Element * element_
    Definition rannacherturekbasis.hh:205
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition rannacherturekbasis.hh:187
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition rannacherturekbasis.hh:178
    \n-
    Pre-basis for a Rannacher-Turek basis.
    Definition rannacherturekbasis.hh:52
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition rannacherturekbasis.hh:68
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition rannacherturekbasis.hh:80
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition rannacherturekbasis.hh:66
    \n-
    static constexpr size_type minMultiIndexSize
    Definition rannacherturekbasis.hh:67
    \n-
    size_type size(const SizePrefix prefix) const
    Return number of possible values for next position in multi index.
    Definition rannacherturekbasis.hh:111
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition rannacherturekbasis.hh:61
    \n-
    Node makeNode() const
    Create tree node.
    Definition rannacherturekbasis.hh:98
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition rannacherturekbasis.hh:90
    \n-
    It indices(const Node &node, It it) const
    Definition rannacherturekbasis.hh:130
    \n-
    GV GridView
    The grid view that the FE basis is defined on.
    Definition rannacherturekbasis.hh:58
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition rannacherturekbasis.hh:118
    \n-
    RannacherTurekPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition rannacherturekbasis.hh:71
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition rannacherturekbasis.hh:104
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition rannacherturekbasis.hh:84
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition rannacherturekbasis.hh:124
    \n-
    GridView gridView_
    Definition rannacherturekbasis.hh:144
    \n+
    Definition nodes.hh:193
    \n+
    const Element & element() const
    Definition nodes.hh:207
    \n+
    typename T::Element Element
    Definition nodes.hh:199
    \n+
    PowerBasisNode(const typename Node::NodeStorage &children)
    Definition nodes.hh:203
    \n+\n+\n+\n+
    CompositeBasisNode(const typename Node::NodeStorage &children)
    Definition nodes.hh:229
    \n+
    const Element & element() const
    Definition nodes.hh:238
    \n+
    typename Node::template Child< 0 >::Type::Element Element
    Definition nodes.hh:225
    \n+
    CompositeBasisNode(const std::shared_ptr< Children > &... children)
    Definition nodes.hh:234
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,338 +1,353 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n 5\n-6#include \n-7\n-8#include \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+6#include \n+7#include \n+8\n+9#include \n+10\n+11#include \n+12#include \n+13#include \n+14#include \n+15#include \n 16\n-17\n-18namespace _\bD_\bu_\bn_\be {\n-19namespace Functions {\n+17namespace _\bD_\bu_\bn_\be {\n+18 namespace Functions {\n+19\n 20\n-21/\n-/ *****************************************************************************\n-22// This is the reusable part of the basis. It contains\n-23//\n-24// RannacherTurekPreBasis\n-25// RannacherTurekNode\n-26//\n-27// The pre-basis allows to create the others and is the owner of possible\n-shared\n-28// state. These components do _not_ depend on the global basis and local view\n-29// and can be used without a global basis.\n-30/\n-/ *****************************************************************************\n-31\n-32template\n-33class RannacherTurekNode;\n-34\n-35template\n-36class RannacherTurekPreBasis;\n-37\n-50template\n-_\b5_\b1class _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-52{\n-53 static const int dim = GV::dimension;\n-54\n-55public:\n+21 namespace Impl {\n+22\n+23\n+24 struct ClearSizeVisitor\n+25 : public TypeTree::TreeVisitor\n+26 , public TypeTree::DynamicTraversal\n+27 {\n+28\n+29 template\n+30 void pre(Node& node, TreePath treePath)\n+31 {\n+32 leaf(node,treePath);\n+33 node.setSize(0);\n+34 }\n+35\n+36 template\n+37 void leaf(Node& node, TreePath treePath)\n+38 {\n+39 node.setOffset(offset_);\n+40 }\n+41\n+42 ClearSizeVisitor(std::size_t offset)\n+43 : offset_(offset)\n+44 {}\n+45\n+46 const std::size_t offset_;\n+47\n+48 };\n+49\n+50\n+51 template\n+52 struct BindVisitor\n+53 : public TypeTree::TreeVisitor\n+54 , public TypeTree::DynamicTraversal\n+55 {\n 56\n-_\b5_\b8 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-59\n-_\b6_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+57 template\n+58 void pre(Node& node, TreePath)\n+59 {\n+60 node.setOffset(offset_);\n+61 }\n 62\n-_\b6_\b4 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-65\n-_\b6_\b6 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-_\b6_\b7 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-_\b6_\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-69\n-_\b7_\b1 _\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-72 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv)\n-73 {\n-74 for(auto type : gv.indexSet().types(0))\n-75 if (!type.isSimplex() && !type.isCube())\n-76 DUNE_THROW(Dune::NotImplemented, \"Rannacher-Turek or Crouzeix-Raviart\n-elements are only implemented for grids with simplex or cube elements.\");\n-77 }\n-78\n-_\b8_\b0 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-81 {}\n-82\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 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-87 }\n-88\n-_\b9_\b0 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+63 template\n+64 void post(Node& node, TreePath)\n+65 {\n+66 node.setSize(offset_ - node.offset());\n+67 }\n+68\n+69 template\n+70 void leaf(Node& node, TreePath)\n+71 {\n+72 node.setOffset(offset_);\n+73 node.bind(entity_);\n+74 offset_ += node.size();\n+75 }\n+76\n+77 BindVisitor(const Entity& entity, std::size_t offset = 0)\n+78 : entity_(entity)\n+79 , offset_(offset)\n+80 {}\n+81\n+82 const Entity& entity_;\n+83 std::size_t offset_;\n+84\n+85 };\n+86\n+87\n+88 struct InitializeTreeVisitor :\n+89 public TypeTree::TreeVisitor,\n+90 public TypeTree::DynamicTraversal\n 91 {\n-92 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-93 }\n-94\n-_\b9_\b8 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-99 {\n-100 return _\bN_\bo_\bd_\be{};\n-101 }\n-102\n-_\b1_\b0_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-105 {\n-106 return (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(1));\n-107 }\n-108\n-110 template\n-_\b1_\b1_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix prefix) const\n-112 {\n-113 assert(prefix.size() == 0 || prefix.size() == 1);\n-114 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n-115 }\n-116\n-_\b1_\b1_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-119 {\n-120 return _\bs_\bi_\bz_\be();\n-121 }\n-122\n-_\b1_\b2_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-125 {\n-126 return 2*GV::dimension;\n-127 }\n-128\n-129 template\n-_\b1_\b3_\b0 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-131 {\n-132 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0, end = node._\bs_\bi_\bz_\be() ; i < end ; ++i, ++it)\n-133 {\n-134 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n-(i);\n-135 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-136 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-137\n-138 *it = {{ (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(gridIndexSet.subIndex(element,localKey.subEntity(),1))\n-}};\n-139 }\n-140 return it;\n-141 }\n-142\n-143protected:\n-_\b1_\b4_\b4 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-145};\n+92 template\n+93 void pre(Node& node, TreePath)\n+94 {\n+95 node.setTreeIndex(treeIndex_);\n+96 ++treeIndex_;\n+97 }\n+98\n+99 template\n+100 void leaf(Node& node, TreePath)\n+101 {\n+102 node.setTreeIndex(treeIndex_);\n+103 ++treeIndex_;\n+104 }\n+105\n+106 InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :\n+107 treeIndex_(treeIndexOffset)\n+108 {}\n+109\n+110 std::size_t treeIndex_;\n+111 };\n+112\n+113 } // end namespace Impl\n+114\n+115\n+_\b1_\b1_\b6 class _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n+117 {\n+118\n+119 friend struct Impl::ClearSizeVisitor;\n+120\n+121 template\n+122 friend struct Impl::BindVisitor;\n+123\n+124 friend struct Impl::InitializeTreeVisitor;\n+125\n+126 public:\n+127\n+_\b1_\b2_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+129\n+_\b1_\b3_\b0 _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn() :\n+131 offset_(0),\n+132 size_(0),\n+133 treeIndex_(0)\n+134 {}\n+135\n+_\b1_\b3_\b6 _\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+137 {\n+138 assert(i < size_);\n+139 return offset_ + i;\n+140 }\n+141\n+_\b1_\b4_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+143 {\n+144 return size_;\n+145 }\n 146\n-147\n-148\n-149template\n-_\b1_\b5_\b0class _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be :\n-151 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-152{\n-153 static const int dim = GV::dimension;\n-154 static const int maxSize = 2*dim;\n-155\n-156 constexpr static bool hasFixedElementType = Capabilities::\n-hasSingleGeometryType::v;\n-157\n-158 using CubeFiniteElement = RannacherTurekLocalFiniteElement;\n-159 using SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement;\n-160\n-161 constexpr static unsigned int topologyId = Capabilities::\n-hasSingleGeometryType::topologyId; // meaningless if\n-hasFixedElementType is false\n-162 constexpr static GeometryType type = GeometryType(topologyId, GV::\n-dimension);\n+_\b1_\b4_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx() const\n+148 {\n+149 return treeIndex_;\n+150 }\n+151\n+152 protected:\n+153\n+_\b1_\b5_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bo_\bf_\bf_\bs_\be_\bt() const\n+155 {\n+156 return offset_;\n+157 }\n+158\n+_\b1_\b5_\b9 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+160 {\n+161 offset_ = _\bo_\bf_\bf_\bs_\be_\bt;\n+162 }\n 163\n-164public:\n-165\n-_\b1_\b6_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b1_\b6_\b7 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b1_\b6_\b8 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = std::conditional_t,\n-170 LocalFiniteElementVariant >;\n-171\n-_\b1_\b7_\b2 _\bR_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk_\bN_\bo_\bd_\be() :\n-173 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(),\n-174 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n-175 {}\n-176\n-_\b1_\b7_\b8 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-179 {\n-180 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-181 }\n+_\b1_\b6_\b4 void _\bs_\be_\bt_\bS_\bi_\bz_\be(const _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be)\n+165 {\n+166 size_ = _\bs_\bi_\bz_\be;\n+167 }\n+168\n+_\b1_\b6_\b9 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+170 {\n+171 treeIndex_ = _\bt_\br_\be_\be_\bI_\bn_\bd_\be_\bx;\n+172 }\n+173\n+174 private:\n+175\n+176 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be offset_;\n+177 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be size_;\n+178 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be treeIndex_;\n+179\n+180 };\n+181\n 182\n-_\b1_\b8_\b7 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-188 {\n-189 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-190 }\n-191\n-_\b1_\b9_\b3 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-194 {\n-195 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-196 if constexpr (!hasFixedElementType)\n-197 _\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-198 : static_cast<_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt>(SimplexFiniteElement()) ;\n-199 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n-200 }\n-201\n-202protected:\n-203\n-_\b2_\b0_\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-_\b2_\b0_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-206};\n-207\n-208\n-209\n-210namespace BasisFactory {\n+_\b1_\b8_\b3 class _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n+184 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n+185 public TypeTree::LeafNode\n+186 {};\n+187\n+188\n+189 template\n+_\b1_\b9_\b0 class _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n+191 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n+192 public TypeTree::PowerNode\n+193 {\n+194\n+195 using Node = TypeTree::PowerNode;\n+196\n+197 public:\n+198\n+_\b1_\b9_\b9 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename T::Element;\n+200\n+_\b2_\b0_\b1 _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be() = default;\n+202\n+_\b2_\b0_\b3 _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be(const typename Node::NodeStorage& children) :\n+204 Node(children)\n+205 {}\n+206\n+_\b2_\b0_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+208 {\n+209 return this->child(Dune::Indices::_0).element();\n+210 }\n 211\n-217template\n-_\b2_\b1_\b8auto _\br_\ba_\bn_\bn_\ba_\bc_\bh_\be_\br_\bT_\bu_\br_\be_\bk()\n-219{\n-220 return [](const auto& gridView) {\n-221 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-222 };\n-223}\n+212 };\n+213\n+214\n+215 template\n+_\b2_\b1_\b6 class _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be :\n+217 public _\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn,\n+218 public TypeTree::CompositeNode\n+219 {\n+220\n+221 using Node = TypeTree::CompositeNode;\n+222\n+223 public:\n 224\n-225} // end namespace BasisFactory\n+_\b2_\b2_\b5 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename Node::template Child<0>::Type::Element;\n 226\n-227\n+_\b2_\b2_\b7 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be() = default;\n 228\n-229\n-241template\n-_\b2_\b4_\b2using _\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-243\n-244} // end namespace Functions\n-245} // end namespace Dune\n-246\n-247#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:218\n+_\b2_\b2_\b9 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be(const typename Node::NodeStorage& children) :\n+230 Node(children)\n+231 {}\n+232\n+233 template\n+_\b2_\b3_\b4 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be(const std::shared_ptr&... children) :\n+235 Node(children...)\n+236 {}\n+237\n+_\b2_\b3_\b8 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n+239 {\n+240 return this->child(Dune::Indices::_0).element();\n+241 }\n+242\n+243 };\n+244\n+245\n+246 template\n+_\b2_\b4_\b7 void _\bc_\bl_\be_\ba_\br_\bS_\bi_\bz_\be(Tree& tree, std::size_t offset)\n+248 {\n+249 TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));\n+250 }\n+251\n+252 template\n+_\b2_\b5_\b3 void _\bb_\bi_\bn_\bd_\bT_\br_\be_\be(Tree& tree, const Entity& entity, std::size_t offset = 0)\n+254 {\n+255 Impl::BindVisitor visitor(entity,offset);\n+256 TypeTree::applyToTree(tree,visitor);\n+257 }\n+258\n+259 template\n+_\b2_\b6_\b0 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be(Tree& tree, std::size_t treeIndexOffset = 0)\n+261 {\n+262 Impl::InitializeTreeVisitor visitor(treeIndexOffset);\n+263 TypeTree::applyToTree(tree,visitor);\n+264 }\n+265\n+266\n+267 } // namespace Functions\n+268\n+269} // namespace Dune\n+270\n+271#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n-_\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:46\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:247\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:253\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:260\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:117\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: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:_\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:136\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:154\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:142\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: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_\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:128\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:130\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: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_\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: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:186\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:152\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:170\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: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_\b_\n-FiniteElement finiteElement_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:204\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: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_\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:167\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:172\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:205\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:187\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+_\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:193\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, throw if unbound.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn rannacherturekbasis.hh:178\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:52\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_\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 rannacherturekbasis.hh:68\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:80\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_\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 rannacherturekbasis.hh:66\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_\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 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:_\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 rannacherturekbasis.hh:111\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:61\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:98\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:90\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:130\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: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:_\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 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:_\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:71\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\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 rannacherturekbasis.hh:104\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:84\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:124\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:144\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nodes.hh:207\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:199\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:203\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:_\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:219\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:229\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:238\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: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_\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:234\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: hierarchicallagrangebasis.hh File Reference\n+dune-functions: defaultnodetorangemap.hh File Reference\n \n \n \n \n \n \n \n@@ -72,57 +72,48 @@\n
  • dune
  • functions
  • functionspacebases
  • \n
    \n
    \n
    \n \n-
    hierarchicallagrangebasis.hh File Reference
    \n+
    defaultnodetorangemap.hh File Reference
    \n
    \n
    \n-
    #include <dune/common/exceptions.hh>
    \n-#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n-#include <dune/grid/common/mcmgmapper.hh>
    \n+
    #include <dune/common/concept.hh>
    \n+#include <dune/functions/functionspacebases/concepts.hh>
    \n+#include <dune/typetree/traversal.hh>
    \n+#include <dune/typetree/visitor.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::HierarchicalLagrangePreBasis< GV, k, R >
     A pre-basis for a hierarchical basis. More...
    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >
     A simple node to range map using lexicographic ordering. More...
     
    class  Dune::Functions::HierarchicalLagrangeNode< GV, k, R >
    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor
     
    \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 Functions

    template<std::size_t k, typename R = double>
    auto Dune::Functions::BasisFactory::hierarchicalLagrange ()
     Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.
     
    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": "@@ -1,42 +1,38 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-hierarchicallagrangebasis.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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 \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+defaultnodetorangemap.hh File Reference\n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include \n+#include \n _\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 _\bk_\b,_\b _\bR_\b _\b>\n-\u00a0 A pre-basis for a hierarchical basis. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\b _\bT_\br_\be_\be_\b _\b>\n+\u00a0 A simple node to range map using lexicographic ordering. _\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_\bN_\bo_\bd_\be_\b<_\b _\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp_\b<_\b _\bT_\br_\be_\be_\b _\b>_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bo_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k, R > >\n-\u00a0 Basis of a scalar Hierarchical Lagrange finite element space.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be ()\n-\u00a0 Create a pre-basis factory that can create a HierarchicalLagrange pre-\n- basis.\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/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: hierarchicallagrangebasis.hh Source File\n+dune-functions: defaultnodetorangemap.hh Source File\n \n \n \n \n \n \n \n@@ -74,303 +74,145 @@\n \n \n
    \n
    \n-
    hierarchicallagrangebasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n
    5
    \n-
    6#include <dune/common/exceptions.hh>
    \n-
    7#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>
    \n+
    6
    \n+
    7#include <dune/common/concept.hh>
    \n
    8
    \n-\n-\n-
    11#include <dune/grid/common/mcmgmapper.hh>
    \n-
    12
    \n-
    13namespace Dune {
    \n-
    14 namespace Functions {
    \n-
    15
    \n-
    16 // *****************************************************************************
    \n-
    17 // Implementation for Hierarchical Lagrange Basis
    \n-
    18 //
    \n-
    19 // -- only order k=2 is implemented up to now --
    \n-
    20 // -- currently only supports simplex grids --
    \n-
    21 //
    \n-
    22 // This is the reusable part of the HierarchicalLagrangeBasis. It contains
    \n-
    23 //
    \n-
    24 // HierarchicalLagrangePreBasis
    \n-
    25 // HierarchicalLagrangeNode
    \n-
    26 //
    \n-
    27 // The pre-basis allows to create the others and is the owner of possible shared
    \n-
    28 // state. These components do _not_ depend on the global basis and can be
    \n-
    29 // used without a global basis.
    \n-
    30 // *****************************************************************************
    \n-
    31
    \n-
    32 template<typename GV, int k, typename R=double>
    \n-
    33 class HierarchicalLagrangeNode;
    \n-
    34
    \n-
    35 template<typename GV, int k, typename R=double>
    \n-
    36 class HierarchicalLagrangePreBasis;
    \n-
    37
    \n-
    47 template<typename GV, int k, typename R>
    \n-
    \n-\n-
    49 {
    \n-
    50 static const int dim = GV::dimension;
    \n-
    51
    \n-
    52 public:
    \n-
    53
    \n-
    55 using GridView = GV;
    \n-
    56
    \n-
    58 using size_type = std::size_t;
    \n-
    59
    \n-\n-
    62
    \n-
    63 static constexpr size_type maxMultiIndexSize = 1;
    \n-
    64 static constexpr size_type minMultiIndexSize = 1;
    \n-
    65 static constexpr size_type multiIndexBufferSize = 1;
    \n-
    66
    \n-
    \n-\n-
    72 {}
    \n-
    \n-
    73
    \n-
    \n-\n-
    76 {}
    \n-
    \n-
    77
    \n-
    \n-
    79 const GridView& gridView() const
    \n-
    80 {
    \n-
    81 return gridView_;
    \n-
    82 }
    \n-
    \n-
    83
    \n+\n+
    10
    \n+
    11#include <dune/typetree/traversal.hh>
    \n+
    12#include <dune/typetree/visitor.hh>
    \n+
    13
    \n+
    14
    \n+
    15namespace Dune {
    \n+
    16namespace Functions {
    \n+
    17
    \n+
    18
    \n+
    19
    \n+
    37template<class Tree>
    \n+
    \n+\n+
    39{
    \n+
    40
    \n+
    41 // A simple visitor for computing lexicographic
    \n+
    42 // subtree indices. To identify a leaf node
    \n+
    43 // we use its treeIndex() which is unique
    \n+
    44 // wrt the whole tree and store the computed
    \n+
    45 // index in a vector indexed by the tree indices.
    \n+
    \n+
    46 struct Visitor
    \n+
    47 : public TypeTree::TreeVisitor
    \n+
    48 , public TypeTree::DynamicTraversal
    \n+
    49 {
    \n+
    \n+
    50 Visitor(std::vector<std::size_t>& indices) :
    \n+
    51 indices_(indices),
    \n+
    52 counter_(0)
    \n+
    53 {}
    \n+
    \n+
    54
    \n+
    55 template<typename Node, typename TreePath>
    \n+
    \n+
    56 void leaf(Node& node, TreePath treePath)
    \n+
    57 {
    \n+
    58 if (indices_.size() < node.treeIndex()+1)
    \n+
    59 indices_.resize(node.treeIndex()+1);
    \n+
    60 indices_[node.treeIndex()] = counter_;
    \n+
    61 ++counter_;
    \n+
    62 }
    \n+
    \n+
    63
    \n+
    64 std::vector<std::size_t>& indices_;
    \n+
    65 std::size_t counter_;
    \n+
    66 };
    \n+
    \n+
    67
    \n+
    \n+
    78 DefaultNodeToRangeMap(const Tree& tree)
    \n+
    79 {
    \n+
    80 TypeTree::applyToTree(tree, Visitor(indices_));
    \n+
    81 }
    \n+
    \n+
    82
    \n+
    83 template<class Node, class TreePath, class Range,
    \n+
    84 std::enable_if_t<models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() and not Tree::isLeaf, int> = 0>
    \n
    \n-
    85 void update (const GridView& gv)
    \n-
    86 {
    \n-
    87 gridView_ = gv;
    \n-
    88 mcmgMapper_.update(gv);
    \n-
    89 }
    \n-
    \n-
    90
    \n-
    \n-
    94 Node makeNode() const
    \n-
    95 {
    \n-
    96 return Node{};
    \n-
    97 }
    \n-
    \n-
    98
    \n-
    \n-\n-
    101 {
    \n-
    102 return mcmgMapper_.size();
    \n-
    103 }
    \n-
    \n-
    104
    \n-
    106 template<class SizePrefix>
    \n-
    \n-
    107 size_type size(const SizePrefix prefix) const
    \n-
    108 {
    \n-
    109 assert(prefix.size() == 0 || prefix.size() == 1);
    \n-
    110 return (prefix.size() == 0) ? size() : 0;
    \n-
    111 }
    \n-
    \n-
    112
    \n-
    \n-\n-
    115 {
    \n-
    116 return size();
    \n-
    117 }
    \n-
    \n-
    118
    \n-
    \n-\n-
    124 {
    \n-
    125 // That cast to unsigned int is necessary because GV::dimension is an enum
    \n-
    126 return Dune::binomial(std::size_t(order() + (unsigned int)GV::dimension),std::size_t(order()));
    \n-
    127 }
    \n-
    \n-
    128
    \n-
    129 template<typename It>
    \n-
    \n-
    130 It indices(const Node& node, It it) const
    \n-
    131 {
    \n-
    132 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it, ++i)
    \n-
    133 {
    \n-
    134 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    135 const auto& element = node.element();
    \n-
    136
    \n-
    137 *it = {{ (size_type)(mcmgMapper_.subIndex(element,localKey.subEntity(),localKey.codim())) }};
    \n-
    138 }
    \n-
    139 return it;
    \n-
    140 }
    \n-
    \n-
    141
    \n-
    142 protected:
    \n-\n-
    144
    \n-
    \n-
    145 unsigned int order() const
    \n-
    146 {
    \n-
    147 return 2;
    \n-
    148 }
    \n-
    \n-
    149
    \n-
    150 MultipleCodimMultipleGeomTypeMapper<GridView> mcmgMapper_;
    \n-
    151
    \n-
    152 private:
    \n-
    157 static auto p2Layout()
    \n-
    158 {
    \n-
    159 return [](Dune::GeometryType type, int gridDim)
    \n-
    160 {
    \n-
    161 if (type.isVertex())
    \n-
    162 return 1;
    \n-
    163 if (type.isLine())
    \n-
    164 return 1;
    \n-
    165 if (type.isTriangle())
    \n-
    166 return 0;
    \n-
    167 assert(type.isTetrahedron());
    \n-
    168 return 0;
    \n-
    169 };
    \n-
    170 }
    \n-
    171 };
    \n-
    \n-
    172
    \n-
    173
    \n-
    174
    \n-
    175 template<typename GV, int k, typename R>
    \n-
    \n-\n-
    177 public LeafBasisNode
    \n-
    178 {
    \n-
    179 static const int dim = GV::dimension;
    \n-
    180
    \n-
    181 public:
    \n-
    182
    \n-
    183 using size_type = std::size_t;
    \n-
    184 using Element = typename GV::template Codim<0>::Entity;
    \n-
    185 using FiniteElement = HierarchicalP2LocalFiniteElement<typename GV::ctype,R,dim>;
    \n-
    186
    \n-
    \n-\n-\n-
    189 element_(nullptr)
    \n-
    190 {}
    \n-
    \n-
    191
    \n-
    \n-
    193 const Element& element() const
    \n-
    194 {
    \n-
    195 return *element_;
    \n-
    196 }
    \n-
    \n-
    197
    \n-
    \n-\n-
    203 {
    \n-
    204 return finiteElement_;
    \n-
    205 }
    \n-
    \n-
    206
    \n-
    \n-
    208 void bind(const Element& e)
    \n-
    209 {
    \n-
    210 element_ = &e;
    \n-
    211
    \n-
    212 if (e.type() != finiteElement_.type())
    \n-
    213 DUNE_THROW(Dune::Exception,
    \n-
    214 "HierarchicalLagrange-elements do not exist for elements of type " << e.type());
    \n-
    215
    \n-
    216 this->setSize(finiteElement_.size());
    \n-
    217 }
    \n-
    \n-
    218
    \n-
    219 protected:
    \n-
    220
    \n-
    \n-
    221 unsigned int order() const
    \n-
    222 {
    \n-
    223 return 2;
    \n-
    224 }
    \n-
    \n-
    225
    \n-\n-\n-
    228 };
    \n-
    \n-
    229
    \n-
    230
    \n-
    231
    \n-
    232 namespace BasisFactory {
    \n-
    233
    \n-
    242 template<std::size_t k, typename R=double>
    \n-
    \n-\n-
    244 {
    \n-
    245 return [](const auto& gridView) {
    \n-
    246 return HierarchicalLagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);
    \n-
    247 };
    \n-
    248 }
    \n-
    \n-
    249
    \n-
    250 } // end namespace BasisFactory
    \n-
    251
    \n-
    262 template<typename GV, int k, typename R=double>
    \n-\n-
    264
    \n-
    265 } // end namespace Functions
    \n-
    266} // end namespace Dune
    \n-
    267
    \n-
    268#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH
    \n-\n-\n-
    auto hierarchicalLagrange()
    Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.
    Definition hierarchicallagrangebasis.hh:243
    \n+
    85 decltype(auto) operator()(const Node& node, const TreePath& treePath, Range&& y) const
    \n+
    86 {
    \n+
    87 return y[indices_[node.treeIndex()]];
    \n+
    88 }
    \n+
    \n+
    89
    \n+
    90 template<class Node, class TreePath, class Range,
    \n+
    91 std::enable_if_t< not models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() or Tree::isLeaf, int> = 0>
    \n+
    \n+
    92 decltype(auto) operator()(const Node& node, const TreePath& treePath, Range&& y) const
    \n+
    93 {
    \n+
    94 return std::forward<Range>(y);
    \n+
    95 }
    \n+
    \n+
    96
    \n+
    97 std::vector<std::size_t> indices_;
    \n+
    98};
    \n+
    \n+
    99
    \n+
    100
    \n+
    101
    \n+
    102template<class Tree>
    \n+
    \n+\n+
    104{
    \n+
    105 return DefaultNodeToRangeMap<Tree>(tree);
    \n+
    106}
    \n+
    \n+
    107
    \n+
    108
    \n+
    109
    \n+
    110template<class Basis, class TreePath>
    \n+
    \n+
    111auto makeDefaultNodeToRangeMap(const Basis& basis, TreePath&& treePath)
    \n+
    112 -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView().tree(),treePath)))
    \n+
    113{
    \n+
    114 auto&& localView = basis.localView();
    \n+
    115 localView.bind(*basis.gridView().template begin<0>());
    \n+
    116 auto&& tree = TypeTree::child(localView.tree(),treePath);
    \n+
    117 return makeDefaultNodeToRangeMap(tree);
    \n+
    118}
    \n+
    \n+
    119
    \n+
    120
    \n+
    121
    \n+
    122} // namespace Dune::Functions
    \n+
    123} // namespace Dune
    \n+
    124
    \n+
    125
    \n+
    126#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n
    Definition polynomial.hh:10
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n-
    Definition hierarchicallagrangebasis.hh:178
    \n-
    HierarchicalP2LocalFiniteElement< typename GV::ctype, R, dim > FiniteElement
    Definition hierarchicallagrangebasis.hh:185
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition hierarchicallagrangebasis.hh:193
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition hierarchicallagrangebasis.hh:208
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition hierarchicallagrangebasis.hh:202
    \n-
    const Element * element_
    Definition hierarchicallagrangebasis.hh:227
    \n-
    const FiniteElement finiteElement_
    Definition hierarchicallagrangebasis.hh:226
    \n-
    unsigned int order() const
    Definition hierarchicallagrangebasis.hh:221
    \n-
    HierarchicalLagrangeNode()
    Definition hierarchicallagrangebasis.hh:187
    \n-
    std::size_t size_type
    Definition hierarchicallagrangebasis.hh:183
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition hierarchicallagrangebasis.hh:184
    \n-
    A pre-basis for a hierarchical basis.
    Definition hierarchicallagrangebasis.hh:49
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition hierarchicallagrangebasis.hh:58
    \n-
    unsigned int order() const
    Definition hierarchicallagrangebasis.hh:145
    \n-
    Node makeNode() const
    Create tree node.
    Definition hierarchicallagrangebasis.hh:94
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition hierarchicallagrangebasis.hh:123
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition hierarchicallagrangebasis.hh:65
    \n-
    void update(const GridView &gv)
    Update the stored grid view & MultipleCodimMultipleGeomTypeMapper, to be called if the grid has chang...
    Definition hierarchicallagrangebasis.hh:85
    \n-
    MultipleCodimMultipleGeomTypeMapper< GridView > mcmgMapper_
    Definition hierarchicallagrangebasis.hh:150
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition hierarchicallagrangebasis.hh:114
    \n-
    GV GridView
    The grid view that the FE basis is defined on.
    Definition hierarchicallagrangebasis.hh:55
    \n-
    HierarchicalLagrangePreBasis(const GridView &gv)
    Constructor for a given grid view object with layout for second order.
    Definition hierarchicallagrangebasis.hh:71
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition hierarchicallagrangebasis.hh:63
    \n-
    size_type size(const SizePrefix prefix) const
    Return number of possible values for next position in multi index.
    Definition hierarchicallagrangebasis.hh:107
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition hierarchicallagrangebasis.hh:79
    \n-
    GridView gridView_
    Definition hierarchicallagrangebasis.hh:143
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition hierarchicallagrangebasis.hh:100
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition hierarchicallagrangebasis.hh:75
    \n-
    It indices(const Node &node, It it) const
    Definition hierarchicallagrangebasis.hh:130
    \n-
    static constexpr size_type minMultiIndexSize
    Definition hierarchicallagrangebasis.hh:64
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n-
    Definition nodes.hh:186
    \n+
    DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)
    Definition defaultnodetorangemap.hh:103
    \n+
    A simple node to range map using lexicographic ordering.
    Definition defaultnodetorangemap.hh:39
    \n+
    std::vector< std::size_t > indices_
    Definition defaultnodetorangemap.hh:97
    \n+
    DefaultNodeToRangeMap(const Tree &tree)
    Construct DefaultNodeToRangeMap.
    Definition defaultnodetorangemap.hh:78
    \n+
    Definition defaultnodetorangemap.hh:49
    \n+
    Visitor(std::vector< std::size_t > &indices)
    Definition defaultnodetorangemap.hh:50
    \n+
    void leaf(Node &node, TreePath treePath)
    Definition defaultnodetorangemap.hh:56
    \n+
    std::size_t counter_
    Definition defaultnodetorangemap.hh:65
    \n+
    std::vector< std::size_t > & indices_
    Definition defaultnodetorangemap.hh:64
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,354 +1,145 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n 5\n-6#include \n-7#include \n+6\n+7#include \n 8\n-9#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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-11#include \n-12\n-13namespace _\bD_\bu_\bn_\be {\n-14 namespace Functions {\n-15\n-16 /\n-/ *****************************************************************************\n-17 // Implementation for Hierarchical Lagrange Basis\n-18 //\n-19 // -- only order k=2 is implemented up to now --\n-20 // -- currently only supports simplex grids --\n-21 //\n-22 // This is the reusable part of the HierarchicalLagrangeBasis. It contains\n-23 //\n-24 // HierarchicalLagrangePreBasis\n-25 // HierarchicalLagrangeNode\n-26 //\n-27 // The pre-basis allows to create the others and is the owner of possible\n-shared\n-28 // state. These components do _not_ depend on the global basis and can be\n-29 // used without a global basis.\n-30 /\n-/ *****************************************************************************\n-31\n-32 template\n-33 class HierarchicalLagrangeNode;\n-34\n-35 template\n-36 class HierarchicalLagrangePreBasis;\n-37\n-47 template\n-_\b4_\b8 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+9#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+10\n+11#include \n+12#include \n+13\n+14\n+15namespace _\bD_\bu_\bn_\be {\n+16namespace Functions {\n+17\n+18\n+19\n+37template\n+_\b3_\b8struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n+39{\n+40\n+41 // A simple visitor for computing lexicographic\n+42 // subtree indices. To identify a leaf node\n+43 // we use its treeIndex() which is unique\n+44 // wrt the whole tree and store the computed\n+45 // index in a vector indexed by the tree indices.\n+_\b4_\b6 struct _\bV_\bi_\bs_\bi_\bt_\bo_\br\n+47 : public TypeTree::TreeVisitor\n+48 , public TypeTree::DynamicTraversal\n 49 {\n-50 static const int dim = GV::dimension;\n-51\n-52 public:\n-53\n-_\b5_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-56\n-_\b5_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-59\n-_\b6_\b1 using _\bN_\bo_\bd_\be = _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be_\b<_\bG_\bV_\b,_\b _\bk_\b,_\b _\bR_\b>;\n-62\n-_\b6_\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 = 1;\n-_\b6_\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 = 1;\n-_\b6_\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 = 1;\n-66\n-_\b7_\b1 _\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 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv) : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv) ,\n-_\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_(gv,p2Layout())\n-72 {}\n-73\n-_\b7_\b5 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-76 {}\n-77\n-_\b7_\b9 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-80 {\n-81 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-82 }\n-83\n-_\b8_\b5 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+_\b5_\b0 _\bV_\bi_\bs_\bi_\bt_\bo_\br(std::vector& indices) :\n+51 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_(indices),\n+52 _\bc_\bo_\bu_\bn_\bt_\be_\br_\b_(0)\n+53 {}\n+54\n+55 template\n+_\b5_\b6 void _\bl_\be_\ba_\bf(Node& node, TreePath treePath)\n+57 {\n+58 if (_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.size() < node.treeIndex()+1)\n+59 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.resize(node.treeIndex()+1);\n+60 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_[node.treeIndex()] = _\bc_\bo_\bu_\bn_\bt_\be_\br_\b_;\n+61 ++_\bc_\bo_\bu_\bn_\bt_\be_\br_\b_;\n+62 }\n+63\n+_\b6_\b4 std::vector& _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n+_\b6_\b5 std::size_t _\bc_\bo_\bu_\bn_\bt_\be_\br_\b_;\n+66 };\n+67\n+_\b7_\b8 _\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+79 {\n+80 TypeTree::applyToTree(tree, _\bV_\bi_\bs_\bi_\bt_\bo_\br(_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_));\n+81 }\n+82\n+83 template().treeIndex())>() and not Tree::isLeaf, int> = 0>\n+_\b8_\b5 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n+Range&& y) const\n 86 {\n-87 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-88 _\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_.update(gv);\n-89 }\n-90\n-_\b9_\b4 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-95 {\n-96 return _\bN_\bo_\bd_\be{};\n-97 }\n-98\n-_\b1_\b0_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-101 {\n-102 return _\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_.size();\n-103 }\n-104\n-106 template\n-_\b1_\b0_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix prefix) const\n-108 {\n-109 assert(prefix.size() == 0 || prefix.size() == 1);\n-110 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n-111 }\n-112\n-_\b1_\b1_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-115 {\n-116 return _\bs_\bi_\bz_\be();\n-117 }\n-118\n-_\b1_\b2_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-124 {\n-125 // That cast to unsigned int is necessary because GV::dimension is an enum\n-126 return Dune::binomial(std::size_t(_\bo_\br_\bd_\be_\br() + (unsigned int)GV::\n-dimension),std::size_t(_\bo_\br_\bd_\be_\br()));\n-127 }\n-128\n-129 template\n-_\b1_\b3_\b0 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-131 {\n-132 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-133 {\n-134 Dune::LocalKey localKey = node._\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt().localCoefficients().localKey\n-(i);\n-135 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-136\n-137 *it = {{ (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)(_\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_.subIndex(element,localKey.subEntity\n-(),localKey.codim())) }};\n-138 }\n-139 return it;\n-140 }\n-141\n-142 protected:\n-_\b1_\b4_\b3 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-144\n-_\b1_\b4_\b5 unsigned int _\bo_\br_\bd_\be_\br() const\n-146 {\n-147 return 2;\n-148 }\n-149\n-_\b1_\b5_\b0 MultipleCodimMultipleGeomTypeMapper _\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_;\n-151\n-152 private:\n-157 static auto p2Layout()\n-158 {\n-159 return [](Dune::GeometryType type, int gridDim)\n-160 {\n-161 if (type.isVertex())\n-162 return 1;\n-163 if (type.isLine())\n-164 return 1;\n-165 if (type.isTriangle())\n-166 return 0;\n-167 assert(type.isTetrahedron());\n-168 return 0;\n-169 };\n-170 }\n-171 };\n-172\n-173\n-174\n-175 template\n-_\b1_\b7_\b6 class _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be :\n-177 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-178 {\n-179 static const int dim = GV::dimension;\n-180\n-181 public:\n-182\n-_\b1_\b8_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b1_\b8_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b1_\b8_\b5 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = HierarchicalP2LocalFiniteElement;\n-186\n-_\b1_\b8_\b7 _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be() :\n-188 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_(),\n-189 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr)\n-190 {}\n-191\n-_\b1_\b9_\b3 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-194 {\n-195 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-196 }\n-197\n-_\b2_\b0_\b2 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-203 {\n-204 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-205 }\n-206\n-_\b2_\b0_\b8 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-209 {\n-210 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-211\n-212 if (e.type() != _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.type())\n-213 DUNE_THROW(Dune::Exception,\n-214 \"HierarchicalLagrange-elements do not exist for elements of type \" <<\n-e.type());\n-215\n-216 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n-217 }\n-218\n-219 protected:\n-220\n-_\b2_\b2_\b1 unsigned int _\bo_\br_\bd_\be_\br() const\n-222 {\n-223 return 2;\n-224 }\n-225\n-_\b2_\b2_\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-_\b2_\b2_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-228 };\n-229\n-230\n-231\n-232 namespace BasisFactory {\n-233\n-242 template\n-_\b2_\b4_\b3 auto _\bh_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be()\n-244 {\n-245 return [](const auto& gridView) {\n-246 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-247 };\n-248 }\n-249\n-250 } // end namespace BasisFactory\n-251\n-262 template\n-_\b2_\b6_\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-264\n-265 } // end namespace Functions\n-266} // end namespace Dune\n-267\n-268#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\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-Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:243\n+87 return y[_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_[node.treeIndex()]];\n+88 }\n+89\n+90 template().treeIndex())>() or Tree::isLeaf, int> = 0>\n+_\b9_\b2 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n+Range&& y) const\n+93 {\n+94 return std::forward(y);\n+95 }\n+96\n+_\b9_\b7 std::vector _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n+98};\n+99\n+100\n+101\n+102template\n+_\b1_\b0_\b3_\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+104{\n+105 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+106}\n+107\n+108\n+109\n+110template\n+_\b1_\b1_\b1auto _\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+112 -> 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+113{\n+114 auto&& localView = basis.localView();\n+115 localView.bind(*basis.gridView().template begin<0>());\n+116 auto&& tree = TypeTree::child(localView.tree(),treePath);\n+117 return _\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+118}\n+119\n+120\n+121\n+122} // namespace Dune::Functions\n+123} // namespace Dune\n+124\n+125\n+126#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n-_\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:46\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_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:178\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_\bN_\bo_\bd_\be_\b:_\b:_\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-HierarchicalP2LocalFiniteElement< typename GV::ctype, R, dim > FiniteElement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:185\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_\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 hierarchicallagrangebasis.hh:193\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_\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 hierarchicallagrangebasis.hh:208\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_\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 hierarchicallagrangebasis.hh:202\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_\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 hierarchicallagrangebasis.hh:227\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_\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 hierarchicallagrangebasis.hh:226\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_\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 hierarchicallagrangebasis.hh:221\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_\bN_\bo_\bd_\be_\b:_\b:_\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\bc_\ba_\bl_\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bN_\bo_\bd_\be\n-HierarchicalLagrangeNode()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:187\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_\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 hierarchicallagrangebasis.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_\ba_\bl_\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 hierarchicallagrangebasis.hh:184\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 basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:49\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:_\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 hierarchicallagrangebasis.hh:58\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:_\bo_\br_\bd_\be_\br\n-unsigned int order() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:145\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:_\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 hierarchicallagrangebasis.hh:94\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:_\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 hierarchicallagrangebasis.hh:123\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:_\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 hierarchicallagrangebasis.hh:65\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:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const GridView &gv)\n-Update the stored grid view & MultipleCodimMultipleGeomTypeMapper, to be called\n-if the grid has chang...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:85\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:_\bm_\bc_\bm_\bg_\bM_\ba_\bp_\bp_\be_\br_\b_\n-MultipleCodimMultipleGeomTypeMapper< GridView > mcmgMapper_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:150\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:_\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 hierarchicallagrangebasis.hh:114\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_\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 hierarchicallagrangebasis.hh:55\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:_\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 GridView &gv)\n-Constructor for a given grid view object with layout for second order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:71\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:_\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 hierarchicallagrangebasis.hh:63\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:_\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 hierarchicallagrangebasis.hh:107\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_\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 hierarchicallagrangebasis.hh:79\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_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_\n-GridView gridView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hierarchicallagrangebasis.hh:143\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:_\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 hierarchicallagrangebasis.hh:100\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:_\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 hierarchicallagrangebasis.hh:75\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:_\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 hierarchicallagrangebasis.hh:130\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:_\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 hierarchicallagrangebasis.hh:64\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:164\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:186\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:103\n+_\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: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_\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:97\n+_\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:78\n+_\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: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_\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: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_\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:56\n+_\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: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:_\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:64\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/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: compositebasis.hh File Reference\n+dune-functions: transformedindexbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,52 +71,72 @@\n \n \n \n
    \n \n-
    compositebasis.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    transformedindexbasis.hh File Reference
    \n \n
    \n
    #include <tuple>
    \n #include <utility>
    \n #include <dune/common/std/apply.hh>
    \n #include <dune/common/hybridutilities.hh>
    \n #include <dune/common/reservedvector.hh>
    \n #include <dune/common/typeutilities.hh>
    \n-#include <dune/common/tupleutility.hh>
    \n-#include <dune/common/tuplevector.hh>
    \n-#include <dune/functions/common/staticforloop.hh>
    \n-#include <dune/functions/common/type_traits.hh>
    \n-#include <dune/functions/common/utility.hh>
    \n-#include <dune/functions/functionspacebases/basistags.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/typetree/compositenode.hh>
    \n+#include <dune/typetree/utility.hh>
    \n+#include <dune/functions/common/staticforloop.hh>
    \n+#include <dune/functions/common/type_traits.hh>
    \n+#include <dune/functions/common/utility.hh>
    \n+#include <dune/functions/functionspacebases/basistags.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n #include <dune/functions/functionspacebases/concepts.hh>
    \n #include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::CompositePreBasis< IMS, SPB >
     A pre-basis for composite bases. More...
    class  Dune::Functions::Experimental::TransformedIndexPreBasis< RPB, T >
     A pre-basis transforming multi-indices. More...
     
    class  Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation< IndexTransformation, SizeImplementation, minIS, maxIS >
     A generic implementation of a transformation. More...
     
    \n \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::BasisBuilder
    namespace  Dune::Functions::BasisFactory::Experimental
     
    \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 , std::size_t minIndexSize, std::size_t maxIndexSize>
    auto Dune::Functions::BasisFactory::Experimental::indexTransformation (IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)
     A generic implementation of a transformation.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,40 +1,65 @@\n dune-functions\u00a02.9.0\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+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+transformedindexbasis.hh File Reference\n #include \n #include \n #include \n #include \n #include \n #include \n-#include \n-#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\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+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+ _\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_\bB_\bu_\bi_\bl_\bd_\be_\br\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, Dune::index_constant< minIndexSize >, Dune::\n+ index_constant< maxIndexSize >)\n+\u00a0 A generic implementation of a transformation.\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: compositebasis.hh Source File\n+dune-functions: transformedindexbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,447 +74,317 @@\n \n \n \n
    \n-
    compositebasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n
    5
    \n
    6#include <tuple>
    \n
    7#include <utility>
    \n
    8
    \n
    9#include <dune/common/std/apply.hh>
    \n
    10#include <dune/common/hybridutilities.hh>
    \n
    11#include <dune/common/reservedvector.hh>
    \n
    12#include <dune/common/typeutilities.hh>
    \n
    13#include <dune/common/hybridutilities.hh>
    \n-
    14#include <dune/common/tupleutility.hh>
    \n-
    15#include <dune/common/tuplevector.hh>
    \n-
    16
    \n-\n-\n-\n-\n-\n-\n-\n-
    24
    \n+
    14
    \n+
    15#include <dune/typetree/compositenode.hh>
    \n+
    16#include <dune/typetree/utility.hh>
    \n+
    17
    \n+\n+\n+\n+\n+\n+\n+\n
    25
    \n-
    26namespace Dune {
    \n-
    27namespace Functions {
    \n-
    28
    \n-
    29// *****************************************************************************
    \n-
    30// This is the reusable part of the composite bases. It contains
    \n-
    31//
    \n-
    32// CompositePreBasis
    \n-
    33//
    \n-
    34// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    35// state. These components do _not_ depend on the global basis and local view
    \n-
    36// and can be used without a global basis.
    \n-
    37// *****************************************************************************
    \n-
    38
    \n-
    39
    \n-
    51template<class IMS, class... SPB>
    \n-
    \n-\n-
    53{
    \n-
    54 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;
    \n-
    55public:
    \n+
    26
    \n+
    27namespace Dune {
    \n+
    28namespace Functions {
    \n+
    \n+
    29namespace Experimental {
    \n+
    30
    \n+
    31// *****************************************************************************
    \n+
    32// *****************************************************************************
    \n+
    33
    \n+
    50template<class RPB, class T>
    \n+
    \n+\n+
    52{
    \n+
    53 using Transformation = T;
    \n+
    54
    \n+\n
    56
    \n-
    58 using SubPreBases = std::tuple<SPB...>;
    \n-
    59
    \n-
    61 template<std::size_t i>
    \n-
    62 using SubPreBasis = std::tuple_element_t<i, SubPreBases>;
    \n+
    57public:
    \n+
    58
    \n+
    59 using RawPreBasis = RPB;
    \n+
    60
    \n+
    62 using GridView = typename RawPreBasis::GridView;
    \n
    63
    \n-
    65 using GridView = typename std::tuple_element_t<0, SubPreBases>::GridView;
    \n+
    65 using size_type = std::size_t;
    \n
    66
    \n-
    68 using size_type = std::size_t;
    \n+
    68 using Node = typename RawPreBasis::Node;
    \n
    69
    \n-\n-
    72
    \n-
    73protected:
    \n-
    74 static const std::size_t children = sizeof...(SPB);
    \n-
    75
    \n-
    76 using ChildIndices = std::make_index_sequence<children>;
    \n-
    77
    \n-
    78public:
    \n-
    79
    \n-
    81 using Node = CompositeBasisNode<typename SPB::Node...>;
    \n-
    82
    \n-
    83 static constexpr size_type maxMultiIndexSize = std::max({SPB::maxMultiIndexSize...}) + isBlocked;
    \n-
    84 static constexpr size_type minMultiIndexSize = std::min({SPB::minMultiIndexSize...}) + isBlocked;
    \n-
    85 static constexpr size_type multiIndexBufferSize = std::max({SPB::multiIndexBufferSize...}) + isBlocked;
    \n-
    86
    \n-
    92 template<class... SFArgs,
    \n-
    93 disableCopyMove<CompositePreBasis, SFArgs...> = 0,
    \n-
    94 enableIfConstructible<std::tuple<SPB...>, SFArgs...> = 0>
    \n-
    \n-
    95 CompositePreBasis(SFArgs&&... sfArgs) :
    \n-
    96 subPreBases_(std::forward<SFArgs>(sfArgs)...)
    \n-
    97 {
    \n-
    98 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){
    \n-
    99 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype(subPreBasis)>>(), "Subprebases passed to CompositePreBasis does not model the PreBasis concept.");
    \n-
    100 });
    \n+
    70 static constexpr size_type maxMultiIndexSize = Transformation::maxIndexSize;
    \n+
    71 static constexpr size_type minMultiIndexSize = Transformation::minIndexSize;
    \n+
    72 static constexpr size_type multiIndexBufferSize = std::max(RawPreBasis::multiIndexBufferSize, maxMultiIndexSize);
    \n+
    73
    \n+
    79 template<class RPB_R, class T_R>
    \n+
    \n+
    80 TransformedIndexPreBasis(RPB_R&& rawPreBasis, T_R&& transformation) :
    \n+
    81 rawPreBasis_(std::forward<RPB_R>(rawPreBasis)),
    \n+
    82 transformation_(std::forward<T_R>(transformation))
    \n+
    83 {}
    \n+
    \n+
    84
    \n+
    \n+\n+
    87 {
    \n+
    88 rawPreBasis_.initializeIndices();
    \n+
    89 }
    \n+
    \n+
    90
    \n+
    \n+
    92 const GridView& gridView() const
    \n+
    93 {
    \n+
    94 return rawPreBasis_.gridView();
    \n+
    95 }
    \n+
    \n+
    96
    \n+
    \n+
    98 void update(const GridView& gv)
    \n+
    99 {
    \n+
    100 rawPreBasis_.update(gv);
    \n
    101 }
    \n
    \n
    102
    \n-
    109 template<class GV,
    \n-
    110 std::enable_if_t<std::conjunction_v<
    \n-
    111 std::bool_constant<(children > 1)>, // Avoid ambiguous constructor if there's only one child
    \n-
    112 std::is_same<GV, GridView>,
    \n-
    113 std::is_constructible<SPB, GridView>...
    \n-
    114 >, int> = 0>
    \n-
    \n-
    115 CompositePreBasis(const GV& gv) :
    \n-
    116 subPreBases_(SPB(gv)...)
    \n-
    117 {
    \n-
    118 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){
    \n-
    119 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype(subPreBasis)>>(), "Subprebases passed to CompositePreBasis does not model the PreBasis concept.");
    \n-
    120 });
    \n-
    121 }
    \n-
    \n-
    122
    \n-
    \n-\n-
    125 {
    \n-
    126 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    127 this->subPreBasis(i).initializeIndices();
    \n-
    128 });
    \n+
    \n+\n+
    114 {
    \n+
    115 return rawPreBasis_.makeNode();
    \n+
    116 }
    \n+
    \n+
    117
    \n+
    \n+\n+
    120 {
    \n+
    121 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n+
    122 }
    \n+
    \n+
    123
    \n+
    125 template<class SizePrefix>
    \n+
    \n+
    126 size_type size(const SizePrefix& prefix) const
    \n+
    127 {
    \n+
    128 return transformation_.size(prefix, rawPreBasis_);
    \n
    129 }
    \n
    \n
    130
    \n
    \n-
    132 const GridView& gridView() const
    \n+\n
    133 {
    \n-
    134 return std::get<0>(subPreBases_).gridView();
    \n+
    134 return transformation_.dimension(rawPreBasis_);
    \n
    135 }
    \n
    \n
    136
    \n
    \n-
    138 void update(const GridView& gv)
    \n-
    139 {
    \n-
    140 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    141 this->subPreBasis(i).update(gv);
    \n-
    142 });
    \n-
    143 }
    \n+\n+
    139 {
    \n+
    140 return rawPreBasis_.maxNodeSize();
    \n+
    141 }
    \n+
    \n+
    142
    \n+
    \n+\n+
    144 {
    \n+
    145 return rawPreBasis_;
    \n+
    146 }
    \n
    \n-
    144
    \n+
    147
    \n
    \n-\n-
    149 {
    \n-
    150 auto node = Node{};
    \n-
    151 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    152 node.setChild(this->subPreBasis(i).makeNode(), i);
    \n-
    153 });
    \n-
    154 return node;
    \n-
    155 }
    \n-
    \n-
    156
    \n-
    \n-\n-
    159 {
    \n-
    160 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n-
    161 }
    \n-
    \n-
    162
    \n-
    164 template<class SizePrefix>
    \n-
    \n-
    165 size_type size(const SizePrefix& prefix) const
    \n-
    166 {
    \n-
    167 return size(prefix, IndexMergingStrategy{});
    \n-
    168 }
    \n-
    \n-
    169
    \n-
    170private:
    \n-
    171
    \n-
    172 template<class SizePrefix>
    \n-
    173 size_type size(const SizePrefix& prefix, BasisFactory::BlockedLexicographic) const
    \n-
    174 {
    \n-
    175 if (prefix.size() == 0)
    \n-
    176 return children;
    \n-
    177
    \n-
    178 return Hybrid::switchCases(ChildIndices(), prefix[0], [&] (auto i) {
    \n-
    179 SizePrefix subPrefix;
    \n-
    180 for(std::size_t i=1; i<prefix.size(); ++i)
    \n-
    181 subPrefix.push_back(prefix[i]);
    \n-
    182 return this->subPreBasis(i).size(subPrefix);
    \n-
    183 }, []() {
    \n-
    184 return size_type(0);
    \n-
    185 });
    \n-
    186 }
    \n-
    187
    \n-
    188 template<class SizePrefix>
    \n-
    189 size_type size(const SizePrefix& prefix, BasisFactory::FlatLexicographic) const
    \n-
    190 {
    \n-
    191 size_type result = 0;
    \n-
    192 if (prefix.size() == 0)
    \n-
    193 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    194 result += this->subPreBasis(i).size();
    \n-
    195 });
    \n-
    196 else {
    \n-
    197 size_type shiftedFirstDigit = prefix[0];
    \n-
    198 staticFindInRange<0, children>([&](auto i) {
    \n-
    199 auto firstDigitSize = this->subPreBasis(i).size();
    \n-
    200 if (shiftedFirstDigit < firstDigitSize)
    \n-
    201 {
    \n-
    202 SizePrefix subPrefix;
    \n-
    203 subPrefix.push_back(shiftedFirstDigit);
    \n-
    204 for(std::size_t i=1; i<prefix.size(); ++i)
    \n-
    205 subPrefix.push_back(prefix[i]);
    \n-
    206 result = this->subPreBasis(i).size(subPrefix);
    \n-
    207 return true;
    \n-
    208 }
    \n-
    209 shiftedFirstDigit -= firstDigitSize;
    \n-
    210 return false;
    \n-
    211 });
    \n-
    212 }
    \n-
    213 return result;
    \n-
    214 }
    \n-
    215
    \n-
    216public:
    \n-
    217
    \n-
    \n-\n-
    220 {
    \n-
    221 size_type r=0;
    \n-
    222 // Accumulate dimension() for all subprebases
    \n-
    223 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    224 r += this->subPreBasis(i).dimension();
    \n-
    225 });
    \n-
    226 return r;
    \n-
    227 }
    \n-
    \n-
    228
    \n-
    \n-\n-
    231 {
    \n-
    232 size_type r=0;
    \n-
    233 // Accumulate maxNodeSize() for all subprebases
    \n-
    234 Hybrid::forEach(ChildIndices(), [&](auto i) {
    \n-
    235 r += this->subPreBasis(i).maxNodeSize();
    \n-
    236 });
    \n-
    237 return r;
    \n-
    238 }
    \n-
    \n-
    239
    \n-
    241 template<std::size_t i>
    \n-
    \n-
    242 const SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {}) const
    \n-
    243 {
    \n-
    244 return std::get<i>(subPreBases_);
    \n-
    245 }
    \n-
    \n-
    246
    \n-
    248 template<std::size_t i>
    \n-
    \n-
    249 SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {})
    \n-
    250 {
    \n-
    251 return std::get<i>(subPreBases_);
    \n-
    252 }
    \n-
    \n-
    253
    \n-
    255 template<typename It>
    \n-
    \n-
    256 It indices(const Node& node, It it) const
    \n-
    257 {
    \n-
    258 return indices(node, it, IndexMergingStrategy{});
    \n-
    259 }
    \n-
    \n-
    260
    \n-
    261private:
    \n-
    262
    \n-
    263 template<typename It>
    \n-
    264 It indices(const Node& node, It multiIndices, BasisFactory::FlatLexicographic) const
    \n-
    265 {
    \n-
    266 size_type firstComponentOffset = 0;
    \n-
    267 // Loop over all children
    \n-
    268 Hybrid::forEach(ChildIndices(), [&](auto child){
    \n-
    269 size_type subTreeSize = node.child(child).size();
    \n-
    270 // Fill indices for current child into index buffer starting from current
    \n-
    271 // buffer position and shift first index component of any index for current
    \n-
    272 // child by suitable offset to get lexicographic indices.
    \n-
    273 subPreBasis(child).indices(node.child(child), multiIndices);
    \n-
    274 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    275 multiIndices[i][0] += firstComponentOffset;
    \n-
    276 // Increment offset by the size for first index component of the current child
    \n-
    277 firstComponentOffset += subPreBasis(child).size();
    \n-
    278 // Increment buffer iterator by the number of indices processed for current child
    \n-
    279 multiIndices += subTreeSize;
    \n-
    280 });
    \n-
    281 return multiIndices;
    \n-
    282 }
    \n-
    283
    \n-
    284 template<class MultiIndex>
    \n-
    285 static void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n-
    286 {
    \n-
    287 M.resize(M.size()+1);
    \n-
    288 for(std::size_t i=M.size()-1; i>0; --i)
    \n-
    289 M[i] = M[i-1];
    \n-
    290 M[0] = M0;
    \n-
    291 }
    \n-
    292
    \n-
    293 template<typename It>
    \n-
    294 It indices(const Node& node, It multiIndices, BasisFactory::BlockedLexicographic) const
    \n-
    295 {
    \n-
    296 // Loop over all children
    \n-
    297 Hybrid::forEach(ChildIndices(), [&](auto child){
    \n-
    298 size_type subTreeSize = node.child(child).size();
    \n-
    299 // Fill indices for current child into index buffer starting from current position
    \n-
    300 subPreBasis(child).indices(node.child(child), multiIndices);
    \n-
    301 // Insert child index before first component of all indices of current child.
    \n-
    302 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    303 this->multiIndexPushFront(multiIndices[i], child);
    \n-
    304 // Increment buffer iterator by the number of indices processed for current child
    \n-
    305 multiIndices += subTreeSize;
    \n-
    306 });
    \n-
    307 return multiIndices;
    \n-
    308 }
    \n-
    309
    \n-
    310 std::tuple<SPB...> subPreBases_;
    \n-
    311};
    \n-
    \n-
    312
    \n-
    313
    \n-
    314
    \n-
    315namespace BasisFactory {
    \n-
    316
    \n-
    317namespace Imp {
    \n-
    318
    \n-
    319template<class IndexMergingStrategy, class... ChildPreBasisFactory>
    \n-
    320class CompositePreBasisFactory
    \n-
    321{
    \n-
    322
    \n-
    323 template<class GridView, class... ChildPreBasis>
    \n-
    324 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&... childPreBasis) const
    \n-
    325 {
    \n-
    326 return CompositePreBasis<IndexMergingStrategy, std::decay_t<ChildPreBasis>...>(std::forward<ChildPreBasis>(childPreBasis)...);
    \n-
    327 }
    \n-
    328
    \n-
    329public:
    \n-
    330
    \n-
    331 CompositePreBasisFactory(const ChildPreBasisFactory&... childPreBasisFactory) :
    \n-
    332 childPreBasisFactories_(childPreBasisFactory...)
    \n-
    333 {}
    \n-
    334
    \n-
    335 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :
    \n-
    336 childPreBasisFactories_(std::move(childPreBasisFactory)...)
    \n-
    337 {}
    \n-
    338
    \n-
    339 template<class GridView>
    \n-
    340 auto operator()(const GridView& gridView) const
    \n-
    341 {
    \n-
    342 // Use std::apply to unpack the tuple childPreBasisFactories_
    \n-
    343 return std::apply([&](const auto&... childPreBasisFactory) {
    \n-
    344 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory(gridView)...);
    \n-
    345 }, childPreBasisFactories_);
    \n-
    346 }
    \n-
    347
    \n-
    348private:
    \n-
    349 std::tuple<ChildPreBasisFactory...> childPreBasisFactories_;
    \n-
    350};
    \n-
    351
    \n-
    352} // end namespace BasisFactory::Imp
    \n-
    353
    \n-
    354
    \n-
    355
    \n-
    366template<
    \n-
    367 typename... Args,
    \n-
    368 std::enable_if_t<Concept::isIndexMergingStrategy<typename LastType<Args...>::type>(),int> = 0>
    \n-
    369auto composite(Args&&... args)
    \n-
    370{
    \n-
    371 // We have to separate the last entry which is the IndexMergingStrategy
    \n-
    372 // and the preceding ones, which are the ChildPreBasisFactories
    \n-
    373
    \n-
    374 using ArgTuple = std::tuple<std::decay_t<Args>...>;
    \n-
    375
    \n-
    376 // Compute number of children and index of the IndexMergingStrategy argument
    \n-
    377 constexpr std::size_t children = Dune::SizeOf<Args...>::value-1;
    \n-
    378
    \n-
    379 // Use last type as IndexMergingStrategy
    \n-
    380 using IndexMergingStrategy = std::tuple_element_t<children, ArgTuple>;
    \n-
    381
    \n-
    382 // Index sequence for all but the last entry for partial tuple unpacking
    \n-
    383 auto childIndices = std::make_index_sequence<children>{};
    \n-
    384
    \n-
    385 // Unpack tuple only for those entries related to children
    \n-
    386 return applyPartial([](auto&&... childPreBasisFactory){
    \n-
    387 return Imp::CompositePreBasisFactory<IndexMergingStrategy, std::decay_t<decltype(childPreBasisFactory)>...>(std::forward<decltype(childPreBasisFactory)>(childPreBasisFactory)...);
    \n-
    388 },
    \n-
    389 std::forward_as_tuple(std::forward<Args>(args)...),
    \n-
    390 childIndices);
    \n-
    391}
    \n-
    392
    \n-
    404template<
    \n-
    405 typename... Args,
    \n-
    406 std::enable_if_t<not Concept::isIndexMergingStrategy<typename LastType<Args...>::type>(),int> = 0>
    \n-
    407auto composite(Args&&... args)
    \n-
    408{
    \n-
    409 return Imp::CompositePreBasisFactory<BasisFactory::BlockedLexicographic, std::decay_t<Args>...>(std::forward<Args>(args)...);
    \n-
    410}
    \n-
    411
    \n-
    412} // end namespace BasisFactory
    \n-
    413
    \n-
    414// Backward compatibility
    \n-
    415namespace BasisBuilder {
    \n-
    416
    \n-
    417 using namespace BasisFactory;
    \n-
    418
    \n-
    419}
    \n-
    420
    \n-
    421
    \n-
    422
    \n-
    423} // end namespace Functions
    \n-
    424} // end namespace Dune
    \n-
    425
    \n-
    426
    \n-
    427#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH
    \n+\n+
    149 {
    \n+
    150 return rawPreBasis_;
    \n+
    151 }
    \n+
    \n+
    152
    \n+
    153 template<class MultiIndex>
    \n+
    \n+
    154 void transformIndex(MultiIndex& multiIndex) const
    \n+
    155 {
    \n+
    156 transformation_.transformIndex(multiIndex, rawPreBasis_);
    \n+
    157 }
    \n+
    \n+
    158
    \n+
    159 template<typename It>
    \n+
    \n+
    160 It indices(const Node& node, It it) const
    \n+
    161 {
    \n+
    162 rawPreBasis().indices(node, it);
    \n+
    163 for(std::size_t i=0; i<node.size(); ++i)
    \n+
    164 {
    \n+
    165 transformIndex(*it);
    \n+
    166 ++it;
    \n+
    167 }
    \n+
    168 return it;
    \n+
    169 }
    \n+
    \n+
    170
    \n+
    171protected:
    \n+\n+
    173 Transformation transformation_;
    \n+
    174};
    \n+
    \n+
    175
    \n+
    176template<class RPB, class T>
    \n+\n+
    178
    \n+
    179
    \n+
    180} // end namespace Experimental
    \n+
    \n+
    181
    \n+
    182
    \n+
    183namespace BasisFactory {
    \n+
    184namespace Experimental {
    \n+
    185
    \n+
    197template<class RawPreBasisFactory, class Transformation>
    \n+
    \n+\n+
    199 RawPreBasisFactory&& preBasisFactory,
    \n+
    200 Transformation&& transformation)
    \n+
    201{
    \n+
    202 return [
    \n+
    203 preBasisFactory=std::forward<RawPreBasisFactory>(preBasisFactory),
    \n+
    204 transformation =std::forward<Transformation>(transformation)
    \n+
    205 ](const auto& gridView) {
    \n+
    206 return Dune::Functions::Experimental::TransformedIndexPreBasis(preBasisFactory(gridView), std::move(transformation));
    \n+
    207 };
    \n+
    208}
    \n+
    \n+
    209
    \n+
    210
    \n+
    211
    \n+
    230template<class IndexTransformation, class SizeImplementation, std::size_t minIS, std::size_t maxIS>
    \n+
    \n+\n+
    232{
    \n+
    233public:
    \n+
    234
    \n+
    235 static constexpr std::size_t minIndexSize = minIS;
    \n+
    236 static constexpr std::size_t maxIndexSize = maxIS;
    \n+
    237
    \n+
    238 template<class IT_R, class SI_R>
    \n+
    \n+
    239 GenericIndexingTransformation(IT_R&& indexTransformation, SI_R&& sizeImplementation) :
    \n+
    240 indexTransformation_(std::forward<IT_R>(indexTransformation)),
    \n+
    241 sizeImplementation_(std::forward<SI_R>(sizeImplementation))
    \n+
    242 {}
    \n+
    \n+
    243
    \n+
    244 template<class MultiIndex, class PreBasis>
    \n+
    \n+
    245 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const
    \n+
    246 {
    \n+
    247 indexTransformation_(multiIndex, preBasis);
    \n+
    248 }
    \n+
    \n+
    249
    \n+
    250 template<class Prefix, class PreBasis>
    \n+
    \n+
    251 auto size(const Prefix& prefix, const PreBasis& preBasis) const
    \n+
    252 {
    \n+
    253 return sizeImplementation_(prefix, preBasis);
    \n+
    254 }
    \n+
    \n+
    255
    \n+
    256 template<class PreBasis>
    \n+
    \n+
    257 auto dimension(const PreBasis& preBasis) const
    \n+
    258 {
    \n+
    259 return preBasis.dimension();
    \n+
    260 }
    \n+
    \n+
    261
    \n+
    262private:
    \n+
    263 IndexTransformation indexTransformation_;
    \n+
    264 SizeImplementation sizeImplementation_;
    \n+
    265};
    \n+
    \n+
    266
    \n+
    267
    \n+
    268
    \n+
    287template<class IndexTransformation, class SizeImplementation, std::size_t minIndexSize, std::size_t maxIndexSize>
    \n+
    \n+
    288auto indexTransformation(IndexTransformation&& indexTransformation, SizeImplementation&& sizeImplementation, Dune::index_constant<minIndexSize>, Dune::index_constant<maxIndexSize>)
    \n+
    289{
    \n+\n+
    291 std::decay_t<IndexTransformation>,
    \n+
    292 std::decay_t<SizeImplementation>,
    \n+
    293 minIndexSize, maxIndexSize>(
    \n+
    294 std::forward<IndexTransformation>(indexTransformation),
    \n+
    295 std::forward<SizeImplementation>(sizeImplementation));
    \n+
    296}
    \n+
    \n+
    297
    \n+
    298
    \n+
    299} // end namespace Experimental
    \n+
    300} // end namespace BasisFactory
    \n+
    301} // end namespace Functions
    \n+
    302} // end namespace Dune
    \n+
    303
    \n+
    304
    \n+
    305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n \n-\n-\n-\n-\n-\n-
    typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:26
    \n+\n+\n+\n+\n+\n
    Definition polynomial.hh:10
    \n-
    static constexpr bool isIndexMergingStrategy()
    Definition basistags.hh:23
    \n-
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:80
    \n-
    Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
    Definition basistags.hh:148
    \n-
    A pre-basis for composite bases.
    Definition compositebasis.hh:53
    \n-
    SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})
    Mutable access to the stored prebasis of the factor in the power space.
    Definition compositebasis.hh:249
    \n-
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child pre-bases.
    Definition compositebasis.hh:71
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition compositebasis.hh:230
    \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:242
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition compositebasis.hh:68
    \n-
    CompositeBasisNode< typename SPB::Node... > Node
    Template mapping root tree path to type of created tree node.
    Definition compositebasis.hh:81
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition compositebasis.hh:165
    \n-
    CompositePreBasis(SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects.
    Definition compositebasis.hh:95
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition compositebasis.hh:219
    \n-
    CompositePreBasis(const GV &gv)
    Constructor for given GridView.
    Definition compositebasis.hh:115
    \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:256
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition compositebasis.hh:158
    \n-
    typename std::tuple_element_t< 0, SubPreBases >::GridView GridView
    The grid view that the FE basis is defined on.
    Definition compositebasis.hh:65
    \n-
    static const std::size_t children
    Definition compositebasis.hh:74
    \n-
    std::tuple< SPB... > SubPreBases
    Tuple of child pre-bases.
    Definition compositebasis.hh:58
    \n-
    Node makeNode() const
    Create tree node.
    Definition compositebasis.hh:148
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition compositebasis.hh:124
    \n-
    std::tuple_element_t< i, SubPreBases > SubPreBasis
    Export individual child pre-bases by index.
    Definition compositebasis.hh:62
    \n-
    std::make_index_sequence< children > ChildIndices
    Definition compositebasis.hh:76
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition compositebasis.hh:138
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition compositebasis.hh:85
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition compositebasis.hh:132
    \n-
    static constexpr size_type minMultiIndexSize
    Definition compositebasis.hh:84
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition compositebasis.hh:83
    \n-\n+
    auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)
    Create a TransformedIndexPreBasisFactory.
    Definition transformedindexbasis.hh:198
    \n+
    auto indexTransformation(IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)
    A generic implementation of a transformation.
    Definition transformedindexbasis.hh:288
    \n+
    A pre-basis transforming multi-indices.
    Definition transformedindexbasis.hh:52
    \n+
    It indices(const Node &node, It it) const
    Definition transformedindexbasis.hh:160
    \n+
    Transformation transformation_
    Definition transformedindexbasis.hh:173
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition transformedindexbasis.hh:86
    \n+
    typename RawPreBasis::GridView GridView
    The grid view that the FE basis is defined on.
    Definition transformedindexbasis.hh:62
    \n+
    void transformIndex(MultiIndex &multiIndex) const
    Definition transformedindexbasis.hh:154
    \n+
    RawPreBasis rawPreBasis_
    Definition transformedindexbasis.hh:172
    \n+
    typename RawPreBasis::Node Node
    Template mapping root tree path to type of created tree node.
    Definition transformedindexbasis.hh:68
    \n+
    TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)
    Constructor for given child pre-basis objects.
    Definition transformedindexbasis.hh:80
    \n+
    RawPreBasis & rawPreBasis()
    Definition transformedindexbasis.hh:148
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition transformedindexbasis.hh:70
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition transformedindexbasis.hh:98
    \n+
    Node makeNode() const
    Create tree node with given root tree path.
    Definition transformedindexbasis.hh:113
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition transformedindexbasis.hh:92
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition transformedindexbasis.hh:126
    \n+
    RPB RawPreBasis
    Definition transformedindexbasis.hh:59
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition transformedindexbasis.hh:119
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition transformedindexbasis.hh:138
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition transformedindexbasis.hh:65
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition transformedindexbasis.hh:72
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition transformedindexbasis.hh:132
    \n+
    const RawPreBasis & rawPreBasis() const
    Definition transformedindexbasis.hh:143
    \n+
    static constexpr size_type minMultiIndexSize
    Definition transformedindexbasis.hh:71
    \n+
    A generic implementation of a transformation.
    Definition transformedindexbasis.hh:232
    \n+
    auto dimension(const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:257
    \n+
    GenericIndexingTransformation(IT_R &&indexTransformation, SI_R &&sizeImplementation)
    Definition transformedindexbasis.hh:239
    \n+
    void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:245
    \n+
    static constexpr std::size_t maxIndexSize
    Definition transformedindexbasis.hh:236
    \n+
    static constexpr std::size_t minIndexSize
    Definition transformedindexbasis.hh:235
    \n+
    auto size(const Prefix &prefix, const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:251
    \n \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,528 +1,368 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n 5\n 6#include \n 7#include \n 8\n 9#include \n 10#include \n 11#include \n 12#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/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\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_\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/_\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/_\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-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/_\bn_\bo_\bd_\be_\bs_\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/_\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/_\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-24\n+14\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/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\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/_\bt_\by_\bp_\be_\b__\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/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\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#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+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/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n 25\n-26namespace _\bD_\bu_\bn_\be {\n-27namespace Functions {\n-28\n-29/\n+26\n+27namespace _\bD_\bu_\bn_\be {\n+28namespace Functions {\n+_\b2_\b9namespace Experimental {\n+30\n+31/\n / *****************************************************************************\n-30// This is the reusable part of the composite bases. It contains\n-31//\n-32// CompositePreBasis\n-33//\n-34// The pre-basis allows to create the others and is the owner of possible\n-shared\n-35// state. These components do _not_ depend on the global basis and local view\n-36// and can be used without a global basis.\n-37/\n+32/\n / *****************************************************************************\n-38\n-39\n-51template\n-_\b5_\b2class _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-53{\n-54 static const bool isBlocked = std::is_same_v or std::is_same_v;\n-55public:\n+33\n+50template\n+_\b5_\b1class _\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+52{\n+53 using Transformation = T;\n+54\n+55 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 56\n-_\b5_\b8 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\be_\bs = std::tuple;\n-59\n-61 template\n-_\b6_\b2 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = std::tuple_element_t;\n+57public:\n+58\n+_\b5_\b9 using _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = RPB;\n+60\n+_\b6_\b2 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename RawPreBasis::GridView;\n 63\n-_\b6_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename std::tuple_element_t<0, SubPreBases>::GridView;\n+_\b6_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n 66\n-_\b6_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b6_\b8 using _\bN_\bo_\bd_\be = typename RawPreBasis::Node;\n 69\n-_\b7_\b1 using _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n-72\n-73protected:\n-_\b7_\b4 static const std::size_t _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn = sizeof...(SPB);\n-75\n-_\b7_\b6 using _\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs = std::make_index_sequence;\n-77\n-78public:\n-79\n-_\b8_\b1 using _\bN_\bo_\bd_\be = _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be;\n-82\n-_\b8_\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 = std::max({SPB::\n-maxMultiIndexSize...}) + isBlocked;\n-_\b8_\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 = std::min({SPB::\n-minMultiIndexSize...}) + isBlocked;\n-_\b8_\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({SPB::\n-multiIndexBufferSize...}) + isBlocked;\n-86\n-92 template = 0,\n-94 _\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_\b5 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(SFArgs&&... sfArgs) :\n-96 subPreBases_(std::forward(sfArgs)...)\n-97 {\n-98 Hybrid::forEach(subPreBases_, [&](const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs){\n-99 static_assert(models, std::decay_t>(), \"Subprebases passed to CompositePreBasis does not model the\n-PreBasis concept.\");\n-100 });\n+_\b7_\b0 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_\b1 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_\b2 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+73\n+79 template\n+_\b8_\b0 _\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+81 _\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+82 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_(std::forward(transformation))\n+83 {}\n+84\n+_\b8_\b6 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+87 {\n+88 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n+89 }\n+90\n+_\b9_\b2 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+93 {\n+94 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.gridView();\n+95 }\n+96\n+_\b9_\b8 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+99 {\n+100 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.update(gv);\n 101 }\n 102\n-109 template 1)>, // Avoid ambiguous constructor if\n-there's only one child\n-112 std::is_same,\n-113 std::is_constructible...\n-114 >, int> = 0>\n-_\b1_\b1_\b5 _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(const GV& gv) :\n-116 subPreBases_(SPB(gv)...)\n-117 {\n-118 Hybrid::forEach(subPreBases_, [&](const auto& _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs){\n-119 static_assert(models, std::decay_t>(), \"Subprebases passed to CompositePreBasis does not model the\n-PreBasis concept.\");\n-120 });\n-121 }\n-122\n-_\b1_\b2_\b4 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-125 {\n-126 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-127 this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).initializeIndices();\n-128 });\n+_\b1_\b1_\b3 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+114 {\n+115 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.makeNode();\n+116 }\n+117\n+_\b1_\b1_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+120 {\n+121 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n+122 }\n+123\n+125 template\n+_\b1_\b2_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+127 {\n+128 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 129 }\n 130\n-_\b1_\b3_\b2 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+_\b1_\b3_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n 133 {\n-134 return std::get<0>(subPreBases_).gridView();\n+134 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 135 }\n 136\n-_\b1_\b3_\b8 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\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 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-141 this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).update(gv);\n-142 });\n-143 }\n-144\n-_\b1_\b4_\b8 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+140 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.maxNodeSize();\n+141 }\n+142\n+_\b1_\b4_\b3 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+144 {\n+145 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+146 }\n+147\n+_\b1_\b4_\b8 _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs()\n 149 {\n-150 auto node = _\bN_\bo_\bd_\be{};\n-151 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-152 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-153 });\n-154 return node;\n-155 }\n-156\n-_\b1_\b5_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-159 {\n-160 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n-161 }\n-162\n-164 template\n-_\b1_\b6_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-166 {\n-167 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-168 }\n-169\n-170private:\n-171\n-172 template\n-173 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, _\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-174 {\n-175 if (prefix.size() == 0)\n-176 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n-177\n-178 return Hybrid::switchCases(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), prefix[0], [&] (auto i) {\n-179 SizePrefix subPrefix;\n-180 for(std::size_t i=1; i_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size(subPrefix);\n-183 }, []() {\n-184 return _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be(0);\n-185 });\n-186 }\n-187\n-188 template\n-189 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, BasisFactory::FlatLexicographic)\n-const\n-190 {\n-191 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n-192 if (prefix.size() == 0)\n-193 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-194 result += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size();\n-195 });\n-196 else {\n-197 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be shiftedFirstDigit = prefix[0];\n-198 staticFindInRange<0, children>([&](auto i) {\n-199 auto firstDigitSize = this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size();\n-200 if (shiftedFirstDigit < firstDigitSize)\n-201 {\n-202 SizePrefix subPrefix;\n-203 subPrefix.push_back(shiftedFirstDigit);\n-204 for(std::size_t i=1; i_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).size(subPrefix);\n-207 return true;\n-208 }\n-209 shiftedFirstDigit -= firstDigitSize;\n-210 return false;\n-211 });\n-212 }\n-213 return result;\n-214 }\n-215\n-216public:\n-217\n-_\b2_\b1_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-220 {\n-221 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be r=0;\n-222 // Accumulate dimension() for all subprebases\n-223 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-224 r += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).dimension();\n-225 });\n-226 return r;\n-227 }\n-228\n-_\b2_\b3_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-231 {\n-232 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be r=0;\n-233 // Accumulate maxNodeSize() for all subprebases\n-234 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto i) {\n-235 r += this->_\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(i).maxNodeSize();\n-236 });\n-237 return r;\n-238 }\n-239\n-241 template\n-_\b2_\b4_\b2 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-243 {\n-244 return std::get(subPreBases_);\n-245 }\n-246\n-248 template\n-_\b2_\b4_\b9 _\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-250 {\n-251 return std::get(subPreBases_);\n-252 }\n-253\n-255 template\n-_\b2_\b5_\b6 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-257 {\n-258 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-259 }\n-260\n-261private:\n-262\n-263 template\n-264 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-265 {\n-266 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be firstComponentOffset = 0;\n-267 // Loop over all children\n-268 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto child){\n-269 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(child)._\bs_\bi_\bz_\be();\n-270 // Fill indices for current child into index buffer starting from current\n-271 // buffer position and shift first index component of any index for current\n-272 // child by suitable offset to get lexicographic indices.\n-273 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(child).indices(node.child(child), multiIndices);\n-274 for (std::size_t i = 0; i\n-285 static void multiIndexPushFront(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n-286 {\n-287 M.resize(M.size()+1);\n-288 for(std::size_t i=M.size()-1; i>0; --i)\n-289 M[i] = M[i-1];\n-290 M[0] = M0;\n-291 }\n-292\n-293 template\n-294 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n-BlockedLexicographic) const\n-295 {\n-296 // Loop over all children\n-297 Hybrid::forEach(_\bC_\bh_\bi_\bl_\bd_\bI_\bn_\bd_\bi_\bc_\be_\bs(), [&](auto child){\n-298 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(child)._\bs_\bi_\bz_\be();\n-299 // Fill indices for current child into index buffer starting from current\n-position\n-300 _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(child).indices(node.child(child), multiIndices);\n-301 // Insert child index before first component of all indices of current\n-child.\n-302 for (std::size_t i = 0; imultiIndexPushFront(multiIndices[i], child);\n-304 // Increment buffer iterator by the number of indices processed for current\n-child\n-305 multiIndices += subTreeSize;\n-306 });\n-307 return multiIndices;\n-308 }\n-309\n-310 std::tuple subPreBases_;\n-311};\n-312\n-313\n-314\n-315namespace BasisFactory {\n-316\n-317namespace Imp {\n-318\n-319template\n-320class CompositePreBasisFactory\n-321{\n-322\n-323 template\n-324 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&...\n-childPreBasis) const\n-325 {\n-326 return CompositePreBasis...>(std::forward(childPreBasis)...);\n-327 }\n-328\n-329public:\n-330\n-331 CompositePreBasisFactory(const ChildPreBasisFactory&...\n-childPreBasisFactory) :\n-332 childPreBasisFactories_(childPreBasisFactory...)\n-333 {}\n-334\n-335 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :\n-336 childPreBasisFactories_(std::move(childPreBasisFactory)...)\n-337 {}\n-338\n-339 template\n-340 auto operator()(const GridView& gridView) const\n-341 {\n-342 // Use std::apply to unpack the tuple childPreBasisFactories_\n-343 return std::apply([&](const auto&... childPreBasisFactory) {\n-344 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory\n-(gridView)...);\n-345 }, childPreBasisFactories_);\n-346 }\n-347\n-348private:\n-349 std::tuple childPreBasisFactories_;\n-350};\n-351\n-352} // end namespace BasisFactory::Imp\n-353\n-354\n-355\n-366template<\n-367 typename... Args,\n-368 std::enable_if_t<_\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-369auto composite(Args&&... args)\n-370{\n-371 // We have to separate the last entry which is the IndexMergingStrategy\n-372 // and the preceding ones, which are the ChildPreBasisFactories\n-373\n-374 using ArgTuple = std::tuple...>;\n-375\n-376 // Compute number of children and index of the IndexMergingStrategy\n-argument\n-377 constexpr std::size_t children = Dune::SizeOf::value-1;\n-378\n-379 // Use last type as IndexMergingStrategy\n-380 using IndexMergingStrategy = std::tuple_element_t;\n-381\n-382 // Index sequence for all but the last entry for partial tuple unpacking\n-383 auto childIndices = std::make_index_sequence{};\n-384\n-385 // Unpack tuple only for those entries related to children\n-386 return applyPartial([](auto&&... childPreBasisFactory){\n-387 return Imp::CompositePreBasisFactory...>(std::forward(childPreBasisFactory)...);\n-388 },\n-389 std::forward_as_tuple(std::forward(args)...),\n-390 childIndices);\n-391}\n-392\n-404template<\n-405 typename... Args,\n-406 std::enable_if_t::type>(),int> = 0>\n-407auto composite(Args&&... args)\n-408{\n-409 return Imp::CompositePreBasisFactory...>(std::forward(args)...);\n-410}\n-411\n-412} // end namespace BasisFactory\n-413\n-414// Backward compatibility\n-415namespace BasisBuilder {\n-416\n-417 using namespace BasisFactory;\n-418\n-419}\n-420\n-421\n-422\n-423} // end namespace Functions\n-424} // end namespace Dune\n-425\n-426\n-427#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+150 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n+151 }\n+152\n+153 template\n+_\b1_\b5_\b4 void _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx(MultiIndex& multiIndex) const\n+155 {\n+156 _\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+157 }\n+158\n+159 template\n+_\b1_\b6_\b0 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+161 {\n+162 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node, it);\n+163 for(std::size_t i=0; i\n+_\b1_\b7_\b7_\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+178\n+179\n+180} // end namespace Experimental\n+181\n+182\n+183namespace BasisFactory {\n+184namespace Experimental {\n+185\n+197template\n+_\b1_\b9_\b8auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\bi_\bc_\be_\bs(\n+199 RawPreBasisFactory&& preBasisFactory,\n+200 Transformation&& transformation)\n+201{\n+202 return [\n+203 preBasisFactory=std::forward(preBasisFactory),\n+204 transformation =std::forward(transformation)\n+205 ](const auto& gridView) {\n+206 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+207 };\n+208}\n+209\n+210\n+211\n+230template\n+_\b2_\b3_\b1class _\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+232{\n+233public:\n+234\n+_\b2_\b3_\b5 static constexpr std::size_t _\bm_\bi_\bn_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = minIS;\n+_\b2_\b3_\b6 static constexpr std::size_t _\bm_\ba_\bx_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = maxIS;\n+237\n+238 template\n+_\b2_\b3_\b9 _\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) :\n+240 indexTransformation_(std::forward(_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn)),\n+241 sizeImplementation_(std::forward(sizeImplementation))\n+242 {}\n+243\n+244 template\n+_\b2_\b4_\b5 void _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx(MultiIndex& multiIndex, const PreBasis& preBasis) const\n+246 {\n+247 indexTransformation_(multiIndex, preBasis);\n+248 }\n+249\n+250 template\n+_\b2_\b5_\b1 auto _\bs_\bi_\bz_\be(const Prefix& prefix, const PreBasis& preBasis) const\n+252 {\n+253 return sizeImplementation_(prefix, preBasis);\n+254 }\n+255\n+256 template\n+_\b2_\b5_\b7 auto _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(const PreBasis& preBasis) const\n+258 {\n+259 return preBasis.dimension();\n+260 }\n+261\n+262private:\n+263 IndexTransformation indexTransformation_;\n+264 SizeImplementation sizeImplementation_;\n+265};\n+266\n+267\n+268\n+287template\n+_\b2_\b8_\b8auto _\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+SizeImplementation&& sizeImplementation, Dune::index_constant,\n+Dune::index_constant)\n+289{\n+290 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+291 std::decay_t,\n+292 std::decay_t,\n+293 minIndexSize, maxIndexSize>(\n+294 std::forward(_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn),\n+295 std::forward(sizeImplementation));\n+296}\n+297\n+298\n+299} // end namespace Experimental\n+300} // end namespace BasisFactory\n+301} // end namespace Functions\n+302} // end namespace Dune\n+303\n+304\n+305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n _\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-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n _\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n _\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\bp_\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-typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n-type enableIfConstructible\n-Helper to constrain forwarding constructors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:26\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:23\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:80\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:148\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:53\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:249\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:71\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: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_\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:242\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:68\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:81\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:165\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:95\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:219\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:115\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+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:198\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, 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:288\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:52\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-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:256\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:158\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:65\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:74\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:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\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:148\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:160\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:173\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 compositebasis.hh:124\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: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:_\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:76\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:86\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: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:_\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:154\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:172\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: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:\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:80\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:148\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:70\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 compositebasis.hh:138\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: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:_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:98\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:113\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 compositebasis.hh:132\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:92\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:126\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:59\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:119\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:138\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: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:_\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:72\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:132\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:143\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 compositebasis.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_\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:83\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:219\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:_\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:232\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:257\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)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:239\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: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+_\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:236\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:235\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:251\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/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: taylorhoodbasis.hh File Reference\n+dune-functions: globalvaluedlocalfiniteelement.hh File Reference\n \n \n \n \n \n \n \n@@ -70,63 +70,37 @@\n \n
    \n
    \n \n-
    taylorhoodbasis.hh File Reference
    \n+Namespaces
    \n+
    globalvaluedlocalfiniteelement.hh File Reference
    \n \n
    \n-
    #include <dune/common/exceptions.hh>
    \n-#include <dune/common/reservedvector.hh>
    \n-#include <dune/common/indices.hh>
    \n-#include <dune/typetree/powernode.hh>
    \n-#include <dune/typetree/compositenode.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n-#include <dune/functions/functionspacebases/lagrangebasis.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n+
    #include <array>
    \n+#include <numeric>
    \n+#include <dune/common/fmatrix.hh>
    \n+#include <dune/common/fvector.hh>
    \n+#include <dune/common/math.hh>
    \n+#include <dune/common/rangeutilities.hh>
    \n+#include <dune/geometry/referenceelements.hh>
    \n+#include <dune/localfunctions/common/localbasis.hh>
    \n+#include <dune/localfunctions/common/localfiniteelementtraits.hh>
    \n+#include <dune/localfunctions/common/localinterpolation.hh>
    \n
    \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,46 +1,27 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-taylorhoodbasis.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+globalvaluedlocalfiniteelement.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n _\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/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: taylorhoodbasis.hh Source File\n+dune-functions: globalvaluedlocalfiniteelement.hh Source File\n \n \n \n \n \n \n \n@@ -74,390 +74,324 @@\n \n \n
    \n
    \n-
    taylorhoodbasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n
    5
    \n-
    6#include <dune/common/exceptions.hh>
    \n-
    7#include <dune/common/reservedvector.hh>
    \n-
    8#include <dune/common/indices.hh>
    \n-
    9
    \n-
    10#include <dune/typetree/powernode.hh>
    \n-
    11#include <dune/typetree/compositenode.hh>
    \n-
    12
    \n-\n-
    14
    \n-\n-\n-
    17
    \n-
    18namespace Dune {
    \n-
    19namespace Functions {
    \n-
    20
    \n-
    21
    \n-
    22// *****************************************************************************
    \n-
    23// This is the reusable part of the basis. It contains
    \n-
    24//
    \n-
    25// TaylorHoodPreBasis
    \n-
    26// TaylorHoodBasisTree
    \n-
    27// TaylorHoodVelocityTree
    \n-
    28//
    \n-
    29// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    30// state. These components do _not_ depend on the global basis and local view
    \n-
    31// and can be used without a global basis.
    \n-
    32// *****************************************************************************
    \n-
    33
    \n-
    34template<typename GV>
    \n-
    35class TaylorHoodVelocityTree;
    \n-
    36
    \n-
    37template<typename GV>
    \n-
    38class TaylorHoodBasisTree;
    \n-
    39
    \n-
    59template<typename GV, bool HI=false>
    \n-
    \n-\n-
    61{
    \n-
    62 static const bool useHybridIndices = HI;
    \n-
    63
    \n-
    64 static const int dim = GV::dimension;
    \n-
    65
    \n-
    66public:
    \n-
    67
    \n-
    69 using GridView = GV;
    \n-
    70
    \n-
    72 using size_type = std::size_t;
    \n-
    73
    \n-\n-
    76
    \n-
    77 static constexpr size_type maxMultiIndexSize = useHybridIndices ? 3 : 2;
    \n-
    78 static constexpr size_type minMultiIndexSize = 2;
    \n-\n-
    80
    \n-
    81private:
    \n-
    82
    \n-\n-\n-
    85
    \n-
    86public:
    \n-
    87
    \n-
    \n-\n-
    90 gridView_(gv),
    \n-
    91 pq1PreBasis_(gv),
    \n-
    92 pq2PreBasis_(gv)
    \n-
    93 {}
    \n-
    \n-
    94
    \n-
    \n-\n-
    97 {
    \n-\n-\n-
    100 }
    \n-
    \n+
    6#include <array>
    \n+
    7#include <numeric>
    \n+
    8
    \n+
    9#include <dune/common/fmatrix.hh>
    \n+
    10#include <dune/common/fvector.hh>
    \n+
    11#include <dune/common/math.hh>
    \n+
    12#include <dune/common/rangeutilities.hh>
    \n+
    13
    \n+
    14#include <dune/geometry/referenceelements.hh>
    \n+
    15
    \n+
    16#include <dune/localfunctions/common/localbasis.hh>
    \n+
    17#include <dune/localfunctions/common/localfiniteelementtraits.hh>
    \n+
    18#include <dune/localfunctions/common/localinterpolation.hh>
    \n+
    19
    \n+
    20namespace Dune::Functions::Impl
    \n+
    21{
    \n+
    22
    \n+
    36 struct ContravariantPiolaTransformator
    \n+
    37 {
    \n+
    42 template<typename Values, typename LocalCoordinate, typename Geometry>
    \n+
    43 static auto apply(Values& values,
    \n+
    44 const LocalCoordinate& xi,
    \n+
    45 const Geometry& geometry)
    \n+
    46 {
    \n+
    47 auto jacobianTransposed = geometry.jacobianTransposed(xi);
    \n+
    48 auto integrationElement = geometry.integrationElement(xi);
    \n+
    49
    \n+
    50 for (auto& value : values)
    \n+
    51 {
    \n+
    52 auto tmp = value;
    \n+
    53 jacobianTransposed.mtv(tmp, value);
    \n+
    54 value /= integrationElement;
    \n+
    55 }
    \n+
    56 }
    \n+
    57
    \n+
    67 template<typename Gradients, typename LocalCoordinate, typename Geometry>
    \n+
    68 static auto applyJacobian(Gradients& gradients,
    \n+
    69 const LocalCoordinate& xi,
    \n+
    70 const Geometry& geometry)
    \n+
    71 {
    \n+
    72 auto jacobianTransposed = geometry.jacobianTransposed(xi);
    \n+
    73 auto integrationElement = geometry.integrationElement(xi);
    \n+
    74 for (auto& gradient : gradients)
    \n+
    75 {
    \n+
    76 auto tmp = gradient;
    \n+
    77 gradient = 0;
    \n+
    78 for (size_t k=0; k<gradient.M(); k++)
    \n+
    79 for (size_t l=0; l<tmp.N(); l++)
    \n+
    80 // Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix
    \n+
    81 for(auto&& [jacobianTransposed_l_j, j] : sparseRange(jacobianTransposed[l]))
    \n+
    82 gradient[j][k] += jacobianTransposed_l_j * tmp[l][k];
    \n+
    83 gradient /= integrationElement;
    \n+
    84 }
    \n+
    85 }
    \n+
    86
    \n+
    94 template<class Function, class LocalCoordinate, class Element>
    \n+
    95 class LocalValuedFunction
    \n+
    96 {
    \n+
    97 const Function& f_;
    \n+
    98 const Element& element_;
    \n+
    99
    \n+
    100 public:
    \n
    101
    \n-
    \n-
    103 const GridView& gridView() const
    \n-
    104 {
    \n-
    105 return gridView_;
    \n-
    106 }
    \n-
    \n-
    107
    \n-
    \n-
    109 void update (const GridView& gv)
    \n-
    110 {
    \n-\n-\n-
    113 }
    \n-
    \n+
    102 LocalValuedFunction(const Function& f, const Element& element)
    \n+
    103 : f_(f), element_(element)
    \n+
    104 {}
    \n+
    105
    \n+
    106 auto operator()(const LocalCoordinate& xi) const
    \n+
    107 {
    \n+
    108 auto&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);
    \n+
    109 auto globalValue = f(xi);
    \n+
    110
    \n+
    111 // Apply the inverse Piola transform
    \n+
    112 auto jacobianInverseTransposed = element_.geometry().jacobianInverseTransposed(xi);
    \n+
    113 auto integrationElement = element_.geometry().integrationElement(xi);
    \n
    114
    \n-
    \n-\n-
    119 {
    \n-
    120 return Node{};
    \n-
    121 }
    \n-
    \n-
    122
    \n-
    \n-\n-
    125 {
    \n-
    126 return 2;
    \n-
    127 }
    \n-
    \n-
    128
    \n-
    130 template<class SizePrefix>
    \n-
    \n-
    131 size_type size(const SizePrefix& prefix) const
    \n-
    132 {
    \n-
    133 return sizeImp<useHybridIndices>(prefix);
    \n-
    134 }
    \n-
    \n-
    135
    \n-
    136private:
    \n-
    137
    \n-
    138 template<bool hi, class SizePrefix,
    \n-
    139 typename std::enable_if<not hi,int>::type = 0>
    \n-
    140 size_type sizeImp(const SizePrefix& prefix) const
    \n-
    141 {
    \n-
    142 if (prefix.size() == 0)
    \n-
    143 return 2;
    \n-
    144 if (prefix.size() == 1)
    \n-
    145 {
    \n-
    146 if (prefix[0] == 0)
    \n-
    147 return dim * pq2PreBasis_.size();
    \n-
    148 if (prefix[0] == 1)
    \n-
    149 return pq1PreBasis_.size();
    \n-
    150 }
    \n-
    151 assert(prefix.size() == 2);
    \n-
    152 return 0;
    \n-
    153 }
    \n-
    154
    \n-
    155 template<bool hi, class SizePrefix,
    \n-
    156 typename std::enable_if<hi,int>::type = 0>
    \n-
    157 size_type sizeImp(const SizePrefix& prefix) const
    \n-
    158 {
    \n-
    159 if (prefix.size() == 0)
    \n-
    160 return 2;
    \n-
    161 if (prefix.size() == 1)
    \n-
    162 {
    \n-
    163 if (prefix[0] == 0)
    \n-
    164 return pq2PreBasis_.size();
    \n-
    165 if (prefix[0] == 1)
    \n-
    166 return pq1PreBasis_.size();
    \n-
    167 }
    \n-
    168 if (prefix.size() == 2)
    \n-
    169 {
    \n-
    170 if (prefix[0] == 0)
    \n-
    171 return dim;
    \n-
    172 if (prefix[0] == 1)
    \n-
    173 return 0;
    \n-
    174 }
    \n-
    175 assert(prefix.size() == 3);
    \n-
    176 return 0;
    \n-
    177 }
    \n-
    178
    \n-
    179public:
    \n-
    180
    \n-
    \n-\n-
    183 {
    \n-
    184 return dim * pq2PreBasis_.size() + pq1PreBasis_.size();
    \n-
    185 }
    \n-
    \n-
    186
    \n-
    \n-\n-
    189 {
    \n-\n-
    191 }
    \n-
    \n-
    192
    \n-
    193 template<typename It>
    \n-
    \n-
    194 It indices(const Node& node, It it) const
    \n-
    195 {
    \n-
    196 return indicesImp<useHybridIndices>(node, it);
    \n-
    197 }
    \n-
    \n-
    198
    \n-
    199protected:
    \n-
    200
    \n-
    201 template<class MultiIndex>
    \n-
    \n-
    202 static const void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n-
    203 {
    \n-
    204 M.resize(M.size()+1);
    \n-
    205 for(std::size_t i=M.size()-1; i>0; --i)
    \n-
    206 M[i] = M[i-1];
    \n-
    207 M[0] = M0;
    \n-
    208 }
    \n-
    \n-
    209
    \n-
    210 template<bool hi, class It,
    \n-
    211 typename std::enable_if<not hi,int>::type = 0>
    \n-
    \n-
    212 It indicesImp(const Node& node, It multiIndices) const
    \n-
    213 {
    \n-
    214 using namespace Dune::Indices;
    \n-
    215 for(std::size_t child=0; child<dim; ++child)
    \n-
    216 {
    \n-
    217 size_type subTreeSize = node.child(_0, 0).size();
    \n-
    218 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);
    \n-
    219 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    220 {
    \n-
    221 multiIndexPushFront(multiIndices[i], 0);
    \n-
    222 multiIndices[i][1] = multiIndices[i][1]*dim + child;
    \n-
    223 }
    \n-
    224 multiIndices += subTreeSize;
    \n-
    225 }
    \n-
    226 size_type subTreeSize = node.child(_1).size();
    \n-
    227 pq1PreBasis_.indices(node.child(_1), multiIndices);
    \n-
    228 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    229 multiIndexPushFront(multiIndices[i], 1);
    \n-
    230 multiIndices += subTreeSize;
    \n-
    231 return multiIndices;
    \n-
    232 }
    \n-
    \n-
    233
    \n-
    234 template<bool hi, class It,
    \n-
    235 typename std::enable_if<hi,int>::type = 0>
    \n-
    \n-
    236 It indicesImp(const Node& node, It multiIndices) const
    \n-
    237 {
    \n-
    238 using namespace Dune::Indices;
    \n-
    239 for(std::size_t child=0; child<dim; ++child)
    \n-
    240 {
    \n-
    241 size_type subTreeSize = node.child(_0, 0).size();
    \n-
    242 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);
    \n-
    243 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    244 {
    \n-
    245 multiIndexPushFront(multiIndices[i], 0);
    \n-
    246 multiIndices[i].push_back(i);
    \n-
    247 }
    \n-
    248 multiIndices += subTreeSize;
    \n-
    249 }
    \n-
    250 size_type subTreeSize = node.child(_1).size();
    \n-
    251 pq1PreBasis_.indices(node.child(_1), multiIndices);
    \n-
    252 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n-
    253 multiIndexPushFront(multiIndices[i], 1);
    \n-
    254 multiIndices += subTreeSize;
    \n-
    255 return multiIndices;
    \n-
    256 }
    \n-
    \n-
    257
    \n-\n-
    259
    \n-\n-\n-
    262};
    \n-
    \n-
    263
    \n-
    264
    \n+
    115 auto localValue = globalValue;
    \n+
    116 jacobianInverseTransposed.mtv(globalValue, localValue);
    \n+
    117 localValue *= integrationElement;
    \n+
    118
    \n+
    119 return localValue;
    \n+
    120 }
    \n+
    121 };
    \n+
    122 };
    \n+
    123
    \n+
    137 struct CovariantPiolaTransformator
    \n+
    138 {
    \n+
    143 template<typename Values, typename LocalCoordinate, typename Geometry>
    \n+
    144 static auto apply(Values& values,
    \n+
    145 const LocalCoordinate& xi,
    \n+
    146 const Geometry& geometry)
    \n+
    147 {
    \n+
    148 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);
    \n+
    149
    \n+
    150 for (auto& value : values)
    \n+
    151 {
    \n+
    152 auto tmp = value;
    \n+
    153 jacobianInverseTransposed.mv(tmp, value);
    \n+
    154 }
    \n+
    155 }
    \n+
    156
    \n+
    166 template<typename Gradients, typename LocalCoordinate, typename Geometry>
    \n+
    167 static auto applyJacobian(Gradients& gradients,
    \n+
    168 const LocalCoordinate& xi,
    \n+
    169 const Geometry& geometry)
    \n+
    170 {
    \n+
    171 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);
    \n+
    172
    \n+
    173 for (auto& gradient : gradients)
    \n+
    174 {
    \n+
    175 auto tmp = gradient;
    \n+
    176 gradient = 0;
    \n+
    177 for (size_t j=0; j<gradient.N(); j++)
    \n+
    178 for (size_t k=0; k<gradient.M(); k++)
    \n+
    179 // Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix
    \n+
    180 for(auto&& [jacobianInverseTransposed_j_l, l] : sparseRange(jacobianInverseTransposed[j]))
    \n+
    181 gradient[j][k] += jacobianInverseTransposed_j_l * tmp[l][k];
    \n+
    182 }
    \n+
    183 }
    \n+
    184
    \n+
    192 template<class Function, class LocalCoordinate, class Element>
    \n+
    193 class LocalValuedFunction
    \n+
    194 {
    \n+
    195 const Function& f_;
    \n+
    196 const Element& element_;
    \n+
    197
    \n+
    198 public:
    \n+
    199
    \n+
    200 LocalValuedFunction(const Function& f, const Element& element)
    \n+
    201 : f_(f), element_(element)
    \n+
    202 {}
    \n+
    203
    \n+
    204 auto operator()(const LocalCoordinate& xi) const
    \n+
    205 {
    \n+
    206 auto&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);
    \n+
    207 auto globalValue = f(xi);
    \n+
    208
    \n+
    209 // Apply the inverse Piola transform
    \n+
    210 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);
    \n+
    211
    \n+
    212 auto localValue = globalValue;
    \n+
    213 jacobianTransposed.mv(globalValue, localValue);
    \n+
    214
    \n+
    215 return localValue;
    \n+
    216 }
    \n+
    217 };
    \n+
    218 };
    \n+
    219
    \n+
    226 template<class Transformator, class LocalValuedLocalBasis, class Element>
    \n+
    227 class GlobalValuedLocalBasis
    \n+
    228 {
    \n+
    229 public:
    \n+
    230 using Traits = typename LocalValuedLocalBasis::Traits;
    \n+
    231
    \n+
    234 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const Element& element)
    \n+
    235 {
    \n+
    236 localValuedLocalBasis_ = &localValuedLocalBasis;
    \n+
    237 element_ = &element;
    \n+
    238 }
    \n+
    239
    \n+
    242 auto size() const
    \n+
    243 {
    \n+
    244 return localValuedLocalBasis_->size();
    \n+
    245 }
    \n+
    246
    \n+
    248 void evaluateFunction(const typename Traits::DomainType& x,
    \n+
    249 std::vector<typename Traits::RangeType>& out) const
    \n+
    250 {
    \n+
    251 localValuedLocalBasis_->evaluateFunction(x,out);
    \n+
    252
    \n+
    253 Transformator::apply(out, x, element_->geometry());
    \n+
    254 }
    \n+
    255
    \n+
    261 void evaluateJacobian(const typename Traits::DomainType& x,
    \n+
    262 std::vector<typename Traits::JacobianType>& out) const
    \n+
    263 {
    \n+
    264 localValuedLocalBasis_->evaluateJacobian(x,out);
    \n
    265
    \n-
    266template<typename GV>
    \n-
    \n-\n-
    268 public PowerBasisNode<LagrangeNode<GV,2>, GV::dimension>
    \n-
    269{
    \n-\n-\n-
    272
    \n-
    273public:
    \n-
    \n-\n-
    275 {
    \n-
    276 for(int i=0; i<GV::dimension; ++i)
    \n-
    277 this->setChild(i, std::make_shared<PQ2Node>());
    \n-
    278 }
    \n-
    \n-
    279};
    \n-
    \n-
    280
    \n-
    281template<typename GV>
    \n-
    \n-\n-
    283 public CompositeBasisNode<
    \n-
    284 TaylorHoodVelocityTree<GV>,
    \n-
    285 LagrangeNode<GV,1>
    \n-
    286 >
    \n-
    287{
    \n-\n-\n-
    290
    \n-\n+
    266 Transformator::applyJacobian(out, x, element_->geometry());
    \n+
    267 }
    \n+
    268
    \n+
    275 void partial(const std::array<unsigned int,2>& order,
    \n+
    276 const typename Traits::DomainType& x,
    \n+
    277 std::vector<typename Traits::RangeType>& out) const
    \n+
    278 {
    \n+
    279 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
    \n+
    280 if (totalOrder == 0) {
    \n+
    281 evaluateFunction(x, out);
    \n+
    282 } else if (totalOrder == 1) {
    \n+
    283 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
    \n+
    284 out.resize(size());
    \n+
    285
    \n+
    286 // TODO: The following is wasteful: We compute the full Jacobian and then return
    \n+
    287 // only a part of it. While we need the full Jacobian of the underlying local-valued LFE,
    \n+
    288 // it should be possible to compute only a partial Piola transform for the requested
    \n+
    289 // partial derivatives.
    \n+
    290 std::vector<typename Traits::JacobianType> fullJacobian;
    \n+
    291 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);
    \n
    292
    \n-
    293public:
    \n-
    \n-\n-
    295 {
    \n-
    296 this->template setChild<0>(std::make_shared<VelocityNode>());
    \n-
    297 this->template setChild<1>(std::make_shared<PressureNode>());
    \n-
    298 }
    \n-
    \n-
    299};
    \n-
    \n-
    300
    \n-
    301
    \n+
    293 Transformator::applyJacobian(fullJacobian, x, element_->geometry());
    \n+
    294
    \n+
    295 for (std::size_t i=0; i<out.size(); i++)
    \n+
    296 for (std::size_t j=0; j<out[i].size(); j++)
    \n+
    297 out[i][j] = fullJacobian[i][j][direction];
    \n+
    298
    \n+
    299 } else
    \n+
    300 DUNE_THROW(NotImplemented, "Partial derivatives of order 2 or higher");
    \n+
    301 }
    \n
    302
    \n-
    303namespace BasisFactory {
    \n-
    304
    \n-
    \n-
    311inline auto taylorHood()
    \n-
    312{
    \n-
    313 return [](const auto& gridView) {
    \n-
    314 return TaylorHoodPreBasis<std::decay_t<decltype(gridView)>>(gridView);
    \n-
    315 };
    \n-
    316}
    \n-
    \n-
    317
    \n-
    318} // end namespace BasisFactory
    \n-
    319
    \n-
    320// *****************************************************************************
    \n-
    321// This is the actual global basis implementation based on the reusable parts.
    \n-
    322// *****************************************************************************
    \n-
    323
    \n-
    345template<typename GV>
    \n-\n-
    347
    \n-
    348
    \n-
    349
    \n-
    350} // end namespace Functions
    \n-
    351} // end namespace Dune
    \n-
    352
    \n-
    353
    \n-
    354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n-\n-\n-\n-
    auto taylorHood()
    Create a pre-basis factory that can create a Taylor-Hood pre-basis.
    Definition taylorhoodbasis.hh:311
    \n-
    Definition polynomial.hh:10
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n-
    Definition lagrangebasis.hh:387
    \n-\n-
    It indices(const Node &node, It it) const
    Definition lagrangebasis.hh:192
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition lagrangebasis.hh:96
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition lagrangebasis.hh:126
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition lagrangebasis.hh:184
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition lagrangebasis.hh:140
    \n-
    size_type size() const
    Definition nodes.hh:142
    \n-
    Definition nodes.hh:193
    \n-\n-
    Definition taylorhoodbasis.hh:269
    \n-
    TaylorHoodVelocityTree()
    Definition taylorhoodbasis.hh:274
    \n-
    Definition taylorhoodbasis.hh:287
    \n-
    TaylorHoodBasisTree()
    Definition taylorhoodbasis.hh:294
    \n-
    Pre-basis for lowest order Taylor-Hood basis.
    Definition taylorhoodbasis.hh:61
    \n-
    TaylorHoodPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition taylorhoodbasis.hh:89
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition taylorhoodbasis.hh:103
    \n-
    static constexpr size_type minMultiIndexSize
    Definition taylorhoodbasis.hh:78
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition taylorhoodbasis.hh:131
    \n-
    GridView gridView_
    Definition taylorhoodbasis.hh:258
    \n-
    GV GridView
    The grid view that the FE basis is defined on.
    Definition taylorhoodbasis.hh:69
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition taylorhoodbasis.hh:109
    \n-
    PQ2PreBasis pq2PreBasis_
    Definition taylorhoodbasis.hh:261
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition taylorhoodbasis.hh:124
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition taylorhoodbasis.hh:182
    \n-
    PQ1PreBasis pq1PreBasis_
    Definition taylorhoodbasis.hh:260
    \n-
    static const void multiIndexPushFront(MultiIndex &M, size_type M0)
    Definition taylorhoodbasis.hh:202
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition taylorhoodbasis.hh:77
    \n-
    Node makeNode() const
    Create tree node.
    Definition taylorhoodbasis.hh:118
    \n-
    It indices(const Node &node, It it) const
    Definition taylorhoodbasis.hh:194
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition taylorhoodbasis.hh:79
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition taylorhoodbasis.hh:96
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition taylorhoodbasis.hh:188
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition taylorhoodbasis.hh:72
    \n-
    It indicesImp(const Node &node, It multiIndices) const
    Definition taylorhoodbasis.hh:212
    \n+
    304 auto order() const
    \n+
    305 {
    \n+
    306 return localValuedLocalBasis_->order();
    \n+
    307 }
    \n+
    308
    \n+
    309 const LocalValuedLocalBasis* localValuedLocalBasis_;
    \n+
    310 const Element* element_;
    \n+
    311 };
    \n+
    312
    \n+
    321 template<class Transformator, class LocalValuedLocalInterpolation, class Element>
    \n+
    322 class GlobalValuedLocalInterpolation
    \n+
    323 {
    \n+
    324 public:
    \n+
    327 void bind(const LocalValuedLocalInterpolation& localValuedLocalInterpolation, const Element& element)
    \n+
    328 {
    \n+
    329 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;
    \n+
    330 element_ = &element;
    \n+
    331 }
    \n+
    332
    \n+
    333 template<typename F, typename C>
    \n+
    334 void interpolate (const F& f, std::vector<C>& out) const
    \n+
    335 {
    \n+
    336 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;
    \n+
    337 typename Transformator::template LocalValuedFunction<F,LocalCoordinate,Element> localValuedFunction(f, *element_);
    \n+
    338 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);
    \n+
    339 }
    \n+
    340
    \n+
    341 private:
    \n+
    342 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;
    \n+
    343 const Element* element_;
    \n+
    344 };
    \n+
    345
    \n+
    346
    \n+
    353 template<class Transformator, class LocalValuedLFE, class Element>
    \n+
    354 class GlobalValuedLocalFiniteElement
    \n+
    355 {
    \n+
    356 using LocalBasis = GlobalValuedLocalBasis<Transformator,
    \n+
    357 typename LocalValuedLFE::Traits::LocalBasisType,
    \n+
    358 Element>;
    \n+
    359 using LocalInterpolation = GlobalValuedLocalInterpolation<Transformator,
    \n+
    360 typename LocalValuedLFE::Traits::LocalInterpolationType,
    \n+
    361 Element>;
    \n+
    362
    \n+
    363 public:
    \n+
    366 using Traits = LocalFiniteElementTraits<LocalBasis,
    \n+
    367 typename LocalValuedLFE::Traits::LocalCoefficientsType,
    \n+
    368 LocalInterpolation>;
    \n+
    369
    \n+
    370 GlobalValuedLocalFiniteElement() {}
    \n+
    371
    \n+
    372 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)
    \n+
    373 {
    \n+
    374 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);
    \n+
    375 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(), element);
    \n+
    376 localValuedLFE_ = &localValuedLFE;
    \n+
    377 }
    \n+
    378
    \n+
    381 const typename Traits::LocalBasisType& localBasis() const
    \n+
    382 {
    \n+
    383 return globalValuedLocalBasis_;
    \n+
    384 }
    \n+
    385
    \n+
    388 const typename Traits::LocalCoefficientsType& localCoefficients() const
    \n+
    389 {
    \n+
    390 return localValuedLFE_->localCoefficients();
    \n+
    391 }
    \n+
    392
    \n+
    395 const typename Traits::LocalInterpolationType& localInterpolation() const
    \n+
    396 {
    \n+
    397 return globalValuedLocalInterpolation_;
    \n+
    398 }
    \n+
    399
    \n+
    401 std::size_t size() const
    \n+
    402 {
    \n+
    403 return localValuedLFE_->size();
    \n+
    404 }
    \n+
    405
    \n+
    408 GeometryType type() const
    \n+
    409 {
    \n+
    410 return localValuedLFE_->type();
    \n+
    411 }
    \n+
    412
    \n+
    413 private:
    \n+
    414
    \n+
    415 typename Traits::LocalBasisType globalValuedLocalBasis_;
    \n+
    416 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;
    \n+
    417 const LocalValuedLFE* localValuedLFE_;
    \n+
    418 };
    \n+
    419
    \n+
    420} // namespace Dune::Functions::Impl
    \n+
    421
    \n+
    422#endif // 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:202
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,436 +1,336 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n 5\n-6#include \n-7#include \n-8#include \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/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n-14\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_\ba_\bg_\br_\ba_\bn_\bg_\be_\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/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-17\n-18namespace _\bD_\bu_\bn_\be {\n-19namespace Functions {\n-20\n-21\n-22/\n-/ *****************************************************************************\n-23// This is the reusable part of the basis. It contains\n-24//\n-25// TaylorHoodPreBasis\n-26// TaylorHoodBasisTree\n-27// TaylorHoodVelocityTree\n-28//\n-29// The pre-basis allows to create the others and is the owner of possible\n-shared\n-30// state. These components do _not_ depend on the global basis and local view\n-31// and can be used without a global basis.\n-32/\n-/ *****************************************************************************\n-33\n-34template\n-35class TaylorHoodVelocityTree;\n-36\n-37template\n-38class TaylorHoodBasisTree;\n-39\n-59template\n-_\b6_\b0class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-61{\n-62 static const bool useHybridIndices = HI;\n-63\n-64 static const int dim = GV::dimension;\n-65\n-66public:\n-67\n-_\b6_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-70\n-_\b7_\b2 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-73\n-_\b7_\b5 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-76\n-_\b7_\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 = useHybridIndices ? 3 : 2;\n-_\b7_\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 = 2;\n-_\b7_\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 = _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be;\n-80\n-81private:\n-82\n-83 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-84 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-85\n-86public:\n-87\n-_\b8_\b9 _\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-90 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n-91 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(gv),\n-92 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(gv)\n-93 {}\n-94\n-_\b9_\b6 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-97 {\n-98 _\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-99 _\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-100 }\n+6#include \n+7#include \n+8\n+9#include \n+10#include \n+11#include \n+12#include \n+13\n+14#include \n+15\n+16#include \n+17#include \n+18#include \n+19\n+20namespace Dune::Functions::Impl\n+21{\n+22\n+36 struct ContravariantPiolaTransformator\n+37 {\n+42 template\n+43 static auto apply(Values& values,\n+44 const LocalCoordinate& xi,\n+45 const Geometry& geometry)\n+46 {\n+47 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n+48 auto integrationElement = geometry.integrationElement(xi);\n+49\n+50 for (auto& value : values)\n+51 {\n+52 auto tmp = value;\n+53 jacobianTransposed.mtv(tmp, value);\n+54 value /= integrationElement;\n+55 }\n+56 }\n+57\n+67 template\n+68 static auto applyJacobian(Gradients& gradients,\n+69 const LocalCoordinate& xi,\n+70 const Geometry& geometry)\n+71 {\n+72 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n+73 auto integrationElement = geometry.integrationElement(xi);\n+74 for (auto& gradient : gradients)\n+75 {\n+76 auto tmp = gradient;\n+77 gradient = 0;\n+78 for (size_t k=0; k\n+95 class LocalValuedFunction\n+96 {\n+97 const Function& f_;\n+98 const Element& element_;\n+99\n+100 public:\n 101\n-_\b1_\b0_\b3 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-104 {\n-105 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-106 }\n-107\n-_\b1_\b0_\b9 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-110 {\n-111 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bu_\bp_\bd_\ba_\bt_\be(gv);\n-112 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bu_\bp_\bd_\ba_\bt_\be(gv);\n-113 }\n+102 LocalValuedFunction(const Function& f, const Element& element)\n+103 : f_(f), element_(element)\n+104 {}\n+105\n+106 auto operator()(const LocalCoordinate& xi) const\n+107 {\n+108 auto&& f = Dune::Impl::makeFunctionWithCallOperator(f_);\n+109 auto globalValue = f(xi);\n+110\n+111 // Apply the inverse Piola transform\n+112 auto jacobianInverseTransposed = element_.geometry\n+().jacobianInverseTransposed(xi);\n+113 auto integrationElement = element_.geometry().integrationElement(xi);\n 114\n-_\b1_\b1_\b8 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-119 {\n-120 return _\bN_\bo_\bd_\be{};\n-121 }\n-122\n-_\b1_\b2_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-125 {\n-126 return 2;\n-127 }\n-128\n-130 template\n-_\b1_\b3_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-132 {\n-133 return sizeImp(prefix);\n-134 }\n-135\n-136private:\n-137\n-138 template::type = 0>\n-140 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeImp(const SizePrefix& prefix) const\n-141 {\n-142 if (prefix.size() == 0)\n-143 return 2;\n-144 if (prefix.size() == 1)\n-145 {\n-146 if (prefix[0] == 0)\n-147 return dim * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n-148 if (prefix[0] == 1)\n-149 return _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n-150 }\n-151 assert(prefix.size() == 2);\n-152 return 0;\n-153 }\n-154\n-155 template::type = 0>\n-157 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeImp(const SizePrefix& prefix) const\n-158 {\n-159 if (prefix.size() == 0)\n-160 return 2;\n-161 if (prefix.size() == 1)\n-162 {\n-163 if (prefix[0] == 0)\n-164 return _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n-165 if (prefix[0] == 1)\n-166 return _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n-167 }\n-168 if (prefix.size() == 2)\n-169 {\n-170 if (prefix[0] == 0)\n-171 return dim;\n-172 if (prefix[0] == 1)\n-173 return 0;\n-174 }\n-175 assert(prefix.size() == 3);\n-176 return 0;\n-177 }\n-178\n-179public:\n-180\n-_\b1_\b8_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-183 {\n-184 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-185 }\n-186\n-_\b1_\b8_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-189 {\n-190 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-191 }\n-192\n-193 template\n-_\b1_\b9_\b4 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-195 {\n-196 return indicesImp(node, it);\n-197 }\n-198\n-199protected:\n-200\n-201 template\n-_\b2_\b0_\b2 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-203 {\n-204 M.resize(M.size()+1);\n-205 for(std::size_t i=M.size()-1; i>0; --i)\n-206 M[i] = M[i-1];\n-207 M[0] = M0;\n-208 }\n-209\n-210 template::type = 0>\n-_\b2_\b1_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp(const _\bN_\bo_\bd_\be& node, It multiIndices) const\n-213 {\n-214 using namespace Dune::Indices;\n-215 for(std::size_t child=0; child::type = 0>\n-_\b2_\b3_\b6 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp(const _\bN_\bo_\bd_\be& node, It multiIndices) const\n-237 {\n-238 using namespace Dune::Indices;\n-239 for(std::size_t child=0; child\n+144 static auto apply(Values& values,\n+145 const LocalCoordinate& xi,\n+146 const Geometry& geometry)\n+147 {\n+148 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n+149\n+150 for (auto& value : values)\n+151 {\n+152 auto tmp = value;\n+153 jacobianInverseTransposed.mv(tmp, value);\n+154 }\n+155 }\n+156\n+166 template\n+167 static auto applyJacobian(Gradients& gradients,\n+168 const LocalCoordinate& xi,\n+169 const Geometry& geometry)\n+170 {\n+171 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n+172\n+173 for (auto& gradient : gradients)\n+174 {\n+175 auto tmp = gradient;\n+176 gradient = 0;\n+177 for (size_t j=0; j\n+193 class LocalValuedFunction\n+194 {\n+195 const Function& f_;\n+196 const Element& element_;\n+197\n+198 public:\n+199\n+200 LocalValuedFunction(const Function& f, const Element& element)\n+201 : f_(f), element_(element)\n+202 {}\n+203\n+204 auto operator()(const LocalCoordinate& xi) const\n+205 {\n+206 auto&& f = Dune::Impl::makeFunctionWithCallOperator(f_);\n+207 auto globalValue = f(xi);\n+208\n+209 // Apply the inverse Piola transform\n+210 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);\n+211\n+212 auto localValue = globalValue;\n+213 jacobianTransposed.mv(globalValue, localValue);\n+214\n+215 return localValue;\n+216 }\n+217 };\n+218 };\n+219\n+226 template\n+227 class GlobalValuedLocalBasis\n+228 {\n+229 public:\n+230 using Traits = typename LocalValuedLocalBasis::Traits;\n+231\n+234 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const\n+Element& element)\n+235 {\n+236 localValuedLocalBasis_ = &localValuedLocalBasis;\n+237 element_ = &element;\n+238 }\n+239\n+242 auto size() const\n+243 {\n+244 return localValuedLocalBasis_->size();\n+245 }\n+246\n+248 void evaluateFunction(const typename Traits::DomainType& x,\n+249 std::vector& out) const\n+250 {\n+251 localValuedLocalBasis_->evaluateFunction(x,out);\n+252\n+253 Transformator::apply(out, x, element_->geometry());\n+254 }\n+255\n+261 void evaluateJacobian(const typename Traits::DomainType& x,\n+262 std::vector& out) const\n+263 {\n+264 localValuedLocalBasis_->evaluateJacobian(x,out);\n 265\n-266template\n-_\b2_\b6_\b7class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be :\n-268 public _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be, GV::dimension>\n-269{\n-270 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-271 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-272\n-273public:\n-_\b2_\b7_\b4 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be()\n-275 {\n-276 for(int i=0; isetChild(i, std::make_shared());\n-278 }\n-279};\n-280\n-281template\n-_\b2_\b8_\b2class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be :\n-283 public _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be<\n-284 TaylorHoodVelocityTree,\n-285 LagrangeNode\n-286 >\n-287{\n-288 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-289 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-290\n-291 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+266 Transformator::applyJacobian(out, x, element_->geometry());\n+267 }\n+268\n+275 void partial(const std::array& order,\n+276 const typename Traits::DomainType& x,\n+277 std::vector& out) const\n+278 {\n+279 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);\n+280 if (totalOrder == 0) {\n+281 evaluateFunction(x, out);\n+282 } else if (totalOrder == 1) {\n+283 auto const direction = std::distance(order.begin(), std::find(order.begin\n+(), order.end(), 1));\n+284 out.resize(size());\n+285\n+286 // TODO: The following is wasteful: We compute the full Jacobian and then\n+return\n+287 // only a part of it. While we need the full Jacobian of the underlying\n+local-valued LFE,\n+288 // it should be possible to compute only a partial Piola transform for the\n+requested\n+289 // partial derivatives.\n+290 std::vector fullJacobian;\n+291 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);\n 292\n-293public:\n-_\b2_\b9_\b4 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be()\n-295 {\n-296 this->template setChild<0>(std::make_shared());\n-297 this->template setChild<1>(std::make_shared());\n-298 }\n-299};\n-300\n-301\n+293 Transformator::applyJacobian(fullJacobian, x, element_->geometry());\n+294\n+295 for (std::size_t i=0; i>(gridView);\n-315 };\n-316}\n-317\n-318} // end namespace BasisFactory\n-319\n-320/\n-/ *****************************************************************************\n-321// This is the actual global basis implementation based on the reusable\n-parts.\n-322/\n-/ *****************************************************************************\n-323\n-345template\n-_\b3_\b4_\b6using _\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-347\n-348\n-349\n-350} // end namespace Functions\n-351} // end namespace Dune\n-352\n-353\n-354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\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:311\n-_\bD_\bu_\bn_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n-_\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:46\n-_\bD_\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:387\n-_\bD_\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: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_\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:96\n-_\bD_\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:126\n-_\bD_\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:184\n-_\bD_\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\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 lagrangebasis.hh:140\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:142\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:193\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:219\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:269\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:274\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:287\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:294\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:61\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:89\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:103\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:78\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:131\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:258\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:69\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:109\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:261\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:124\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:182\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:260\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:202\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:77\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:118\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:194\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:79\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:96\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:188\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:72\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:212\n+304 auto order() const\n+305 {\n+306 return localValuedLocalBasis_->order();\n+307 }\n+308\n+309 const LocalValuedLocalBasis* localValuedLocalBasis_;\n+310 const Element* element_;\n+311 };\n+312\n+321 template\n+322 class GlobalValuedLocalInterpolation\n+323 {\n+324 public:\n+327 void bind(const LocalValuedLocalInterpolation&\n+localValuedLocalInterpolation, const Element& element)\n+328 {\n+329 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;\n+330 element_ = &element;\n+331 }\n+332\n+333 template\n+334 void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const F& f, std::vector& out) const\n+335 {\n+336 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;\n+337 typename Transformator::template\n+LocalValuedFunction localValuedFunction(f,\n+*element_);\n+338 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);\n+339 }\n+340\n+341 private:\n+342 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;\n+343 const Element* element_;\n+344 };\n+345\n+346\n+353 template\n+354 class GlobalValuedLocalFiniteElement\n+355 {\n+356 using LocalBasis = GlobalValuedLocalBasis;\n+359 using LocalInterpolation = GlobalValuedLocalInterpolation;\n+362\n+363 public:\n+366 using Traits = LocalFiniteElementTraits;\n+369\n+370 GlobalValuedLocalFiniteElement() {}\n+371\n+372 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)\n+373 {\n+374 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);\n+375 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(),\n+element);\n+376 localValuedLFE_ = &localValuedLFE;\n+377 }\n+378\n+381 const typename Traits::LocalBasisType& localBasis() const\n+382 {\n+383 return globalValuedLocalBasis_;\n+384 }\n+385\n+388 const typename Traits::LocalCoefficientsType& localCoefficients() const\n+389 {\n+390 return localValuedLFE_->localCoefficients();\n+391 }\n+392\n+395 const typename Traits::LocalInterpolationType& localInterpolation() const\n+396 {\n+397 return globalValuedLocalInterpolation_;\n+398 }\n+399\n+401 std::size_t size() const\n+402 {\n+403 return localValuedLFE_->size();\n+404 }\n+405\n+408 GeometryType type() const\n+409 {\n+410 return localValuedLFE_->type();\n+411 }\n+412\n+413 private:\n+414\n+415 typename Traits::LocalBasisType globalValuedLocalBasis_;\n+416 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;\n+417 const LocalValuedLFE* localValuedLFE_;\n+418 };\n+419\n+420} // namespace Dune::Functions::Impl\n+421\n+422#endif /\n+/ DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+_\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:202\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00080.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00080.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: subspacebasis.hh File Reference\n+dune-functions: interpolate.hh File Reference\n \n \n \n \n \n \n \n@@ -70,56 +70,57 @@\n \n \n
    \n \n-
    subspacebasis.hh File Reference
    \n+
    interpolate.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/functions/functionspacebases/concepts.hh>
    \n+
    #include <memory>
    \n+#include <vector>
    \n+#include <dune/common/exceptions.hh>
    \n+#include <dune/common/bitsetvector.hh>
    \n+#include <dune/typetree/childextraction.hh>
    \n+#include <dune/functions/gridfunctions/gridviewfunction.hh>
    \n+#include <dune/functions/common/functionconcepts.hh>
    \n+#include <dune/functions/backends/concepts.hh>
    \n+#include <dune/functions/backends/istlvectorbackend.hh>
    \n+#include <dune/functions/functionspacebases/sizeinfo.hh>
    \n+#include <dune/functions/functionspacebases/flatvectorview.hh>
    \n+#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>
    \n+#include <dune/typetree/traversal.hh>
    \n+#include <dune/typetree/visitor.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n-Classes

    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+\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 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,46 +1,46 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-subspacebasis.hh File Reference\n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bl_\bo_\bc_\ba_\bl_\bv_\bi_\be_\bw_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+_\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 <_\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/_\bs_\bi_\bz_\be_\bi_\bn_\bf_\bo_\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+#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-\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+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/a00080_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: subspacebasis.hh Source File\n+dune-functions: interpolate.hh Source File\n \n \n \n \n \n \n \n@@ -74,207 +74,292 @@\n \n \n
    \n
    \n-
    subspacebasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n
    5
    \n-
    6#include <dune/common/reservedvector.hh>
    \n-
    7#include <dune/common/typeutilities.hh>
    \n-
    8#include <dune/common/concept.hh>
    \n-
    9
    \n-\n-\n-\n+
    6#include <memory>
    \n+
    7#include <vector>
    \n+
    8
    \n+
    9#include <dune/common/exceptions.hh>
    \n+
    10#include <dune/common/bitsetvector.hh>
    \n+
    11
    \n+
    12#include <dune/typetree/childextraction.hh>
    \n
    13
    \n-
    14
    \n-
    15
    \n-
    16namespace Dune {
    \n-
    17namespace Functions {
    \n-
    18
    \n-
    19
    \n-
    20
    \n-
    21namespace Impl {
    \n+\n+\n+
    16
    \n+\n+\n+\n+\n+\n
    22
    \n-
    23 template<class... Inner, class... Outer>
    \n-
    24 auto joinTreePaths(const TypeTree::HybridTreePath<Inner...>& inner, const TypeTree::HybridTreePath<Outer...> outer)
    \n-
    25 {
    \n-
    26 return TypeTree::HybridTreePath<Inner..., Outer...>(std::tuple_cat(inner._data, outer._data));
    \n-
    27 }
    \n+
    23#include <dune/typetree/traversal.hh>
    \n+
    24#include <dune/typetree/visitor.hh>
    \n+
    25
    \n+
    26namespace Dune {
    \n+
    27namespace Functions {
    \n
    28
    \n-
    29 template<class InnerTP, class OuterTP>
    \n-
    30 using JoinTreePath_t = std::decay_t<decltype(joinTreePaths(std::declval<InnerTP>(), std::declval<OuterTP>()))>;
    \n-
    31
    \n-
    32}
    \n-
    33
    \n-
    34
    \n-
    35
    \n-
    36template<class RB, class TP>
    \n-
    \n-\n-
    38{
    \n-
    39public:
    \n-
    40
    \n-
    41 using RootBasis = RB;
    \n+
    29namespace Imp {
    \n+
    30
    \n+
    31struct AllTrueBitSetVector
    \n+
    32{
    \n+
    33 struct AllTrueBitSet
    \n+
    34 {
    \n+
    35 bool test(int) const { return true; }
    \n+
    36 } allTrue_;
    \n+
    37
    \n+
    38 operator bool() const
    \n+
    39 {
    \n+
    40 return true;
    \n+
    41 }
    \n
    42
    \n-
    43 using RootLocalView = typename RootBasis::LocalView;
    \n-
    44
    \n-
    45 using PrefixPath = TP;
    \n-
    46
    \n-
    48 using GridView = typename RootBasis::GridView;
    \n-
    49
    \n-
    51 using MultiIndex = typename RootBasis::MultiIndex;
    \n+
    43 template<class I>
    \n+
    44 const AllTrueBitSetVector& operator[](const I&) const
    \n+
    45 {
    \n+
    46 return *this;
    \n+
    47 }
    \n+
    48
    \n+
    49 template<class SP>
    \n+
    50 void resize(const SP&) const
    \n+
    51 {}
    \n
    52
    \n-
    53 using size_type = std::size_t;
    \n+
    53};
    \n
    54
    \n-\n-
    57
    \n-
    58 using SizePrefix = typename RootBasis::SizePrefix;
    \n-
    59
    \n-
    60
    \n-\n-
    66
    \n-
    72 template<class RootRootBasis, class InnerTP, class OuterTP>
    \n-\n-
    76
    \n+
    55
    \n+
    56
    \n+
    57template <class B, class T, class NTRE, class HV, class LF, class HBV>
    \n+
    58class LocalInterpolateVisitor
    \n+
    59 : public TypeTree::TreeVisitor
    \n+
    60 , public TypeTree::DynamicTraversal
    \n+
    61{
    \n+
    62
    \n+
    63public:
    \n+
    64
    \n+
    65 using Basis = B;
    \n+
    66 using LocalView = typename B::LocalView;
    \n+
    67 using MultiIndex = typename LocalView::MultiIndex;
    \n+
    68
    \n+
    69 using LocalFunction = LF;
    \n+
    70
    \n+
    71 using Tree = T;
    \n+
    72
    \n+
    73 using VectorBackend = HV;
    \n+
    74 using BitVectorBackend = HBV;
    \n+
    75
    \n+
    76 using NodeToRangeEntry = NTRE;
    \n
    77
    \n-
    \n-
    80 const GridView& gridView() const
    \n-
    81 {
    \n-
    82 return rootBasis_->gridView();
    \n-
    83 }
    \n-
    \n+
    78 using GridView = typename Basis::GridView;
    \n+
    79 using Element = typename GridView::template Codim<0>::Entity;
    \n+
    80
    \n+
    81 using LocalDomain = typename Element::Geometry::LocalCoordinate;
    \n+
    82
    \n+
    83 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;
    \n
    84
    \n-
    \n-\n-
    89 {
    \n-
    90 return rootBasis_->dimension();
    \n-
    91 }
    \n-
    \n-
    92
    \n-
    \n-\n-
    95 {
    \n-
    96 return rootBasis_->size();
    \n-
    97 }
    \n-
    \n+
    85 LocalInterpolateVisitor(const B& /*basis*/, HV& coeff, const HBV& bitVector, const LF& localF, const LocalView& localView, const NodeToRangeEntry& nodeToRangeEntry) :
    \n+
    86 vector_(coeff),
    \n+
    87 localF_(localF),
    \n+
    88 bitVector_(bitVector),
    \n+
    89 localView_(localView),
    \n+
    90 nodeToRangeEntry_(nodeToRangeEntry)
    \n+
    91 {
    \n+
    92 static_assert(Dune::Functions::Concept::isCallable<LocalFunction, LocalDomain>(), "Function passed to LocalInterpolateVisitor does not model the Callable<LocalCoordinate> concept");
    \n+
    93 }
    \n+
    94
    \n+
    95 template<typename Node, typename TreePath>
    \n+
    96 void pre(Node&, TreePath)
    \n+
    97 {}
    \n
    98
    \n-
    \n-
    100 size_type size(const SizePrefix& prefix) const
    \n-
    101 {
    \n-
    102 return rootBasis_->size(prefix);
    \n-
    103 }
    \n-
    \n-
    104
    \n-
    \n-\n-
    109 {
    \n-
    110 return LocalView(*this, prefixPath_);
    \n-
    111 }
    \n-
    \n+
    99 template<typename Node, typename TreePath>
    \n+
    100 void post(Node&, TreePath)
    \n+
    101 {}
    \n+
    102
    \n+
    103 template<typename Node, typename TreePath>
    \n+
    104 void leaf(Node& node, TreePath treePath)
    \n+
    105 {
    \n+
    106 using FiniteElement = typename Node::FiniteElement;
    \n+
    107 using FiniteElementRange = typename FiniteElement::Traits::LocalBasisType::Traits::RangeType;
    \n+
    108 using FiniteElementRangeField = typename FiniteElement::Traits::LocalBasisType::Traits::RangeFieldType;
    \n+
    109
    \n+
    110 auto interpolationCoefficients = std::vector<FiniteElementRangeField>();
    \n+
    111 auto&& fe = node.finiteElement();
    \n
    112
    \n-
    \n-
    113 const RootBasis& rootBasis() const
    \n-
    114 {
    \n-
    115 return *rootBasis_;
    \n-
    116 }
    \n-
    \n-
    117
    \n-
    \n-
    118 const PrefixPath& prefixPath() const
    \n-
    119 {
    \n-
    120 return prefixPath_;
    \n-
    121 }
    \n-
    \n-
    122
    \n-
    123protected:
    \n-\n-\n-
    126};
    \n-
    \n+
    113 // backward compatibility: for scalar basis functions and possibly vector valued coefficients
    \n+
    114 // (like used in dune-fufem for power bases) loop over the components
    \n+
    115 // of the coefficients
    \n+
    116 if constexpr ( FiniteElement::Traits::LocalBasisType::Traits::dimRange == 1 )
    \n+
    117 {
    \n+
    118 // Note that we capture j by reference. Hence we can switch
    \n+
    119 // the selected component later on by modifying j. Maybe we
    \n+
    120 // should avoid this naughty statefull lambda hack in favor
    \n+
    121 // of a separate helper class.
    \n+
    122 std::size_t j=0;
    \n+
    123 auto localFj = [&](const LocalDomain& x){
    \n+
    124 const auto& y = localF_(x);
    \n+
    125 return FiniteElementRange(flatVectorView(nodeToRangeEntry_(node, treePath, y))[j]);
    \n+
    126 };
    \n
    127
    \n-
    128
    \n-
    129// CTAD guide for a non-SubspaceBasis root basis
    \n-
    130template<class RB, class TP>
    \n-
    131SubspaceBasis(const RB&, const TP) -> SubspaceBasis<RB, TP>;
    \n+
    128 // We loop over j defined above and thus over the components of the
    \n+
    129 // range type of localF_.
    \n+
    130
    \n+
    131 auto blockSize = flatVectorView(vector_[localView_.index(0)]).size();
    \n
    132
    \n-
    133// CTAD guide for a SubspaceBasis root basis
    \n-
    134template<class RootRootBasis, class InnerTP, class OuterTP>
    \n-
    135SubspaceBasis(const SubspaceBasis<RootRootBasis, InnerTP>& rootBasis, const OuterTP& prefixPath)
    \n-
    136 -> SubspaceBasis<std::decay_t<decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t<InnerTP, OuterTP>>;
    \n-
    137
    \n-
    138
    \n-
    139
    \n-
    150template<class RootBasis, class... PrefixTreeIndices>
    \n-
    \n-
    151auto subspaceBasis(const RootBasis& rootBasis, const TypeTree::HybridTreePath<PrefixTreeIndices...>& prefixPath)
    \n-
    152{
    \n-
    153 return SubspaceBasis(rootBasis, prefixPath);
    \n-
    154}
    \n-
    \n+
    133 for(j=0; j<blockSize; ++j)
    \n+
    134 {
    \n+
    135 fe.localInterpolation().interpolate(localFj, interpolationCoefficients);
    \n+
    136 for (size_t i=0; i<fe.localBasis().size(); ++i)
    \n+
    137 {
    \n+
    138 auto multiIndex = localView_.index(node.localIndex(i));
    \n+
    139 auto bitVectorBlock = flatVectorView(bitVector_[multiIndex]);
    \n+
    140 if (bitVectorBlock[j])
    \n+
    141 {
    \n+
    142 auto vectorBlock = flatVectorView(vector_[multiIndex]);
    \n+
    143 vectorBlock[j] = interpolationCoefficients[i];
    \n+
    144 }
    \n+
    145 }
    \n+
    146 }
    \n+
    147 }
    \n+
    148 else // ( FiniteElement::Traits::LocalBasisType::Traits::dimRange != 1 )
    \n+
    149 {
    \n+
    150 // for all other finite elements: use the FiniteElementRange directly for the interpolation
    \n+
    151 auto localF = [&](const LocalDomain& x){
    \n+
    152 const auto& y = localF_(x);
    \n+
    153 return FiniteElementRange(nodeToRangeEntry_(node, treePath, y));
    \n+
    154 };
    \n
    155
    \n-
    156template<class RootBasis, class... PrefixTreeIndices>
    \n-
    \n-
    157auto subspaceBasis(const RootBasis& rootBasis, const PrefixTreeIndices&... prefixTreeIndices)
    \n-
    158{
    \n-
    159 return subspaceBasis(rootBasis, TypeTree::hybridTreePath(prefixTreeIndices...));
    \n-
    160}
    \n-
    \n-
    161
    \n-
    162
    \n-
    163
    \n-
    164} // end namespace Functions
    \n-
    165} // end namespace Dune
    \n-
    166
    \n+
    156 fe.localInterpolation().interpolate(localF, interpolationCoefficients);
    \n+
    157 for (size_t i=0; i<fe.localBasis().size(); ++i)
    \n+
    158 {
    \n+
    159 auto multiIndex = localView_.index(node.localIndex(i));
    \n+
    160 if ( bitVector_[multiIndex] )
    \n+
    161 {
    \n+
    162 vector_[multiIndex] = interpolationCoefficients[i];
    \n+
    163 }
    \n+
    164 }
    \n+
    165 }
    \n+
    166 }
    \n
    167
    \n
    168
    \n-
    169#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH
    \n-\n-\n+
    169protected:
    \n+
    170
    \n+
    171 VectorBackend& vector_;
    \n+
    172 const LocalFunction& localF_;
    \n+
    173 const BitVectorBackend& bitVector_;
    \n+
    174 const LocalView& localView_;
    \n+
    175 const NodeToRangeEntry& nodeToRangeEntry_;
    \n+
    176};
    \n+
    177
    \n+
    178
    \n+
    179} // namespace Imp
    \n+
    180
    \n+
    181
    \n+
    182
    \n+
    183
    \n+
    201template <class B, class C, class F, class BV, class NTRE>
    \n+
    \n+
    202void interpolate(const B& basis, C&& coeff, const F& f, const BV& bv, const NTRE& nodeToRangeEntry)
    \n+
    203{
    \n+
    204 using GridView = typename B::GridView;
    \n+
    205 using Element = typename GridView::template Codim<0>::Entity;
    \n+
    206
    \n+
    207 using Tree = typename B::LocalView::Tree;
    \n+
    208
    \n+
    209 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;
    \n+
    210
    \n+
    211 static_assert(Dune::Functions::Concept::isCallable<F, GlobalDomain>(), "Function passed to interpolate does not model the Callable<GlobalCoordinate> concept");
    \n+
    212
    \n+
    213 auto&& gridView = basis.gridView();
    \n+
    214
    \n+
    215 // Small helper functions to wrap vectors using istlVectorBackend
    \n+
    216 // if they do not already satisfy the VectorBackend interface.
    \n+
    217 auto toVectorBackend = [&](auto& v) -> decltype(auto) {
    \n+
    218 if constexpr (models<Concept::VectorBackend<B>, decltype(v)>()) {
    \n+
    219 return v;
    \n+
    220 } else {
    \n+
    221 return istlVectorBackend(v);
    \n+
    222 }
    \n+
    223 };
    \n+
    224
    \n+
    225 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {
    \n+
    226 if constexpr (models<Concept::ConstVectorBackend<B>, decltype(v)>()) {
    \n+
    227 return v;
    \n+
    228 } else {
    \n+
    229 return istlVectorBackend(v);
    \n+
    230 }
    \n+
    231 };
    \n+
    232
    \n+
    233 auto&& bitVector = toConstVectorBackend(bv);
    \n+
    234 auto&& vector = toVectorBackend(coeff);
    \n+
    235 vector.resize(sizeInfo(basis));
    \n+
    236
    \n+
    237
    \n+
    238
    \n+
    239 // Make a grid function supporting local evaluation out of f
    \n+
    240 auto gf = makeGridViewFunction(f, gridView);
    \n+
    241
    \n+
    242 // Obtain a local view of f
    \n+
    243 auto localF = localFunction(gf);
    \n+
    244
    \n+
    245 auto localView = basis.localView();
    \n+
    246
    \n+
    247 for (const auto& e : elements(gridView))
    \n+
    248 {
    \n+
    249 localView.bind(e);
    \n+
    250 localF.bind(e);
    \n+
    251
    \n+
    252 Imp::LocalInterpolateVisitor<B, Tree, NTRE, decltype(vector), decltype(localF), decltype(bitVector)> localInterpolateVisitor(basis, vector, bitVector, localF, localView, nodeToRangeEntry);
    \n+
    253 TypeTree::applyToTree(localView.tree(),localInterpolateVisitor);
    \n+
    254 }
    \n+
    255}
    \n+
    \n+
    256
    \n+
    273template <class B, class C, class F, class BV>
    \n+
    \n+
    274void interpolate(const B& basis, C&& coeff, const F& f, const BV& bitVector)
    \n+
    275{
    \n+
    276 interpolate(basis, coeff, f, bitVector, HierarchicNodeToRangeMap());
    \n+
    277}
    \n+
    \n+
    278
    \n+
    293template <class B, class C, class F>
    \n+
    \n+
    294void interpolate(const B& basis, C&& coeff, const F& f)
    \n+
    295{
    \n+
    296 interpolate (basis, coeff, f, Imp::AllTrueBitSetVector(), HierarchicNodeToRangeMap());
    \n+
    297}
    \n+
    \n+
    298
    \n+
    299} // namespace Functions
    \n+
    300} // namespace Dune
    \n+
    301
    \n+
    302#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n+\n+\n+\n+\n+\n+\n+
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:346
    \n
    Definition polynomial.hh:10
    \n-
    auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)
    Create SubspaceBasis from a root basis and a prefixPath.
    Definition subspacebasis.hh:151
    \n-
    Definition subspacebasis.hh:38
    \n-
    typename RootBasis::LocalView RootLocalView
    Definition subspacebasis.hh:43
    \n-
    LocalView localView() const
    Return local view for basis.
    Definition subspacebasis.hh:108
    \n-
    const RootBasis * rootBasis_
    Definition subspacebasis.hh:124
    \n-
    typename RootBasis::SizePrefix SizePrefix
    Definition subspacebasis.hh:58
    \n-
    TP PrefixPath
    Definition subspacebasis.hh:45
    \n-
    SubspaceLocalView< RootLocalView, PrefixPath > LocalView
    Type of the local view on the restriction of the basis to a single element.
    Definition subspacebasis.hh:56
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition subspacebasis.hh:100
    \n-
    typename RootBasis::GridView GridView
    The grid view that the FE space is defined on.
    Definition subspacebasis.hh:48
    \n-
    const PrefixPath & prefixPath() const
    Definition subspacebasis.hh:118
    \n-
    SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath)
    Constructor from another SubspaceBasis.
    Definition subspacebasis.hh:73
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition subspacebasis.hh:80
    \n-
    RB RootBasis
    Definition subspacebasis.hh:41
    \n-
    PrefixPath prefixPath_
    Definition subspacebasis.hh:125
    \n-
    size_type size() const
    Return number of possible values for next position in empty multi index.
    Definition subspacebasis.hh:94
    \n-
    const RootBasis & rootBasis() const
    Definition subspacebasis.hh:113
    \n-
    typename RootBasis::MultiIndex MultiIndex
    Type used for global numbering of the basis vectors.
    Definition subspacebasis.hh:51
    \n-
    size_type dimension() const
    Definition subspacebasis.hh:88
    \n-
    std::size_t size_type
    Definition subspacebasis.hh:53
    \n-
    SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)
    Constructor for a given grid view object.
    Definition subspacebasis.hh:62
    \n-
    The restriction of a finite element basis to a single element.
    Definition subspacelocalview.hh:30
    \n-\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:202
    \n+
    std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)
    Construct a function modeling GridViewFunction from function and grid view.
    Definition gridviewfunction.hh:68
    \n+
    SizeInfo< Basis > sizeInfo(const Basis &basis)
    Definition sizeinfo.hh:69
    \n+
    auto flatVectorView(T &t)
    Create flat vector view of passed mutable container.
    Definition flatvectorview.hh:179
    \n+
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:30
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,243 +1,314 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n 5\n-6#include \n-7#include \n-8#include \n-9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\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-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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+6#include \n+7#include \n+8\n+9#include \n+10#include \n+11\n+12#include \n 13\n-14\n-15\n-16namespace _\bD_\bu_\bn_\be {\n-17namespace Functions {\n-18\n-19\n-20\n-21namespace Impl {\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_\bv_\bi_\be_\bw_\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/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+16\n+17#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+18#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+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/_\bs_\bi_\bz_\be_\bi_\bn_\bf_\bo_\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/_\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 22\n-23 template\n-24 auto joinTreePaths(const TypeTree::HybridTreePath& inner, const\n-TypeTree::HybridTreePath outer)\n-25 {\n-26 return TypeTree::HybridTreePath(std::tuple_cat\n-(inner._data, outer._data));\n-27 }\n+23#include \n+24#include \n+25\n+26namespace _\bD_\bu_\bn_\be {\n+27namespace Functions {\n 28\n-29 template\n-30 using JoinTreePath_t = std::decay_t(), std::declval()))>;\n-31\n-32}\n-33\n-34\n-35\n-36template\n-_\b3_\b7class _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs\n-38{\n-39public:\n-40\n-_\b4_\b1 using _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs = RB;\n+29namespace Imp {\n+30\n+31struct AllTrueBitSetVector\n+32{\n+33 struct AllTrueBitSet\n+34 {\n+35 bool test(int) const { return true; }\n+36 } allTrue_;\n+37\n+38 operator bool() const\n+39 {\n+40 return true;\n+41 }\n 42\n-_\b4_\b3 using _\bR_\bo_\bo_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw = typename RootBasis::LocalView;\n-44\n-_\b4_\b5 using _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh = TP;\n-46\n-_\b4_\b8 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename RootBasis::GridView;\n-49\n-_\b5_\b1 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx = typename RootBasis::MultiIndex;\n+43 template\n+44 const AllTrueBitSetVector& operator[](const I&) const\n+45 {\n+46 return *this;\n+47 }\n+48\n+49 template\n+50 void resize(const SP&) const\n+51 {}\n 52\n-_\b5_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+53};\n 54\n-_\b5_\b6 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-57\n-_\b5_\b8 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = typename RootBasis::SizePrefix;\n-59\n-60\n-_\b6_\b2 _\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-63 _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_(&_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs),\n-64 _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_(_\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh)\n-65 {}\n-66\n-72 template\n-_\b7_\b3 _\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-74 _\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-75 {}\n-76\n+55\n+56\n+57template \n+58class LocalInterpolateVisitor\n+59 : public TypeTree::TreeVisitor\n+60 , public TypeTree::DynamicTraversal\n+61{\n+62\n+63public:\n+64\n+65 using Basis = B;\n+66 using LocalView = typename B::LocalView;\n+67 using MultiIndex = typename LocalView::MultiIndex;\n+68\n+69 using LocalFunction = LF;\n+70\n+71 using Tree = T;\n+72\n+73 using VectorBackend = HV;\n+74 using BitVectorBackend = HBV;\n+75\n+76 using NodeToRangeEntry = NTRE;\n 77\n-_\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 _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->gridView();\n-83 }\n+78 using GridView = typename Basis::GridView;\n+79 using Element = typename GridView::template Codim<0>::Entity;\n+80\n+81 using LocalDomain = typename Element::Geometry::LocalCoordinate;\n+82\n+83 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n 84\n-_\b8_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-89 {\n-90 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->dimension();\n-91 }\n-92\n-_\b9_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-95 {\n-96 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->size();\n-97 }\n+85 LocalInterpolateVisitor(const B& /*basis*/, HV& coeff, const HBV& bitVector,\n+const LF& localF, const LocalView& localView, const NodeToRangeEntry&\n+nodeToRangeEntry) :\n+86 vector_(coeff),\n+87 localF_(localF),\n+88 bitVector_(bitVector),\n+89 localView_(localView),\n+90 nodeToRangeEntry_(nodeToRangeEntry)\n+91 {\n+92 static_assert(Dune::Functions::Concept::isCallable(), \"Function passed to LocalInterpolateVisitor does not model the\n+Callable concept\");\n+93 }\n+94\n+95 template\n+96 void pre(Node&, TreePath)\n+97 {}\n 98\n-_\b1_\b0_\b0 _\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-101 {\n-102 return _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_->size(prefix);\n-103 }\n-104\n-_\b1_\b0_\b8 _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw() const\n-109 {\n-110 return _\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw(*this, _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_);\n-111 }\n+99 template\n+100 void post(Node&, TreePath)\n+101 {}\n+102\n+103 template\n+104 void leaf(Node& node, TreePath treePath)\n+105 {\n+106 using FiniteElement = typename Node::FiniteElement;\n+107 using FiniteElementRange = typename FiniteElement::Traits::LocalBasisType::\n+Traits::RangeType;\n+108 using FiniteElementRangeField = typename FiniteElement::Traits::\n+LocalBasisType::Traits::RangeFieldType;\n+109\n+110 auto interpolationCoefficients = std::vector();\n+111 auto&& fe = node.finiteElement();\n 112\n-_\b1_\b1_\b3 const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs& _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs() const\n-114 {\n-115 return *_\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_;\n-116 }\n-117\n-_\b1_\b1_\b8 const _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh& _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh() const\n-119 {\n-120 return _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n-121 }\n-122\n-123protected:\n-_\b1_\b2_\b4 const _\bR_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs* _\br_\bo_\bo_\bt_\bB_\ba_\bs_\bi_\bs_\b_;\n-_\b1_\b2_\b5 _\bP_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh _\bp_\br_\be_\bf_\bi_\bx_\bP_\ba_\bt_\bh_\b_;\n-126};\n+113 // backward compatibility: for scalar basis functions and possibly vector\n+valued coefficients\n+114 // (like used in dune-fufem for power bases) loop over the components\n+115 // of the coefficients\n+116 if constexpr ( FiniteElement::Traits::LocalBasisType::Traits::dimRange == 1\n+)\n+117 {\n+118 // Note that we capture j by reference. Hence we can switch\n+119 // the selected component later on by modifying j. Maybe we\n+120 // should avoid this naughty statefull lambda hack in favor\n+121 // of a separate helper class.\n+122 std::size_t j=0;\n+123 auto localFj = [&](const LocalDomain& x){\n+124 const auto& y = localF_(x);\n+125 return FiniteElementRange(_\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(nodeToRangeEntry_(node, treePath,\n+y))[j]);\n+126 };\n 127\n-128\n-129// CTAD guide for a non-SubspaceBasis root basis\n-130template\n-_\b1_\b3_\b1_\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+128 // We loop over j defined above and thus over the components of the\n+129 // range type of localF_.\n+130\n+131 auto blockSize = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(vector_[localView_.index(0)]).size();\n 132\n-133// CTAD guide for a SubspaceBasis root basis\n-134template\n-_\b1_\b3_\b5_\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-136 -> _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs, Impl::\n-JoinTreePath_t>;\n-137\n-138\n-139\n-150template\n-_\b1_\b5_\b1auto _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RootBasis& rootBasis, const TypeTree::\n-HybridTreePath& prefixPath)\n-152{\n-153 return _\bS_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(rootBasis, prefixPath);\n-154}\n+133 for(j=0; j\n-_\b1_\b5_\b7auto _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(const RootBasis& rootBasis, const PrefixTreeIndices&...\n-prefixTreeIndices)\n-158{\n-159 return _\bs_\bu_\bb_\bs_\bp_\ba_\bc_\be_\bB_\ba_\bs_\bi_\bs(rootBasis, TypeTree::hybridTreePath\n-(prefixTreeIndices...));\n-160}\n-161\n-162\n-163\n-164} // end namespace Functions\n-165} // end namespace Dune\n-166\n+156 fe.localInterpolation().interpolate(localF, interpolationCoefficients);\n+157 for (size_t i=0; i\n+_\b2_\b0_\b2void _\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+203{\n+204 using GridView = typename B::GridView;\n+205 using Element = typename GridView::template Codim<0>::Entity;\n+206\n+207 using Tree = typename B::LocalView::Tree;\n+208\n+209 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n+210\n+211 static_assert(Dune::Functions::Concept::isCallable(),\n+\"Function passed to interpolate does not model the Callable\n+concept\");\n+212\n+213 auto&& gridView = basis.gridView();\n+214\n+215 // Small helper functions to wrap vectors using istlVectorBackend\n+216 // if they do not already satisfy the VectorBackend interface.\n+217 auto toVectorBackend = [&](auto& v) -> decltype(auto) {\n+218 if constexpr (models, decltype(v)>()) {\n+219 return v;\n+220 } else {\n+221 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n+222 }\n+223 };\n+224\n+225 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {\n+226 if constexpr (models, decltype(v)>()) {\n+227 return v;\n+228 } else {\n+229 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n+230 }\n+231 };\n+232\n+233 auto&& bitVector = toConstVectorBackend(bv);\n+234 auto&& vector = toVectorBackend(coeff);\n+235 vector.resize(_\bs_\bi_\bz_\be_\bI_\bn_\bf_\bo(basis));\n+236\n+237\n+238\n+239 // Make a grid function supporting local evaluation out of f\n+240 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+241\n+242 // Obtain a local view of f\n+243 auto localF = localFunction(gf);\n+244\n+245 auto localView = basis.localView();\n+246\n+247 for (const auto& e : elements(gridView))\n+248 {\n+249 localView.bind(e);\n+250 localF.bind(e);\n+251\n+252 Imp::LocalInterpolateVisitor localInterpolateVisitor(basis, vector,\n+bitVector, localF, localView, nodeToRangeEntry);\n+253 TypeTree::applyToTree(localView.tree(),localInterpolateVisitor);\n+254 }\n+255}\n+256\n+273template \n+_\b2_\b7_\b4void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f, const BV& bitVector)\n+275{\n+276 _\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+277}\n+278\n+293template \n+_\b2_\b9_\b4void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f)\n+295{\n+296 _\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+297}\n+298\n+299} // namespace Functions\n+300} // namespace Dune\n+301\n+302#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\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+_\bs_\bi_\bz_\be_\bi_\bn_\bf_\bo_\b._\bh_\bh\n+_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\b._\bh_\bh\n+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\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+_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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:346\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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: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_\bB_\ba_\bs_\bi_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn subspacebasis.hh:38\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:43\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:108\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:124\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:58\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: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:_\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:56\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: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_\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: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_\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:118\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:73\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:80\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:41\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:125\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:94\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:113\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: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_\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:88\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:53\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: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_\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:30\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:202\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< F >::type 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:68\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:69\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:179\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:30\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/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: transformedindexbasis.hh File Reference\n+dune-functions: taylorhoodbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,71 +72,61 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    transformedindexbasis.hh File Reference
    \n+
    taylorhoodbasis.hh File Reference
    \n
    \n
    \n-
    #include <tuple>
    \n-#include <utility>
    \n-#include <dune/common/std/apply.hh>
    \n-#include <dune/common/hybridutilities.hh>
    \n+
    #include <dune/common/exceptions.hh>
    \n #include <dune/common/reservedvector.hh>
    \n-#include <dune/common/typeutilities.hh>
    \n+#include <dune/common/indices.hh>
    \n+#include <dune/typetree/powernode.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/nodes.hh>
    \n+#include <dune/functions/functionspacebases/lagrangebasis.hh>
    \n #include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::Experimental::TransformedIndexPreBasis< RPB, T >
     A pre-basis transforming multi-indices. More...
    class  Dune::Functions::TaylorHoodPreBasis< GV, HI >
     Pre-basis for lowest order Taylor-Hood basis. More...
     
    class  Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation< IndexTransformation, SizeImplementation, minIS, maxIS >
     A generic implementation of a transformation. More...
    class  Dune::Functions::TaylorHoodVelocityTree< GV >
     
    class  Dune::Functions::TaylorHoodBasisTree< GV >
     
    \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+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 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 , std::size_t minIndexSize, std::size_t maxIndexSize>
    auto Dune::Functions::BasisFactory::Experimental::indexTransformation (IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)
     A generic implementation of a transformation.
     
    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,65 +1,46 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-transformedindexbasis.hh File Reference\n-#include \n-#include \n-#include \n-#include \n+_\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 \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/_\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:_\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+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:_\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- _\bm_\bi_\bn_\bI_\bS_\b,_\b _\bm_\ba_\bx_\bI_\bS_\b _\b>\n-\u00a0 A generic implementation of a transformation. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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:_\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+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n+ _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV > >\n+\u00a0 Nodal basis for a lowest order Taylor-Hood Lagrangean finite element\n+ space.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- \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, Dune::index_constant< minIndexSize >, Dune::\n- index_constant< maxIndexSize >)\n-\u00a0 A generic implementation of a transformation.\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/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: transformedindexbasis.hh Source File\n+dune-functions: taylorhoodbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,318 +74,390 @@\n \n \n
    \n
    \n-
    transformedindexbasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n
    5
    \n-
    6#include <tuple>
    \n-
    7#include <utility>
    \n-
    8
    \n-
    9#include <dune/common/std/apply.hh>
    \n-
    10#include <dune/common/hybridutilities.hh>
    \n-
    11#include <dune/common/reservedvector.hh>
    \n-
    12#include <dune/common/typeutilities.hh>
    \n-
    13#include <dune/common/hybridutilities.hh>
    \n+
    6#include <dune/common/exceptions.hh>
    \n+
    7#include <dune/common/reservedvector.hh>
    \n+
    8#include <dune/common/indices.hh>
    \n+
    9
    \n+
    10#include <dune/typetree/powernode.hh>
    \n+
    11#include <dune/typetree/compositenode.hh>
    \n+
    12
    \n+\n
    14
    \n-
    15#include <dune/typetree/compositenode.hh>
    \n-
    16#include <dune/typetree/utility.hh>
    \n+\n+\n
    17
    \n-\n-\n-\n-\n-\n-\n-\n-
    25
    \n-
    26
    \n-
    27namespace Dune {
    \n-
    28namespace Functions {
    \n-
    \n-
    29namespace Experimental {
    \n-
    30
    \n-
    31// *****************************************************************************
    \n+
    18namespace Dune {
    \n+
    19namespace Functions {
    \n+
    20
    \n+
    21
    \n+
    22// *****************************************************************************
    \n+
    23// This is the reusable part of the basis. It contains
    \n+
    24//
    \n+
    25// TaylorHoodPreBasis
    \n+
    26// TaylorHoodBasisTree
    \n+
    27// TaylorHoodVelocityTree
    \n+
    28//
    \n+
    29// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    30// state. These components do _not_ depend on the global basis and local view
    \n+
    31// and can be used without a global basis.
    \n
    32// *****************************************************************************
    \n
    33
    \n-
    50template<class RPB, class T>
    \n-
    \n-\n-
    52{
    \n-
    53 using Transformation = T;
    \n-
    54
    \n-\n-
    56
    \n-
    57public:
    \n-
    58
    \n-
    59 using RawPreBasis = RPB;
    \n-
    60
    \n-
    62 using GridView = typename RawPreBasis::GridView;
    \n+
    34template<typename GV>
    \n+
    35class TaylorHoodVelocityTree;
    \n+
    36
    \n+
    37template<typename GV>
    \n+
    38class TaylorHoodBasisTree;
    \n+
    39
    \n+
    59template<typename GV, bool HI=false>
    \n+
    \n+\n+
    61{
    \n+
    62 static const bool useHybridIndices = HI;
    \n
    63
    \n-
    65 using size_type = std::size_t;
    \n-
    66
    \n-
    68 using Node = typename RawPreBasis::Node;
    \n-
    69
    \n-
    70 static constexpr size_type maxMultiIndexSize = Transformation::maxIndexSize;
    \n-
    71 static constexpr size_type minMultiIndexSize = Transformation::minIndexSize;
    \n-
    72 static constexpr size_type multiIndexBufferSize = std::max(RawPreBasis::multiIndexBufferSize, maxMultiIndexSize);
    \n+
    64 static const int dim = GV::dimension;
    \n+
    65
    \n+
    66public:
    \n+
    67
    \n+
    69 using GridView = GV;
    \n+
    70
    \n+
    72 using size_type = std::size_t;
    \n
    73
    \n-
    79 template<class RPB_R, class T_R>
    \n-
    \n-
    80 TransformedIndexPreBasis(RPB_R&& rawPreBasis, T_R&& transformation) :
    \n-
    81 rawPreBasis_(std::forward<RPB_R>(rawPreBasis)),
    \n-
    82 transformation_(std::forward<T_R>(transformation))
    \n-
    83 {}
    \n-
    \n-
    84
    \n-
    \n-\n-
    87 {
    \n-
    88 rawPreBasis_.initializeIndices();
    \n-
    89 }
    \n-
    \n-
    90
    \n-
    \n-
    92 const GridView& gridView() const
    \n-
    93 {
    \n-
    94 return rawPreBasis_.gridView();
    \n-
    95 }
    \n-
    \n-
    96
    \n-
    \n-
    98 void update(const GridView& gv)
    \n-
    99 {
    \n-
    100 rawPreBasis_.update(gv);
    \n-
    101 }
    \n-
    \n-
    102
    \n-
    \n-\n-
    114 {
    \n-
    115 return rawPreBasis_.makeNode();
    \n-
    116 }
    \n-
    \n-
    117
    \n-
    \n-\n-
    120 {
    \n-
    121 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n-
    122 }
    \n-
    \n-
    123
    \n-
    125 template<class SizePrefix>
    \n-
    \n-
    126 size_type size(const SizePrefix& prefix) const
    \n-
    127 {
    \n-
    128 return transformation_.size(prefix, rawPreBasis_);
    \n-
    129 }
    \n-
    \n-
    130
    \n-
    \n-\n-
    133 {
    \n-
    134 return transformation_.dimension(rawPreBasis_);
    \n-
    135 }
    \n-
    \n-
    136
    \n-
    \n-\n-
    139 {
    \n-
    140 return rawPreBasis_.maxNodeSize();
    \n-
    141 }
    \n-
    \n-
    142
    \n-
    \n-\n-
    144 {
    \n-
    145 return rawPreBasis_;
    \n-
    146 }
    \n-
    \n-
    147
    \n-
    \n-\n-
    149 {
    \n-
    150 return rawPreBasis_;
    \n-
    151 }
    \n-
    \n-
    152
    \n-
    153 template<class MultiIndex>
    \n-
    \n-
    154 void transformIndex(MultiIndex& multiIndex) const
    \n-
    155 {
    \n-
    156 transformation_.transformIndex(multiIndex, rawPreBasis_);
    \n-
    157 }
    \n-
    \n-
    158
    \n-
    159 template<typename It>
    \n-
    \n-
    160 It indices(const Node& node, It it) const
    \n-
    161 {
    \n-
    162 rawPreBasis().indices(node, it);
    \n-
    163 for(std::size_t i=0; i<node.size(); ++i)
    \n-
    164 {
    \n-
    165 transformIndex(*it);
    \n-
    166 ++it;
    \n+\n+
    76
    \n+
    77 static constexpr size_type maxMultiIndexSize = useHybridIndices ? 3 : 2;
    \n+
    78 static constexpr size_type minMultiIndexSize = 2;
    \n+\n+
    80
    \n+
    81private:
    \n+
    82
    \n+\n+\n+
    85
    \n+
    86public:
    \n+
    87
    \n+
    \n+\n+
    90 gridView_(gv),
    \n+
    91 pq1PreBasis_(gv),
    \n+
    92 pq2PreBasis_(gv)
    \n+
    93 {}
    \n+
    \n+
    94
    \n+
    \n+\n+
    97 {
    \n+\n+\n+
    100 }
    \n+
    \n+
    101
    \n+
    \n+
    103 const GridView& gridView() const
    \n+
    104 {
    \n+
    105 return gridView_;
    \n+
    106 }
    \n+
    \n+
    107
    \n+
    \n+
    109 void update (const GridView& gv)
    \n+
    110 {
    \n+\n+\n+
    113 }
    \n+
    \n+
    114
    \n+
    \n+\n+
    119 {
    \n+
    120 return Node{};
    \n+
    121 }
    \n+
    \n+
    122
    \n+
    \n+\n+
    125 {
    \n+
    126 return 2;
    \n+
    127 }
    \n+
    \n+
    128
    \n+
    130 template<class SizePrefix>
    \n+
    \n+
    131 size_type size(const SizePrefix& prefix) const
    \n+
    132 {
    \n+
    133 return sizeImp<useHybridIndices>(prefix);
    \n+
    134 }
    \n+
    \n+
    135
    \n+
    136private:
    \n+
    137
    \n+
    138 template<bool hi, class SizePrefix,
    \n+
    139 typename std::enable_if<not hi,int>::type = 0>
    \n+
    140 size_type sizeImp(const SizePrefix& prefix) const
    \n+
    141 {
    \n+
    142 if (prefix.size() == 0)
    \n+
    143 return 2;
    \n+
    144 if (prefix.size() == 1)
    \n+
    145 {
    \n+
    146 if (prefix[0] == 0)
    \n+
    147 return dim * pq2PreBasis_.size();
    \n+
    148 if (prefix[0] == 1)
    \n+
    149 return pq1PreBasis_.size();
    \n+
    150 }
    \n+
    151 assert(prefix.size() == 2);
    \n+
    152 return 0;
    \n+
    153 }
    \n+
    154
    \n+
    155 template<bool hi, class SizePrefix,
    \n+
    156 typename std::enable_if<hi,int>::type = 0>
    \n+
    157 size_type sizeImp(const SizePrefix& prefix) const
    \n+
    158 {
    \n+
    159 if (prefix.size() == 0)
    \n+
    160 return 2;
    \n+
    161 if (prefix.size() == 1)
    \n+
    162 {
    \n+
    163 if (prefix[0] == 0)
    \n+
    164 return pq2PreBasis_.size();
    \n+
    165 if (prefix[0] == 1)
    \n+
    166 return pq1PreBasis_.size();
    \n
    167 }
    \n-
    168 return it;
    \n-
    169 }
    \n-
    \n-
    170
    \n-
    171protected:
    \n-\n-
    173 Transformation transformation_;
    \n-
    174};
    \n-
    \n-
    175
    \n-
    176template<class RPB, class T>
    \n-\n+
    168 if (prefix.size() == 2)
    \n+
    169 {
    \n+
    170 if (prefix[0] == 0)
    \n+
    171 return dim;
    \n+
    172 if (prefix[0] == 1)
    \n+
    173 return 0;
    \n+
    174 }
    \n+
    175 assert(prefix.size() == 3);
    \n+
    176 return 0;
    \n+
    177 }
    \n
    178
    \n-
    179
    \n-
    180} // end namespace Experimental
    \n-
    \n-
    181
    \n-
    182
    \n-
    183namespace BasisFactory {
    \n-
    184namespace Experimental {
    \n-
    185
    \n-
    197template<class RawPreBasisFactory, class Transformation>
    \n-
    \n-\n-
    199 RawPreBasisFactory&& preBasisFactory,
    \n-
    200 Transformation&& transformation)
    \n-
    201{
    \n-
    202 return [
    \n-
    203 preBasisFactory=std::forward<RawPreBasisFactory>(preBasisFactory),
    \n-
    204 transformation =std::forward<Transformation>(transformation)
    \n-
    205 ](const auto& gridView) {
    \n-
    206 return Dune::Functions::Experimental::TransformedIndexPreBasis(preBasisFactory(gridView), std::move(transformation));
    \n-
    207 };
    \n-
    208}
    \n+
    179public:
    \n+
    180
    \n+
    \n+\n+
    183 {
    \n+
    184 return dim * pq2PreBasis_.size() + pq1PreBasis_.size();
    \n+
    185 }
    \n+
    \n+
    186
    \n+
    \n+\n+
    189 {
    \n+\n+
    191 }
    \n+
    \n+
    192
    \n+
    193 template<typename It>
    \n+
    \n+
    194 It indices(const Node& node, It it) const
    \n+
    195 {
    \n+
    196 return indicesImp<useHybridIndices>(node, it);
    \n+
    197 }
    \n+
    \n+
    198
    \n+
    199protected:
    \n+
    200
    \n+
    201 template<class MultiIndex>
    \n+
    \n+
    202 static const void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n+
    203 {
    \n+
    204 M.resize(M.size()+1);
    \n+
    205 for(std::size_t i=M.size()-1; i>0; --i)
    \n+
    206 M[i] = M[i-1];
    \n+
    207 M[0] = M0;
    \n+
    208 }
    \n
    \n
    209
    \n-
    210
    \n-
    211
    \n-
    230template<class IndexTransformation, class SizeImplementation, std::size_t minIS, std::size_t maxIS>
    \n-
    \n-\n-
    232{
    \n-
    233public:
    \n-
    234
    \n-
    235 static constexpr std::size_t minIndexSize = minIS;
    \n-
    236 static constexpr std::size_t maxIndexSize = maxIS;
    \n-
    237
    \n-
    238 template<class IT_R, class SI_R>
    \n-
    \n-
    239 GenericIndexingTransformation(IT_R&& indexTransformation, SI_R&& sizeImplementation) :
    \n-
    240 indexTransformation_(std::forward<IT_R>(indexTransformation)),
    \n-
    241 sizeImplementation_(std::forward<SI_R>(sizeImplementation))
    \n-
    242 {}
    \n-
    \n-
    243
    \n-
    244 template<class MultiIndex, class PreBasis>
    \n-
    \n-
    245 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const
    \n-
    246 {
    \n-
    247 indexTransformation_(multiIndex, preBasis);
    \n-
    248 }
    \n-
    \n-
    249
    \n-
    250 template<class Prefix, class PreBasis>
    \n-
    \n-
    251 auto size(const Prefix& prefix, const PreBasis& preBasis) const
    \n-
    252 {
    \n-
    253 return sizeImplementation_(prefix, preBasis);
    \n-
    254 }
    \n-
    \n-
    255
    \n-
    256 template<class PreBasis>
    \n-
    \n-
    257 auto dimension(const PreBasis& preBasis) const
    \n-
    258 {
    \n-
    259 return preBasis.dimension();
    \n-
    260 }
    \n-
    \n-
    261
    \n-
    262private:
    \n-
    263 IndexTransformation indexTransformation_;
    \n-
    264 SizeImplementation sizeImplementation_;
    \n-
    265};
    \n-
    \n-
    266
    \n-
    267
    \n-
    268
    \n-
    287template<class IndexTransformation, class SizeImplementation, std::size_t minIndexSize, std::size_t maxIndexSize>
    \n-
    \n-
    288auto indexTransformation(IndexTransformation&& indexTransformation, SizeImplementation&& sizeImplementation, Dune::index_constant<minIndexSize>, Dune::index_constant<maxIndexSize>)
    \n-
    289{
    \n-\n-
    291 std::decay_t<IndexTransformation>,
    \n-
    292 std::decay_t<SizeImplementation>,
    \n-
    293 minIndexSize, maxIndexSize>(
    \n-
    294 std::forward<IndexTransformation>(indexTransformation),
    \n-
    295 std::forward<SizeImplementation>(sizeImplementation));
    \n-
    296}
    \n-
    \n-
    297
    \n-
    298
    \n-
    299} // end namespace Experimental
    \n-
    300} // end namespace BasisFactory
    \n-
    301} // end namespace Functions
    \n-
    302} // end namespace Dune
    \n-
    303
    \n+
    210 template<bool hi, class It,
    \n+
    211 typename std::enable_if<not hi,int>::type = 0>
    \n+
    \n+
    212 It indicesImp(const Node& node, It multiIndices) const
    \n+
    213 {
    \n+
    214 using namespace Dune::Indices;
    \n+
    215 for(std::size_t child=0; child<dim; ++child)
    \n+
    216 {
    \n+
    217 size_type subTreeSize = node.child(_0, 0).size();
    \n+
    218 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);
    \n+
    219 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    220 {
    \n+
    221 multiIndexPushFront(multiIndices[i], 0);
    \n+
    222 multiIndices[i][1] = multiIndices[i][1]*dim + child;
    \n+
    223 }
    \n+
    224 multiIndices += subTreeSize;
    \n+
    225 }
    \n+
    226 size_type subTreeSize = node.child(_1).size();
    \n+
    227 pq1PreBasis_.indices(node.child(_1), multiIndices);
    \n+
    228 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    229 multiIndexPushFront(multiIndices[i], 1);
    \n+
    230 multiIndices += subTreeSize;
    \n+
    231 return multiIndices;
    \n+
    232 }
    \n+
    \n+
    233
    \n+
    234 template<bool hi, class It,
    \n+
    235 typename std::enable_if<hi,int>::type = 0>
    \n+
    \n+
    236 It indicesImp(const Node& node, It multiIndices) const
    \n+
    237 {
    \n+
    238 using namespace Dune::Indices;
    \n+
    239 for(std::size_t child=0; child<dim; ++child)
    \n+
    240 {
    \n+
    241 size_type subTreeSize = node.child(_0, 0).size();
    \n+
    242 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);
    \n+
    243 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    244 {
    \n+
    245 multiIndexPushFront(multiIndices[i], 0);
    \n+
    246 multiIndices[i].push_back(i);
    \n+
    247 }
    \n+
    248 multiIndices += subTreeSize;
    \n+
    249 }
    \n+
    250 size_type subTreeSize = node.child(_1).size();
    \n+
    251 pq1PreBasis_.indices(node.child(_1), multiIndices);
    \n+
    252 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    253 multiIndexPushFront(multiIndices[i], 1);
    \n+
    254 multiIndices += subTreeSize;
    \n+
    255 return multiIndices;
    \n+
    256 }
    \n+
    \n+
    257
    \n+\n+
    259
    \n+\n+\n+
    262};
    \n+
    \n+
    263
    \n+
    264
    \n+
    265
    \n+
    266template<typename GV>
    \n+
    \n+\n+
    268 public PowerBasisNode<LagrangeNode<GV,2>, GV::dimension>
    \n+
    269{
    \n+\n+\n+
    272
    \n+
    273public:
    \n+
    \n+\n+
    275 {
    \n+
    276 for(int i=0; i<GV::dimension; ++i)
    \n+
    277 this->setChild(i, std::make_shared<PQ2Node>());
    \n+
    278 }
    \n+
    \n+
    279};
    \n+
    \n+
    280
    \n+
    281template<typename GV>
    \n+
    \n+\n+
    283 public CompositeBasisNode<
    \n+
    284 TaylorHoodVelocityTree<GV>,
    \n+
    285 LagrangeNode<GV,1>
    \n+
    286 >
    \n+
    287{
    \n+\n+\n+
    290
    \n+\n+
    292
    \n+
    293public:
    \n+
    \n+\n+
    295 {
    \n+
    296 this->template setChild<0>(std::make_shared<VelocityNode>());
    \n+
    297 this->template setChild<1>(std::make_shared<PressureNode>());
    \n+
    298 }
    \n+
    \n+
    299};
    \n+
    \n+
    300
    \n+
    301
    \n+
    302
    \n+
    303namespace BasisFactory {
    \n
    304
    \n-
    305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH
    \n+
    \n+
    311inline auto taylorHood()
    \n+
    312{
    \n+
    313 return [](const auto& gridView) {
    \n+
    314 return TaylorHoodPreBasis<std::decay_t<decltype(gridView)>>(gridView);
    \n+
    315 };
    \n+
    316}
    \n+
    \n+
    317
    \n+
    318} // end namespace BasisFactory
    \n+
    319
    \n+
    320// *****************************************************************************
    \n+
    321// This is the actual global basis implementation based on the reusable parts.
    \n+
    322// *****************************************************************************
    \n+
    323
    \n+
    345template<typename GV>
    \n+\n+
    347
    \n+
    348
    \n+
    349
    \n+
    350} // end namespace Functions
    \n+
    351} // end namespace Dune
    \n+
    352
    \n+
    353
    \n+
    354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH
    \n+\n \n-\n-\n-\n-\n-\n+\n+
    auto taylorHood()
    Create a pre-basis factory that can create a Taylor-Hood pre-basis.
    Definition taylorhoodbasis.hh:311
    \n
    Definition polynomial.hh:10
    \n-
    auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)
    Create a TransformedIndexPreBasisFactory.
    Definition transformedindexbasis.hh:198
    \n-
    auto indexTransformation(IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)
    A generic implementation of a transformation.
    Definition transformedindexbasis.hh:288
    \n-
    A pre-basis transforming multi-indices.
    Definition transformedindexbasis.hh:52
    \n-
    It indices(const Node &node, It it) const
    Definition transformedindexbasis.hh:160
    \n-
    Transformation transformation_
    Definition transformedindexbasis.hh:173
    \n-
    void initializeIndices()
    Initialize the global indices.
    Definition transformedindexbasis.hh:86
    \n-
    typename RawPreBasis::GridView GridView
    The grid view that the FE basis is defined on.
    Definition transformedindexbasis.hh:62
    \n-
    void transformIndex(MultiIndex &multiIndex) const
    Definition transformedindexbasis.hh:154
    \n-
    RawPreBasis rawPreBasis_
    Definition transformedindexbasis.hh:172
    \n-
    typename RawPreBasis::Node Node
    Template mapping root tree path to type of created tree node.
    Definition transformedindexbasis.hh:68
    \n-
    TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)
    Constructor for given child pre-basis objects.
    Definition transformedindexbasis.hh:80
    \n-
    RawPreBasis & rawPreBasis()
    Definition transformedindexbasis.hh:148
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition transformedindexbasis.hh:70
    \n-
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition transformedindexbasis.hh:98
    \n-
    Node makeNode() const
    Create tree node with given root tree path.
    Definition transformedindexbasis.hh:113
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition transformedindexbasis.hh:92
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition transformedindexbasis.hh:126
    \n-
    RPB RawPreBasis
    Definition transformedindexbasis.hh:59
    \n-
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition transformedindexbasis.hh:119
    \n-
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition transformedindexbasis.hh:138
    \n-
    std::size_t size_type
    Type used for indices and size information.
    Definition transformedindexbasis.hh:65
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition transformedindexbasis.hh:72
    \n-
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition transformedindexbasis.hh:132
    \n-
    const RawPreBasis & rawPreBasis() const
    Definition transformedindexbasis.hh:143
    \n-
    static constexpr size_type minMultiIndexSize
    Definition transformedindexbasis.hh:71
    \n-
    A generic implementation of a transformation.
    Definition transformedindexbasis.hh:232
    \n-
    auto dimension(const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:257
    \n-
    GenericIndexingTransformation(IT_R &&indexTransformation, SI_R &&sizeImplementation)
    Definition transformedindexbasis.hh:239
    \n-
    void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:245
    \n-
    static constexpr std::size_t maxIndexSize
    Definition transformedindexbasis.hh:236
    \n-
    static constexpr std::size_t minIndexSize
    Definition transformedindexbasis.hh:235
    \n-
    auto size(const Prefix &prefix, const PreBasis &preBasis) const
    Definition transformedindexbasis.hh:251
    \n-\n+
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n+
    Definition lagrangebasis.hh:387
    \n+\n+
    It indices(const Node &node, It it) const
    Definition lagrangebasis.hh:192
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition lagrangebasis.hh:96
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition lagrangebasis.hh:126
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition lagrangebasis.hh:184
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition lagrangebasis.hh:140
    \n+
    size_type size() const
    Definition nodes.hh:142
    \n+
    Definition nodes.hh:193
    \n+\n+
    Definition taylorhoodbasis.hh:269
    \n+
    TaylorHoodVelocityTree()
    Definition taylorhoodbasis.hh:274
    \n+
    Definition taylorhoodbasis.hh:287
    \n+
    TaylorHoodBasisTree()
    Definition taylorhoodbasis.hh:294
    \n+
    Pre-basis for lowest order Taylor-Hood basis.
    Definition taylorhoodbasis.hh:61
    \n+
    TaylorHoodPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition taylorhoodbasis.hh:89
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition taylorhoodbasis.hh:103
    \n+
    static constexpr size_type minMultiIndexSize
    Definition taylorhoodbasis.hh:78
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition taylorhoodbasis.hh:131
    \n+
    GridView gridView_
    Definition taylorhoodbasis.hh:258
    \n+
    GV GridView
    The grid view that the FE basis is defined on.
    Definition taylorhoodbasis.hh:69
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition taylorhoodbasis.hh:109
    \n+
    PQ2PreBasis pq2PreBasis_
    Definition taylorhoodbasis.hh:261
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition taylorhoodbasis.hh:124
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition taylorhoodbasis.hh:182
    \n+
    PQ1PreBasis pq1PreBasis_
    Definition taylorhoodbasis.hh:260
    \n+
    static const void multiIndexPushFront(MultiIndex &M, size_type M0)
    Definition taylorhoodbasis.hh:202
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition taylorhoodbasis.hh:77
    \n+
    Node makeNode() const
    Create tree node.
    Definition taylorhoodbasis.hh:118
    \n+
    It indices(const Node &node, It it) const
    Definition taylorhoodbasis.hh:194
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition taylorhoodbasis.hh:79
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition taylorhoodbasis.hh:96
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition taylorhoodbasis.hh:188
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition taylorhoodbasis.hh:72
    \n+
    It indicesImp(const Node &node, It multiIndices) const
    Definition taylorhoodbasis.hh:212
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,368 +1,436 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n 5\n-6#include \n-7#include \n-8\n-9#include \n-10#include \n-11#include \n-12#include \n-13#include \n+6#include \n+7#include \n+8#include \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/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n 14\n-15#include \n-16#include \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_\ba_\bg_\br_\ba_\bn_\bg_\be_\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/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\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/_\bs_\bt_\ba_\bt_\bi_\bc_\bf_\bo_\br_\bl_\bo_\bo_\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/_\bt_\by_\bp_\be_\b__\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/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\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#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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-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/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-25\n-26\n-27namespace _\bD_\bu_\bn_\be {\n-28namespace Functions {\n-_\b2_\b9namespace Experimental {\n-30\n-31/\n+18namespace _\bD_\bu_\bn_\be {\n+19namespace Functions {\n+20\n+21\n+22/\n / *****************************************************************************\n+23// This is the reusable part of the basis. It contains\n+24//\n+25// TaylorHoodPreBasis\n+26// TaylorHoodBasisTree\n+27// TaylorHoodVelocityTree\n+28//\n+29// The pre-basis allows to create the others and is the owner of possible\n+shared\n+30// state. These components do _not_ depend on the global basis and local view\n+31// and can be used without a global basis.\n 32/\n / *****************************************************************************\n 33\n-50template\n-_\b5_\b1class _\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-52{\n-53 using Transformation = T;\n-54\n-55 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-56\n-57public:\n-58\n-_\b5_\b9 using _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = RPB;\n-60\n-_\b6_\b2 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename RawPreBasis::GridView;\n+34template\n+35class TaylorHoodVelocityTree;\n+36\n+37template\n+38class TaylorHoodBasisTree;\n+39\n+59template\n+_\b6_\b0class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+61{\n+62 static const bool useHybridIndices = HI;\n 63\n-_\b6_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-66\n-_\b6_\b8 using _\bN_\bo_\bd_\be = typename RawPreBasis::Node;\n-69\n-_\b7_\b0 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_\b1 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_\b2 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+64 static const int dim = GV::dimension;\n+65\n+66public:\n+67\n+_\b6_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+70\n+_\b7_\b2 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n 73\n-79 template\n-_\b8_\b0 _\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-81 _\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-82 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_(std::forward(transformation))\n-83 {}\n-84\n-_\b8_\b6 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-87 {\n-88 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.initializeIndices();\n-89 }\n-90\n-_\b9_\b2 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-93 {\n-94 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.gridView();\n-95 }\n-96\n-_\b9_\b8 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-99 {\n-100 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.update(gv);\n-101 }\n-102\n-_\b1_\b1_\b3 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-114 {\n-115 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.makeNode();\n-116 }\n-117\n-_\b1_\b1_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-120 {\n-121 return _\bs_\bi_\bz_\be(Dune::ReservedVector{});\n-122 }\n-123\n-125 template\n-_\b1_\b2_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-127 {\n-128 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-129 }\n-130\n-_\b1_\b3_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-133 {\n-134 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-135 }\n-136\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 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_.maxNodeSize();\n-141 }\n-142\n-_\b1_\b4_\b3 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-144 {\n-145 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-146 }\n-147\n-_\b1_\b4_\b8 _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs& _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs()\n-149 {\n-150 return _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-151 }\n-152\n-153 template\n-_\b1_\b5_\b4 void _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx(MultiIndex& multiIndex) const\n-155 {\n-156 _\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-157 }\n-158\n-159 template\n-_\b1_\b6_\b0 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-161 {\n-162 _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node, it);\n-163 for(std::size_t i=0; i;\n+76\n+_\b7_\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 = useHybridIndices ? 3 : 2;\n+_\b7_\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 = 2;\n+_\b7_\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 = _\bm_\ba_\bx_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be;\n+80\n+81private:\n+82\n+83 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+84 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+85\n+86public:\n+87\n+_\b8_\b9 _\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+90 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n+91 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(gv),\n+92 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_(gv)\n+93 {}\n+94\n+_\b9_\b6 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+97 {\n+98 _\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+99 _\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+100 }\n+101\n+_\b1_\b0_\b3 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+104 {\n+105 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n+106 }\n+107\n+_\b1_\b0_\b9 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+110 {\n+111 _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bu_\bp_\bd_\ba_\bt_\be(gv);\n+112 _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bu_\bp_\bd_\ba_\bt_\be(gv);\n+113 }\n+114\n+_\b1_\b1_\b8 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+119 {\n+120 return _\bN_\bo_\bd_\be{};\n+121 }\n+122\n+_\b1_\b2_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+125 {\n+126 return 2;\n+127 }\n+128\n+130 template\n+_\b1_\b3_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+132 {\n+133 return sizeImp(prefix);\n+134 }\n+135\n+136private:\n+137\n+138 template::type = 0>\n+140 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeImp(const SizePrefix& prefix) const\n+141 {\n+142 if (prefix.size() == 0)\n+143 return 2;\n+144 if (prefix.size() == 1)\n+145 {\n+146 if (prefix[0] == 0)\n+147 return dim * _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n+148 if (prefix[0] == 1)\n+149 return _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n+150 }\n+151 assert(prefix.size() == 2);\n+152 return 0;\n+153 }\n+154\n+155 template::type = 0>\n+157 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be sizeImp(const SizePrefix& prefix) const\n+158 {\n+159 if (prefix.size() == 0)\n+160 return 2;\n+161 if (prefix.size() == 1)\n+162 {\n+163 if (prefix[0] == 0)\n+164 return _\bp_\bq_\b2_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n+165 if (prefix[0] == 1)\n+166 return _\bp_\bq_\b1_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_._\bs_\bi_\bz_\be();\n 167 }\n-168 return it;\n-169 }\n-170\n-171protected:\n-_\b1_\b7_\b2 _\bR_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs _\br_\ba_\bw_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs_\b_;\n-_\b1_\b7_\b3 Transformation _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_;\n-174};\n-175\n-176template\n-_\b1_\b7_\b7_\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+168 if (prefix.size() == 2)\n+169 {\n+170 if (prefix[0] == 0)\n+171 return dim;\n+172 if (prefix[0] == 1)\n+173 return 0;\n+174 }\n+175 assert(prefix.size() == 3);\n+176 return 0;\n+177 }\n 178\n-179\n-180} // end namespace Experimental\n-181\n-182\n-183namespace BasisFactory {\n-184namespace Experimental {\n-185\n-197template\n-_\b1_\b9_\b8auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\bi_\bc_\be_\bs(\n-199 RawPreBasisFactory&& preBasisFactory,\n-200 Transformation&& transformation)\n-201{\n-202 return [\n-203 preBasisFactory=std::forward(preBasisFactory),\n-204 transformation =std::forward(transformation)\n-205 ](const auto& gridView) {\n-206 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-207 };\n-208}\n+179public:\n+180\n+_\b1_\b8_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n+183 {\n+184 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+185 }\n+186\n+_\b1_\b8_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n+189 {\n+190 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+191 }\n+192\n+193 template\n+_\b1_\b9_\b4 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+195 {\n+196 return indicesImp(node, it);\n+197 }\n+198\n+199protected:\n+200\n+201 template\n+_\b2_\b0_\b2 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+203 {\n+204 M.resize(M.size()+1);\n+205 for(std::size_t i=M.size()-1; i>0; --i)\n+206 M[i] = M[i-1];\n+207 M[0] = M0;\n+208 }\n 209\n-210\n-211\n-230template\n-_\b2_\b3_\b1class _\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-232{\n-233public:\n-234\n-_\b2_\b3_\b5 static constexpr std::size_t _\bm_\bi_\bn_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = minIS;\n-_\b2_\b3_\b6 static constexpr std::size_t _\bm_\ba_\bx_\bI_\bn_\bd_\be_\bx_\bS_\bi_\bz_\be = maxIS;\n-237\n-238 template\n-_\b2_\b3_\b9 _\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) :\n-240 indexTransformation_(std::forward(_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn)),\n-241 sizeImplementation_(std::forward(sizeImplementation))\n-242 {}\n-243\n-244 template\n-_\b2_\b4_\b5 void _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bI_\bn_\bd_\be_\bx(MultiIndex& multiIndex, const PreBasis& preBasis) const\n-246 {\n-247 indexTransformation_(multiIndex, preBasis);\n-248 }\n-249\n-250 template\n-_\b2_\b5_\b1 auto _\bs_\bi_\bz_\be(const Prefix& prefix, const PreBasis& preBasis) const\n-252 {\n-253 return sizeImplementation_(prefix, preBasis);\n-254 }\n-255\n-256 template\n-_\b2_\b5_\b7 auto _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(const PreBasis& preBasis) const\n-258 {\n-259 return preBasis.dimension();\n-260 }\n-261\n-262private:\n-263 IndexTransformation indexTransformation_;\n-264 SizeImplementation sizeImplementation_;\n-265};\n-266\n-267\n-268\n-287template\n-_\b2_\b8_\b8auto _\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-SizeImplementation&& sizeImplementation, Dune::index_constant,\n-Dune::index_constant)\n-289{\n-290 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-291 std::decay_t,\n-292 std::decay_t,\n-293 minIndexSize, maxIndexSize>(\n-294 std::forward(_\bi_\bn_\bd_\be_\bx_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn),\n-295 std::forward(sizeImplementation));\n-296}\n-297\n-298\n-299} // end namespace Experimental\n-300} // end namespace BasisFactory\n-301} // end namespace Functions\n-302} // end namespace Dune\n-303\n+210 template::type = 0>\n+_\b2_\b1_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp(const _\bN_\bo_\bd_\be& node, It multiIndices) const\n+213 {\n+214 using namespace Dune::Indices;\n+215 for(std::size_t child=0; child::type = 0>\n+_\b2_\b3_\b6 It _\bi_\bn_\bd_\bi_\bc_\be_\bs_\bI_\bm_\bp(const _\bN_\bo_\bd_\be& node, It multiIndices) const\n+237 {\n+238 using namespace Dune::Indices;\n+239 for(std::size_t child=0; child\n+_\b2_\b6_\b7class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be :\n+268 public _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be, GV::dimension>\n+269{\n+270 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+271 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+272\n+273public:\n+_\b2_\b7_\b4 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bT_\br_\be_\be()\n+275 {\n+276 for(int i=0; isetChild(i, std::make_shared());\n+278 }\n+279};\n+280\n+281template\n+_\b2_\b8_\b2class _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be :\n+283 public _\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be<\n+284 TaylorHoodVelocityTree,\n+285 LagrangeNode\n+286 >\n+287{\n+288 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+289 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+290\n+291 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+292\n+293public:\n+_\b2_\b9_\b4 _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bB_\ba_\bs_\bi_\bs_\bT_\br_\be_\be()\n+295 {\n+296 this->template setChild<0>(std::make_shared());\n+297 this->template setChild<1>(std::make_shared());\n+298 }\n+299};\n+300\n+301\n+302\n+303namespace BasisFactory {\n 304\n-305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n+_\b3_\b1_\b1inline auto _\bt_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd()\n+312{\n+313 return [](const auto& gridView) {\n+314 return _\bT_\ba_\by_\bl_\bo_\br_\bH_\bo_\bo_\bd_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(gridView);\n+315 };\n+316}\n+317\n+318} // end namespace BasisFactory\n+319\n+320/\n+/ *****************************************************************************\n+321// This is the actual global basis implementation based on the reusable\n+parts.\n+322/\n+/ *****************************************************************************\n+323\n+345template\n+_\b3_\b4_\b6using _\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+347\n+348\n+349\n+350} // end namespace Functions\n+351} // end namespace Dune\n+352\n+353\n+354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+_\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-_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh\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_\bu_\bn_\be_\b:_\b:_\bF_\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:311\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:198\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, 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:288\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:52\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+_\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:46\n+_\bD_\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:387\n+_\bD_\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 transformedindexbasis.hh:160\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:173\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.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_\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:86\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: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:_\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:154\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:172\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: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:\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:80\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:148\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:70\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:96\n+_\bD_\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 transformedindexbasis.hh:98\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:113\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangebasis.hh:126\n+_\bD_\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:184\n+_\bD_\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\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 lagrangebasis.hh:140\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:142\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:193\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:219\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:269\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:274\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:287\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:294\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:61\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:89\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 transformedindexbasis.hh:92\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:103\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:78\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 transformedindexbasis.hh:126\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:59\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:131\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:258\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:69\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:109\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:261\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 transformedindexbasis.hh:119\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:124\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:182\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:260\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:202\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:77\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:118\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:194\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:79\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:96\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 transformedindexbasis.hh:138\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:188\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 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:_\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:72\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:132\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:143\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:71\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:232\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:257\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)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn transformedindexbasis.hh:239\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: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-_\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:236\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:235\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:251\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn taylorhoodbasis.hh:72\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:212\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: sizeinfo.hh File Reference\n+dune-functions: powerbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -71,41 +71,46 @@\n \n
    \n \n
    \n \n-
    sizeinfo.hh File Reference
    \n+Namespaces
    \n+
    powerbasis.hh File Reference
    \n \n
    \n-
    #include <array>
    \n+
    #include <dune/common/reservedvector.hh>
    \n+#include <dune/common/typeutilities.hh>
    \n+#include <dune/common/indices.hh>
    \n+#include <dune/functions/common/utility.hh>
    \n+#include <dune/functions/common/type_traits.hh>
    \n+#include <dune/functions/functionspacebases/basistags.hh>
    \n+#include <dune/functions/functionspacebases/nodes.hh>
    \n+#include <dune/functions/functionspacebases/concepts.hh>
    \n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n
    \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::PowerPreBasis< IMS, SPB, C >
     A pre-basis for power 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-Functions

    template<class Basis >
    SizeInfo< Basis > Dune::Functions::sizeInfo (const Basis &basis)
     
    namespace  Dune::Functions::BasisFactory
     
    namespace  Dune::Functions::BasisBuilder
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,34 @@\n dune-functions\u00a02.9.0\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+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/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n _\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:_\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-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+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bB_\bu_\bi_\bl_\bd_\be_\br\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/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: sizeinfo.hh Source File\n+dune-functions: powerbasis.hh Source File\n \n \n \n \n \n \n \n@@ -74,96 +74,430 @@\n \n \n
    \n
    \n-
    sizeinfo.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n
    5
    \n-
    6#include <array>
    \n-
    7
    \n-
    8namespace Dune {
    \n-
    9namespace Functions {
    \n-
    10
    \n-
    11
    \n-
    12
    \n-
    23template<class B>
    \n-
    \n-\n-
    25{
    \n-
    26public:
    \n-
    27 using Basis = B;
    \n-
    28 using size_type = typename Basis::size_type;
    \n-
    29 using SizePrefix = typename Basis::SizePrefix;
    \n-
    30
    \n-
    \n-
    34 SizeInfo(const Basis& basis) :
    \n-
    35 basis_(&basis)
    \n-
    36 {}
    \n-
    \n-
    37
    \n-
    \n-
    41 size_type operator()(const SizePrefix& prefix) const
    \n-
    42 {
    \n-
    43 return basis_->size(prefix);
    \n-
    44 }
    \n-
    \n-
    45
    \n-
    \n-
    52 size_type size(const SizePrefix& prefix) const
    \n-
    53 {
    \n-
    54 return basis_->size(prefix);
    \n-
    55 }
    \n-
    \n+
    6#include <dune/common/reservedvector.hh>
    \n+
    7#include <dune/common/typeutilities.hh>
    \n+
    8#include <dune/common/indices.hh>
    \n+
    9
    \n+\n+\n+\n+\n+\n+\n+
    16
    \n+
    17
    \n+
    18
    \n+
    19namespace Dune {
    \n+
    20namespace Functions {
    \n+
    21
    \n+
    22
    \n+
    23// *****************************************************************************
    \n+
    24// This is the reusable part of the power bases. It contains
    \n+
    25//
    \n+
    26// PowerPreBasis
    \n+
    27//
    \n+
    28// The pre-basis allows to create the others and is the owner of possible shared
    \n+
    29// state. These components do _not_ depend on the global basis and local view
    \n+
    30// and can be used without a global basis.
    \n+
    31// *****************************************************************************
    \n+
    32
    \n+
    43template<class IMS, class SPB, std::size_t C>
    \n+
    \n+\n+
    45{
    \n+
    46 static const std::size_t children = C;
    \n+
    47 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;
    \n+
    48
    \n+
    49public:
    \n+
    50
    \n+
    52 using SubPreBasis = SPB;
    \n+
    53
    \n+
    55 using GridView = typename SPB::GridView;
    \n
    56
    \n-
    \n-
    57 operator size_type () const
    \n-
    58 {
    \n-
    59 return basis_->dimension();
    \n-
    60 }
    \n-
    \n-
    61
    \n-
    62protected:
    \n-
    63
    \n-
    64 const Basis* basis_;
    \n-
    65};
    \n-
    \n-
    66
    \n+
    58 using size_type = std::size_t;
    \n+
    59
    \n+\n+
    62
    \n+
    63 using SubNode = typename SubPreBasis::Node;
    \n+
    64
    \n+\n
    67
    \n-
    68template<class Basis>
    \n-
    \n-
    69SizeInfo<Basis> sizeInfo(const Basis& basis)
    \n-
    70{
    \n-
    71 return SizeInfo<Basis>(basis);
    \n-
    72}
    \n-
    \n-
    73
    \n-
    74
    \n-
    75
    \n-
    76} // end namespace Functions
    \n-
    77} // end namespace Dune
    \n-
    78
    \n-
    79#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH
    \n+
    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<PowerPreBasis, SFArgs...> = 0,
    \n+
    79 enableIfConstructible<SubPreBasis, SFArgs...> = 0>
    \n+
    \n+
    80 PowerPreBasis(SFArgs&&... sfArgs) :
    \n+
    81 subPreBasis_(std::forward<SFArgs>(sfArgs)...)
    \n+
    82 {
    \n+
    83 static_assert(models<Concept::PreBasis<GridView>, SubPreBasis>(), "Subprebasis passed to PowerPreBasis does not model the PreBasis concept.");
    \n+
    84 }
    \n+
    \n+
    85
    \n+
    \n+\n+
    88 {
    \n+
    89 subPreBasis_.initializeIndices();
    \n+
    90 }
    \n+
    \n+
    91
    \n+
    \n+
    93 const GridView& gridView() const
    \n+
    94 {
    \n+
    95 return subPreBasis_.gridView();
    \n+
    96 }
    \n+
    \n+
    97
    \n+
    \n+
    99 void update(const GridView& gv)
    \n+
    100 {
    \n+
    101 subPreBasis_.update(gv);
    \n+
    102 }
    \n+
    \n+
    103
    \n+
    \n+\n+
    108 {
    \n+
    109 auto node = Node{};
    \n+
    110 for (std::size_t i=0; i<children; ++i)
    \n+
    111 node.setChild(i, subPreBasis_.makeNode());
    \n+
    112 return node;
    \n+
    113 }
    \n+
    \n+
    114
    \n+
    \n+\n+
    117 {
    \n+
    118 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});
    \n+
    119 }
    \n+
    \n+
    120
    \n+
    122
    \n+
    123 template<class SizePrefix>
    \n+
    \n+
    124 size_type size(const SizePrefix& prefix) const
    \n+
    125 {
    \n+
    126 return size(prefix, IndexMergingStrategy{});
    \n+
    127 }
    \n+
    \n+
    128
    \n+
    129private:
    \n+
    130
    \n+
    131 template<class SizePrefix>
    \n+
    132 size_type size(const SizePrefix& prefix, BasisFactory::FlatInterleaved) const
    \n+
    133 {
    \n+
    134 // The root index size is the root index size of a single subnode
    \n+
    135 // multiplied by the number of subnodes because we enumerate all
    \n+
    136 // child indices in a row.
    \n+
    137 if (prefix.size() == 0)
    \n+
    138 return children*subPreBasis_.size();
    \n+
    139
    \n+
    140 // The first prefix entry refers to one of the (root index size)
    \n+
    141 // subindex trees. Hence we have to first compute the corresponding
    \n+
    142 // prefix entry for a single subnode subnode. The we can append
    \n+
    143 // the other prefix entries unmodified, because the index tree
    \n+
    144 // looks the same after the first level.
    \n+
    145 SizePrefix subPrefix;
    \n+
    146 subPrefix.push_back(prefix[0] / children);
    \n+
    147 for(std::size_t i=1; i<prefix.size(); ++i)
    \n+
    148 subPrefix.push_back(prefix[i]);
    \n+
    149 return subPreBasis_.size(subPrefix);
    \n+
    150 }
    \n+
    151
    \n+
    152 template<class SizePrefix>
    \n+
    153 size_type size(const SizePrefix& prefix, BasisFactory::FlatLexicographic) const
    \n+
    154 {
    \n+
    155 // The size at the index tree root is the size of at the index tree
    \n+
    156 // root of a single subnode multiplied by the number of subnodes
    \n+
    157 // because we enumerate all child indices in a row.
    \n+
    158 if (prefix.size() == 0)
    \n+
    159 return children*subPreBasis_.size();
    \n+
    160
    \n+
    161 // The first prefix entry refers to one of the (root index size)
    \n+
    162 // subindex trees. Hence we have to first compute the corresponding
    \n+
    163 // prefix entry for a single subnode subnode. The we can append
    \n+
    164 // the other prefix entries unmodified, because the index tree
    \n+
    165 // looks the same after the first level.
    \n+
    166 SizePrefix subPrefix;
    \n+
    167 subPrefix.push_back(prefix[0] % children);
    \n+
    168 for(std::size_t i=1; i<prefix.size(); ++i)
    \n+
    169 subPrefix.push_back(prefix[i]);
    \n+
    170 return subPreBasis_.size(subPrefix);
    \n+
    171 }
    \n+
    172
    \n+
    173 template<class SizePrefix>
    \n+
    174 size_type size(const SizePrefix& prefix, BasisFactory::BlockedLexicographic) const
    \n+
    175 {
    \n+
    176 if (prefix.size() == 0)
    \n+
    177 return children;
    \n+
    178 SizePrefix subPrefix;
    \n+
    179 for(std::size_t i=1; i<prefix.size(); ++i)
    \n+
    180 subPrefix.push_back(prefix[i]);
    \n+
    181 return subPreBasis_.size(subPrefix);
    \n+
    182 }
    \n+
    183
    \n+
    184 template<class SizePrefix>
    \n+
    185 size_type size(const SizePrefix& prefix, BasisFactory::BlockedInterleaved) const
    \n+
    186 {
    \n+
    187 if (prefix.size() == 0)
    \n+
    188 return subPreBasis_.size();
    \n+
    189
    \n+
    190 SizePrefix subPrefix;
    \n+
    191 for(std::size_t i=0; i<prefix.size()-1; ++i)
    \n+
    192 subPrefix.push_back(prefix[i]);
    \n+
    193
    \n+
    194 size_type r = subPreBasis_.size(subPrefix);
    \n+
    195 if (r==0)
    \n+
    196 return 0;
    \n+
    197 subPrefix.push_back(prefix.back());
    \n+
    198 r = subPreBasis_.size(subPrefix);
    \n+
    199 if (r==0)
    \n+
    200 return children;
    \n+
    201 return r;
    \n+
    202 }
    \n+
    203
    \n+
    204public:
    \n+
    205
    \n+
    \n+\n+
    208 {
    \n+
    209 return subPreBasis_.dimension() * children;
    \n+
    210 }
    \n+
    \n+
    211
    \n+
    \n+\n+
    214 {
    \n+
    215 return subPreBasis_.maxNodeSize() * children;
    \n+
    216 }
    \n+
    \n+
    217
    \n+
    \n+\n+
    220 {
    \n+
    221 return subPreBasis_;
    \n+
    222 }
    \n+
    \n+
    223
    \n+
    \n+\n+
    226 {
    \n+
    227 return subPreBasis_;
    \n+
    228 }
    \n+
    \n+
    229
    \n+
    231 template<typename It>
    \n+
    \n+
    232 It indices(const Node& node, It it) const
    \n+
    233 {
    \n+
    234 return indices(node, it, IndexMergingStrategy{});
    \n+
    235 }
    \n+
    \n+
    236
    \n+
    237private:
    \n+
    238
    \n+
    239 template<typename It>
    \n+
    240 It indices(const Node& node, It multiIndices, BasisFactory::FlatInterleaved) const
    \n+
    241 {
    \n+
    242 using namespace Dune::Indices;
    \n+
    243 size_type subTreeSize = node.child(_0).size();
    \n+
    244 // Fill indices for first child at the beginning.
    \n+
    245 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n+
    246 // Multiply first component of all indices for first child by
    \n+
    247 // number of children to stretch the index range for interleaving.
    \n+
    248 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    249 multiIndices[i][0] *= children;
    \n+
    250 for (std::size_t child = 1; child<children; ++child)
    \n+
    251 {
    \n+
    252 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    253 {
    \n+
    254 // Copy indices from first child for all other children
    \n+
    255 // and shift them by child index to interleave indices.
    \n+
    256 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n+
    257 // multiIndices[child*subTreeSize+i][0] = multiIndices[i][0]+child;
    \n+
    258 (*next) = multiIndices[i];
    \n+
    259 (*next)[0] = multiIndices[i][0]+child;
    \n+
    260 ++next;
    \n+
    261 }
    \n+
    262 }
    \n+
    263 return next;
    \n+
    264 }
    \n+
    265
    \n+
    266 template<typename It>
    \n+
    267 It indices(const Node& node, It multiIndices, BasisFactory::FlatLexicographic) const
    \n+
    268 {
    \n+
    269 using namespace Dune::Indices;
    \n+
    270 size_type subTreeSize = node.child(_0).size();
    \n+
    271 size_type firstIndexEntrySize = subPreBasis().size();
    \n+
    272 // Fill indices for first child at the beginning.
    \n+
    273 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n+
    274 for (std::size_t child = 1; child<children; ++child)
    \n+
    275 {
    \n+
    276 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    277 {
    \n+
    278 // Copy indices from first child for all other children
    \n+
    279 // and shift them by suitable offset to get lexicographic indices.
    \n+
    280 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n+
    281 // multiIndices[child*subTreeSize+i][0] += child*firstIndexEntrySize;
    \n+
    282 (*next) = multiIndices[i];
    \n+
    283 (*next)[0] += child*firstIndexEntrySize;
    \n+
    284 ++next;
    \n+
    285 }
    \n+
    286 }
    \n+
    287 return next;
    \n+
    288 }
    \n+
    289
    \n+
    290 template<class MultiIndex>
    \n+
    291 static void multiIndexPushFront(MultiIndex& M, size_type M0)
    \n+
    292 {
    \n+
    293 M.resize(M.size()+1);
    \n+
    294 for(std::size_t i=M.size()-1; i>0; --i)
    \n+
    295 M[i] = M[i-1];
    \n+
    296 M[0] = M0;
    \n+
    297 }
    \n+
    298
    \n+
    299 template<typename It>
    \n+
    300 It indices(const Node& node, It multiIndices, BasisFactory::BlockedLexicographic) const
    \n+
    301 {
    \n+
    302 using namespace Dune::Indices;
    \n+
    303 size_type subTreeSize = node.child(_0).size();
    \n+
    304 // Fill indices for first child at the beginning.
    \n+
    305 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n+
    306 // Insert 0 before first component of all indices for first child.
    \n+
    307 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    308 multiIndexPushFront(multiIndices[i], 0);
    \n+
    309 for (std::size_t child = 1; child<children; ++child)
    \n+
    310 {
    \n+
    311 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    312 {
    \n+
    313 // Copy indices from first child for all other children and overwrite
    \n+
    314 // zero in first component as inserted above by child index.
    \n+
    315 // multiIndices[child*subTreeSize+i] = multiIndices[i];
    \n+
    316 // multiIndices[child*subTreeSize+i][0] = child;
    \n+
    317 (*next) = multiIndices[i];
    \n+
    318 (*next)[0] = child;
    \n+
    319 ++next;
    \n+
    320 }
    \n+
    321 }
    \n+
    322 return next;
    \n+
    323 }
    \n+
    324
    \n+
    325 template<typename It>
    \n+
    326 It indices(const Node& node, It multiIndices, BasisFactory::BlockedInterleaved) const
    \n+
    327 {
    \n+
    328 using namespace Dune::Indices;
    \n+
    329 size_type subTreeSize = node.child(_0).size();
    \n+
    330 // Fill indices for first child at the beginning.
    \n+
    331 auto next = subPreBasis().indices(node.child(_0), multiIndices);
    \n+
    332 // Append 0 after last component of all indices for first child.
    \n+
    333 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    334 multiIndices[i].push_back(0);
    \n+
    335 for (std::size_t child = 1; child<children; ++child)
    \n+
    336 {
    \n+
    337 for (std::size_t i = 0; i<subTreeSize; ++i)
    \n+
    338 {
    \n+
    339 // Copy indices from first child for all other children and overwrite
    \n+
    340 // zero in last component as appended above by child index.
    \n+
    341 (*next) = multiIndices[i];
    \n+
    342 (*next).back() = child;
    \n+
    343 ++next;
    \n+
    344 }
    \n+
    345 }
    \n+
    346 return next;
    \n+
    347 }
    \n+
    348
    \n+
    349 SubPreBasis subPreBasis_;
    \n+
    350};
    \n+
    \n+
    351
    \n+
    352
    \n+
    353
    \n+
    354namespace BasisFactory {
    \n+
    355
    \n+
    368template<std::size_t k, class ChildPreBasisFactory, class IndexMergingStrategy>
    \n+
    369auto power(ChildPreBasisFactory&& childPreBasisFactory, const IndexMergingStrategy&)
    \n+
    370{
    \n+
    371 return [childPreBasisFactory](const auto& gridView) {
    \n+
    372 auto childPreBasis = childPreBasisFactory(gridView);
    \n+
    373 return PowerPreBasis<IndexMergingStrategy, decltype(childPreBasis), k>(std::move(childPreBasis));
    \n+
    374 };
    \n+
    375}
    \n+
    376
    \n+
    387template<std::size_t k, class ChildPreBasisFactory>
    \n+
    388auto power(ChildPreBasisFactory&& childPreBasisFactory)
    \n+
    389{
    \n+
    390 return [childPreBasisFactory](const auto& gridView) {
    \n+
    391 auto childPreBasis = childPreBasisFactory(gridView);
    \n+
    392 return PowerPreBasis<BlockedInterleaved, decltype(childPreBasis), k>(std::move(childPreBasis));
    \n+
    393 };
    \n+
    394}
    \n+
    395
    \n+
    396} // end namespace BasisFactory
    \n+
    397
    \n+
    398// Backward compatibility
    \n+
    399namespace BasisBuilder {
    \n+
    400
    \n+
    401 using namespace BasisFactory;
    \n+
    402
    \n+
    403}
    \n+
    404
    \n+
    405
    \n+
    406} // end namespace Functions
    \n+
    407} // end namespace Dune
    \n+
    408
    \n+
    409
    \n+
    410#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH
    \n+\n+\n+\n+\n+\n+
    typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:26
    \n
    Definition polynomial.hh:10
    \n-
    SizeInfo< Basis > sizeInfo(const Basis &basis)
    Definition sizeinfo.hh:69
    \n-
    A class encapsulating size information.
    Definition sizeinfo.hh:25
    \n-
    typename Basis::SizePrefix SizePrefix
    Definition sizeinfo.hh:29
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition sizeinfo.hh:52
    \n-
    size_type operator()(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition sizeinfo.hh:41
    \n-
    typename Basis::size_type size_type
    Definition sizeinfo.hh:28
    \n-
    B Basis
    Definition sizeinfo.hh:27
    \n-
    SizeInfo(const Basis &basis)
    Construct from basis.
    Definition sizeinfo.hh:34
    \n-
    const Basis * basis_
    Definition sizeinfo.hh:64
    \n+
    Interleaved merging of direct children without blocking.
    Definition basistags.hh:114
    \n+
    Definition nodes.hh:193
    \n+
    A pre-basis for power bases.
    Definition powerbasis.hh:45
    \n+
    size_type dimension() const
    Get the total dimension of the space spanned by this basis.
    Definition powerbasis.hh:207
    \n+
    std::size_t size_type
    Type used for indices and size information.
    Definition powerbasis.hh:58
    \n+
    IMS IndexMergingStrategy
    Strategy used to merge the global indices of the child factories.
    Definition powerbasis.hh:61
    \n+
    PowerBasisNode< SubNode, children > Node
    Template mapping root tree path to type of created tree node.
    Definition powerbasis.hh:66
    \n+
    typename SPB::GridView GridView
    The grid view that the FE basis is defined on.
    Definition powerbasis.hh:55
    \n+
    static constexpr size_type multiIndexBufferSize
    Definition powerbasis.hh:70
    \n+
    SPB SubPreBasis
    The child pre-basis.
    Definition powerbasis.hh:52
    \n+
    typename SubPreBasis::Node SubNode
    Definition powerbasis.hh:63
    \n+
    void initializeIndices()
    Initialize the global indices.
    Definition powerbasis.hh:87
    \n+
    void update(const GridView &gv)
    Update the stored grid view, to be called if the grid has changed.
    Definition powerbasis.hh:99
    \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 powerbasis.hh:232
    \n+
    PowerPreBasis(SFArgs &&... sfArgs)
    Constructor for given child pre-basis objects.
    Definition powerbasis.hh:80
    \n+
    size_type size() const
    Same as size(prefix) with empty prefix.
    Definition powerbasis.hh:116
    \n+
    SubPreBasis & subPreBasis()
    Mutable access to the stored prebasis of the factor in the power space.
    Definition powerbasis.hh:225
    \n+
    Node makeNode() const
    Create tree node.
    Definition powerbasis.hh:107
    \n+
    static constexpr size_type maxMultiIndexSize
    Definition powerbasis.hh:68
    \n+
    static constexpr size_type minMultiIndexSize
    Definition powerbasis.hh:69
    \n+
    size_type maxNodeSize() const
    Get the maximal number of DOFs associated to node for any element.
    Definition powerbasis.hh:213
    \n+
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition powerbasis.hh:93
    \n+
    size_type size(const SizePrefix &prefix) const
    Return number of possible values for next position in multi index.
    Definition powerbasis.hh:124
    \n+
    const SubPreBasis & subPreBasis() const
    Const access to the stored prebasis of the factor in the power space.
    Definition powerbasis.hh:219
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,100 +1,488 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n 5\n-6#include \n-7\n-8namespace _\bD_\bu_\bn_\be {\n-9namespace Functions {\n-10\n-11\n-12\n-23template\n-_\b2_\b4class _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo\n-25{\n-26public:\n-_\b2_\b7 using _\bB_\ba_\bs_\bi_\bs = B;\n-_\b2_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = typename Basis::size_type;\n-_\b2_\b9 using _\bS_\bi_\bz_\be_\bP_\br_\be_\bf_\bi_\bx = typename Basis::SizePrefix;\n-30\n-_\b3_\b4 _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo(const _\bB_\ba_\bs_\bi_\bs& basis) :\n-35 _\bb_\ba_\bs_\bi_\bs_\b_(&basis)\n-36 {}\n-37\n-_\b4_\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-42 {\n-43 return _\bb_\ba_\bs_\bi_\bs_\b_->size(prefix);\n-44 }\n-45\n-_\b5_\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-53 {\n-54 return _\bb_\ba_\bs_\bi_\bs_\b_->size(prefix);\n-55 }\n+6#include \n+7#include \n+8#include \n+9\n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\b._\bh_\bh>\n+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\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/_\bb_\ba_\bs_\bi_\bs_\bt_\ba_\bg_\bs_\b._\bh_\bh>\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+14#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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\n+17\n+18\n+19namespace _\bD_\bu_\bn_\be {\n+20namespace Functions {\n+21\n+22\n+23/\n+/ *****************************************************************************\n+24// This is the reusable part of the power bases. It contains\n+25//\n+26// PowerPreBasis\n+27//\n+28// The pre-basis allows to create the others and is the owner of possible\n+shared\n+29// state. These components do _not_ depend on the global basis and local view\n+30// and can be used without a global basis.\n+31/\n+/ *****************************************************************************\n+32\n+43template\n+_\b4_\b4class _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+45{\n+46 static const std::size_t children = C;\n+47 static const bool isBlocked = std::is_same_v or std::is_same_v;\n+48\n+49public:\n+50\n+_\b5_\b2 using _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = SPB;\n+53\n+_\b5_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename SPB::GridView;\n 56\n-_\b5_\b7 operator _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be () const\n-58 {\n-59 return _\bb_\ba_\bs_\bi_\bs_\b_->dimension();\n-60 }\n-61\n-62protected:\n-63\n-_\b6_\b4 const _\bB_\ba_\bs_\bi_\bs* _\bb_\ba_\bs_\bi_\bs_\b_;\n-65};\n-66\n+_\b5_\b8 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+59\n+_\b6_\b1 using _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by = IMS;\n+62\n+_\b6_\b3 using _\bS_\bu_\bb_\bN_\bo_\bd_\be = typename SubPreBasis::Node;\n+64\n+_\b6_\b6 using _\bN_\bo_\bd_\be = _\bP_\bo_\bw_\be_\br_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\bS_\bu_\bb_\bN_\bo_\bd_\be_\b,_\b _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b>;\n 67\n-68template\n-_\b6_\b9_\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-70{\n-71 return _\bS_\bi_\bz_\be_\bI_\bn_\bf_\bo_\b<_\bB_\ba_\bs_\bi_\bs_\b>(basis);\n-72}\n-73\n-74\n-75\n-76} // end namespace Functions\n-77} // end namespace Dune\n-78\n-79#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n+_\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 _\bP_\bo_\bw_\be_\br_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs(SFArgs&&... sfArgs) :\n+81 subPreBasis_(std::forward(sfArgs)...)\n+82 {\n+83 static_assert(models, _\bS_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs>(),\n+\"Subprebasis passed to PowerPreBasis does not model the PreBasis concept.\");\n+84 }\n+85\n+_\b8_\b7 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n+88 {\n+89 subPreBasis_.initializeIndices();\n+90 }\n+91\n+_\b9_\b3 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+94 {\n+95 return subPreBasis_.gridView();\n+96 }\n+97\n+_\b9_\b9 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n+100 {\n+101 subPreBasis_.update(gv);\n+102 }\n+103\n+_\b1_\b0_\b7 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n+108 {\n+109 auto node = _\bN_\bo_\bd_\be{};\n+110 for (std::size_t i=0; i{});\n+119 }\n+120\n+122\n+123 template\n+_\b1_\b2_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n+125 {\n+126 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+127 }\n+128\n+129private:\n+130\n+131 template\n+132 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, _\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+const\n+133 {\n+134 // The root index size is the root index size of a single subnode\n+135 // multiplied by the number of subnodes because we enumerate all\n+136 // child indices in a row.\n+137 if (prefix.size() == 0)\n+138 return children*subPreBasis_.size();\n+139\n+140 // The first prefix entry refers to one of the (root index size)\n+141 // subindex trees. Hence we have to first compute the corresponding\n+142 // prefix entry for a single subnode subnode. The we can append\n+143 // the other prefix entries unmodified, because the index tree\n+144 // looks the same after the first level.\n+145 SizePrefix subPrefix;\n+146 subPrefix.push_back(prefix[0] / children);\n+147 for(std::size_t i=1; i\n+153 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, BasisFactory::FlatLexicographic)\n+const\n+154 {\n+155 // The size at the index tree root is the size of at the index tree\n+156 // root of a single subnode multiplied by the number of subnodes\n+157 // because we enumerate all child indices in a row.\n+158 if (prefix.size() == 0)\n+159 return children*subPreBasis_.size();\n+160\n+161 // The first prefix entry refers to one of the (root index size)\n+162 // subindex trees. Hence we have to first compute the corresponding\n+163 // prefix entry for a single subnode subnode. The we can append\n+164 // the other prefix entries unmodified, because the index tree\n+165 // looks the same after the first level.\n+166 SizePrefix subPrefix;\n+167 subPrefix.push_back(prefix[0] % children);\n+168 for(std::size_t i=1; i\n+174 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, BasisFactory::\n+BlockedLexicographic) const\n+175 {\n+176 if (prefix.size() == 0)\n+177 return children;\n+178 SizePrefix subPrefix;\n+179 for(std::size_t i=1; i\n+185 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix, BasisFactory::BlockedInterleaved)\n+const\n+186 {\n+187 if (prefix.size() == 0)\n+188 return subPreBasis_.size();\n+189\n+190 SizePrefix subPrefix;\n+191 for(std::size_t i=0; i\n+_\b2_\b3_\b2 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n+233 {\n+234 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+235 }\n+236\n+237private:\n+238\n+239 template\n+240 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_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd) const\n+241 {\n+242 using namespace Dune::Indices;\n+243 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n+244 // Fill indices for first child at the beginning.\n+245 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n+246 // Multiply first component of all indices for first child by\n+247 // number of children to stretch the index range for interleaving.\n+248 for (std::size_t i = 0; i\n+267 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n+FlatLexicographic) const\n+268 {\n+269 using namespace Dune::Indices;\n+270 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n+271 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be firstIndexEntrySize = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().size();\n+272 // Fill indices for first child at the beginning.\n+273 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n+274 for (std::size_t child = 1; child\n+291 static void multiIndexPushFront(MultiIndex& M, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be M0)\n+292 {\n+293 M.resize(M.size()+1);\n+294 for(std::size_t i=M.size()-1; i>0; --i)\n+295 M[i] = M[i-1];\n+296 M[0] = M0;\n+297 }\n+298\n+299 template\n+300 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n+BlockedLexicographic) const\n+301 {\n+302 using namespace Dune::Indices;\n+303 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n+304 // Fill indices for first child at the beginning.\n+305 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n+306 // Insert 0 before first component of all indices for first child.\n+307 for (std::size_t i = 0; i\n+326 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It multiIndices, BasisFactory::\n+BlockedInterleaved) const\n+327 {\n+328 using namespace Dune::Indices;\n+329 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be subTreeSize = node.child(_0).size();\n+330 // Fill indices for first child at the beginning.\n+331 auto next = _\bs_\bu_\bb_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs().indices(node.child(_0), multiIndices);\n+332 // Append 0 after last component of all indices for first child.\n+333 for (std::size_t i = 0; i\n+369auto power(ChildPreBasisFactory&& childPreBasisFactory, const\n+IndexMergingStrategy&)\n+370{\n+371 return [childPreBasisFactory](const auto& gridView) {\n+372 auto childPreBasis = childPreBasisFactory(gridView);\n+373 return PowerPreBasis\n+(std::move(childPreBasis));\n+374 };\n+375}\n+376\n+387template\n+388auto power(ChildPreBasisFactory&& childPreBasisFactory)\n+389{\n+390 return [childPreBasisFactory](const auto& gridView) {\n+391 auto childPreBasis = childPreBasisFactory(gridView);\n+392 return PowerPreBasis(std::\n+move(childPreBasis));\n+393 };\n+394}\n+395\n+396} // end namespace BasisFactory\n+397\n+398// Backward compatibility\n+399namespace BasisBuilder {\n+400\n+401 using namespace BasisFactory;\n+402\n+403}\n+404\n+405\n+406} // end namespace Functions\n+407} // end namespace Dune\n+408\n+409\n+410#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n+_\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+_\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+_\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+typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n+type enableIfConstructible\n+Helper to constrain forwarding constructors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:26\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:69\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:25\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:29\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+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:114\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:193\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:45\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:_\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 powerbasis.hh:207\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+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 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:_\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:61\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:_\bN_\bo_\bd_\be\n+PowerBasisNode< SubNode, children > 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 powerbasis.hh:66\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:_\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 powerbasis.hh:55\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_\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 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_\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: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:_\bS_\bu_\bb_\bN_\bo_\bd_\be\n+typename SubPreBasis::Node SubNode\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn powerbasis.hh:63\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_\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 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:_\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 powerbasis.hh:99\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 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:232\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.\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:116\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+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 powerbasis.hh:225\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:107\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_\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 powerbasis.hh:68\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_\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 powerbasis.hh:69\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_\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 powerbasis.hh:213\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:_\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 powerbasis.hh:93\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 possible values for next position in multi index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sizeinfo.hh:52\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:41\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:28\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:27\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:34\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:64\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:124\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+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 powerbasis.hh:219\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/a00089.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00089.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: defaultlocalview.hh File Reference\n+dune-functions: flatvectorview.hh File Reference\n \n \n \n \n \n \n \n@@ -70,42 +70,48 @@\n \n \n
    \n \n-
    defaultlocalview.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    flatvectorview.hh File Reference
    \n \n
    \n-
    #include <tuple>
    \n-#include <optional>
    \n+
    #include <array>
    \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/common/indices.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::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+\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.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,35 @@\n dune-functions\u00a02.9.0\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+_\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 <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\by_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b<_\b _\bG_\bB_\b _\b>\n-\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+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/a00089_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: defaultlocalview.hh Source File\n+dune-functions: flatvectorview.hh Source File\n \n \n \n \n \n \n \n@@ -74,215 +74,214 @@\n \n \n
    \n
    \n-
    defaultlocalview.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH
    \n
    5
    \n
    6
    \n-
    7#include <tuple>
    \n-
    8#include <optional>
    \n-
    9
    \n-
    10#include <dune/common/concept.hh>
    \n-
    11#include <dune/common/hybridutilities.hh>
    \n-
    12#include <dune/common/reservedvector.hh>
    \n-
    13
    \n-\n-\n-\n+
    7#include <array>
    \n+
    8
    \n+
    9#include <dune/common/concept.hh>
    \n+
    10#include <dune/common/hybridutilities.hh>
    \n+
    11#include <dune/common/indices.hh>
    \n+
    12
    \n+\n+
    14
    \n+
    15
    \n+
    16
    \n
    17
    \n-
    18
    \n-
    19
    \n-
    20namespace Dune {
    \n-
    21namespace Functions {
    \n+
    18namespace Dune {
    \n+
    19namespace Functions {
    \n+
    20namespace Impl {
    \n+
    21
    \n
    22
    \n-
    23
    \n-
    24
    \n-
    26template<class GB>
    \n-
    \n-\n-
    28{
    \n-
    29public:
    \n-
    30
    \n-
    32 using GlobalBasis = GB;
    \n+
    23template<class V>
    \n+
    24struct FlatVectorBackend
    \n+
    25{
    \n+
    26
    \n+
    27 template<class VV, class Index,
    \n+
    28 typename std::enable_if< models<Concept::HasIndexAccess, VV, Index>(), int>::type = 0>
    \n+
    29 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n+
    30 {
    \n+
    31 return v[i];
    \n+
    32 }
    \n
    33
    \n-
    35 using GridView = typename GlobalBasis::GridView;
    \n-
    36
    \n-
    38 using Element = typename GridView::template Codim<0>::Entity;
    \n-
    39
    \n-
    41 using size_type = std::size_t;
    \n-
    42
    \n-
    44 using Tree = typename GlobalBasis::PreBasis::Node;
    \n-
    45
    \n-
    46protected:
    \n+
    34 template<class VV, class Index,
    \n+
    35 typename std::enable_if< not models<Concept::HasIndexAccess, VV, Index>(), int>::type = 0>
    \n+
    36 static decltype(auto) getEntry(VV&& v, const Index&)
    \n+
    37 {
    \n+
    38 return std::forward<VV>(v);
    \n+
    39 }
    \n+
    40
    \n+
    41 template<class VV,
    \n+
    42 typename std::enable_if< models<Concept::HasSizeMethod, VV>(), int>::type = 0>
    \n+
    43 static auto size(VV&& v)
    \n+
    44 {
    \n+
    45 return Dune::Hybrid::size(v);
    \n+
    46 }
    \n
    47
    \n-
    48 using PreBasis = typename GlobalBasis::PreBasis;
    \n-
    49
    \n-
    50 // Type used to store the multi indices of the basis vectors.
    \n-
    51 // In contrast to MultiIndex this always has dynamic size.
    \n-
    52 // It's guaranteed, that you can always cast it to MultiIndex
    \n-\n-
    54 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),
    \n-\n-
    56 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;
    \n+
    48 template<class VV,
    \n+
    49 typename std::enable_if< not models<Concept::HasSizeMethod, VV>(), int>::type = 0>
    \n+
    50 static auto size(VV&&)
    \n+
    51 {
    \n+
    52 return Dune::index_constant<1>{};
    \n+
    53 }
    \n+
    54};
    \n+
    55
    \n+
    56
    \n
    57
    \n-
    58public:
    \n-
    59
    \n-
    61 using MultiIndex =
    \n-
    62 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),
    \n-\n-
    64 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;
    \n-
    65
    \n-
    66
    \n-
    \n-\n-\n-
    70 tree_(globalBasis_->preBasis().makeNode())
    \n+
    58
    \n+
    59template<class K, int n, int m>
    \n+
    60struct FlatVectorBackend<typename Dune::FieldMatrix<K, n, m> >
    \n+
    61{
    \n+
    62
    \n+
    63 template<class VV, class Index>
    \n+
    64 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n+
    65 {
    \n+
    66 return v[i/m][i%m];
    \n+
    67 }
    \n+
    68
    \n+
    69 template<class VV>
    \n+
    70 static auto size(VV&& v)
    \n
    71 {
    \n-
    72 static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to DefaultLocalView does not model the BasisNode concept.");
    \n-\n-
    74 }
    \n-
    \n+
    72 return Dune::index_constant<n*m>{};
    \n+
    73 }
    \n+
    74};
    \n
    75
    \n-
    \n-
    81 void bind(const Element& e)
    \n-
    82 {
    \n-
    83 element_ = e;
    \n-\n-
    85 indices_.resize(size());
    \n-
    86 globalBasis_->preBasis().indices(tree_, indices_.begin());
    \n+
    76
    \n+
    77
    \n+
    78template<class K, std::size_t n>
    \n+
    79struct FlatVectorBackend< std::array<K, n> >
    \n+
    80{
    \n+
    81
    \n+
    82 template<class VV, class Index>
    \n+
    83 static decltype(auto) getEntry(VV&& v, const Index& i)
    \n+
    84 {
    \n+
    85 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;
    \n+
    86 return FlatVectorBackend<K>::getEntry(v[i/innerSize], i%innerSize);
    \n
    87 }
    \n-
    \n
    88
    \n-
    91 [[deprecated("Use the bound() method instead")]]
    \n-
    \n-
    92 bool isBound() const {
    \n-
    93 return static_cast<bool>(element_);
    \n+
    89 template<class VV>
    \n+
    90 static auto size(VV&& v)
    \n+
    91 {
    \n+
    92 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;
    \n+
    93 return Dune::index_constant<n*innerSize>{};
    \n
    94 }
    \n-
    \n
    95
    \n-
    \n-
    98 bool bound() const
    \n-
    99 {
    \n-
    100 return static_cast<bool>(element_);
    \n-
    101 }
    \n-
    \n-
    102
    \n-
    \n-
    107 const Element& element() const
    \n-
    108 {
    \n-
    109 return *element_;
    \n-
    110 }
    \n-
    \n-
    111
    \n-
    \n-
    116 void unbind()
    \n+
    96};
    \n+
    97
    \n+
    98
    \n+
    99
    \n+
    100
    \n+
    101template<class T>
    \n+
    102class FlatVectorView
    \n+
    103{
    \n+
    104 using Backend = FlatVectorBackend<std::decay_t<T>>;
    \n+
    105public:
    \n+
    106 FlatVectorView(T& t) :
    \n+
    107 t_(&t)
    \n+
    108 {}
    \n+
    109
    \n+
    110 auto size() const
    \n+
    111 {
    \n+
    112 return Backend::size(*t_);
    \n+
    113 }
    \n+
    114
    \n+
    115 template<class Index>
    \n+
    116 decltype(auto) operator[](const Index& i) const
    \n
    117 {
    \n-
    118 element_.reset();
    \n+
    118 return Backend::getEntry(*t_, i);
    \n
    119 }
    \n-
    \n
    120
    \n-
    \n-
    125 const Tree& tree() const
    \n-
    126 {
    \n-
    127 return tree_;
    \n-
    128 }
    \n-
    \n-
    129
    \n-
    \n-\n-
    133 {
    \n-
    134 return tree_.size();
    \n-
    135 }
    \n-
    \n-
    136
    \n-
    \n-\n-
    144 {
    \n-
    145 return globalBasis_->preBasis().maxNodeSize();
    \n-
    146 }
    \n-
    \n-
    147
    \n-
    \n-
    149 const MultiIndex& index(size_type i) const
    \n-
    150 {
    \n-
    151 return indices_[i];
    \n-
    152 }
    \n-
    \n-
    153
    \n-
    \n-\n-
    157 {
    \n-
    158 return *globalBasis_;
    \n-
    159 }
    \n-
    \n-
    160
    \n-
    \n-\n-
    162 {
    \n-
    163 return *this;
    \n-
    164 }
    \n-
    \n+
    121 template<class Index>
    \n+
    122 decltype(auto) operator[](const Index& i)
    \n+
    123 {
    \n+
    124 return Backend::getEntry(*t_, i);
    \n+
    125 }
    \n+
    126
    \n+
    127private:
    \n+
    128 T* t_;
    \n+
    129};
    \n+
    130
    \n+
    131
    \n+
    132template<class T>
    \n+
    133class FlatVectorView<T&&>
    \n+
    134{
    \n+
    135 using Backend = FlatVectorBackend<std::decay_t<T>>;
    \n+
    136public:
    \n+
    137 FlatVectorView(T&& t) :
    \n+
    138 t_(std::move(t))
    \n+
    139 {}
    \n+
    140
    \n+
    141 auto size() const
    \n+
    142 {
    \n+
    143 return Backend::size(t_);
    \n+
    144 }
    \n+
    145
    \n+
    146 template<class Index>
    \n+
    147 decltype(auto) operator[](const Index& i) const
    \n+
    148 {
    \n+
    149 return Backend::getEntry(t_, i);
    \n+
    150 }
    \n+
    151
    \n+
    152 template<class Index>
    \n+
    153 decltype(auto) operator[](const Index& i)
    \n+
    154 {
    \n+
    155 return Backend::getEntry(t_, i);
    \n+
    156 }
    \n+
    157
    \n+
    158private:
    \n+
    159 T t_;
    \n+
    160};
    \n+
    161
    \n+
    162} // namespace Impl
    \n+
    163
    \n+
    164
    \n
    165
    \n-
    166protected:
    \n-\n-
    168 std::optional<Element> element_;
    \n-\n-
    170 std::vector<MultiIndexStorage> indices_;
    \n-
    171};
    \n-
    \n-
    172
    \n-
    173
    \n-
    174
    \n-
    175} // end namespace Functions
    \n-
    176} // end namespace Dune
    \n-
    177
    \n-
    178
    \n-
    179
    \n-
    180#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH
    \n-\n-\n+
    178template<class T>
    \n+
    \n+\n+
    180{
    \n+
    181 return Impl::FlatVectorView<T>(t);
    \n+
    182}
    \n+
    \n+
    183
    \n+
    196template<class T>
    \n+
    \n+
    197auto flatVectorView(const T& t)
    \n+
    198{
    \n+
    199 return Impl::FlatVectorView<const T>(t);
    \n+
    200}
    \n+
    \n+
    201
    \n+
    214template<class T>
    \n+
    \n+
    215auto flatVectorView(T&& t)
    \n+
    216{
    \n+
    217 return Impl::FlatVectorView<T&&>(std::move(t));
    \n+
    218}
    \n+
    \n+
    219
    \n+
    220
    \n+
    221} // namespace Dune::Functions
    \n+
    222} // namespace Dune
    \n+
    223
    \n+
    224
    \n+
    225#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH
    \n
    Definition polynomial.hh:10
    \n-
    void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)
    Definition nodes.hh:253
    \n-
    void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)
    Definition nodes.hh:260
    \n-
    A statically sized MultiIndex type.
    Definition multiindex.hh:25
    \n-
    A dynamically sized array-like class with overflow.
    Definition overflowarray.hh:45
    \n-
    The restriction of a finite element basis to a single element.
    Definition defaultlocalview.hh:28
    \n-
    typename GlobalBasis::PreBasis PreBasis
    Definition defaultlocalview.hh:48
    \n-
    void unbind()
    Unbind from the current element.
    Definition defaultlocalview.hh:116
    \n-
    bool bound() const
    Return if the view is bound to a grid element.
    Definition defaultlocalview.hh:98
    \n-
    typename GlobalBasis::GridView GridView
    The grid view the global FE basis lives on.
    Definition defaultlocalview.hh:35
    \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:149
    \n-
    std::optional< Element > element_
    Definition defaultlocalview.hh:168
    \n-
    typename GridView::template Codim< 0 >::Entity Element
    Type of the grid element we are bound to.
    Definition defaultlocalview.hh:38
    \n-
    const Tree & tree() const
    Return the local ansatz tree associated to the bound entity.
    Definition defaultlocalview.hh:125
    \n-
    void bind(const Element &e)
    Bind the view to a grid element.
    Definition defaultlocalview.hh:81
    \n-
    const Element & element() const
    Return the grid element that the view is bound to.
    Definition defaultlocalview.hh:107
    \n-
    size_type size() const
    Total number of degrees of freedom on this element.
    Definition defaultlocalview.hh:132
    \n-
    GB GlobalBasis
    The global FE basis that this is a view on.
    Definition defaultlocalview.hh:32
    \n-
    Tree tree_
    Definition defaultlocalview.hh:169
    \n-
    size_type maxSize() const
    Maximum local size for any element on the GridView.
    Definition defaultlocalview.hh:143
    \n-
    std::size_t size_type
    The type used for sizes.
    Definition defaultlocalview.hh:41
    \n-
    bool isBound() const
    Return if the view is bound to a grid element.
    Definition defaultlocalview.hh:92
    \n-
    const DefaultLocalView & rootLocalView() const
    Definition defaultlocalview.hh:161
    \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:56
    \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:64
    \n-
    std::vector< MultiIndexStorage > indices_
    Definition defaultlocalview.hh:170
    \n-
    typename GlobalBasis::PreBasis::Node Tree
    Tree of local finite elements / local shape function sets.
    Definition defaultlocalview.hh:44
    \n-
    DefaultLocalView(const GlobalBasis &globalBasis)
    Construct local view for a given global finite element basis.
    Definition defaultlocalview.hh:68
    \n-
    const GlobalBasis * globalBasis_
    Definition defaultlocalview.hh:167
    \n-
    const GlobalBasis & globalBasis() const
    Return the global basis that we are a view on.
    Definition defaultlocalview.hh:156
    \n+
    auto flatVectorView(T &t)
    Create flat vector view of passed mutable container.
    Definition flatvectorview.hh:179
    \n \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,270 +1,211 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n 5\n 6\n-7#include \n-8#include \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/_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\ba_\br_\br_\ba_\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/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\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+7#include \n+8\n+9#include \n+10#include \n+11#include \n+12\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\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\n+15\n+16\n 17\n-18\n-19\n-20namespace _\bD_\bu_\bn_\be {\n-21namespace Functions {\n+18namespace _\bD_\bu_\bn_\be {\n+19namespace Functions {\n+20namespace Impl {\n+21\n 22\n-23\n-24\n-26template\n-_\b2_\b7class _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw\n-28{\n-29public:\n-30\n-_\b3_\b2 using _\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs = GB;\n+23template\n+24struct FlatVectorBackend\n+25{\n+26\n+27 template(),\n+int>::type = 0>\n+29 static decltype(auto) getEntry(VV&& v, const Index& i)\n+30 {\n+31 return v[i];\n+32 }\n 33\n-_\b3_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename GlobalBasis::GridView;\n-36\n-_\b3_\b8 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GridView::template Codim<0>::Entity;\n-39\n-_\b4_\b1 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-42\n-_\b4_\b4 using _\bT_\br_\be_\be = typename GlobalBasis::PreBasis::Node;\n-45\n-46protected:\n+34 template(),\n+int>::type = 0>\n+36 static decltype(auto) getEntry(VV&& v, const Index&)\n+37 {\n+38 return std::forward(v);\n+39 }\n+40\n+41 template(), int>::type =\n+0>\n+43 static auto size(VV&& v)\n+44 {\n+45 return Dune::Hybrid::size(v);\n+46 }\n 47\n-_\b4_\b8 using _\bP_\br_\be_\bB_\ba_\bs_\bi_\bs = typename GlobalBasis::PreBasis;\n-49\n-50 // Type used to store the multi indices of the basis vectors.\n-51 // In contrast to MultiIndex this always has dynamic size.\n-52 // It's guaranteed, that you can always cast it to MultiIndex\n-_\b5_\b3 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx_\bS_\bt_\bo_\br_\ba_\bg_\be =\n-54 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n-maxMultiIndexSize),\n-55 _\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-56 Dune::ReservedVector>;\n+48 template(), int>::\n+type = 0>\n+50 static auto size(VV&&)\n+51 {\n+52 return Dune::index_constant<1>{};\n+53 }\n+54};\n+55\n+56\n 57\n-58public:\n-59\n-_\b6_\b1 using _\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx =\n-62 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n-maxMultiIndexSize),\n-63 _\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-64 Dune::ReservedVector>;\n-65\n-66\n-_\b6_\b8 _\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-69 _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_(&_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs),\n-70 _\bt_\br_\be_\be_\b_(_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().makeNode())\n+58\n+59template\n+60struct FlatVectorBackend >\n+61{\n+62\n+63 template\n+64 static decltype(auto) getEntry(VV&& v, const Index& i)\n+65 {\n+66 return v[i/m][i%m];\n+67 }\n+68\n+69 template\n+70 static auto size(VV&& v)\n 71 {\n-72 static_assert(models, _\bT_\br_\be_\be>(), \"Tree type\n-passed to DefaultLocalView does not model the BasisNode concept.\");\n-73 _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bT_\br_\be_\be(_\bt_\br_\be_\be_\b_);\n-74 }\n+72 return Dune::index_constant{};\n+73 }\n+74};\n 75\n-_\b8_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-82 {\n-83 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = e;\n-84 _\bb_\bi_\bn_\bd_\bT_\br_\be_\be(_\bt_\br_\be_\be_\b_, *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n-85 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.resize(_\bs_\bi_\bz_\be());\n-86 _\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+76\n+77\n+78template\n+79struct FlatVectorBackend< std::array >\n+80{\n+81\n+82 template\n+83 static decltype(auto) getEntry(VV&& v, const Index& i)\n+84 {\n+85 const auto innerSize = decltype(FlatVectorBackend::size(v[0]))::value;\n+86 return FlatVectorBackend::getEntry(v[i/innerSize], i%innerSize);\n 87 }\n 88\n-91 [[deprecated(\"Use the bound() method instead\")]]\n-_\b9_\b2 bool _\bi_\bs_\bB_\bo_\bu_\bn_\bd() const {\n-93 return static_cast(_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n+89 template\n+90 static auto size(VV&& v)\n+91 {\n+92 const auto innerSize = decltype(FlatVectorBackend::size(v[0]))::value;\n+93 return Dune::index_constant{};\n 94 }\n 95\n-_\b9_\b8 bool _\bb_\bo_\bu_\bn_\bd() const\n-99 {\n-100 return static_cast(_\be_\bl_\be_\bm_\be_\bn_\bt_\b_);\n-101 }\n-102\n-_\b1_\b0_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-108 {\n-109 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-110 }\n-111\n-_\b1_\b1_\b6 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+96};\n+97\n+98\n+99\n+100\n+101template\n+102class FlatVectorView\n+103{\n+104 using Backend = FlatVectorBackend>;\n+105public:\n+106 FlatVectorView(T& t) :\n+107 t_(&t)\n+108 {}\n+109\n+110 auto size() const\n+111 {\n+112 return Backend::size(*t_);\n+113 }\n+114\n+115 template\n+116 decltype(auto) operator[](const Index& i) const\n 117 {\n-118 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_.reset();\n+118 return Backend::getEntry(*t_, i);\n 119 }\n 120\n-_\b1_\b2_\b5 const _\bT_\br_\be_\be& _\bt_\br_\be_\be() const\n-126 {\n-127 return _\bt_\br_\be_\be_\b_;\n-128 }\n-129\n-_\b1_\b3_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-133 {\n-134 return _\bt_\br_\be_\be_\b_.size();\n-135 }\n-136\n-_\b1_\b4_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bS_\bi_\bz_\be() const\n-144 {\n-145 return _\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_->preBasis().maxNodeSize();\n-146 }\n-147\n-_\b1_\b4_\b9 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-150 {\n-151 return _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_[i];\n-152 }\n-153\n-_\b1_\b5_\b6 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-157 {\n-158 return *_\bg_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs_\b_;\n-159 }\n-160\n-_\b1_\b6_\b1 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-162 {\n-163 return *this;\n-164 }\n+121 template\n+122 decltype(auto) operator[](const Index& i)\n+123 {\n+124 return Backend::getEntry(*t_, i);\n+125 }\n+126\n+127private:\n+128 T* t_;\n+129};\n+130\n+131\n+132template\n+133class FlatVectorView\n+134{\n+135 using Backend = FlatVectorBackend>;\n+136public:\n+137 FlatVectorView(T&& t) :\n+138 t_(std::move(t))\n+139 {}\n+140\n+141 auto size() const\n+142 {\n+143 return Backend::size(t_);\n+144 }\n+145\n+146 template\n+147 decltype(auto) operator[](const Index& i) const\n+148 {\n+149 return Backend::getEntry(t_, i);\n+150 }\n+151\n+152 template\n+153 decltype(auto) operator[](const Index& i)\n+154 {\n+155 return Backend::getEntry(t_, i);\n+156 }\n+157\n+158private:\n+159 T t_;\n+160};\n+161\n+162} // namespace Impl\n+163\n+164\n 165\n-166protected:\n-_\b1_\b6_\b7 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_\b8 std::optional _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b1_\b6_\b9 _\bT_\br_\be_\be _\bt_\br_\be_\be_\b_;\n-_\b1_\b7_\b0 std::vector _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n-171};\n-172\n-173\n-174\n-175} // end namespace Functions\n-176} // end namespace Dune\n-177\n-178\n-179\n-180#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n-_\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+178template\n+_\b1_\b7_\b9auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(T& t)\n+180{\n+181 return Impl::FlatVectorView(t);\n+182}\n+183\n+196template\n+_\b1_\b9_\b7auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(const T& t)\n+198{\n+199 return Impl::FlatVectorView(t);\n+200}\n+201\n+214template\n+_\b2_\b1_\b5auto _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(T&& t)\n+216{\n+217 return Impl::FlatVectorView(std::move(t));\n+218}\n+219\n+220\n+221} // namespace Dune::Functions\n+222} // namespace Dune\n+223\n+224\n+225#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:253\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:260\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:25\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: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\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:28\n-_\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: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:_\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:116\n-_\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:98\n-_\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:35\n-_\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:149\n-_\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:168\n-_\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:38\n-_\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:125\n-_\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:81\n-_\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:107\n-_\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:132\n-_\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: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:_\bt_\br_\be_\be_\b_\n-Tree tree_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaultlocalview.hh:169\n-_\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:143\n-_\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: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_\bL_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b:_\b:_\bi_\bs_\bB_\bo_\bu_\bn_\bd\n-bool isBound() 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:92\n-_\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:161\n-_\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:56\n-_\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: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_\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:170\n-_\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:44\n-_\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: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:_\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: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:_\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:156\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:179\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/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: flatmultiindex.hh File Reference\n+dune-functions: overflowarray.hh File Reference\n \n \n \n \n \n \n \n@@ -65,42 +65,45 @@\n \n \n \n \n \n \n \n
    \n \n-
    flatmultiindex.hh File Reference
    \n+Classes |\n+Namespaces
    \n+
    overflowarray.hh File Reference
    \n \n
    \n-
    #include <array>
    \n-#include <dune/functions/common/multiindex.hh>
    \n+
    #include <algorithm>
    \n+#include <iostream>
    \n+#include <cstddef>
    \n+#include <array>
    \n+#include <initializer_list>
    \n+#include <dune/common/genericiterator.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n+Classes

    class  Dune::Functions::OverflowArray< BA, maxSize >
     A dynamically sized array-like class with overflow. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

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

    \n-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,24 +1,27 @@\n dune-functions\u00a02.9.0\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+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+overflowarray.hh File Reference\n+#include \n+#include \n+#include \n #include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\bu_\bl_\bt_\bi_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+#include \n+#include \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+\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:_\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/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: flatmultiindex.hh Source File\n+dune-functions: overflowarray.hh Source File\n \n \n \n \n \n \n \n@@ -70,48 +70,282 @@\n
    \n \n \n \n \n \n \n
    \n-
    flatmultiindex.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n
    5
    \n-
    6#include <array>
    \n-
    7
    \n-\n-
    9
    \n-
    10namespace Dune {
    \n-
    11namespace Functions {
    \n-
    12
    \n+
    6#include <algorithm>
    \n+
    7#include <iostream>
    \n+
    8#include <cstddef>
    \n+
    9#include <array>
    \n+
    10#include <initializer_list>
    \n+
    11
    \n+
    12#include <dune/common/genericiterator.hh>
    \n
    13
    \n
    14
    \n-
    30template<class size_type>
    \n-\n-
    32
    \n-
    33
    \n-
    34
    \n-
    35} // end namespace Functions
    \n-
    36} // end namespace Dune
    \n-
    37
    \n-
    38#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH
    \n-\n-
    Definition polynomial.hh:10
    \n-
    A statically sized MultiIndex type.
    Definition multiindex.hh:25
    \n-
    A statically sized MultiIndex type.
    Definition multiindex.hh:49
    \n+
    15
    \n+
    16namespace Dune::Functions {
    \n+
    17
    \n+
    18
    \n+
    42template<class BA, std::size_t maxSize = std::tuple_size_v<BA>>
    \n+
    \n+\n+
    44 public BA
    \n+
    45{
    \n+
    46 static constexpr std::size_t baseSize = std::tuple_size_v<BA>;
    \n+
    47
    \n+
    48public:
    \n+
    49 using BaseArray = BA;
    \n+
    50
    \n+
    51 using value_type = typename BaseArray::value_type;
    \n+\n+\n+\n+
    55 using difference_type = std::ptrdiff_t;
    \n+
    56 using size_type = std::size_t;
    \n+
    57 using iterator = Dune::GenericIterator<OverflowArray, value_type>;
    \n+
    58 using const_iterator = Dune::GenericIterator<const OverflowArray, const value_type>;
    \n+
    59
    \n+
    60private:
    \n+
    61 using OverflowBuffer = std::array<value_type, maxSize-baseSize>;
    \n+
    62
    \n+
    63public:
    \n+
    64
    \n+
    65 OverflowArray() = default;
    \n+
    66
    \n+
    \n+
    67 OverflowArray(const std::initializer_list<value_type>& l) {
    \n+
    68 assert(l.size() <= capacity());
    \n+
    69 size_ = l.size();
    \n+
    70 std::copy_n(l.begin(), size_, begin());
    \n+
    71 }
    \n+
    \n+
    72
    \n+
    \n+
    73 bool operator == (const OverflowArray& other) const {
    \n+
    74 if (size() != other.size())
    \n+
    75 return false;
    \n+
    76 for (size_type i=0; i<size(); ++i)
    \n+
    77 if ((*this)[i] != other[i])
    \n+
    78 return false;
    \n+
    79 return true;
    \n+
    80 }
    \n+
    \n+
    81
    \n+
    \n+
    83 void clear() {
    \n+
    84 size_ = 0;
    \n+
    85 }
    \n+
    \n+
    86
    \n+
    \n+
    93 void resize(size_type n) {
    \n+
    94 assert(n <= capacity());
    \n+
    95 size_ = n;
    \n+
    96 }
    \n+
    \n+
    97
    \n+
    \n+
    104 void push_back(const value_type& t) {
    \n+
    105 assert(size() < capacity());
    \n+
    106 (*this)[size_++] = t;
    \n+
    107 }
    \n+
    \n+
    108
    \n+
    \n+
    110 void pop_back() {
    \n+
    111 assert(size() > 0);
    \n+
    112 if (! empty())
    \n+
    113 size_--;
    \n+
    114 }
    \n+
    \n+
    115
    \n+
    \n+
    122 void push_front(const value_type& t) {
    \n+
    123 assert(size() < capacity());
    \n+
    124 for (size_type i=0; i<size(); i++)
    \n+
    125 (*this)[i+1] = (*this)[i];
    \n+
    126 (*this)[0] = t;
    \n+
    127 }
    \n+
    \n+
    128
    \n+
    \n+\n+
    131 return iterator(*this, 0);
    \n+
    132 }
    \n+
    \n+
    133
    \n+
    \n+\n+
    136 return const_iterator(*this, 0);
    \n+
    137 }
    \n+
    \n+
    138
    \n+
    \n+\n+
    141 return iterator(*this, size());
    \n+
    142 }
    \n+
    \n+
    143
    \n+
    \n+\n+
    146 return const_iterator(*this, size());
    \n+
    147 }
    \n+
    \n+
    148
    \n+
    \n+\n+
    151 assert(i < size());
    \n+
    152 // If there's no padding between the base class and the overflow_ member,
    \n+
    153 // the compiler should be able to optimize this to
    \n+
    154 // return *(&BaseArray::operator[](0) + i);
    \n+
    155 if (i<baseSize)
    \n+
    156 return BaseArray::operator[](i);
    \n+
    157 return overflow_[i-baseSize];
    \n+
    158 }
    \n+
    \n+
    159
    \n+
    \n+\n+
    162 assert(i < size());
    \n+
    163 // If there's no padding between the base class and the overflow_ member,
    \n+
    164 // the compiler should be able to optimize this to
    \n+
    165 // return *(&BaseArray::operator[](0) + i);
    \n+
    166 if (i<baseSize)
    \n+
    167 return BaseArray::operator[](i);
    \n+
    168 return overflow_[i-baseSize];
    \n+
    169 }
    \n+
    \n+
    170
    \n+
    \n+\n+
    173 assert(size() > 0);
    \n+
    174 return (*this)[0];
    \n+
    175 }
    \n+
    \n+
    176
    \n+
    \n+\n+
    179 assert(size() > 0);
    \n+
    180 return (*this)[0];
    \n+
    181 }
    \n+
    \n+
    182
    \n+
    \n+\n+
    185 assert(size() > 0);
    \n+
    186 return (*this)[size()-1];
    \n+
    187 }
    \n+
    \n+
    188
    \n+
    \n+\n+
    191 assert(size() > 0);
    \n+
    192 return (*this)[size()-1];
    \n+
    193 }
    \n+
    \n+
    194
    \n+
    \n+
    196 size_type size () const {
    \n+
    197 return size_;
    \n+
    198 }
    \n+
    \n+
    199
    \n+
    \n+
    201 bool empty() const {
    \n+
    202 return size() == 0;
    \n+
    203 }
    \n+
    \n+
    204
    \n+
    \n+
    206 static constexpr size_type capacity() {
    \n+
    207 return maxSize;
    \n+
    208 }
    \n+
    \n+
    209
    \n+
    \n+
    211 static constexpr size_type max_size() {
    \n+
    212 return maxSize;
    \n+
    213 }
    \n+
    \n+
    214
    \n+
    \n+
    216 inline friend std::size_t hash_value(const OverflowArray& v) noexcept {
    \n+
    217 return hash_range(v.begin(), v.end());
    \n+
    218 }
    \n+
    \n+
    219
    \n+
    \n+
    221 friend std::ostream& operator<< (std::ostream& s, const OverflowArray& c) {
    \n+
    222 for (const auto& ci : c)
    \n+
    223 s << ci << " ";
    \n+
    224 return s;
    \n+
    225 }
    \n+
    \n+
    226
    \n+
    227private:
    \n+
    228 OverflowBuffer overflow_;
    \n+
    229 size_type size_ = 0;
    \n+
    230};
    \n+
    \n+
    231
    \n+
    232
    \n+
    233
    \n+
    234} // namespace Dune::Functions
    \n+
    235
    \n+
    236
    \n+
    237
    \n+
    238#endif // DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n+
    Definition polynomial.hh:11
    \n+
    A dynamically sized array-like class with overflow.
    Definition overflowarray.hh:45
    \n+
    const value_type & const_reference
    Definition overflowarray.hh:53
    \n+
    value_type & reference
    Definition overflowarray.hh:52
    \n+
    const_iterator end() const
    Returns a const_iterator pointing to the end of the OverflowArray.
    Definition overflowarray.hh:145
    \n+
    bool operator==(const OverflowArray &other) const
    Definition overflowarray.hh:73
    \n+
    friend std::size_t hash_value(const OverflowArray &v) noexcept
    Compute hash value.
    Definition overflowarray.hh:216
    \n+
    void push_back(const value_type &t)
    Appends an element to the end of the OverflowArray,.
    Definition overflowarray.hh:104
    \n+
    friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)
    Write container to an output stream.
    Definition overflowarray.hh:221
    \n+
    iterator begin()
    Returns a iterator pointing to the beginning of the OverflowArray.
    Definition overflowarray.hh:130
    \n+
    bool empty() const
    Returns true if OverflowArray has no elements.
    Definition overflowarray.hh:201
    \n+
    size_type size() const
    Returns number of elements in the OverflowArray.
    Definition overflowarray.hh:196
    \n+
    typename BaseArray::value_type value_type
    Definition overflowarray.hh:51
    \n+
    void pop_back()
    Erases the last element of the OverflowArray, O(1) time.
    Definition overflowarray.hh:110
    \n+
    Dune::GenericIterator< OverflowArray, value_type > iterator
    Definition overflowarray.hh:57
    \n+
    const_iterator begin() const
    Returns a const_iterator pointing to the beginning of the OverflowArray.
    Definition overflowarray.hh:135
    \n+
    std::ptrdiff_t difference_type
    Definition overflowarray.hh:55
    \n+\n+
    BA BaseArray
    Definition overflowarray.hh:49
    \n+
    static constexpr size_type capacity()
    Returns the capacity of the OverflowArray.
    Definition overflowarray.hh:206
    \n+
    static constexpr size_type max_size()
    Returns the maximum length of the OverflowArray.
    Definition overflowarray.hh:211
    \n+
    const_reference front() const
    Returns const reference to first element of OverflowArray.
    Definition overflowarray.hh:178
    \n+
    void clear()
    Erases all elements.
    Definition overflowarray.hh:83
    \n+
    iterator end()
    Returns an iterator pointing to the end of the OverflowArray.
    Definition overflowarray.hh:140
    \n+
    std::size_t size_type
    Definition overflowarray.hh:56
    \n+
    void resize(size_type n)
    Specifies a new size for the OverflowArray.
    Definition overflowarray.hh:93
    \n+
    value_type * pointer
    Definition overflowarray.hh:54
    \n+
    Dune::GenericIterator< const OverflowArray, const value_type > const_iterator
    Definition overflowarray.hh:58
    \n+
    const_reference back() const
    Returns const reference to last element of OverflowArray.
    Definition overflowarray.hh:190
    \n+
    OverflowArray(const std::initializer_list< value_type > &l)
    Definition overflowarray.hh:67
    \n+
    reference back()
    Returns reference to last element of OverflowArray.
    Definition overflowarray.hh:184
    \n+
    void push_front(const value_type &t)
    Inserts an element to the begin of the OverflowArray,.
    Definition overflowarray.hh:122
    \n+
    reference front()
    Returns reference to first element of OverflowArray.
    Definition overflowarray.hh:172
    \n+
    reference operator[](size_type i)
    Returns reference to the i'th element.
    Definition overflowarray.hh:150
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,43 +1,311 @@\n dune-functions\u00a02.9.0\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+ * _\bc_\bo_\bm_\bm_\bo_\bn\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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+4#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n 5\n-6#include \n-7\n-8#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-9\n-10namespace _\bD_\bu_\bn_\be {\n-11namespace Functions {\n-12\n+6#include \n+7#include \n+8#include \n+9#include \n+10#include \n+11\n+12#include \n 13\n 14\n-30template\n-_\b3_\b1using _\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-32\n-33\n-34\n-35} // end namespace Functions\n-36} // end namespace Dune\n-37\n-38#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n-_\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:10\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:25\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:49\n+15\n+16namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+17\n+18\n+42template>\n+_\b4_\b3class _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by :\n+44 public BA\n+45{\n+46 static constexpr std::size_t baseSize = std::tuple_size_v;\n+47\n+48public:\n+_\b4_\b9 using _\bB_\ba_\bs_\be_\bA_\br_\br_\ba_\by = BA;\n+50\n+_\b5_\b1 using _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be = typename BaseArray::value_type;\n+_\b5_\b2 using _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be&;\n+_\b5_\b3 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_\b4 using _\bp_\bo_\bi_\bn_\bt_\be_\br = _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be*;\n+_\b5_\b5 using _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be = std::ptrdiff_t;\n+_\b5_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n+_\b5_\b7 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br = Dune::GenericIterator;\n+_\b5_\b8 using _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br = Dune::GenericIterator;\n+59\n+60private:\n+61 using OverflowBuffer = std::array<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be, maxSize-baseSize>;\n+62\n+63public:\n+64\n+_\b6_\b5 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by() = default;\n+66\n+_\b6_\b7 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by(const std::initializer_list& l) {\n+68 assert(l.size() <= _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n+69 size_ = l.size();\n+70 std::copy_n(l.begin(), size_, _\bb_\be_\bg_\bi_\bn());\n+71 }\n+72\n+_\b7_\b3 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+74 if (_\bs_\bi_\bz_\be() != other._\bs_\bi_\bz_\be())\n+75 return false;\n+76 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); ++i)\n+77 if ((*this)[i] != other[i])\n+78 return false;\n+79 return true;\n+80 }\n+81\n+_\b8_\b3 void _\bc_\bl_\be_\ba_\br() {\n+84 size_ = 0;\n+85 }\n+86\n+_\b9_\b3 void _\br_\be_\bs_\bi_\bz_\be(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n) {\n+94 assert(n <= _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n+95 size_ = n;\n+96 }\n+97\n+_\b1_\b0_\b4 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& t) {\n+105 assert(_\bs_\bi_\bz_\be() < _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n+106 (*this)[size_++] = t;\n+107 }\n+108\n+_\b1_\b1_\b0 void _\bp_\bo_\bp_\b__\bb_\ba_\bc_\bk() {\n+111 assert(_\bs_\bi_\bz_\be() > 0);\n+112 if (! _\be_\bm_\bp_\bt_\by())\n+113 size_--;\n+114 }\n+115\n+_\b1_\b2_\b2 void _\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt(const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& t) {\n+123 assert(_\bs_\bi_\bz_\be() < _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n+124 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+125 (*this)[i+1] = (*this)[i];\n+126 (*this)[0] = t;\n+127 }\n+128\n+_\b1_\b3_\b0 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() {\n+131 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n+132 }\n+133\n+_\b1_\b3_\b5 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const {\n+136 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n+137 }\n+138\n+_\b1_\b4_\b0 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() {\n+141 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n+142 }\n+143\n+_\b1_\b4_\b5 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const {\n+146 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n+147 }\n+148\n+_\b1_\b5_\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+151 assert(i < _\bs_\bi_\bz_\be());\n+152 // If there's no padding between the base class and the overflow_ member,\n+153 // the compiler should be able to optimize this to\n+154 // return *(&BaseArray::operator[](0) + i);\n+155 if (i 0);\n+174 return (*this)[0];\n+175 }\n+176\n+_\b1_\b7_\b8 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt() const {\n+179 assert(_\bs_\bi_\bz_\be() > 0);\n+180 return (*this)[0];\n+181 }\n+182\n+_\b1_\b8_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() {\n+185 assert(_\bs_\bi_\bz_\be() > 0);\n+186 return (*this)[_\bs_\bi_\bz_\be()-1];\n+187 }\n+188\n+_\b1_\b9_\b0 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() const {\n+191 assert(_\bs_\bi_\bz_\be() > 0);\n+192 return (*this)[_\bs_\bi_\bz_\be()-1];\n+193 }\n+194\n+_\b1_\b9_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be () const {\n+197 return size_;\n+198 }\n+199\n+_\b2_\b0_\b1 bool _\be_\bm_\bp_\bt_\by() const {\n+202 return _\bs_\bi_\bz_\be() == 0;\n+203 }\n+204\n+_\b2_\b0_\b6 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by() {\n+207 return maxSize;\n+208 }\n+209\n+_\b2_\b1_\b1 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() {\n+212 return maxSize;\n+213 }\n+214\n+_\b2_\b1_\b6 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+217 return hash_range(v.begin(), v.end());\n+218 }\n+219\n+_\b2_\b2_\b1 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+222 for (const auto& ci : c)\n+223 s << ci << \" \";\n+224 return s;\n+225 }\n+226\n+227private:\n+228 OverflowBuffer overflow_;\n+229 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be size_ = 0;\n+230};\n+231\n+232\n+233\n+234} // namespace Dune::Functions\n+235\n+236\n+237\n+238#endif // DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+_\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:11\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:45\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: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:_\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:52\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:145\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:73\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:216\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:104\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:221\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:130\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:201\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:196\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:51\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:110\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: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:_\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:135\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: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:_\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: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_\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:206\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:211\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:178\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:83\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:140\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: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:_\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:93\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:54\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: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:_\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:190\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:67\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:184\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:122\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:172\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:150\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: raviartthomasbasis.hh File Reference\n+dune-functions: multiindex.hh File Reference\n \n \n \n \n \n \n \n@@ -65,75 +65,55 @@\n \n \n \n \n \n \n \n
    \n \n-
    raviartthomasbasis.hh File Reference
    \n+
    multiindex.hh File Reference
    \n
    \n
    \n-
    #include <array>
    \n-#include <dune/common/exceptions.hh>
    \n-#include <dune/grid/common/capabilities.hh>
    \n-#include <dune/grid/common/mcmgmapper.hh>
    \n-#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n-#include <dune/localfunctions/raviartthomas.hh>
    \n-#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>
    \n-#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>
    \n-#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>
    \n-#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>
    \n-#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>
    \n-#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>
    \n-#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>
    \n-#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>
    \n-#include <dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh>
    \n-#include <dune/functions/functionspacebases/nodes.hh>
    \n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>
    \n+
    #include <cstddef>
    \n+#include <array>
    \n+#include <iostream>
    \n+#include <dune/common/hash.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::RaviartThomasPreBasis< GV, k >
    class  Dune::Functions::StaticMultiIndex< size_type, n >
     A statically sized MultiIndex type. More...
     
    class  Dune::Functions::RaviartThomasNode< GV, k >
    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-\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<std::size_t k>
    auto Dune::Functions::BasisFactory::raviartThomas ()
     Create a pre-basis factory that can create a Raviart-Thomas pre-basis.
     
    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,52 +1,35 @@\n dune-functions\u00a02.9.0\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+ * _\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-#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 \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:_\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:_\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:_\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-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bB_\ba_\bs_\bi_\bs = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bG_\bl_\bo_\bb_\ba_\bl_\bB_\ba_\bs_\bi_\bs<\n- _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs< GV, k > >\n-\u00a0 Basis of a k-th-order Raviart Thomas finite element space.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs ()\n-\u00a0 Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n+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/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: raviartthomasbasis.hh Source File\n+dune-functions: multiindex.hh Source File\n \n \n \n \n \n \n \n@@ -70,482 +70,118 @@\n
    \n \n \n \n \n \n \n
    \n-
    raviartthomasbasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n
    5
    \n-
    6#include <array>
    \n-
    7#include <dune/common/exceptions.hh>
    \n-
    8
    \n-
    9#include <dune/grid/common/capabilities.hh>
    \n-
    10#include <dune/grid/common/mcmgmapper.hh>
    \n+
    6#include <cstddef>
    \n+
    7#include <array>
    \n+
    8#include <iostream>
    \n+
    9
    \n+
    10#include <dune/common/hash.hh>
    \n
    11
    \n-
    12#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n-
    13#include <dune/localfunctions/raviartthomas.hh>
    \n-
    14#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>
    \n-
    15#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>
    \n-
    16#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>
    \n-
    17#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>
    \n-
    18#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>
    \n-
    19#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>
    \n-
    20#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>
    \n-
    21#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>
    \n-
    22
    \n-\n-\n-\n-
    26
    \n-
    27namespace Dune {
    \n-
    28namespace Functions {
    \n-
    29
    \n-
    30namespace Impl {
    \n-
    31
    \n-
    32 template<int dim, typename D, typename R, std::size_t k>
    \n-
    33 struct RaviartThomasSimplexLocalInfo
    \n-
    34 {
    \n-
    35 // Dummy type, must be something that we can have a std::unique_ptr to
    \n-
    36 using FiniteElement = void*;
    \n-
    37 };
    \n-
    38
    \n-
    39 template<typename D, typename R>
    \n-
    40 struct RaviartThomasSimplexLocalInfo<2,D,R,0>
    \n-
    41 {
    \n-
    42 using FiniteElement = RT02DLocalFiniteElement<D,R>;
    \n-
    43 };
    \n-
    44
    \n-
    45 template<typename D, typename R>
    \n-
    46 struct RaviartThomasSimplexLocalInfo<2,D,R,1>
    \n-
    47 {
    \n-
    48 using FiniteElement = RT12DLocalFiniteElement<D,R>;
    \n-
    49 };
    \n-
    50
    \n-
    51 template<typename D, typename R>
    \n-
    52 struct RaviartThomasSimplexLocalInfo<3,D,R,0>
    \n-
    53 {
    \n-
    54 using FiniteElement = RT03DLocalFiniteElement<D,R>;
    \n-
    55 };
    \n-
    56
    \n-
    57 template<int dim, typename D, typename R, std::size_t k>
    \n-
    58 struct RaviartThomasCubeLocalInfo
    \n-
    59 {
    \n-
    60 // Dummy type, must be something that we can have a std::unique_ptr to
    \n-
    61 using FiniteElement = void*;
    \n-
    62 };
    \n-
    63
    \n-
    64 template<typename D, typename R>
    \n-
    65 struct RaviartThomasCubeLocalInfo<2,D,R,0>
    \n-
    66 {
    \n-
    67 using FiniteElement = RT0Cube2DLocalFiniteElement<D,R>;
    \n-
    68 };
    \n+
    12
    \n+
    13namespace Dune::Functions {
    \n+
    14
    \n+
    15
    \n+
    16
    \n+
    22template<class size_type, std::size_t n>
    \n+
    \n+\n+
    24 public std::array<size_type, n>
    \n+
    25{
    \n+
    26public:
    \n+
    27 static constexpr std::size_t size() { return n; }
    \n+
    28
    \n+
    \n+
    29 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {
    \n+
    30 return hash_range(v.begin(), v.end());
    \n+
    31 }
    \n+
    \n+
    32
    \n+
    33};
    \n+
    \n+
    34
    \n+
    35
    \n+
    36
    \n+
    46template<class size_type>
    \n+
    \n+
    47class StaticMultiIndex<size_type,1> :
    \n+
    48 public std::array<size_type, 1>
    \n+
    49{
    \n+
    50public:
    \n+
    51
    \n+
    52 static constexpr std::size_t size() { return 1; }
    \n+
    53
    \n+
    \n+
    54 operator const size_type& () const {
    \n+
    55 return (*this)[0];
    \n+
    56 }
    \n+
    \n+
    57
    \n+
    \n+
    58 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {
    \n+
    59 return hash_range(v.begin(), v.end());
    \n+
    60 }
    \n+
    \n+
    61
    \n+
    \n+
    62 operator size_type& () {
    \n+
    63 return (*this)[0];
    \n+
    64 }
    \n+
    \n+
    65
    \n+
    66};
    \n+
    \n+
    67
    \n+
    68
    \n
    69
    \n-
    70 template<typename D, typename R>
    \n-
    71 struct RaviartThomasCubeLocalInfo<2,D,R,1>
    \n-
    72 {
    \n-
    73 using FiniteElement = RT1Cube2DLocalFiniteElement<D,R>;
    \n-
    74 };
    \n-
    75
    \n-
    76 template<typename D, typename R>
    \n-
    77 struct RaviartThomasCubeLocalInfo<2,D,R,2>
    \n-
    78 {
    \n-
    79 using FiniteElement = RT2Cube2DLocalFiniteElement<D,R>;
    \n-
    80 };
    \n-
    81
    \n-
    82 template<typename D, typename R>
    \n-
    83 struct RaviartThomasCubeLocalInfo<3,D,R,0>
    \n-
    84 {
    \n-
    85 using FiniteElement = RT0Cube3DLocalFiniteElement<D,R>;
    \n-
    86 };
    \n-
    87
    \n-
    88 template<typename D, typename R>
    \n-
    89 struct RaviartThomasCubeLocalInfo<3,D,R,1>
    \n-
    90 {
    \n-
    91 using FiniteElement = RT1Cube3DLocalFiniteElement<D,R>;
    \n-
    92 };
    \n-
    93
    \n-
    94 template<typename GV, int dim, typename R, std::size_t k>
    \n-
    95 class RaviartThomasLocalFiniteElementMap
    \n-
    96 {
    \n-
    97 using D = typename GV::ctype;
    \n-
    98 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n-
    99
    \n-
    100 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo<dim, D, R, k>::FiniteElement;
    \n-
    101 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo<dim, D, R, k>::FiniteElement;
    \n-
    102
    \n-
    103 public:
    \n-
    104
    \n-
    105 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n-
    106
    \n-
    107 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n-
    108 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n-
    109
    \n-
    110 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n-
    111 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n-
    112 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n-
    113
    \n-
    114 // Each element facet can have its orientation reversed, hence there are
    \n-
    115 // 2^#facets different variants.
    \n-
    116 static std::size_t numVariants(GeometryType type)
    \n-
    117 {
    \n-
    118 auto numFacets = referenceElement<D,dim>(type).size(1);
    \n-
    119 return power(2,numFacets);
    \n-
    120 }
    \n-
    121
    \n-
    122 RaviartThomasLocalFiniteElementMap(const GV& gv)
    \n-
    123 : elementMapper_(gv, mcmgElementLayout()),
    \n-
    124 orient_(gv.size(0))
    \n-
    125 {
    \n-
    126 if constexpr (hasFixedElementType)
    \n-
    127 {
    \n-
    128 variants_.resize(numVariants(type));
    \n-
    129 for (size_t i = 0; i < numVariants(type); i++)
    \n-
    130 variants_[i] = FiniteElement(i);
    \n-
    131 }
    \n-
    132 else
    \n-
    133 {
    \n-
    134 // for mixed grids add offset for cubes
    \n-
    135 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));
    \n-
    136 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)
    \n-
    137 variants_[i] = SimplexFiniteElement(i);
    \n-
    138 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)
    \n-
    139 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);
    \n-
    140 }
    \n-
    141
    \n-
    142 for(const auto& cell : elements(gv))
    \n-
    143 {
    \n-
    144 unsigned int myId = elementMapper_.index(cell);
    \n-
    145 orient_[myId] = 0;
    \n-
    146
    \n-
    147 for (const auto& intersection : intersections(gv,cell))
    \n-
    148 {
    \n-
    149 if (intersection.neighbor() && (elementMapper_.index(intersection.outside()) > myId))
    \n-
    150 orient_[myId] |= (1 << intersection.indexInInside());
    \n-
    151 }
    \n-
    152
    \n-
    153 // for mixed grids add offset for cubes
    \n-
    154 if constexpr (!hasFixedElementType)
    \n-
    155 if (cell.type().isCube())
    \n-
    156 orient_[myId] += numVariants(GeometryTypes::simplex(dim));
    \n-
    157 }
    \n-
    158 }
    \n-
    159
    \n-
    160 template<class EntityType>
    \n-
    161 const FiniteElement& find(const EntityType& e) const
    \n-
    162 {
    \n-
    163 return variants_[orient_[elementMapper_.index(e)]];
    \n-
    164 }
    \n-
    165
    \n-
    166 private:
    \n-
    167 std::vector<FiniteElement> variants_;
    \n-
    168 const Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;
    \n-
    169 std::vector<unsigned char> orient_;
    \n-
    170 };
    \n-
    171
    \n-
    172
    \n-
    173} // namespace Impl
    \n-
    174
    \n-
    175
    \n-
    176// *****************************************************************************
    \n-
    177// This is the reusable part of the basis. It contains
    \n-
    178//
    \n-
    179// RaviartThomasPreBasis
    \n-
    180// RaviartThomasNode
    \n-
    181//
    \n-
    182// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    183// state. These components do _not_ depend on the global basis and local view
    \n-
    184// and can be used without a global basis.
    \n-
    185// *****************************************************************************
    \n-
    186
    \n-
    187template<typename GV, int k>
    \n-
    188class RaviartThomasNode;
    \n-
    189
    \n-
    190template<typename GV, int k>
    \n-
    \n-\n-
    192{
    \n-
    193 static const int dim = GV::dimension;
    \n-
    194 using FiniteElementMap = typename Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;
    \n-
    195
    \n-
    196public:
    \n-
    197
    \n-
    199 using GridView = GV;
    \n-
    200 using size_type = std::size_t;
    \n-
    201
    \n-\n-
    203
    \n-
    204 static constexpr size_type maxMultiIndexSize = 1;
    \n-
    205 static constexpr size_type minMultiIndexSize = 1;
    \n-
    206 static constexpr size_type multiIndexBufferSize = 1;
    \n-
    207
    \n-
    \n-\n-
    210 gridView_(gv),
    \n-\n-
    212 {
    \n-
    213 // Currently there are some unresolved bugs with hybrid grids and higher order Raviart-Thomas elements
    \n-
    214 if (gv.indexSet().types(0).size() > 1 and k>0)
    \n-
    215 DUNE_THROW(Dune::NotImplemented, "Raviart-Thomas basis with index k>0 is only implemented for grids with a single element type");
    \n-
    216
    \n-
    217 for(auto type : gv.indexSet().types(0))
    \n-
    218 if (!type.isSimplex() && !type.isCube())
    \n-
    219 DUNE_THROW(Dune::NotImplemented, "Raviart-Thomas elements are only implemented for grids with simplex or cube elements.");
    \n-
    220
    \n-
    221 GeometryType type = gv.template begin<0>()->type();
    \n-
    222 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;
    \n-
    223 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;
    \n-
    224
    \n-
    225 dofsPerCodim_ = {{dofsPerElement, dofsPerFace}};
    \n-
    226 }
    \n-
    \n-
    227
    \n-
    \n-\n-
    229 {
    \n-
    230 codimOffset_[0] = 0;
    \n-
    231 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);
    \n-
    232 }
    \n-
    \n-
    233
    \n-
    \n-
    236 const GridView& gridView() const
    \n-
    237 {
    \n-
    238 return gridView_;
    \n-
    239 }
    \n-
    \n-
    240
    \n-
    241 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n-
    \n-
    242 void update (const GridView& gv)
    \n-
    243 {
    \n-
    244 gridView_ = gv;
    \n-
    245 }
    \n-
    \n-
    246
    \n-
    \n-\n-
    251 {
    \n-
    252 return Node{&finiteElementMap_};
    \n-
    253 }
    \n-
    \n-
    254
    \n-
    \n-\n-
    256 {
    \n-
    257 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] * gridView_.size(1);
    \n-
    258 }
    \n-
    \n-
    259
    \n-
    261 template<class SizePrefix>
    \n-
    \n-
    262 size_type size(const SizePrefix& prefix) const
    \n-
    263 {
    \n-
    264 assert(prefix.size() == 0 || prefix.size() == 1);
    \n-
    265 return (prefix.size() == 0) ? size() : 0;
    \n-
    266 }
    \n-
    \n-
    267
    \n-
    \n-\n-
    270 {
    \n-
    271 return size();
    \n-
    272 }
    \n-
    \n-
    273
    \n-
    \n-\n-
    275 {
    \n-
    276 size_type result = 0;
    \n-
    277 for (auto&& type : gridView_.indexSet().types(0))
    \n-
    278 {
    \n-
    279 size_t numFaces = ReferenceElements<double,dim>::general(type).size(1);
    \n-
    280 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;
    \n-
    281 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;
    \n-
    282 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);
    \n-
    283 }
    \n-
    284
    \n-
    285 return result;
    \n-
    286 }
    \n-
    \n-
    287
    \n-
    293 template<typename It>
    \n-
    \n-
    294 It indices(const Node& node, It it) const
    \n-
    295 {
    \n-
    296 const auto& gridIndexSet = gridView().indexSet();
    \n-
    297 const auto& element = node.element();
    \n-
    298
    \n-
    299 // throw if Element is not of predefined type
    \n-
    300 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n-
    301 DUNE_THROW(Dune::NotImplemented, "RaviartThomasBasis only implemented for cube and simplex elements.");
    \n-
    302
    \n-
    303 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n-
    304 {
    \n-
    305 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    306
    \n-
    307 // The dimension of the entity that the current dof is related to
    \n-
    308 size_t subentity = localKey.subEntity();
    \n-
    309 size_t codim = localKey.codim();
    \n-
    310
    \n-
    311 if (not(codim==0 or codim==1))
    \n-
    312 DUNE_THROW(Dune::NotImplemented, "Grid contains elements not supported for the RaviartThomasBasis");
    \n-
    313
    \n-
    314 *it = { codimOffset_[codim] +
    \n-
    315 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };
    \n-
    316 }
    \n-
    317
    \n-
    318 return it;
    \n-
    319 }
    \n-
    \n-
    320
    \n-
    321protected:
    \n-\n-
    323 std::array<size_t,dim+1> codimOffset_;
    \n-
    324 FiniteElementMap finiteElementMap_;
    \n-
    325 // Number of dofs per entity type depending on the entity's codimension and type
    \n-
    326 std::array<int,dim+1> dofsPerCodim_;
    \n-
    327};
    \n-
    \n-
    328
    \n-
    329
    \n-
    330
    \n-
    331template<typename GV, int k>
    \n-
    \n-\n-
    333 public LeafBasisNode
    \n-
    334{
    \n-
    335 static const int dim = GV::dimension;
    \n-
    336
    \n-
    337public:
    \n-
    338
    \n-
    339 using size_type = std::size_t;
    \n-
    340 using Element = typename GV::template Codim<0>::Entity;
    \n-
    341 using FiniteElementMap = typename Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;
    \n-
    342 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,
    \n-
    343 typename FiniteElementMap::FiniteElement,
    \n-
    344 Element>;
    \n-
    345
    \n-
    \n-
    346 RaviartThomasNode(const FiniteElementMap* finiteElementMap) :
    \n-
    347 element_(nullptr),
    \n-
    348 finiteElementMap_(finiteElementMap)
    \n-
    349 { }
    \n-
    \n-
    350
    \n-
    \n-
    352 const Element& element() const
    \n-
    353 {
    \n-
    354 return *element_;
    \n-
    355 }
    \n-
    \n-
    356
    \n-
    \n-\n-
    362 {
    \n-
    363 return finiteElement_;
    \n-
    364 }
    \n-
    \n-
    365
    \n-
    \n-
    367 void bind(const Element& e)
    \n-
    368 {
    \n-
    369 element_ = &e;
    \n-
    370 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n-
    371 this->setSize(finiteElement_.size());
    \n-
    372 }
    \n-
    \n-
    373
    \n-
    374protected:
    \n-
    375
    \n-\n-\n-\n-
    379};
    \n-
    \n-
    380
    \n-
    381namespace BasisFactory {
    \n-
    382
    \n-
    390template<std::size_t k>
    \n-
    \n-\n-
    392{
    \n-
    393 return [](const auto& gridView) {
    \n-
    394 return RaviartThomasPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n-
    395 };
    \n-
    396}
    \n-
    \n-
    397
    \n-
    398} // end namespace BasisFactory
    \n-
    399
    \n-
    400
    \n-
    401
    \n-
    402// *****************************************************************************
    \n-
    403// This is the actual global basis implementation based on the reusable parts.
    \n-
    404// *****************************************************************************
    \n-
    405
    \n-
    413template<typename GV, int k>
    \n-\n-
    415
    \n-
    416} // end namespace Functions
    \n-
    417} // end namespace Dune
    \n-
    418
    \n-
    419
    \n-
    420#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH
    \n-\n-\n-\n-
    auto raviartThomas()
    Create a pre-basis factory that can create a Raviart-Thomas pre-basis.
    Definition raviartthomasbasis.hh:391
    \n+
    70template<typename Stream, class size_type, std::size_t n>
    \n+
    \n+
    71inline Stream& operator<<(Stream& stream, const StaticMultiIndex<size_type,n>& c) {
    \n+
    72 for (const auto& ci : c)
    \n+
    73 stream << ci << " ";
    \n+
    74 return stream;
    \n+
    75}
    \n+
    \n+
    76
    \n+
    77
    \n+
    78
    \n+
    79} // namespace Dune::Functions
    \n+
    80
    \n+
    81template<class size_type, std::size_t n>
    \n+
    \n+
    82struct std::tuple_size< Dune::Functions::StaticMultiIndex<size_type,n> >
    \n+
    83 : std::integral_constant<std::size_t, n> { };
    \n+
    \n+
    84
    \n+
    85DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(typename size_type, std::size_t n),DUNE_HASH_TYPE(Dune::Functions::StaticMultiIndex<size_type,n>))
    \n+
    86
    \n+
    87#endif // DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n
    Definition polynomial.hh:10
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n-
    size_type size() const
    Definition nodes.hh:142
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n-
    Definition nodes.hh:186
    \n-
    Definition raviartthomasbasis.hh:334
    \n-
    typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap
    Definition raviartthomasbasis.hh:341
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition raviartthomasbasis.hh:367
    \n-
    Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition raviartthomasbasis.hh:344
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition raviartthomasbasis.hh:340
    \n-
    const Element * element_
    Definition raviartthomasbasis.hh:377
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition raviartthomasbasis.hh:361
    \n-
    std::size_t size_type
    Definition raviartthomasbasis.hh:339
    \n-
    RaviartThomasNode(const FiniteElementMap *finiteElementMap)
    Definition raviartthomasbasis.hh:346
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition raviartthomasbasis.hh:352
    \n-
    FiniteElement finiteElement_
    Definition raviartthomasbasis.hh:376
    \n-
    const FiniteElementMap * finiteElementMap_
    Definition raviartthomasbasis.hh:378
    \n-
    Definition raviartthomasbasis.hh:192
    \n-
    static constexpr size_type minMultiIndexSize
    Definition raviartthomasbasis.hh:205
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition raviartthomasbasis.hh:204
    \n-
    Node makeNode() const
    Create tree node.
    Definition raviartthomasbasis.hh:250
    \n-
    std::array< int, dim+1 > dofsPerCodim_
    Definition raviartthomasbasis.hh:326
    \n-
    void update(const GridView &gv)
    Definition raviartthomasbasis.hh:242
    \n-
    RaviartThomasPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition raviartthomasbasis.hh:209
    \n-
    std::size_t size_type
    Definition raviartthomasbasis.hh:200
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition raviartthomasbasis.hh:236
    \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:294
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition raviartthomasbasis.hh:206
    \n-
    FiniteElementMap finiteElementMap_
    Definition raviartthomasbasis.hh:324
    \n-
    size_type size() const
    Definition raviartthomasbasis.hh:255
    \n-
    size_type dimension() const
    Definition raviartthomasbasis.hh:269
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition raviartthomasbasis.hh:199
    \n-
    size_type maxNodeSize() const
    Definition raviartthomasbasis.hh:274
    \n-
    GridView gridView_
    Definition raviartthomasbasis.hh:322
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition raviartthomasbasis.hh:262
    \n-
    void initializeIndices()
    Definition raviartthomasbasis.hh:228
    \n-
    std::array< size_t, dim+1 > codimOffset_
    Definition raviartthomasbasis.hh:323
    \n+
    Definition polynomial.hh:11
    \n+
    Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)
    Definition multiindex.hh:71
    \n+
    A statically sized MultiIndex type.
    Definition multiindex.hh:25
    \n+
    static constexpr std::size_t size()
    Definition multiindex.hh:27
    \n+
    friend std::size_t hash_value(const StaticMultiIndex &v) noexcept
    Definition multiindex.hh:29
    \n+
    static constexpr std::size_t size()
    Definition multiindex.hh:52
    \n+
    friend std::size_t hash_value(const StaticMultiIndex &v) noexcept
    Definition multiindex.hh:58
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,560 +1,108 @@\n dune-functions\u00a02.9.0\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+ * _\bc_\bo_\bm_\bm_\bo_\bn\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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+4#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n 5\n-6#include \n-7#include \n-8\n-9#include \n-10#include \n+6#include \n+7#include \n+8#include \n+9\n+10#include \n 11\n-12#include \n-13#include \n-14#include \n-15#include \n-16#include \n-17#include \n-18#include \n-19#include \n-20#include \n-21#include \n-22\n-23#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/\n-_\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\n-27namespace _\bD_\bu_\bn_\be {\n-28namespace Functions {\n-29\n-30namespace Impl {\n-31\n-32 template\n-33 struct RaviartThomasSimplexLocalInfo\n-34 {\n-35 // Dummy type, must be something that we can have a std::unique_ptr to\n-36 using FiniteElement = void*;\n-37 };\n-38\n-39 template\n-40 struct RaviartThomasSimplexLocalInfo<2,D,R,0>\n-41 {\n-42 using FiniteElement = RT02DLocalFiniteElement;\n-43 };\n-44\n-45 template\n-46 struct RaviartThomasSimplexLocalInfo<2,D,R,1>\n-47 {\n-48 using FiniteElement = RT12DLocalFiniteElement;\n-49 };\n-50\n-51 template\n-52 struct RaviartThomasSimplexLocalInfo<3,D,R,0>\n-53 {\n-54 using FiniteElement = RT03DLocalFiniteElement;\n-55 };\n-56\n-57 template\n-58 struct RaviartThomasCubeLocalInfo\n-59 {\n-60 // Dummy type, must be something that we can have a std::unique_ptr to\n-61 using FiniteElement = void*;\n-62 };\n-63\n-64 template\n-65 struct RaviartThomasCubeLocalInfo<2,D,R,0>\n-66 {\n-67 using FiniteElement = RT0Cube2DLocalFiniteElement;\n-68 };\n+12\n+13namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+14\n+15\n+16\n+22template\n+_\b2_\b3class _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx :\n+24 public std::array\n+25{\n+26public:\n+_\b2_\b7 static constexpr std::size_t _\bs_\bi_\bz_\be() { return n; }\n+28\n+_\b2_\b9 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+30 return hash_range(v.begin(), v.end());\n+31 }\n+32\n+33};\n+34\n+35\n+36\n+46template\n+_\b4_\b7class _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx :\n+48 public std::array\n+49{\n+50public:\n+51\n+_\b5_\b2 static constexpr std::size_t _\bs_\bi_\bz_\be() { return 1; }\n+53\n+_\b5_\b4 operator const size_type& () const {\n+55 return (*this)[0];\n+56 }\n+57\n+_\b5_\b8 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+59 return hash_range(v.begin(), v.end());\n+60 }\n+61\n+_\b6_\b2 operator size_type& () {\n+63 return (*this)[0];\n+64 }\n+65\n+66};\n+67\n+68\n 69\n-70 template\n-71 struct RaviartThomasCubeLocalInfo<2,D,R,1>\n-72 {\n-73 using FiniteElement = RT1Cube2DLocalFiniteElement;\n-74 };\n-75\n-76 template\n-77 struct RaviartThomasCubeLocalInfo<2,D,R,2>\n-78 {\n-79 using FiniteElement = RT2Cube2DLocalFiniteElement;\n-80 };\n-81\n-82 template\n-83 struct RaviartThomasCubeLocalInfo<3,D,R,0>\n-84 {\n-85 using FiniteElement = RT0Cube3DLocalFiniteElement;\n-86 };\n-87\n-88 template\n-89 struct RaviartThomasCubeLocalInfo<3,D,R,1>\n-90 {\n-91 using FiniteElement = RT1Cube3DLocalFiniteElement;\n-92 };\n-93\n-94 template\n-95 class RaviartThomasLocalFiniteElementMap\n-96 {\n-97 using D = typename GV::ctype;\n-98 constexpr static bool hasFixedElementType = Capabilities::\n-hasSingleGeometryType::v;\n-99\n-100 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo::FiniteElement;\n-101 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo::FiniteElement;\n-102\n-103 public:\n-104\n-105 using T = LocalBasisTraits, R, dim,\n-FieldVector, FieldMatrix >;\n-106\n-107 constexpr static unsigned int topologyId = Capabilities::\n-hasSingleGeometryType::topologyId; // meaningless if\n-hasFixedElementType is false\n-108 constexpr static GeometryType type = GeometryType(topologyId, GV::\n-dimension);\n-109\n-110 using FiniteElement = std::conditional_t,\n-112 LocalFiniteElementVariant >;\n-113\n-114 // Each element facet can have its orientation reversed, hence there are\n-115 // 2^#facets different variants.\n-116 static std::size_t numVariants(GeometryType type)\n-117 {\n-118 auto numFacets = referenceElement(type).size(1);\n-119 return power(2,numFacets);\n-120 }\n-121\n-122 RaviartThomasLocalFiniteElementMap(const GV& gv)\n-123 : elementMapper_(gv, mcmgElementLayout()),\n-124 orient_(gv.size(0))\n-125 {\n-126 if constexpr (hasFixedElementType)\n-127 {\n-128 variants_.resize(numVariants(type));\n-129 for (size_t i = 0; i < numVariants(type); i++)\n-130 variants_[i] = FiniteElement(i);\n-131 }\n-132 else\n-133 {\n-134 // for mixed grids add offset for cubes\n-135 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n-(GeometryTypes::cube(dim)));\n-136 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n-137 variants_[i] = SimplexFiniteElement(i);\n-138 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n-139 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n-(i);\n-140 }\n-141\n-142 for(const auto& cell : elements(gv))\n-143 {\n-144 unsigned int myId = elementMapper_.index(cell);\n-145 orient_[myId] = 0;\n-146\n-147 for (const auto& intersection : intersections(gv,cell))\n-148 {\n-149 if (intersection.neighbor() && (elementMapper_.index(intersection.outside\n-()) > myId))\n-150 orient_[myId] |= (1 << intersection.indexInInside());\n-151 }\n-152\n-153 // for mixed grids add offset for cubes\n-154 if constexpr (!hasFixedElementType)\n-155 if (cell.type().isCube())\n-156 orient_[myId] += numVariants(GeometryTypes::simplex(dim));\n-157 }\n-158 }\n-159\n-160 template\n-161 const FiniteElement& find(const EntityType& e) const\n-162 {\n-163 return variants_[orient_[elementMapper_.index(e)]];\n-164 }\n-165\n-166 private:\n-167 std::vector variants_;\n-168 const Dune::MultipleCodimMultipleGeomTypeMapper elementMapper_;\n-169 std::vector orient_;\n-170 };\n-171\n-172\n-173} // namespace Impl\n-174\n-175\n-176/\n-/ *****************************************************************************\n-177// This is the reusable part of the basis. It contains\n-178//\n-179// RaviartThomasPreBasis\n-180// RaviartThomasNode\n-181//\n-182// The pre-basis allows to create the others and is the owner of possible\n-shared\n-183// state. These components do _not_ depend on the global basis and local\n-view\n-184// and can be used without a global basis.\n-185/\n-/ *****************************************************************************\n-186\n-187template\n-188class RaviartThomasNode;\n-189\n-190template\n-_\b1_\b9_\b1class _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-192{\n-193 static const int dim = GV::dimension;\n-194 using FiniteElementMap = typename Impl::\n-RaviartThomasLocalFiniteElementMap;\n-195\n-196public:\n-197\n-_\b1_\b9_\b9 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b2_\b0_\b0 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-201\n-_\b2_\b0_\b2 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-203\n-_\b2_\b0_\b4 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-_\b2_\b0_\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-_\b2_\b0_\b6 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-207\n-_\b2_\b0_\b9 _\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-210 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv),\n-211 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(gv)\n-212 {\n-213 // Currently there are some unresolved bugs with hybrid grids and higher\n-order Raviart-Thomas elements\n-214 if (gv.indexSet().types(0).size() > 1 and k>0)\n-215 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas basis with index k>0 is\n-only implemented for grids with a single element type\");\n-216\n-217 for(auto type : gv.indexSet().types(0))\n-218 if (!type.isSimplex() && !type.isCube())\n-219 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas elements are only\n-implemented for grids with simplex or cube elements.\");\n-220\n-221 GeometryType type = gv.template begin<0>()->type();\n-222 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim\n-: k*(k+1)*(k+1)*dim) : k*dim;\n-223 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n-1)*k+1 ;\n-224\n-225 _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_ = {{dofsPerElement, dofsPerFace}};\n-226 }\n-227\n-_\b2_\b2_\b8 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-229 {\n-230 _\bc_\bo_\bd_\bi_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_[0] = 0;\n-231 _\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-232 }\n-233\n-_\b2_\b3_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-237 {\n-238 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-239 }\n-240\n-241 /* \\brief Update the stored grid view, to be called if the grid has changed\n-*/\n-_\b2_\b4_\b2 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-243 {\n-244 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-245 }\n-246\n-_\b2_\b5_\b0 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-251 {\n-252 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n-253 }\n-254\n-_\b2_\b5_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-256 {\n-257 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-258 }\n-259\n-261 template\n-_\b2_\b6_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-263 {\n-264 assert(prefix.size() == 0 || prefix.size() == 1);\n-265 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n-266 }\n-267\n-_\b2_\b6_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-270 {\n-271 return _\bs_\bi_\bz_\be();\n-272 }\n-273\n-_\b2_\b7_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-275 {\n-276 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n-277 for (auto&& type : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0))\n-278 {\n-279 size_t numFaces = ReferenceElements::general(type).size(1);\n-280 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim\n-: k*(k+1)*(k+1)*dim) : k*dim;\n-281 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n-1)*k+1 ;\n-282 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);\n-283 }\n-284\n-285 return result;\n-286 }\n-287\n-293 template\n-_\b2_\b9_\b4 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-295 {\n-296 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-297 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-298\n-299 // throw if Element is not of predefined type\n-300 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n-301 DUNE_THROW(Dune::NotImplemented, \"RaviartThomasBasis only implemented for\n-cube and simplex elements.\");\n-302\n-303 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_\b2_\b4 FiniteElementMap _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_;\n-325 // Number of dofs per entity type depending on the entity's codimension and\n-type\n-_\b3_\b2_\b6 std::array _\bd_\bo_\bf_\bs_\bP_\be_\br_\bC_\bo_\bd_\bi_\bm_\b_;\n-327};\n-328\n-329\n-330\n-331template\n-_\b3_\b3_\b2class _\bR_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs_\bN_\bo_\bd_\be :\n-333 public _\bL_\be_\ba_\bf_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be\n-334{\n-335 static const int dim = GV::dimension;\n-336\n-337public:\n-338\n-_\b3_\b3_\b9 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b3_\b4_\b0 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename GV::template Codim<0>::Entity;\n-_\b3_\b4_\b1 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::\n-RaviartThomasLocalFiniteElementMap;\n-_\b3_\b4_\b2 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n-345\n-_\b3_\b4_\b6 _\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-347 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-348 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n-349 { }\n-350\n-_\b3_\b5_\b2 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-353 {\n-354 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-355 }\n-356\n-_\b3_\b6_\b1 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-362 {\n-363 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-364 }\n-365\n-_\b3_\b6_\b7 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-368 {\n-369 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-370 _\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-371 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n-372 }\n-373\n-374protected:\n-375\n-_\b3_\b7_\b6 _\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_\b7_\b7 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b3_\b7_\b8 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-379};\n-380\n-381namespace BasisFactory {\n-382\n-390template\n-_\b3_\b9_\b1auto _\br_\ba_\bv_\bi_\ba_\br_\bt_\bT_\bh_\bo_\bm_\ba_\bs()\n-392{\n-393 return [](const auto& gridView) {\n-394 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-395 };\n-396}\n-397\n-398} // end namespace BasisFactory\n-399\n-400\n-401\n-402/\n-/ *****************************************************************************\n-403// This is the actual global basis implementation based on the reusable\n-parts.\n-404/\n-/ *****************************************************************************\n-405\n-413template\n-_\b4_\b1_\b4using _\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-415\n-416} // end namespace Functions\n-417} // end namespace Dune\n-418\n-419\n-420#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:391\n+70template\n+_\b7_\b1inline 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+72 for (const auto& ci : c)\n+73 stream << ci << \" \";\n+74 return stream;\n+75}\n+76\n+77\n+78\n+79} // namespace Dune::Functions\n+80\n+81template\n+_\b8_\b2struct std::tuple_size< _\bD_\bu_\bn_\be::Functions::StaticMultiIndex >\n+83 : std::integral_constant { };\n+84\n+85DUNE_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+86\n+87#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:10\n-_\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:46\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:142\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:164\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:186\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: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:_\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:341\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:367\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:344\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: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:_\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:377\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:361\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:339\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:346\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:352\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:376\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:378\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:192\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_\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 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_\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 raviartthomasbasis.hh:204\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:250\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:326\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:242\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:209\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:200\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:236\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:294\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_\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 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:_\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:324\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\n-size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn raviartthomasbasis.hh:255\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:269\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:199\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:274\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: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_\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 possible values for next position in multi index.\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:_\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:228\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:323\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:11\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:71\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:25\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:27\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: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>_\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:52\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:58\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": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: defaultnodetorangemap.hh File Reference\n+dune-functions: functionfromcallable.hh File Reference\n \n \n \n \n \n \n \n@@ -65,55 +65,41 @@\n \n \n \n \n \n \n \n
    \n \n-
    defaultnodetorangemap.hh File Reference
    \n+Namespaces
    \n+
    functionfromcallable.hh File Reference
    \n \n
    \n-
    #include <dune/common/concept.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n-#include <dune/typetree/traversal.hh>
    \n-#include <dune/typetree/visitor.hh>
    \n+
    #include <dune/common/function.hh>
    \n+#include <dune/functions/common/signature.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >
     A simple node to range map using lexicographic ordering. More...
     
    struct  Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor
    class  Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >
     Wrap a callable object as Dune::Function or Dune::VirtualFunction. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \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)))
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,38 +1,25 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-defaultnodetorangemap.hh File Reference\n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include \n-#include \n+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+functionfromcallable.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 _\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:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bF_\b,\n+ _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>\n+\u00a0 Wrap a callable object as Dune::Function or Dune::VirtualFunction.\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-_\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/a00098_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: defaultnodetorangemap.hh Source File\n+dune-functions: functionfromcallable.hh Source File\n \n \n \n \n \n \n \n@@ -70,149 +70,85 @@\n
    \n \n \n \n \n \n \n
    \n-
    defaultnodetorangemap.hh
    \n+
    functionfromcallable.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH
    \n
    5
    \n-
    6
    \n-
    7#include <dune/common/concept.hh>
    \n-
    8
    \n-\n+
    6#include <dune/common/function.hh>
    \n+
    7
    \n+\n+
    9
    \n
    10
    \n-
    11#include <dune/typetree/traversal.hh>
    \n-
    12#include <dune/typetree/visitor.hh>
    \n+
    11namespace Dune {
    \n+
    12namespace Functions {
    \n
    13
    \n
    14
    \n-
    15namespace Dune {
    \n-
    16namespace Functions {
    \n-
    17
    \n-
    18
    \n-
    19
    \n-
    37template<class Tree>
    \n+
    15
    \n+
    16template<class Signature, class F,
    \n+
    17 class FunctionInterface = typename Dune::VirtualFunction<
    \n+
    18 typename SignatureTraits<Signature>::RawDomain,
    \n+
    19 typename SignatureTraits<Signature>::RawRange> >
    \n+\n+
    21
    \n+
    37template<class Range, class Domain, class F, class FunctionInterface>
    \n
    \n-\n-
    39{
    \n-
    40
    \n-
    41 // A simple visitor for computing lexicographic
    \n-
    42 // subtree indices. To identify a leaf node
    \n-
    43 // we use its treeIndex() which is unique
    \n-
    44 // wrt the whole tree and store the computed
    \n-
    45 // index in a vector indexed by the tree indices.
    \n-
    \n-
    46 struct Visitor
    \n-
    47 : public TypeTree::TreeVisitor
    \n-
    48 , public TypeTree::DynamicTraversal
    \n-
    49 {
    \n-
    \n-
    50 Visitor(std::vector<std::size_t>& indices) :
    \n-
    51 indices_(indices),
    \n-
    52 counter_(0)
    \n-
    53 {}
    \n-
    \n-
    54
    \n-
    55 template<typename Node, typename TreePath>
    \n-
    \n-
    56 void leaf(Node& node, TreePath treePath)
    \n-
    57 {
    \n-
    58 if (indices_.size() < node.treeIndex()+1)
    \n-
    59 indices_.resize(node.treeIndex()+1);
    \n-
    60 indices_[node.treeIndex()] = counter_;
    \n-
    61 ++counter_;
    \n-
    62 }
    \n-
    \n-
    63
    \n-
    64 std::vector<std::size_t>& indices_;
    \n-
    65 std::size_t counter_;
    \n-
    66 };
    \n+
    38class FunctionFromCallable<Range(Domain), F, FunctionInterface> :
    \n+
    39 public FunctionInterface
    \n+
    40{
    \n+
    41public:
    \n+
    42
    \n+
    \n+\n+
    53 f_(f)
    \n+
    54 {}
    \n+
    \n+
    55
    \n+
    \n+\n+
    65 f_(f)
    \n+
    66 {}
    \n
    \n
    67
    \n-
    \n-
    78 DefaultNodeToRangeMap(const Tree& tree)
    \n-
    79 {
    \n-
    80 TypeTree::applyToTree(tree, Visitor(indices_));
    \n-
    81 }
    \n+
    \n+
    73 void evaluate(const Domain& x, Range&y) const
    \n+
    74 {
    \n+
    75 y = f_(x);
    \n+
    76 }
    \n+
    \n+
    77
    \n+
    78private:
    \n+
    79 F f_;
    \n+
    80};
    \n
    \n+
    81
    \n
    82
    \n-
    83 template<class Node, class TreePath, class Range,
    \n-
    84 std::enable_if_t<models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() and not Tree::isLeaf, int> = 0>
    \n-
    \n-
    85 decltype(auto) operator()(const Node& node, const TreePath& treePath, Range&& y) const
    \n-
    86 {
    \n-
    87 return y[indices_[node.treeIndex()]];
    \n-
    88 }
    \n-
    \n-
    89
    \n-
    90 template<class Node, class TreePath, class Range,
    \n-
    91 std::enable_if_t< not models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() or Tree::isLeaf, int> = 0>
    \n-
    \n-
    92 decltype(auto) operator()(const Node& node, const TreePath& treePath, Range&& y) const
    \n-
    93 {
    \n-
    94 return std::forward<Range>(y);
    \n-
    95 }
    \n-
    \n-
    96
    \n-
    97 std::vector<std::size_t> indices_;
    \n-
    98};
    \n-
    \n-
    99
    \n-
    100
    \n-
    101
    \n-
    102template<class Tree>
    \n-
    \n-\n-
    104{
    \n-
    105 return DefaultNodeToRangeMap<Tree>(tree);
    \n-
    106}
    \n-
    \n-
    107
    \n-
    108
    \n-
    109
    \n-
    110template<class Basis, class TreePath>
    \n-
    \n-
    111auto makeDefaultNodeToRangeMap(const Basis& basis, TreePath&& treePath)
    \n-
    112 -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView().tree(),treePath)))
    \n-
    113{
    \n-
    114 auto&& localView = basis.localView();
    \n-
    115 localView.bind(*basis.gridView().template begin<0>());
    \n-
    116 auto&& tree = TypeTree::child(localView.tree(),treePath);
    \n-
    117 return makeDefaultNodeToRangeMap(tree);
    \n-
    118}
    \n-
    \n-
    119
    \n-
    120
    \n-
    121
    \n-
    122} // namespace Dune::Functions
    \n-
    123} // namespace Dune
    \n-
    124
    \n-
    125
    \n-
    126#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH
    \n+
    83
    \n+
    84} // namespace Functions
    \n+
    85} // namespace Dune
    \n+
    86
    \n+
    87#endif //DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH
    \n+\n
    Definition polynomial.hh:10
    \n-
    DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)
    Definition defaultnodetorangemap.hh:103
    \n-
    A simple node to range map using lexicographic ordering.
    Definition defaultnodetorangemap.hh:39
    \n-
    std::vector< std::size_t > indices_
    Definition defaultnodetorangemap.hh:97
    \n-
    DefaultNodeToRangeMap(const Tree &tree)
    Construct DefaultNodeToRangeMap.
    Definition defaultnodetorangemap.hh:78
    \n-
    Definition defaultnodetorangemap.hh:49
    \n-
    Visitor(std::vector< std::size_t > &indices)
    Definition defaultnodetorangemap.hh:50
    \n-
    void leaf(Node &node, TreePath treePath)
    Definition defaultnodetorangemap.hh:56
    \n-
    std::size_t counter_
    Definition defaultnodetorangemap.hh:65
    \n-
    std::vector< std::size_t > & indices_
    Definition defaultnodetorangemap.hh:64
    \n-\n+
    Definition functionfromcallable.hh:20
    \n+
    FunctionFromCallable(F &&f)
    Create VirtualFunction from callable object.
    Definition functionfromcallable.hh:52
    \n+
    void evaluate(const Domain &x, Range &y) const
    Evaluate function.
    Definition functionfromcallable.hh:73
    \n+
    FunctionFromCallable(const F &f)
    Create VirtualFunction from callable object.
    Definition functionfromcallable.hh:64
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,145 +1,81 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-defaultnodetorangemap.hh\n+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+functionfromcallable.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n+4#define DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n 5\n-6\n-7#include \n-8\n-9#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+6#include \n+7\n+8#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+9\n 10\n-11#include \n-12#include \n+11namespace _\bD_\bu_\bn_\be {\n+12namespace Functions {\n 13\n 14\n-15namespace _\bD_\bu_\bn_\be {\n-16namespace Functions {\n-17\n-18\n-19\n-37template\n-_\b3_\b8struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bM_\ba_\bp\n-39{\n-40\n-41 // A simple visitor for computing lexicographic\n-42 // subtree indices. To identify a leaf node\n-43 // we use its treeIndex() which is unique\n-44 // wrt the whole tree and store the computed\n-45 // index in a vector indexed by the tree indices.\n-_\b4_\b6 struct _\bV_\bi_\bs_\bi_\bt_\bo_\br\n-47 : public TypeTree::TreeVisitor\n-48 , public TypeTree::DynamicTraversal\n-49 {\n-_\b5_\b0 _\bV_\bi_\bs_\bi_\bt_\bo_\br(std::vector& indices) :\n-51 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_(indices),\n-52 _\bc_\bo_\bu_\bn_\bt_\be_\br_\b_(0)\n-53 {}\n-54\n-55 template\n-_\b5_\b6 void _\bl_\be_\ba_\bf(Node& node, TreePath treePath)\n-57 {\n-58 if (_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.size() < node.treeIndex()+1)\n-59 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_.resize(node.treeIndex()+1);\n-60 _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_[node.treeIndex()] = _\bc_\bo_\bu_\bn_\bt_\be_\br_\b_;\n-61 ++_\bc_\bo_\bu_\bn_\bt_\be_\br_\b_;\n-62 }\n-63\n-_\b6_\b4 std::vector& _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n-_\b6_\b5 std::size_t _\bc_\bo_\bu_\bn_\bt_\be_\br_\b_;\n-66 };\n+15\n+16template::RawDomain,\n+19 typename SignatureTraits::RawRange> >\n+_\b2_\b0class _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be;\n+21\n+37template\n+_\b3_\b8class _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be :\n+39 public FunctionInterface\n+40{\n+41public:\n+42\n+_\b5_\b2 _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(F&& f) :\n+53 f_(f)\n+54 {}\n+55\n+_\b6_\b4 _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(const F& f) :\n+65 f_(f)\n+66 {}\n 67\n-_\b7_\b8 _\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-79 {\n-80 TypeTree::applyToTree(tree, _\bV_\bi_\bs_\bi_\bt_\bo_\br(_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_));\n-81 }\n+_\b7_\b3 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const Domain& x, Range&y) const\n+74 {\n+75 y = f_(x);\n+76 }\n+77\n+78private:\n+79 F f_;\n+80};\n+81\n 82\n-83 template().treeIndex())>() and not Tree::isLeaf, int> = 0>\n-_\b8_\b5 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n-Range&& y) const\n-86 {\n-87 return y[_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_[node.treeIndex()]];\n-88 }\n-89\n-90 template().treeIndex())>() or Tree::isLeaf, int> = 0>\n-_\b9_\b2 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n-Range&& y) const\n-93 {\n-94 return std::forward(y);\n-95 }\n-96\n-_\b9_\b7 std::vector _\bi_\bn_\bd_\bi_\bc_\be_\bs_\b_;\n-98};\n-99\n-100\n-101\n-102template\n-_\b1_\b0_\b3_\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-104{\n-105 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-106}\n-107\n-108\n-109\n-110template\n-_\b1_\b1_\b1auto _\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-112 -> 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-113{\n-114 auto&& localView = basis.localView();\n-115 localView.bind(*basis.gridView().template begin<0>());\n-116 auto&& tree = TypeTree::child(localView.tree(),treePath);\n-117 return _\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-118}\n-119\n-120\n-121\n-122} // namespace Dune::Functions\n-123} // namespace Dune\n-124\n-125\n-126#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n+83\n+84} // namespace Functions\n+85} // namespace Dune\n+86\n+87#endif //DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n+_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:103\n-_\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: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_\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:97\n-_\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:78\n-_\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: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_\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: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_\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:56\n-_\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: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:_\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:64\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:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionfromcallable.hh:20\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bF_\b,_\b _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>_\b:_\b:\n+_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+FunctionFromCallable(F &&f)\n+Create VirtualFunction from callable object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionfromcallable.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bF_\b,_\b _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>_\b:_\b:\n+_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n+void evaluate(const Domain &x, Range &y) const\n+Evaluate function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionfromcallable.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bF_\b,_\b _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>_\b:_\b:\n+_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+FunctionFromCallable(const F &f)\n+Create VirtualFunction from callable object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionfromcallable.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/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: periodicbasis.hh File Reference\n+dune-functions: utility.hh File Reference\n \n \n \n \n \n \n \n@@ -65,58 +65,97 @@\n
    \n \n \n \n \n \n \n
    \n \n-
    periodicbasis.hh File Reference
    \n+
    utility.hh File Reference
    \n
    \n
    \n
    #include <utility>
    \n #include <type_traits>
    \n-#include <limits>
    \n-#include <set>
    \n-#include <vector>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n-#include <dune/functions/functionspacebases/transformedindexbasis.hh>
    \n+#include <dune/common/overloadset.hh>
    \n+#include <dune/common/indices.hh>
    \n+#include <dune/functions/common/functionconcepts.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet
     Container storing identified indices for a periodic basis. More...
    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...
     
    \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+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 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 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,38 +1,92 @@\n dune-functions\u00a02.9.0\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+ * _\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 \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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/_\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 \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:_\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+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 \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+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:_\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+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/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: periodicbasis.hh Source File\n+dune-functions: utility.hh Source File\n \n \n \n \n \n \n \n@@ -70,218 +70,308 @@\n \n \n \n \n \n \n \n
    \n-
    periodicbasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n
    5
    \n-
    6#include <utility>
    \n-
    7#include <type_traits>
    \n-
    8#include <limits>
    \n-
    9#include <set>
    \n-
    10#include <vector>
    \n-
    11
    \n-\n-\n+
    6
    \n+
    7#include <utility>
    \n+
    8#include <type_traits>
    \n+
    9
    \n+
    10#include <dune/common/overloadset.hh>
    \n+
    11#include <dune/common/indices.hh>
    \n+
    12
    \n+\n
    14
    \n-
    15
    \n-
    16namespace Dune::Functions {
    \n+
    15namespace Dune {
    \n+
    16namespace Functions {
    \n
    17
    \n-
    18namespace BasisFactory {
    \n+
    18
    \n
    19
    \n-
    20// The PeriodicBasis class is in the Experimental namespace because we are
    \n-
    21// not completely sure yet whether we like it. We reserve the right to
    \n-
    22// modify it without advance warning. Use at your own risk!
    \n-
    23
    \n-
    \n-
    24namespace Experimental {
    \n-
    25
    \n+
    20template<class F, class size_type, size_type firstValue, class... Args>
    \n+
    \n+
    21auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue> values, const size_type& i, F&& f, Args&&... args)
    \n+
    22 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
    \n+
    23{
    \n+
    24 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
    \n+
    25}
    \n+
    \n
    26
    \n-
    \n-\n-
    36{
    \n-
    37 using IndexPairSet = std::set<std::pair<std::size_t,std::size_t>>;
    \n-
    38public:
    \n-
    39
    \n-
    \n-
    47 void unifyIndexPair(std::size_t a, std::size_t b)
    \n-
    48 {
    \n-
    49 if (a>b)
    \n-
    50 std::swap(a,b);
    \n-
    51 if (a==b)
    \n-
    52 return;
    \n-
    53 indexPairSet_.insert(std::make_pair(a,b));
    \n-
    54 }
    \n-
    \n-
    55
    \n-
    \n-
    56 const auto& indexPairSet() const
    \n-
    57 {
    \n-
    58 return indexPairSet_;
    \n-
    59 }
    \n-
    \n-
    60
    \n-
    61private:
    \n-
    62 IndexPairSet indexPairSet_;
    \n-
    63};
    \n+
    27template<class F, class size_type, size_type firstValue, size_type secondValue, size_type... otherValues, class... Args>
    \n+
    \n+
    28auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue, secondValue, otherValues...> values, const size_type i, F&& f, Args&&... args)
    \n+
    29 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
    \n+
    30{
    \n+
    31 if (i==firstValue)
    \n+
    32 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
    \n+
    33 return forwardAsStaticInteger(std::integer_sequence<size_type, secondValue, otherValues...>(), i, std::forward<F>(f), std::forward<Args>(args)...);
    \n+
    34}
    \n+
    \n+
    35
    \n+
    36
    \n+
    37
    \n+
    59template<std::size_t end, class F, class size_type, class... Args>
    \n+
    \n+
    60auto forwardAsStaticIndex(const size_type& i, F&& f, Args&&... args)
    \n+
    61 ->decltype(f(Dune::Indices::_0, std::forward<Args>(args)...))
    \n+
    62{
    \n+
    63 return forwardAsStaticInteger(std::make_index_sequence<end>{}, i, std::forward<F>(f), std::forward<Args>(args)...);
    \n+
    64}
    \n
    \n-
    64
    \n
    65
    \n
    66
    \n-
    67namespace Impl {
    \n-
    68
    \n-
    69// An index transformation for a TransformedIndexPreBasis
    \n-
    70// implementing periodic functions by merging indices.
    \n-
    71// Currently only flat indices are supported.
    \n-
    72class PeriodicIndexingTransformation
    \n-
    73{
    \n-
    74public:
    \n-
    75
    \n-
    76 static constexpr std::size_t minIndexSize = 1;
    \n-
    77 static constexpr std::size_t maxIndexSize = 1;
    \n-
    78
    \n-
    79 template<class RawPreBasis, class IndexPairSet>
    \n-
    80 PeriodicIndexingTransformation(const RawPreBasis& rawPreBasis, const IndexPairSet& indexPairSet)
    \n-
    81 {
    \n-
    82 static_assert(RawPreBasis::maxMultiIndexSize==1, "PeriodicIndexingTransformation is only implemented for flat multi-indices");
    \n-
    83 std::size_t invalid = {std::numeric_limits<std::size_t>::max()};
    \n-
    84 mappedIdx_.resize(rawPreBasis.size(), invalid);
    \n-
    85 numIndices_ = 0;
    \n-
    86 std::size_t i = 0;
    \n-
    87 for(const auto& [a, b] : indexPairSet)
    \n-
    88 {
    \n-
    89 for(; i<=a; ++i)
    \n-
    90 if (mappedIdx_[i] == invalid)
    \n-
    91 mappedIdx_[i] = numIndices_++;
    \n-
    92 mappedIdx_[b] = mappedIdx_[a];
    \n-
    93 }
    \n-
    94 for(; i<rawPreBasis.size(); ++i)
    \n-
    95 if (mappedIdx_[i] == invalid)
    \n-
    96 mappedIdx_[i] = numIndices_++;
    \n-
    97 }
    \n-
    98
    \n-
    99 template<class MultiIndex, class PreBasis>
    \n-
    100 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const
    \n-
    101 {
    \n-
    102 multiIndex = {{ mappedIdx_[multiIndex[0]] }};
    \n-
    103 }
    \n-
    104
    \n-
    105 template<class Prefix, class PreBasis>
    \n-
    106 std::size_t size(const Prefix& prefix, const PreBasis& preBasis) const
    \n-
    107 {
    \n-
    108 if (prefix.size() == 1)
    \n-
    109 return 0;
    \n-
    110 return numIndices_;
    \n-
    111 }
    \n-
    112
    \n-
    113 template<class PreBasis>
    \n-
    114 auto dimension(const PreBasis& preBasis) const
    \n-
    115 {
    \n-
    116 return numIndices_;
    \n-
    117 }
    \n-
    118
    \n-
    119private:
    \n-
    120 std::vector<std::size_t> mappedIdx_;
    \n-
    121 std::size_t numIndices_;
    \n-
    122};
    \n-
    123
    \n-
    124
    \n-
    125
    \n-
    126template<class RawPreBasisIndicator>
    \n-
    127class PeriodicPreBasisFactory
    \n-
    128{
    \n-
    129public:
    \n-
    130 PeriodicPreBasisFactory()
    \n-
    131 {}
    \n+
    67
    \n+
    68namespace Imp {
    \n+
    69
    \n+
    70 template<template<class...> class T, class List>
    \n+
    71 struct ExpandTupleHelper
    \n+
    72 {};
    \n+
    73
    \n+
    74 template<template<class...> class T, template<class...> class ListType, class... Args>
    \n+
    75 struct ExpandTupleHelper<T, ListType<Args...>>
    \n+
    76 {
    \n+
    77 using Type = T<Args...>;
    \n+
    78 };
    \n+
    79
    \n+
    80} // end namespace Imp
    \n+
    81
    \n+
    93template<template<class...> class T, class ArgTuple>
    \n+
    94using ExpandTuple = typename Imp::ExpandTupleHelper<T, ArgTuple>::Type;
    \n+
    95
    \n+
    96
    \n+
    97
    \n+
    98namespace Imp {
    \n+
    99
    \n+
    100 template<template<class...> class T, class... Tuple>
    \n+
    101 struct TransformTupleHelper
    \n+
    102 {};
    \n+
    103
    \n+
    104 template<template<class...> class T, class... Args1>
    \n+
    105 struct TransformTupleHelper<T, typename std::tuple<Args1...>>
    \n+
    106 {
    \n+
    107 using Type = std::tuple<T<Args1>...>;
    \n+
    108 };
    \n+
    109
    \n+
    110 template<template<class...> class T, class... Args1, class... Args2>
    \n+
    111 struct TransformTupleHelper<T, typename std::tuple<Args1...>, typename std::tuple<Args2...>>
    \n+
    112 {
    \n+
    113 using Type = std::tuple<T<Args1, Args2>...>;
    \n+
    114 };
    \n+
    115
    \n+
    116} // end namespace Imp
    \n+
    117
    \n+
    130template<template<class...> class F, class... Tuples>
    \n+
    131using TransformTuple = typename Imp::TransformTupleHelper<F, Tuples...>::Type;
    \n
    132
    \n-
    133 template<class RPBI, class PIS>
    \n-
    134 PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&& periodicIndexSet) :
    \n-
    135 rawPreBasisIndicator_(std::forward<RPBI>(rawPreBasisIndicator)),
    \n-
    136 periodicIndexSet_(std::forward<PIS>(periodicIndexSet))
    \n-
    137 {}
    \n-
    138
    \n-
    139 template<class GridView,
    \n-
    140 std::enable_if_t<models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n-
    141 auto operator()(const GridView& gridView) const
    \n-
    142 {
    \n-
    143 const auto& rawPreBasis = rawPreBasisIndicator_.preBasis();
    \n-
    144 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n-
    145 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n-
    146 }
    \n-
    147
    \n-
    148 template<class GridView,
    \n-
    149 std::enable_if_t<models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n-
    150 auto operator()(const GridView& gridView) const
    \n-
    151 {
    \n-
    152 const auto& rawPreBasis = rawPreBasisIndicator_;
    \n-
    153 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n-
    154 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n-
    155 }
    \n-
    156
    \n-
    157 template<class GridView,
    \n-
    158 std::enable_if_t<not models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0,
    \n-
    159 std::enable_if_t<not models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), int> = 0>
    \n-
    160 auto operator()(const GridView& gridView) const
    \n-
    161 {
    \n-
    162 auto rawPreBasis = rawPreBasisIndicator_(gridView);
    \n-
    163 rawPreBasis.initializeIndices();
    \n-
    164 auto transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());
    \n-
    165 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move(rawPreBasis), std::move(transformation));
    \n-
    166 }
    \n-
    167
    \n-
    168private:
    \n-
    169 RawPreBasisIndicator rawPreBasisIndicator_;
    \n-
    170 PeriodicIndexSet periodicIndexSet_;
    \n-
    171};
    \n-
    172
    \n-
    173} // end namespace BasisFactory::Impl
    \n-
    174
    \n-
    175
    \n-
    176
    \n-
    190template<class RawPreBasisIndicator, class PIS>
    \n-
    \n-\n-
    192 RawPreBasisIndicator&& rawPreBasisIndicator,
    \n-
    193 PIS&& periodicIndexSet
    \n-
    194 )
    \n-
    195{
    \n-
    196 return Impl::PeriodicPreBasisFactory<std::decay_t<RawPreBasisIndicator>>(
    \n-
    197 std::forward<RawPreBasisIndicator>(rawPreBasisIndicator),
    \n-
    198 std::forward<PIS>(periodicIndexSet));
    \n-
    199}
    \n-
    \n-
    200
    \n-
    201} // end namespace Experimental
    \n-
    \n-
    202
    \n-
    203} // end namespace BasisFactory
    \n+
    133
    \n+
    134
    \n+
    135namespace Imp {
    \n+
    136
    \n+
    137 template<class F, class... T, std::size_t... k>
    \n+
    138 auto transformTupleHelper(F&& f, const std::tuple<T...>& tuple, std::index_sequence<k...>)
    \n+
    139 -> decltype(std::make_tuple(f(std::get<k>(tuple))...))
    \n+
    140 {
    \n+
    141 return std::make_tuple(f(std::get<k>(tuple))...);
    \n+
    142 }
    \n+
    143
    \n+
    144 template<class F, class... T1, class...T2, std::size_t... k>
    \n+
    145 auto transformTupleHelper(F&& f, const std::tuple<T1...>& tuple1, const std::tuple<T2...>& tuple2, std::index_sequence<k...>)
    \n+
    146 -> decltype(std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...))
    \n+
    147 {
    \n+
    148 return std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...);
    \n+
    149 }
    \n+
    150
    \n+
    151} // end namespace Imp
    \n+
    152
    \n+
    164template<class F, class... T>
    \n+
    \n+
    165auto transformTuple(F&& f, const std::tuple<T...>& tuple)
    \n+
    166 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{}))
    \n+
    167{
    \n+
    168 return Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{});
    \n+
    169}
    \n+
    \n+
    170
    \n+
    184template<class F, class... T1, class... T2>
    \n+
    \n+
    185auto transformTuple(F&& f, const std::tuple<T1...>& tuple1, const std::tuple<T2...>& tuple2)
    \n+
    186 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{}))
    \n+
    187{
    \n+
    188 return Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{});
    \n+
    189}
    \n+
    \n+
    190
    \n+
    191
    \n+
    192
    \n+
    193namespace Imp {
    \n+
    194
    \n+
    195 template<class IntegerSequence>
    \n+
    196 struct IntegerSequenceTupleHelper
    \n+
    197 {};
    \n+
    198
    \n+
    199 template<class I, I... k>
    \n+
    200 struct IntegerSequenceTupleHelper<std::integer_sequence<I, k...>>
    \n+
    201 {
    \n+
    202 using Type = std::tuple<std::integral_constant<I, k>...>;
    \n+
    203 };
    \n
    204
    \n-
    205} // end namespace Dune::Functions
    \n+
    205} // end namespace Imp
    \n
    206
    \n-
    207#endif // DUNE_FUFEM_PERIODICBASIS_HH
    \n-\n-
    auto periodic(RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)
    Create a pre-basis factory that can create a periodic pre-basis.
    Definition periodicbasis.hh:191
    \n-
    Definition polynomial.hh:11
    \n-
    Container storing identified indices for a periodic basis.
    Definition periodicbasis.hh:36
    \n-
    void unifyIndexPair(std::size_t a, std::size_t b)
    Insert a pair of indices.
    Definition periodicbasis.hh:47
    \n-
    const auto & indexPairSet() const
    Definition periodicbasis.hh:56
    \n-
    A pre-basis transforming multi-indices.
    Definition transformedindexbasis.hh:52
    \n-\n+
    210template<class IntegerSequence>
    \n+
    211using IntegerSequenceTuple= typename Imp::IntegerSequenceTupleHelper<IntegerSequence>::Type;
    \n+
    212
    \n+
    213
    \n+
    214
    \n+
    220template<class... T>
    \n+
    \n+\n+
    222{
    \n+
    223 using type = typename std::tuple_element<sizeof...(T)-1, std::tuple<T...>>::type;
    \n+
    224};
    \n+
    \n+
    225
    \n+
    226
    \n+
    227
    \n+
    228namespace Imp {
    \n+
    229
    \n+
    230template<class T, class I>
    \n+
    231struct RotateHelper;
    \n+
    232
    \n+
    233template<class... T, std::size_t... I>
    \n+
    234struct RotateHelper<std::tuple<T...>, std::index_sequence<I...> >
    \n+
    235{
    \n+
    236 using type = typename std::tuple<typename LastType<T...>::type, typename std::tuple_element<I,std::tuple<T...>>::type...>;
    \n+
    237};
    \n+
    238
    \n+
    239} // end namespace Imp
    \n+
    240
    \n+
    241
    \n+
    249template<class... T>
    \n+
    \n+\n+
    251{
    \n+
    252 using type = typename Imp::RotateHelper<std::tuple<T...>, std::make_index_sequence<sizeof...(T)-1>>::type;
    \n+
    253};
    \n+
    \n+
    254
    \n+
    255
    \n+
    256
    \n+
    278template<class Expression>
    \n+
    \n+
    279auto callableCheck(Expression f)
    \n+
    280{
    \n+
    281 return [f](auto&&... args){
    \n+
    282 return Functions::Concept::isCallable(f, std::forward<decltype(args)>(args)...);
    \n+
    283 };
    \n+
    284}
    \n+
    \n+
    285
    \n+
    286
    \n+
    287
    \n+
    303template<class Check>
    \n+
    \n+
    304auto negatePredicate(Check check)
    \n+
    305{
    \n+
    306 return [check](auto&&... args){
    \n+
    307 auto negate = overload(
    \n+
    308 [](std::true_type) { return std::false_type{};},
    \n+
    309 [](std::false_type) { return std::true_type{};},
    \n+
    310 [](bool v) { return not v;});
    \n+
    311 return negate(check(std::forward<decltype(args)>(args)...));
    \n+
    312 };
    \n+
    313}
    \n+
    \n+
    314
    \n+
    315
    \n+
    316namespace Impl {
    \n+
    317
    \n+
    318 // Wrapper to capture values in a lambda for perfect forwarding.
    \n+
    319 // This captures value types by value and reference types by reference.
    \n+
    320 template <typename T>
    \n+
    321 struct ForwardCaptureWrapper;
    \n+
    322
    \n+
    323 template <typename T>
    \n+
    324 struct ForwardCaptureWrapper
    \n+
    325 {
    \n+
    326 template <typename TT>
    \n+
    327 ForwardCaptureWrapper(TT&& t) : t_{std::forward<TT>(t)} {}
    \n+
    328
    \n+
    329 auto forward() const { return std::move(t_); }
    \n+
    330
    \n+
    331 T t_;
    \n+
    332 };
    \n+
    333
    \n+
    334 template <typename T>
    \n+
    335 struct ForwardCaptureWrapper<T&>
    \n+
    336 {
    \n+
    337 ForwardCaptureWrapper(T& t) : t_{t} {}
    \n+
    338
    \n+
    339 T& forward() const { return t_; };
    \n+
    340
    \n+
    341 T& t_;
    \n+
    342 };
    \n+
    343
    \n+
    344 template <typename T>
    \n+
    345 struct ForwardCaptureWrapper<const T&>
    \n+
    346 {
    \n+
    347 ForwardCaptureWrapper(const T& t) : t_{t} {}
    \n+
    348
    \n+
    349 const T& forward() const { return t_; };
    \n+
    350
    \n+
    351 const T& t_;
    \n+
    352 };
    \n+
    353
    \n+
    354} // end namespace Dune::Functions::Impl
    \n+
    355
    \n+
    356
    \n+
    357
    \n+
    371template <class T>
    \n+
    \n+
    372auto forwardCapture(T&& t)
    \n+
    373{
    \n+
    374 return Impl::ForwardCaptureWrapper<T>(std::forward<T>(t));
    \n+
    375}
    \n+
    \n+
    376
    \n+
    377
    \n+
    378
    \n+
    379} // namespace Dune::Functions
    \n+
    380} // namespace Dune
    \n+
    381
    \n+
    382
    \n+
    383#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n+\n+
    typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple
    Expand tuple arguments as template arguments.
    Definition utility.hh:94
    \n+
    typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple
    Transform tuple types argument using type-functor.
    Definition utility.hh:131
    \n+
    static constexpr auto isCallable()
    Check if f is callable with given argument list.
    Definition functionconcepts.hh:47
    \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:165
    \n+
    auto callableCheck(Expression f)
    Create a predicate for checking validity of expressions.
    Definition utility.hh:279
    \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:60
    \n+
    auto negatePredicate(Check check)
    Negate given predicate.
    Definition utility.hh:304
    \n+
    Definition polynomial.hh:10
    \n+
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:372
    \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:21
    \n+
    typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type IntegerSequenceTuple
    Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>
    Definition utility.hh:211
    \n+
    Get last entry of type list.
    Definition utility.hh:222
    \n+
    typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type
    Definition utility.hh:223
    \n+
    Rotate type list by one, such that last entry is moved to first position.
    Definition utility.hh:251
    \n+
    typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence< sizeof...(T) -1 > >::type type
    Definition utility.hh:252
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,225 +1,348 @@\n dune-functions\u00a02.9.0\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+ * _\bc_\bo_\bm_\bm_\bo_\bn\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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+4#define DUNE_FUNCTIONS_COMMON_UTILITY_HH\n 5\n-6#include \n-7#include \n-8#include \n-9#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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+6\n+7#include \n+8#include \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/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n 14\n-15\n-16namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+15namespace _\bD_\bu_\bn_\be {\n+16namespace Functions {\n 17\n-18namespace BasisFactory {\n+18\n 19\n-20// The PeriodicBasis class is in the Experimental namespace because we are\n-21// not completely sure yet whether we like it. We reserve the right to\n-22// modify it without advance warning. Use at your own risk!\n-23\n-_\b2_\b4namespace Experimental {\n-25\n+20template\n+_\b2_\b1auto _\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+22 ->decltype(f(std::integral_constant(), std::\n+forward(args)...))\n+23{\n+24 return f(std::integral_constant(), std::forward\n+(args)...);\n+25}\n 26\n-_\b3_\b5class _\bP_\be_\br_\bi_\bo_\bd_\bi_\bc_\bI_\bn_\bd_\be_\bx_\bS_\be_\bt\n-36{\n-37 using IndexPairSet = std::set>;\n-38public:\n-39\n-_\b4_\b7 void _\bu_\bn_\bi_\bf_\by_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br(std::size_t a, std::size_t b)\n-48 {\n-49 if (a>b)\n-50 std::swap(a,b);\n-51 if (a==b)\n-52 return;\n-53 indexPairSet_.insert(std::make_pair(a,b));\n-54 }\n-55\n-_\b5_\b6 const auto& _\bi_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br_\bS_\be_\bt() const\n-57 {\n-58 return indexPairSet_;\n-59 }\n-60\n-61private:\n-62 IndexPairSet indexPairSet_;\n-63};\n-64\n+27template\n+_\b2_\b8auto _\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+29 ->decltype(f(std::integral_constant(), std::\n+forward(args)...))\n+30{\n+31 if (i==firstValue)\n+32 return f(std::integral_constant(), std::forward\n+(args)...);\n+33 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+34}\n+35\n+36\n+37\n+59template\n+_\b6_\b0auto _\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+61 ->decltype(f(Dune::Indices::_0, std::forward(args)...))\n+62{\n+63 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+64}\n 65\n 66\n-67namespace Impl {\n-68\n-69// An index transformation for a TransformedIndexPreBasis\n-70// implementing periodic functions by merging indices.\n-71// Currently only flat indices are supported.\n-72class PeriodicIndexingTransformation\n-73{\n-74public:\n-75\n-76 static constexpr std::size_t minIndexSize = 1;\n-77 static constexpr std::size_t maxIndexSize = 1;\n-78\n-79 template\n-80 PeriodicIndexingTransformation(const RawPreBasis& rawPreBasis, const\n-IndexPairSet& indexPairSet)\n-81 {\n-82 static_assert(RawPreBasis::maxMultiIndexSize==1,\n-\"PeriodicIndexingTransformation is only implemented for flat multi-indices\");\n-83 std::size_t invalid = {std::numeric_limits::max()};\n-84 mappedIdx_.resize(rawPreBasis.size(), invalid);\n-85 numIndices_ = 0;\n-86 std::size_t i = 0;\n-87 for(const auto& [a, b] : indexPairSet)\n-88 {\n-89 for(; i<=a; ++i)\n-90 if (mappedIdx_[i] == invalid)\n-91 mappedIdx_[i] = numIndices_++;\n-92 mappedIdx_[b] = mappedIdx_[a];\n-93 }\n-94 for(; i\n-100 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const\n-101 {\n-102 multiIndex = {{ mappedIdx_[multiIndex[0]] }};\n-103 }\n-104\n-105 template\n-106 std::size_t size(const Prefix& prefix, const PreBasis& preBasis) const\n-107 {\n-108 if (prefix.size() == 1)\n-109 return 0;\n-110 return numIndices_;\n-111 }\n-112\n-113 template\n-114 auto dimension(const PreBasis& preBasis) const\n-115 {\n-116 return numIndices_;\n-117 }\n-118\n-119private:\n-120 std::vector mappedIdx_;\n-121 std::size_t numIndices_;\n-122};\n-123\n-124\n-125\n-126template\n-127class PeriodicPreBasisFactory\n-128{\n-129public:\n-130 PeriodicPreBasisFactory()\n-131 {}\n+67\n+68namespace Imp {\n+69\n+70 template class T, class List>\n+71 struct ExpandTupleHelper\n+72 {};\n+73\n+74 template class T, template class ListType,\n+class... Args>\n+75 struct ExpandTupleHelper>\n+76 {\n+77 using Type = T;\n+78 };\n+79\n+80} // end namespace Imp\n+81\n+93template class T, class ArgTuple>\n+_\b9_\b4using _\bE_\bx_\bp_\ba_\bn_\bd_\bT_\bu_\bp_\bl_\be = typename Imp::ExpandTupleHelper::Type;\n+95\n+96\n+97\n+98namespace Imp {\n+99\n+100 template class T, class... Tuple>\n+101 struct TransformTupleHelper\n+102 {};\n+103\n+104 template class T, class... Args1>\n+105 struct TransformTupleHelper>\n+106 {\n+107 using Type = std::tuple...>;\n+108 };\n+109\n+110 template class T, class... Args1, class... Args2>\n+111 struct TransformTupleHelper, typename\n+std::tuple>\n+112 {\n+113 using Type = std::tuple...>;\n+114 };\n+115\n+116} // end namespace Imp\n+117\n+130template class F, class... Tuples>\n+_\b1_\b3_\b1using _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be = typename Imp::TransformTupleHelper::\n+Type;\n 132\n-133 template\n-134 PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&&\n-periodicIndexSet) :\n-135 rawPreBasisIndicator_(std::forward(rawPreBasisIndicator)),\n-136 periodicIndexSet_(std::forward(periodicIndexSet))\n-137 {}\n-138\n-139 template,RawPreBasisIndicator>(), int> = 0>\n-141 auto operator()(const GridView& gridView) const\n-142 {\n-143 const auto& rawPreBasis = rawPreBasisIndicator_.preBasis();\n-144 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n-periodicIndexSet_.indexPairSet());\n-145 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-146 }\n-147\n-148 template,RawPreBasisIndicator>\n-(), int> = 0>\n-150 auto operator()(const GridView& gridView) const\n-151 {\n-152 const auto& rawPreBasis = rawPreBasisIndicator_;\n-153 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n-periodicIndexSet_.indexPairSet());\n-154 return _\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-155 }\n-156\n-157 template,RawPreBasisIndicator>(), int> = 0,\n-159 std::enable_if_t,RawPreBasisIndicator>(), int> = 0>\n-160 auto operator()(const GridView& gridView) const\n-161 {\n-162 auto rawPreBasis = rawPreBasisIndicator_(gridView);\n-163 rawPreBasis.initializeIndices();\n-164 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n-periodicIndexSet_.indexPairSet());\n-165 return _\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-166 }\n-167\n-168private:\n-169 RawPreBasisIndicator rawPreBasisIndicator_;\n-170 PeriodicIndexSet periodicIndexSet_;\n-171};\n-172\n-173} // end namespace BasisFactory::Impl\n-174\n-175\n-176\n-190template\n-_\b1_\b9_\b1auto _\bp_\be_\br_\bi_\bo_\bd_\bi_\bc(\n-192 RawPreBasisIndicator&& rawPreBasisIndicator,\n-193 PIS&& periodicIndexSet\n-194 )\n-195{\n-196 return Impl::PeriodicPreBasisFactory>(\n-197 std::forward(rawPreBasisIndicator),\n-198 std::forward(periodicIndexSet));\n-199}\n-200\n-201} // end namespace Experimental\n-202\n-203} // end namespace BasisFactory\n+133\n+134\n+135namespace Imp {\n+136\n+137 template\n+138 auto transformTupleHelper(F&& f, const std::tuple& tuple, std::\n+index_sequence)\n+139 -> decltype(std::make_tuple(f(std::get(tuple))...))\n+140 {\n+141 return std::make_tuple(f(std::get(tuple))...);\n+142 }\n+143\n+144 template\n+145 auto transformTupleHelper(F&& f, const std::tuple& tuple1, const\n+std::tuple& tuple2, std::index_sequence)\n+146 -> decltype(std::make_tuple(f(std::get(tuple1), std::get\n+(tuple2))...))\n+147 {\n+148 return std::make_tuple(f(std::get(tuple1), std::get(tuple2))...);\n+149 }\n+150\n+151} // end namespace Imp\n+152\n+164template\n+_\b1_\b6_\b5auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be(F&& f, const std::tuple& tuple)\n+166 -> decltype(Imp::transformTupleHelper(std::forward(f), tuple, std::\n+index_sequence_for{}))\n+167{\n+168 return Imp::transformTupleHelper(std::forward(f), tuple, std::\n+index_sequence_for{});\n+169}\n+170\n+184template\n+_\b1_\b8_\b5auto _\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+186 -> decltype(Imp::transformTupleHelper(std::forward(f), tuple1, tuple2,\n+std::index_sequence_for{}))\n+187{\n+188 return Imp::transformTupleHelper(std::forward(f), tuple1, tuple2, std::\n+index_sequence_for{});\n+189}\n+190\n+191\n+192\n+193namespace Imp {\n+194\n+195 template\n+196 struct IntegerSequenceTupleHelper\n+197 {};\n+198\n+199 template\n+200 struct IntegerSequenceTupleHelper>\n+201 {\n+202 using Type = std::tuple...>;\n+203 };\n 204\n-205} // end namespace Dune::Functions\n+205} // end namespace Imp\n 206\n-207#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-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:191\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:11\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:36\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: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:_\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:56\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:52\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+210template\n+_\b2_\b1_\b1using _\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+212\n+213\n+214\n+220template\n+_\b2_\b2_\b1struct _\bL_\ba_\bs_\bt_\bT_\by_\bp_\be\n+222{\n+_\b2_\b2_\b3 using _\bt_\by_\bp_\be = typename std::tuple_element>_\b:_\b:_\bt_\by_\bp_\be;\n+224};\n+225\n+226\n+227\n+228namespace Imp {\n+229\n+230template\n+231struct RotateHelper;\n+232\n+233template\n+234struct RotateHelper, std::index_sequence >\n+235{\n+236 using type = typename std::tuple::type, typename\n+std::tuple_element>::type...>;\n+237};\n+238\n+239} // end namespace Imp\n+240\n+241\n+249template\n+_\b2_\b5_\b0struct _\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be\n+251{\n+_\b2_\b5_\b2 using _\bt_\by_\bp_\be = typename Imp::RotateHelper, std::\n+make_index_sequence>_\b:_\b:_\bt_\by_\bp_\be;\n+253};\n+254\n+255\n+256\n+278template\n+_\b2_\b7_\b9auto _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk(Expression f)\n+280{\n+281 return [f](auto&&... args){\n+282 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+283 };\n+284}\n+285\n+286\n+287\n+303template\n+_\b3_\b0_\b4auto _\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be(Check check)\n+305{\n+306 return [check](auto&&... args){\n+307 auto negate = overload(\n+308 [](std::true_type) { return std::false_type{};},\n+309 [](std::false_type) { return std::true_type{};},\n+310 [](bool v) { return not v;});\n+311 return negate(check(std::forward(args)...));\n+312 };\n+313}\n+314\n+315\n+316namespace Impl {\n+317\n+318 // Wrapper to capture values in a lambda for perfect forwarding.\n+319 // This captures value types by value and reference types by reference.\n+320 template \n+321 struct ForwardCaptureWrapper;\n+322\n+323 template \n+324 struct ForwardCaptureWrapper\n+325 {\n+326 template \n+327 ForwardCaptureWrapper(TT&& t) : t_{std::forward(t)} {}\n+328\n+329 auto forward() const { return std::move(t_); }\n+330\n+331 T t_;\n+332 };\n+333\n+334 template \n+335 struct ForwardCaptureWrapper\n+336 {\n+337 ForwardCaptureWrapper(T& t) : t_{t} {}\n+338\n+339 T& forward() const { return t_; };\n+340\n+341 T& t_;\n+342 };\n+343\n+344 template \n+345 struct ForwardCaptureWrapper\n+346 {\n+347 ForwardCaptureWrapper(const T& t) : t_{t} {}\n+348\n+349 const T& forward() const { return t_; };\n+350\n+351 const T& t_;\n+352 };\n+353\n+354} // end namespace Dune::Functions::Impl\n+355\n+356\n+357\n+371template \n+_\b3_\b7_\b2auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(T&& t)\n+373{\n+374 return Impl::ForwardCaptureWrapper(std::forward(t));\n+375}\n+376\n+377\n+378\n+379} // namespace Dune::Functions\n+380} // namespace Dune\n+381\n+382\n+383#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+_\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:94\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: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_\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:47\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:165\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:279\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:60\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:304\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:372\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:21\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:211\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:222\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+typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:223\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:251\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:252\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: lagrangedgbasis.hh File Reference\n+dune-functions: localfunction_imp.hh File Reference\n \n \n \n \n \n \n \n@@ -65,65 +65,34 @@\n
    \n \n \n \n \n \n \n
    \n \n-
    lagrangedgbasis.hh File Reference
    \n+Namespaces
    \n+
    localfunction_imp.hh File Reference
    \n \n
    \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+\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,42 +1,19 @@\n dune-functions\u00a02.9.0\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-#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+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+localfunction_imp.hh File Reference\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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/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: lagrangedgbasis.hh Source File\n+dune-functions: localfunction_imp.hh Source File\n \n \n \n \n \n \n \n@@ -70,312 +70,92 @@\n
    \n \n \n \n \n \n \n
    \n-
    lagrangedgbasis.hh
    \n+
    localfunction_imp.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n-
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH
    \n
    5
    \n-
    6#include <array>
    \n-
    7#include <dune/common/exceptions.hh>
    \n-
    8#include <dune/common/math.hh>
    \n+\n+\n+
    8
    \n
    9
    \n-\n-\n-\n-
    13
    \n+
    10
    \n+
    11namespace Dune {
    \n+
    12namespace Functions {
    \n+
    13namespace Imp {
    \n
    14
    \n-
    15
    \n-
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n-
    19
    \n-
    20
    \n-
    21
    \n-
    22// *****************************************************************************
    \n-
    23// This is the reusable part of the basis. It contains
    \n-
    24//
    \n-
    25// LagrangeDGPreBasis
    \n-
    26// LagrangeDGNode
    \n-
    27//
    \n-
    28// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    29// state. These components do _not_ depend on the global basis and local view
    \n-
    30// and can be used without a global basis.
    \n-
    31// *****************************************************************************
    \n+
    15// Interface of type erasure wrapper
    \n+
    16//
    \n+
    17// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n+
    18// will be added by the type erasure foundation classes.
    \n+
    19template<class Signature, class DerivativeInterface, class LocalContext>
    \n+
    20class LocalFunctionWrapperInterface :
    \n+
    21 public DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>
    \n+
    22{
    \n+
    23public:
    \n+
    24 virtual void bind(const LocalContext&) = 0;
    \n+
    25
    \n+
    26 virtual void unbind() = 0;
    \n+
    27
    \n+
    28 virtual bool bound() const = 0;
    \n+
    29
    \n+
    30 virtual const LocalContext& localContext() const = 0;
    \n+
    31};
    \n
    32
    \n-
    33template<typename GV, int k>
    \n-\n-
    35
    \n-
    36template<typename GV, int k>
    \n-
    \n-\n+
    33
    \n+
    34// Implementation of type erasure wrapper
    \n+
    35template<class Signature, class DerivativeInterface, class LocalContext, class B>
    \n+
    36class LocalFunctionWrapperImplementation :
    \n+
    37 public DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>
    \n
    38{
    \n-
    39 static const int dim = GV::dimension;
    \n-
    40
    \n-
    41public:
    \n+
    39 using Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n+
    40public:
    \n+
    41 using Base::Base;
    \n
    42
    \n-
    44 using GridView = GV;
    \n-
    45 using size_type = std::size_t;
    \n-
    46
    \n+
    43 virtual void bind(const LocalContext& context)
    \n+
    44 {
    \n+
    45 this->get().bind(context);
    \n+
    46 }
    \n
    47
    \n-
    48 // Precompute the number of dofs per entity type
    \n-
    49 const static int dofsPerEdge = k+1;
    \n-
    50 const static int dofsPerTriangle = (k+1)*(k+2)/2;
    \n-
    51 const static int dofsPerQuad = (k+1)*(k+1);
    \n-
    52 const static int dofsPerTetrahedron = (k+1)*(k+2)*(k+3)/6;
    \n-
    53 const static int dofsPerPrism = (k+1)*(k+1)*(k+2)/2;
    \n-
    54 const static int dofsPerHexahedron = (k+1)*(k+1)*(k+1);
    \n-
    55 const static int dofsPerPyramid = (k+1)*(k+2)*(2*k+3)/6;
    \n-
    56
    \n+
    48 virtual void unbind()
    \n+
    49 {
    \n+
    50 this->get().unbind();
    \n+
    51 }
    \n+
    52
    \n+
    53 virtual bool bound() const
    \n+
    54 {
    \n+
    55 return this->get().bound();
    \n+
    56 }
    \n
    57
    \n-\n-
    59
    \n-
    60 static constexpr size_type maxMultiIndexSize = 1;
    \n-
    61 static constexpr size_type minMultiIndexSize = 1;
    \n-
    62 static constexpr size_type multiIndexBufferSize = 1;
    \n+
    58 virtual const LocalContext& localContext() const
    \n+
    59 {
    \n+
    60 return this->get().localContext();
    \n+
    61 }
    \n+
    62};
    \n
    63
    \n-
    \n-\n-
    66 gridView_(gv)
    \n-
    67 {}
    \n-
    \n-
    68
    \n-
    69
    \n-
    \n-\n-
    71 {
    \n-
    72 switch (dim)
    \n-
    73 {
    \n-
    74 case 1:
    \n-
    75 {
    \n-
    76 break;
    \n-
    77 }
    \n-
    78 case 2:
    \n-
    79 {
    \n-
    80 quadrilateralOffset_ = dofsPerTriangle * gridView_.size(Dune::GeometryTypes::triangle);
    \n-
    81 break;
    \n-
    82 }
    \n-
    83 case 3:
    \n-
    84 {
    \n-
    85 prismOffset_ = dofsPerTetrahedron * gridView_.size(Dune::GeometryTypes::tetrahedron);
    \n-
    86
    \n-
    87 hexahedronOffset_ = prismOffset_ + dofsPerPrism * gridView_.size(Dune::GeometryTypes::prism);
    \n-
    88
    \n-
    89 pyramidOffset_ = hexahedronOffset_ + dofsPerHexahedron * gridView_.size(Dune::GeometryTypes::hexahedron);
    \n-
    90 break;
    \n-
    91 }
    \n-
    92 }
    \n-
    93 }
    \n-
    \n-
    94
    \n-
    \n-
    97 const GridView& gridView() const
    \n-
    98 {
    \n-
    99 return gridView_;
    \n-
    100 }
    \n-
    \n-
    101
    \n-
    \n-
    102 void update(const GridView& gv)
    \n-
    103 {
    \n-
    104 gridView_ = gv;
    \n-
    105 }
    \n-
    \n-
    106
    \n-
    \n-\n-
    111 {
    \n-
    112 return Node{};
    \n-
    113 }
    \n-
    \n-
    114
    \n-
    \n-\n-
    116 {
    \n-
    117 switch (dim)
    \n-
    118 {
    \n-
    119 case 1:
    \n-
    120 return dofsPerEdge*gridView_.size(0);
    \n-
    121 case 2:
    \n-
    122 {
    \n-
    123 return dofsPerTriangle*gridView_.size(Dune::GeometryTypes::triangle) + dofsPerQuad*gridView_.size(Dune::GeometryTypes::quadrilateral);
    \n-
    124 }
    \n-
    125 case 3:
    \n-
    126 {
    \n-
    127 return dofsPerTetrahedron*gridView_.size(Dune::GeometryTypes::tetrahedron)
    \n-
    128 + dofsPerPyramid*gridView_.size(Dune::GeometryTypes::pyramid)
    \n-
    129 + dofsPerPrism*gridView_.size(Dune::GeometryTypes::prism)
    \n-
    130 + dofsPerHexahedron*gridView_.size(Dune::GeometryTypes::hexahedron);
    \n-
    131 }
    \n-
    132 }
    \n-
    133 DUNE_THROW(Dune::NotImplemented, "No size method for " << dim << "d grids available yet!");
    \n-
    134 }
    \n-
    \n-
    135
    \n-
    137 template<class SizePrefix>
    \n-
    \n-
    138 size_type size(const SizePrefix& prefix) const
    \n-
    139 {
    \n-
    140 assert(prefix.size() == 0 || prefix.size() == 1);
    \n-
    141 return (prefix.size() == 0) ? size() : 0;
    \n-
    142 }
    \n-
    \n-
    143
    \n-
    \n-\n-
    146 {
    \n-
    147 return size();
    \n-
    148 }
    \n-
    \n-
    149
    \n-
    \n-\n-
    151 {
    \n-
    152 return Dune::power(k+1, int(GV::dimension));
    \n-
    153 }
    \n-
    \n-
    154
    \n-
    155 template<typename It>
    \n-
    \n-
    156 It indices(const Node& node, It it) const
    \n-
    157 {
    \n-
    158 const auto& gridIndexSet = gridView().indexSet();
    \n-
    159 const auto& element = node.element();
    \n-
    160
    \n-
    161 size_type offset = 0;
    \n-
    162 if constexpr (dim==1)
    \n-
    163 offset = dofsPerEdge*gridIndexSet.subIndex(element,0,0);
    \n-
    164 else if constexpr (dim==2)
    \n-
    165 {
    \n-
    166 if (element.type().isTriangle())
    \n-
    167 offset = dofsPerTriangle*gridIndexSet.subIndex(element,0,0);
    \n-
    168 else if (element.type().isQuadrilateral())
    \n-
    169 offset = quadrilateralOffset_ + dofsPerQuad*gridIndexSet.subIndex(element,0,0);
    \n-
    170 else
    \n-
    171 DUNE_THROW(Dune::NotImplemented, "2d elements have to be triangles or quadrilaterals");
    \n-
    172 }
    \n-
    173 else if constexpr (dim==3)
    \n-
    174 {
    \n-
    175 if (element.type().isTetrahedron())
    \n-
    176 offset = dofsPerTetrahedron*gridIndexSet.subIndex(element,0,0);
    \n-
    177 else if (element.type().isPrism())
    \n-
    178 offset = prismOffset_ + dofsPerPrism*gridIndexSet.subIndex(element,0,0);
    \n-
    179 else if (element.type().isHexahedron())
    \n-
    180 offset = hexahedronOffset_ + dofsPerHexahedron*gridIndexSet.subIndex(element,0,0);
    \n-
    181 else if (element.type().isPyramid())
    \n-
    182 offset = pyramidOffset_ + dofsPerPyramid*gridIndexSet.subIndex(element,0,0);
    \n-
    183 else
    \n-
    184 DUNE_THROW(Dune::NotImplemented, "3d elements have to be tetrahedrons, prisms, hexahedrons or pyramids");
    \n-
    185 }
    \n-
    186 else
    \n-
    187 DUNE_THROW(Dune::NotImplemented, "No index method for " << dim << "d grids available yet!");
    \n-
    188 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)
    \n-
    189 *it = {offset + i};
    \n-
    190 return it;
    \n-
    191 }
    \n-
    \n-
    192
    \n-
    \n-
    194 unsigned int order() const
    \n-
    195 {
    \n-
    196 return k;
    \n-
    197 }
    \n-
    \n-
    198
    \n-
    199protected:
    \n-\n-
    201
    \n-\n-\n-\n-\n-
    206};
    \n-
    \n-
    207
    \n-
    208
    \n-
    209
    \n-
    210namespace BasisFactory {
    \n-
    211
    \n-
    219template<std::size_t k>
    \n-
    \n-\n-
    221{
    \n-
    222 return [](const auto& gridView) {
    \n-
    223 return LagrangeDGPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);
    \n-
    224 };
    \n-
    225}
    \n-
    \n-
    226
    \n-
    227} // end namespace BasisFactory
    \n-
    228
    \n-
    229
    \n-
    230
    \n-
    231// *****************************************************************************
    \n-
    232// This is the actual global basis implementation based on the reusable parts.
    \n-
    233// *****************************************************************************
    \n-
    234
    \n-
    242template<typename GV, int k>
    \n-\n-
    244
    \n-
    245
    \n-
    246
    \n-
    247} // end namespace Functions
    \n-
    248} // end namespace Dune
    \n-
    249
    \n-
    250
    \n-
    251#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH
    \n-\n-\n-\n-
    auto lagrangeDG()
    Create a pre-basis factory that can create a LagrangeDG pre-basis.
    Definition lagrangedgbasis.hh:220
    \n+
    64}}} // namespace Dune::Functions::Imp
    \n+
    65
    \n+
    66
    \n+
    67
    \n+
    68#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n+\n+\n
    Definition polynomial.hh:10
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n-
    Definition lagrangebasis.hh:387
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition lagrangebasis.hh:439
    \n-
    Definition lagrangedgbasis.hh:38
    \n-
    size_type size() const
    Definition lagrangedgbasis.hh:115
    \n-
    It indices(const Node &node, It it) const
    Definition lagrangedgbasis.hh:156
    \n-
    size_type maxNodeSize() const
    Definition lagrangedgbasis.hh:150
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition lagrangedgbasis.hh:62
    \n-
    unsigned int order() const
    Polynomial order used in the local Lagrange finite-elements.
    Definition lagrangedgbasis.hh:194
    \n-
    void update(const GridView &gv)
    Definition lagrangedgbasis.hh:102
    \n-
    size_t hexahedronOffset_
    Definition lagrangedgbasis.hh:205
    \n-
    Node makeNode() const
    Create tree node.
    Definition lagrangedgbasis.hh:110
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition lagrangedgbasis.hh:60
    \n-
    static const int dofsPerHexahedron
    Definition lagrangedgbasis.hh:54
    \n-
    LagrangeDGPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition lagrangedgbasis.hh:65
    \n-
    size_t pyramidOffset_
    Definition lagrangedgbasis.hh:203
    \n-
    static const int dofsPerTetrahedron
    Definition lagrangedgbasis.hh:52
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition lagrangedgbasis.hh:138
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition lagrangedgbasis.hh:44
    \n-
    void initializeIndices()
    Definition lagrangedgbasis.hh:70
    \n-
    size_t quadrilateralOffset_
    Definition lagrangedgbasis.hh:202
    \n-
    static const int dofsPerEdge
    Definition lagrangedgbasis.hh:49
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition lagrangedgbasis.hh:97
    \n-
    static const int dofsPerQuad
    Definition lagrangedgbasis.hh:51
    \n-
    static const int dofsPerTriangle
    Definition lagrangedgbasis.hh:50
    \n-
    static const int dofsPerPyramid
    Definition lagrangedgbasis.hh:55
    \n-
    GridView gridView_
    Definition lagrangedgbasis.hh:200
    \n-
    static constexpr size_type minMultiIndexSize
    Definition lagrangedgbasis.hh:61
    \n-
    std::size_t size_type
    Definition lagrangedgbasis.hh:45
    \n-
    size_type dimension() const
    Definition lagrangedgbasis.hh:145
    \n-
    size_t prismOffset_
    Definition lagrangedgbasis.hh:204
    \n-
    static const int dofsPerPrism
    Definition lagrangedgbasis.hh:53
    \n-
    size_type size() const
    Definition nodes.hh:142
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,369 +1,88 @@\n dune-functions\u00a02.9.0\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+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+localfunction_imp.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n-3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n+4#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n 5\n-6#include \n-7#include \n-8#include \n+6#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+7#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+8\n 9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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-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/_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh>\n-13\n+10\n+11namespace _\bD_\bu_\bn_\be {\n+12namespace Functions {\n+13namespace Imp {\n 14\n-15\n-16\n-17namespace _\bD_\bu_\bn_\be {\n-18namespace Functions {\n-19\n-20\n-21\n-22/\n-/ *****************************************************************************\n-23// This is the reusable part of the basis. It contains\n-24//\n-25// LagrangeDGPreBasis\n-26// LagrangeDGNode\n-27//\n-28// The pre-basis allows to create the others and is the owner of possible\n-shared\n-29// state. These components do _not_ depend on the global basis and local view\n-30// and can be used without a global basis.\n-31/\n-/ *****************************************************************************\n+15// Interface of type erasure wrapper\n+16//\n+17// Notice that the basic interface of polymorphic classes (destructor, clone,\n+...)\n+18// will be added by the type erasure foundation classes.\n+19template\n+20class LocalFunctionWrapperInterface :\n+21 public DifferentiableFunctionWrapperInterface\n+22{\n+23public:\n+24 virtual void bind(const LocalContext&) = 0;\n+25\n+26 virtual void unbind() = 0;\n+27\n+28 virtual bool bound() const = 0;\n+29\n+30 virtual const LocalContext& localContext() const = 0;\n+31};\n 32\n-33template\n-_\b3_\b4using _\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-35\n-36template\n-_\b3_\b7class _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n+33\n+34// Implementation of type erasure wrapper\n+35template\n+36class LocalFunctionWrapperImplementation :\n+37 public DifferentiableFunctionWrapperImplementation\n 38{\n-39 static const int dim = GV::dimension;\n-40\n-41public:\n+39 using Base = DifferentiableFunctionWrapperImplementation;\n+40public:\n+41 using Base::Base;\n 42\n-_\b4_\b4 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b4_\b5 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-46\n+43 virtual void bind(const LocalContext& context)\n+44 {\n+45 this->get().bind(context);\n+46 }\n 47\n-48 // Precompute the number of dofs per entity type\n-_\b4_\b9 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be = k+1;\n-_\b5_\b0 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_\b1 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bQ_\bu_\ba_\bd = (k+1)*(k+1);\n-_\b5_\b2 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_\b3 const static int _\bd_\bo_\bf_\bs_\bP_\be_\br_\bP_\br_\bi_\bs_\bm = (k+1)*(k+1)*(k+2)/2;\n-_\b5_\b4 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-_\b5_\b5 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-56\n+48 virtual void unbind()\n+49 {\n+50 this->get().unbind();\n+51 }\n+52\n+53 virtual bool bound() const\n+54 {\n+55 return this->get().bound();\n+56 }\n 57\n-_\b5_\b8 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-59\n-_\b6_\b0 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-_\b6_\b1 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-_\b6_\b2 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+58 virtual const LocalContext& localContext() const\n+59 {\n+60 return this->get().localContext();\n+61 }\n+62};\n 63\n-_\b6_\b5 _\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-66 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_(gv)\n-67 {}\n-68\n-69\n-_\b7_\b0 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-71 {\n-72 switch (dim)\n-73 {\n-74 case 1:\n-75 {\n-76 break;\n-77 }\n-78 case 2:\n-79 {\n-80 _\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-81 break;\n-82 }\n-83 case 3:\n-84 {\n-85 _\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-86\n-87 _\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-88\n-89 _\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-90 break;\n-91 }\n-92 }\n-93 }\n-94\n-_\b9_\b7 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n-98 {\n-99 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-100 }\n-101\n-_\b1_\b0_\b2 void _\bu_\bp_\bd_\ba_\bt_\be(const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-103 {\n-104 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-105 }\n-106\n-_\b1_\b1_\b0 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-111 {\n-112 return _\bN_\bo_\bd_\be{};\n-113 }\n-114\n-_\b1_\b1_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-116 {\n-117 switch (dim)\n-118 {\n-119 case 1:\n-120 return _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be*_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.size(0);\n-121 case 2:\n-122 {\n-123 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-124 }\n-125 case 3:\n-126 {\n-127 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-128 + _\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-129 + _\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-130 + _\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-131 }\n-132 }\n-133 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n-available yet!\");\n-134 }\n-135\n-137 template\n-_\b1_\b3_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-139 {\n-140 assert(prefix.size() == 0 || prefix.size() == 1);\n-141 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n-142 }\n-143\n-_\b1_\b4_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-146 {\n-147 return _\bs_\bi_\bz_\be();\n-148 }\n-149\n-_\b1_\b5_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-151 {\n-152 return Dune::power(k+1, int(GV::dimension));\n-153 }\n-154\n-155 template\n-_\b1_\b5_\b6 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-157 {\n-158 const auto& gridIndexSet = _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw().indexSet();\n-159 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-160\n-161 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be offset = 0;\n-162 if constexpr (dim==1)\n-163 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bE_\bd_\bg_\be*gridIndexSet.subIndex(element,0,0);\n-164 else if constexpr (dim==2)\n-165 {\n-166 if (element.type().isTriangle())\n-167 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be*gridIndexSet.subIndex(element,0,0);\n-168 else if (element.type().isQuadrilateral())\n-169 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-170 else\n-171 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n-quadrilaterals\");\n-172 }\n-173 else if constexpr (dim==3)\n-174 {\n-175 if (element.type().isTetrahedron())\n-176 offset = _\bd_\bo_\bf_\bs_\bP_\be_\br_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn*gridIndexSet.subIndex(element,0,0);\n-177 else if (element.type().isPrism())\n-178 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-179 else if (element.type().isHexahedron())\n-180 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-181 else if (element.type().isPyramid())\n-182 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-183 else\n-184 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedrons,\n-prisms, hexahedrons or pyramids\");\n-185 }\n-186 else\n-187 DUNE_THROW(Dune::NotImplemented, \"No index method for \" << dim << \"d grids\n-available yet!\");\n-188 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0, end = node._\bs_\bi_\bz_\be() ; i < end ; ++i, ++it)\n-189 *it = {offset + i};\n-190 return it;\n-191 }\n-192\n-_\b1_\b9_\b4 unsigned int _\bo_\br_\bd_\be_\br() const\n-195 {\n-196 return k;\n-197 }\n-198\n-199protected:\n-_\b2_\b0_\b0 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-201\n-_\b2_\b0_\b2 size_t _\bq_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b2_\b0_\b3 size_t _\bp_\by_\br_\ba_\bm_\bi_\bd_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b2_\b0_\b4 size_t _\bp_\br_\bi_\bs_\bm_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-_\b2_\b0_\b5 size_t _\bh_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn_\bO_\bf_\bf_\bs_\be_\bt_\b_;\n-206};\n-207\n-208\n-209\n-210namespace BasisFactory {\n-211\n-219template\n-_\b2_\b2_\b0auto _\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG()\n-221{\n-222 return [](const auto& gridView) {\n-223 return _\bL_\ba_\bg_\br_\ba_\bn_\bg_\be_\bD_\bG_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, k>(gridView);\n-224 };\n-225}\n-226\n-227} // end namespace BasisFactory\n-228\n-229\n-230\n-231/\n-/ *****************************************************************************\n-232// This is the actual global basis implementation based on the reusable\n-parts.\n-233/\n-/ *****************************************************************************\n-234\n-242template\n-_\b2_\b4_\b3using _\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-244\n-245\n-246\n-247} // end namespace Functions\n-248} // end namespace Dune\n-249\n-250\n-251#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bl_\ba_\bg_\br_\ba_\bn_\bg_\be_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\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:220\n+64}}} // namespace Dune::Functions::Imp\n+65\n+66\n+67\n+68#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n-_\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:46\n-_\bD_\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:387\n-_\bD_\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:439\n-_\bD_\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:38\n-_\bD_\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\n-size_type size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:115\n-_\bD_\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:156\n-_\bD_\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:150\n-_\bD_\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_\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 lagrangedgbasis.hh:62\n-_\bD_\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:194\n-_\bD_\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:102\n-_\bD_\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:205\n-_\bD_\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:110\n-_\bD_\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_\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 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:_\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:54\n-_\bD_\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:65\n-_\bD_\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:203\n-_\bD_\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:52\n-_\bD_\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\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 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:_\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: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_\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:70\n-_\bD_\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:202\n-_\bD_\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:49\n-_\bD_\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:97\n-_\bD_\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: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_\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: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:_\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: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_\b_\n-GridView gridView_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lagrangedgbasis.hh:200\n-_\bD_\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_\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 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:_\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:45\n-_\bD_\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:145\n-_\bD_\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:204\n-_\bD_\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: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:142\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: interpolate.hh File Reference\n+dune-functions: typeerasure.hh File Reference\n \n \n \n \n \n \n \n@@ -65,62 +65,44 @@\n \n \n \n \n \n \n \n
    \n \n-
    interpolate.hh File Reference
    \n+Classes |\n+Namespaces
    \n+
    typeerasure.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/typetree/childextraction.hh>
    \n-#include <dune/functions/gridfunctions/gridviewfunction.hh>
    \n-#include <dune/functions/common/functionconcepts.hh>
    \n-#include <dune/functions/backends/concepts.hh>
    \n-#include <dune/functions/backends/istlvectorbackend.hh>
    \n-#include <dune/functions/functionspacebases/sizeinfo.hh>
    \n-#include <dune/functions/functionspacebases/flatvectorview.hh>
    \n-#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>
    \n-#include <dune/typetree/traversal.hh>
    \n-#include <dune/typetree/visitor.hh>
    \n+
    #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+Classes

    class  Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize >
     Base class for type-erased interface wrapper. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

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

    \n-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,46 +1,27 @@\n dune-functions\u00a02.9.0\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 <_\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/_\bs_\bi_\bz_\be_\bi_\bn_\bf_\bo_\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-#include \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+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:_\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-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/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: interpolate.hh Source File\n+dune-functions: typeerasure.hh Source File\n \n \n \n \n \n \n \n@@ -70,296 +70,173 @@\n
    \n \n \n \n \n \n \n
    \n-
    interpolate.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n
    5
    \n-
    6#include <memory>
    \n-
    7#include <vector>
    \n-
    8
    \n-
    9#include <dune/common/exceptions.hh>
    \n-
    10#include <dune/common/bitsetvector.hh>
    \n-
    11
    \n-
    12#include <dune/typetree/childextraction.hh>
    \n+
    6#include <typeinfo>
    \n+
    7
    \n+
    8#include <dune/common/typeutilities.hh>
    \n+
    9
    \n+\n+\n+\n
    13
    \n-\n-\n-
    16
    \n-\n-\n-\n-\n-\n-
    22
    \n-
    23#include <dune/typetree/traversal.hh>
    \n-
    24#include <dune/typetree/visitor.hh>
    \n-
    25
    \n-
    26namespace Dune {
    \n-
    27namespace Functions {
    \n-
    28
    \n-
    29namespace Imp {
    \n-
    30
    \n-
    31struct AllTrueBitSetVector
    \n-
    32{
    \n-
    33 struct AllTrueBitSet
    \n-
    34 {
    \n-
    35 bool test(int) const { return true; }
    \n-
    36 } allTrue_;
    \n-
    37
    \n-
    38 operator bool() const
    \n-
    39 {
    \n-
    40 return true;
    \n-
    41 }
    \n+
    14namespace Dune {
    \n+
    15namespace Functions {
    \n+
    16namespace Imp {
    \n+
    17
    \n+
    18
    \n+
    19
    \n+
    33template<class Interface>
    \n+
    34class TypeErasureWrapperInterface :
    \n+
    35 public Interface,
    \n+
    36 public PolymorphicType<TypeErasureWrapperInterface<Interface>>
    \n+
    37{
    \n+
    38public:
    \n+
    39 virtual const std::type_info& target_type() const = 0;
    \n+
    40};
    \n+
    41
    \n
    42
    \n-
    43 template<class I>
    \n-
    44 const AllTrueBitSetVector& operator[](const I&) const
    \n-
    45 {
    \n-
    46 return *this;
    \n-
    47 }
    \n-
    48
    \n-
    49 template<class SP>
    \n-
    50 void resize(const SP&) const
    \n-
    51 {}
    \n-
    52
    \n-
    53};
    \n-
    54
    \n-
    55
    \n-
    56
    \n-
    57template <class B, class T, class NTRE, class HV, class LF, class HBV>
    \n-
    58class LocalInterpolateVisitor
    \n-
    59 : public TypeTree::TreeVisitor
    \n-
    60 , public TypeTree::DynamicTraversal
    \n-
    61{
    \n-
    62
    \n-
    63public:
    \n-
    64
    \n-
    65 using Basis = B;
    \n-
    66 using LocalView = typename B::LocalView;
    \n-
    67 using MultiIndex = typename LocalView::MultiIndex;
    \n-
    68
    \n-
    69 using LocalFunction = LF;
    \n-
    70
    \n-
    71 using Tree = T;
    \n-
    72
    \n-
    73 using VectorBackend = HV;
    \n-
    74 using BitVectorBackend = HBV;
    \n+
    43
    \n+
    60template<class Interface, class T>
    \n+
    61class TypeErasureWrapperBase :
    \n+
    62 public TypeErasureWrapperInterface<Interface>
    \n+
    63{
    \n+
    64public:
    \n+
    65 template<class TT, disableCopyMove<TypeErasureWrapperBase, TT> = 0>
    \n+
    66 TypeErasureWrapperBase(TT&& t) :
    \n+
    67 wrapped_(std::forward<TT>(t))
    \n+
    68 {}
    \n+
    69
    \n+
    71 T& get()
    \n+
    72 {
    \n+
    73 return wrapped_;
    \n+
    74 }
    \n
    75
    \n-
    76 using NodeToRangeEntry = NTRE;
    \n-
    77
    \n-
    78 using GridView = typename Basis::GridView;
    \n-
    79 using Element = typename GridView::template Codim<0>::Entity;
    \n-
    80
    \n-
    81 using LocalDomain = typename Element::Geometry::LocalCoordinate;
    \n-
    82
    \n-
    83 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;
    \n-
    84
    \n-
    85 LocalInterpolateVisitor(const B& /*basis*/, HV& coeff, const HBV& bitVector, const LF& localF, const LocalView& localView, const NodeToRangeEntry& nodeToRangeEntry) :
    \n-
    86 vector_(coeff),
    \n-
    87 localF_(localF),
    \n-
    88 bitVector_(bitVector),
    \n-
    89 localView_(localView),
    \n-
    90 nodeToRangeEntry_(nodeToRangeEntry)
    \n-
    91 {
    \n-
    92 static_assert(Dune::Functions::Concept::isCallable<LocalFunction, LocalDomain>(), "Function passed to LocalInterpolateVisitor does not model the Callable<LocalCoordinate> concept");
    \n-
    93 }
    \n-
    94
    \n-
    95 template<typename Node, typename TreePath>
    \n-
    96 void pre(Node&, TreePath)
    \n-
    97 {}
    \n-
    98
    \n-
    99 template<typename Node, typename TreePath>
    \n-
    100 void post(Node&, TreePath)
    \n-
    101 {}
    \n-
    102
    \n-
    103 template<typename Node, typename TreePath>
    \n-
    104 void leaf(Node& node, TreePath treePath)
    \n-
    105 {
    \n-
    106 using FiniteElement = typename Node::FiniteElement;
    \n-
    107 using FiniteElementRange = typename FiniteElement::Traits::LocalBasisType::Traits::RangeType;
    \n-
    108 using FiniteElementRangeField = typename FiniteElement::Traits::LocalBasisType::Traits::RangeFieldType;
    \n-
    109
    \n-
    110 auto interpolationCoefficients = std::vector<FiniteElementRangeField>();
    \n-
    111 auto&& fe = node.finiteElement();
    \n-
    112
    \n-
    113 // backward compatibility: for scalar basis functions and possibly vector valued coefficients
    \n-
    114 // (like used in dune-fufem for power bases) loop over the components
    \n-
    115 // of the coefficients
    \n-
    116 if constexpr ( FiniteElement::Traits::LocalBasisType::Traits::dimRange == 1 )
    \n-
    117 {
    \n-
    118 // Note that we capture j by reference. Hence we can switch
    \n-
    119 // the selected component later on by modifying j. Maybe we
    \n-
    120 // should avoid this naughty statefull lambda hack in favor
    \n-
    121 // of a separate helper class.
    \n-
    122 std::size_t j=0;
    \n-
    123 auto localFj = [&](const LocalDomain& x){
    \n-
    124 const auto& y = localF_(x);
    \n-
    125 return FiniteElementRange(flatVectorView(nodeToRangeEntry_(node, treePath, y))[j]);
    \n-
    126 };
    \n-
    127
    \n-
    128 // We loop over j defined above and thus over the components of the
    \n-
    129 // range type of localF_.
    \n-
    130
    \n-
    131 auto blockSize = flatVectorView(vector_[localView_.index(0)]).size();
    \n-
    132
    \n-
    133 for(j=0; j<blockSize; ++j)
    \n-
    134 {
    \n-
    135 fe.localInterpolation().interpolate(localFj, interpolationCoefficients);
    \n-
    136 for (size_t i=0; i<fe.localBasis().size(); ++i)
    \n-
    137 {
    \n-
    138 auto multiIndex = localView_.index(node.localIndex(i));
    \n-
    139 auto bitVectorBlock = flatVectorView(bitVector_[multiIndex]);
    \n-
    140 if (bitVectorBlock[j])
    \n-
    141 {
    \n-
    142 auto vectorBlock = flatVectorView(vector_[multiIndex]);
    \n-
    143 vectorBlock[j] = interpolationCoefficients[i];
    \n-
    144 }
    \n-
    145 }
    \n-
    146 }
    \n-
    147 }
    \n-
    148 else // ( FiniteElement::Traits::LocalBasisType::Traits::dimRange != 1 )
    \n-
    149 {
    \n-
    150 // for all other finite elements: use the FiniteElementRange directly for the interpolation
    \n-
    151 auto localF = [&](const LocalDomain& x){
    \n-
    152 const auto& y = localF_(x);
    \n-
    153 return FiniteElementRange(nodeToRangeEntry_(node, treePath, y));
    \n-
    154 };
    \n-
    155
    \n-
    156 fe.localInterpolation().interpolate(localF, interpolationCoefficients);
    \n-
    157 for (size_t i=0; i<fe.localBasis().size(); ++i)
    \n-
    158 {
    \n-
    159 auto multiIndex = localView_.index(node.localIndex(i));
    \n-
    160 if ( bitVector_[multiIndex] )
    \n-
    161 {
    \n-
    162 vector_[multiIndex] = interpolationCoefficients[i];
    \n-
    163 }
    \n-
    164 }
    \n-
    165 }
    \n-
    166 }
    \n+
    77 const T& get() const
    \n+
    78 {
    \n+
    79 return wrapped_;
    \n+
    80 }
    \n+
    81
    \n+
    82protected:
    \n+
    83 using Wrapped = T;
    \n+
    84 Wrapped wrapped_;
    \n+
    85};
    \n+
    86
    \n+
    87
    \n+
    88
    \n+
    112template<class Interface, template<class> class Implementation, class T>
    \n+
    113class TypeErasureWrapperImplementation :
    \n+
    114 public Implementation<TypeErasureWrapperBase<Interface, T> >
    \n+
    115{
    \n+
    116public:
    \n+
    117
    \n+
    119 template<class TT, disableCopyMove<TypeErasureWrapperImplementation, T> = 0>
    \n+
    120 TypeErasureWrapperImplementation(TT&& t) :
    \n+
    121 Implementation<TypeErasureWrapperBase<Interface, T> >(std::forward<TT>(t))
    \n+
    122 {}
    \n+
    123
    \n+
    125 virtual TypeErasureWrapperImplementation* clone() const
    \n+
    126 {
    \n+
    127 return new TypeErasureWrapperImplementation(*this);
    \n+
    128 }
    \n+
    129
    \n+
    131 virtual TypeErasureWrapperImplementation* clone(void* buffer) const
    \n+
    132 {
    \n+
    133 return new (buffer) TypeErasureWrapperImplementation(*this);
    \n+
    134 }
    \n+
    135
    \n+
    137 virtual TypeErasureWrapperImplementation* move(void* buffer)
    \n+
    138 {
    \n+
    139 return new (buffer) TypeErasureWrapperImplementation(std::move(*this));
    \n+
    140 }
    \n+
    141
    \n+
    143 virtual const std::type_info& target_type() const
    \n+
    144 {
    \n+
    145 return typeid(T);
    \n+
    146 }
    \n+
    147};
    \n+
    148
    \n+
    149} // namespace Dune::Functions::Imp
    \n+
    150
    \n+
    151
    \n+
    152
    \n+
    163template<class Interface, template<class> class Implementation, size_t bufferSize = 56>
    \n+
    \n+\n+
    165{
    \n+
    166public:
    \n
    167
    \n-
    168
    \n-
    169protected:
    \n-
    170
    \n-
    171 VectorBackend& vector_;
    \n-
    172 const LocalFunction& localF_;
    \n-
    173 const BitVectorBackend& bitVector_;
    \n-
    174 const LocalView& localView_;
    \n-
    175 const NodeToRangeEntry& nodeToRangeEntry_;
    \n-
    176};
    \n-
    177
    \n-
    178
    \n-
    179} // namespace Imp
    \n-
    180
    \n-
    181
    \n+
    169 template<class T, disableCopyMove<TypeErasureBase, T> = 0 >
    \n+
    \n+\n+
    171 wrapped_(Imp::TypeErasureWrapperImplementation<Interface, Implementation, typename std::decay<T>::type>(std::forward<T>(t)))
    \n+
    172 {}
    \n+
    \n+
    173
    \n+
    175 TypeErasureBase() = default;
    \n+
    176
    \n+
    \n+
    178 Interface& asInterface()
    \n+
    179 {
    \n+
    180 return wrapped_.get();
    \n+
    181 }
    \n+
    \n
    182
    \n-
    183
    \n-
    201template <class B, class C, class F, class BV, class NTRE>
    \n-
    \n-
    202void interpolate(const B& basis, C&& coeff, const F& f, const BV& bv, const NTRE& nodeToRangeEntry)
    \n-
    203{
    \n-
    204 using GridView = typename B::GridView;
    \n-
    205 using Element = typename GridView::template Codim<0>::Entity;
    \n-
    206
    \n-
    207 using Tree = typename B::LocalView::Tree;
    \n-
    208
    \n-
    209 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;
    \n-
    210
    \n-
    211 static_assert(Dune::Functions::Concept::isCallable<F, GlobalDomain>(), "Function passed to interpolate does not model the Callable<GlobalCoordinate> concept");
    \n-
    212
    \n-
    213 auto&& gridView = basis.gridView();
    \n-
    214
    \n-
    215 // Small helper functions to wrap vectors using istlVectorBackend
    \n-
    216 // if they do not already satisfy the VectorBackend interface.
    \n-
    217 auto toVectorBackend = [&](auto& v) -> decltype(auto) {
    \n-
    218 if constexpr (models<Concept::VectorBackend<B>, decltype(v)>()) {
    \n-
    219 return v;
    \n-
    220 } else {
    \n-
    221 return istlVectorBackend(v);
    \n-
    222 }
    \n-
    223 };
    \n-
    224
    \n-
    225 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {
    \n-
    226 if constexpr (models<Concept::ConstVectorBackend<B>, decltype(v)>()) {
    \n-
    227 return v;
    \n-
    228 } else {
    \n-
    229 return istlVectorBackend(v);
    \n-
    230 }
    \n-
    231 };
    \n-
    232
    \n-
    233 auto&& bitVector = toConstVectorBackend(bv);
    \n-
    234 auto&& vector = toVectorBackend(coeff);
    \n-
    235 vector.resize(sizeInfo(basis));
    \n-
    236
    \n-
    237
    \n-
    238
    \n-
    239 // Make a grid function supporting local evaluation out of f
    \n-
    240 auto gf = makeGridViewFunction(f, gridView);
    \n-
    241
    \n-
    242 // Obtain a local view of f
    \n-
    243 auto localF = localFunction(gf);
    \n-
    244
    \n-
    245 auto localView = basis.localView();
    \n-
    246
    \n-
    247 for (const auto& e : elements(gridView))
    \n-
    248 {
    \n-
    249 localView.bind(e);
    \n-
    250 localF.bind(e);
    \n-
    251
    \n-
    252 Imp::LocalInterpolateVisitor<B, Tree, NTRE, decltype(vector), decltype(localF), decltype(bitVector)> localInterpolateVisitor(basis, vector, bitVector, localF, localView, nodeToRangeEntry);
    \n-
    253 TypeTree::applyToTree(localView.tree(),localInterpolateVisitor);
    \n-
    254 }
    \n-
    255}
    \n-
    \n-
    256
    \n-
    273template <class B, class C, class F, class BV>
    \n-
    \n-
    274void interpolate(const B& basis, C&& coeff, const F& f, const BV& bitVector)
    \n-
    275{
    \n-
    276 interpolate(basis, coeff, f, bitVector, HierarchicNodeToRangeMap());
    \n-
    277}
    \n-
    \n-
    278
    \n-
    293template <class B, class C, class F>
    \n-
    \n-
    294void interpolate(const B& basis, C&& coeff, const F& f)
    \n-
    295{
    \n-
    296 interpolate (basis, coeff, f, Imp::AllTrueBitSetVector(), HierarchicNodeToRangeMap());
    \n-
    297}
    \n-
    \n-
    298
    \n-
    299} // namespace Functions
    \n-
    300} // namespace Dune
    \n-
    301
    \n-
    302#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH
    \n-\n-\n-\n-\n-\n-\n-
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:346
    \n+
    \n+
    184 const Interface& asInterface() const
    \n+
    185 {
    \n+
    186 return wrapped_.get();
    \n+
    187 }
    \n+
    \n+
    188
    \n+
    \n+
    190 const std::type_info& target_type() const
    \n+
    191 {
    \n+
    192 return wrapped_.get().target_type();
    \n+
    193 }
    \n+
    \n+
    194
    \n+
    195protected:
    \n+\n+
    197};
    \n+
    \n+
    198
    \n+
    199
    \n+
    200}} // namespace Dune::Functions
    \n+
    201
    \n+
    202
    \n+
    203
    \n+
    204#endif // DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n+\n+\n+\n
    Definition polynomial.hh:10
    \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:202
    \n-
    std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)
    Construct a function modeling GridViewFunction from function and grid view.
    Definition gridviewfunction.hh:68
    \n-
    SizeInfo< Basis > sizeInfo(const Basis &basis)
    Definition sizeinfo.hh:69
    \n-
    auto flatVectorView(T &t)
    Create flat vector view of passed mutable container.
    Definition flatvectorview.hh:179
    \n-
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:30
    \n-\n+
    A wrapper providing small object optimization with polymorphic types.
    Definition polymorphicsmallobject.hh:45
    \n+
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:165
    \n+
    const std::type_info & target_type() const
    Get type of stored object.
    Definition typeerasure.hh:190
    \n+
    TypeErasureBase(T &&t)
    Construct wrapper from object.
    Definition typeerasure.hh:170
    \n+
    PolymorphicSmallObject< Imp::TypeErasureWrapperInterface< Interface >, bufferSize > wrapped_
    Definition typeerasure.hh:196
    \n+
    TypeErasureBase()=default
    Default constructor.
    \n+
    Interface & asInterface()
    Get mutable reference to wrapped object.
    Definition typeerasure.hh:178
    \n+
    const Interface & asInterface() const
    Get reference to wrapped object.
    Definition typeerasure.hh:184
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,314 +1,179 @@\n dune-functions\u00a02.9.0\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+ * _\bc_\bo_\bm_\bm_\bo_\bn\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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+4#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n 5\n-6#include \n-7#include \n-8\n-9#include \n-10#include \n-11\n-12#include \n+6#include \n+7\n+8#include \n+9\n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n+12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\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 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_\bv_\bi_\be_\bw_\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/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-16\n-17#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-18#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-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/_\bs_\bi_\bz_\be_\bi_\bn_\bf_\bo_\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/_\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-22\n-23#include \n-24#include \n-25\n-26namespace _\bD_\bu_\bn_\be {\n-27namespace Functions {\n-28\n-29namespace Imp {\n-30\n-31struct AllTrueBitSetVector\n-32{\n-33 struct AllTrueBitSet\n-34 {\n-35 bool test(int) const { return true; }\n-36 } allTrue_;\n-37\n-38 operator bool() const\n-39 {\n-40 return true;\n-41 }\n+14namespace _\bD_\bu_\bn_\be {\n+15namespace Functions {\n+16namespace Imp {\n+17\n+18\n+19\n+33template\n+34class TypeErasureWrapperInterface :\n+35 public Interface,\n+36 public PolymorphicType>\n+37{\n+38public:\n+39 virtual const std::type_info& target_type() const = 0;\n+40};\n+41\n 42\n-43 template\n-44 const AllTrueBitSetVector& operator[](const I&) const\n-45 {\n-46 return *this;\n-47 }\n-48\n-49 template\n-50 void resize(const SP&) const\n-51 {}\n-52\n-53};\n-54\n-55\n-56\n-57template \n-58class LocalInterpolateVisitor\n-59 : public TypeTree::TreeVisitor\n-60 , public TypeTree::DynamicTraversal\n-61{\n-62\n-63public:\n-64\n-65 using Basis = B;\n-66 using LocalView = typename B::LocalView;\n-67 using MultiIndex = typename LocalView::MultiIndex;\n-68\n-69 using LocalFunction = LF;\n-70\n-71 using Tree = T;\n-72\n-73 using VectorBackend = HV;\n-74 using BitVectorBackend = HBV;\n+43\n+60template\n+61class TypeErasureWrapperBase :\n+62 public TypeErasureWrapperInterface\n+63{\n+64public:\n+65 template = 0>\n+66 TypeErasureWrapperBase(TT&& t) :\n+67 wrapped_(std::forward(t))\n+68 {}\n+69\n+71 T& get()\n+72 {\n+73 return wrapped_;\n+74 }\n 75\n-76 using NodeToRangeEntry = NTRE;\n-77\n-78 using GridView = typename Basis::GridView;\n-79 using Element = typename GridView::template Codim<0>::Entity;\n-80\n-81 using LocalDomain = typename Element::Geometry::LocalCoordinate;\n-82\n-83 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n-84\n-85 LocalInterpolateVisitor(const B& /*basis*/, HV& coeff, const HBV& bitVector,\n-const LF& localF, const LocalView& localView, const NodeToRangeEntry&\n-nodeToRangeEntry) :\n-86 vector_(coeff),\n-87 localF_(localF),\n-88 bitVector_(bitVector),\n-89 localView_(localView),\n-90 nodeToRangeEntry_(nodeToRangeEntry)\n-91 {\n-92 static_assert(Dune::Functions::Concept::isCallable(), \"Function passed to LocalInterpolateVisitor does not model the\n-Callable concept\");\n-93 }\n-94\n-95 template\n-96 void pre(Node&, TreePath)\n-97 {}\n-98\n-99 template\n-100 void post(Node&, TreePath)\n-101 {}\n-102\n-103 template\n-104 void leaf(Node& node, TreePath treePath)\n-105 {\n-106 using FiniteElement = typename Node::FiniteElement;\n-107 using FiniteElementRange = typename FiniteElement::Traits::LocalBasisType::\n-Traits::RangeType;\n-108 using FiniteElementRangeField = typename FiniteElement::Traits::\n-LocalBasisType::Traits::RangeFieldType;\n-109\n-110 auto interpolationCoefficients = std::vector();\n-111 auto&& fe = node.finiteElement();\n-112\n-113 // backward compatibility: for scalar basis functions and possibly vector\n-valued coefficients\n-114 // (like used in dune-fufem for power bases) loop over the components\n-115 // of the coefficients\n-116 if constexpr ( FiniteElement::Traits::LocalBasisType::Traits::dimRange == 1\n-)\n-117 {\n-118 // Note that we capture j by reference. Hence we can switch\n-119 // the selected component later on by modifying j. Maybe we\n-120 // should avoid this naughty statefull lambda hack in favor\n-121 // of a separate helper class.\n-122 std::size_t j=0;\n-123 auto localFj = [&](const LocalDomain& x){\n-124 const auto& y = localF_(x);\n-125 return FiniteElementRange(_\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(nodeToRangeEntry_(node, treePath,\n-y))[j]);\n-126 };\n-127\n-128 // We loop over j defined above and thus over the components of the\n-129 // range type of localF_.\n-130\n-131 auto blockSize = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(vector_[localView_.index(0)]).size();\n-132\n-133 for(j=0; j class Implementation, class T>\n+113class TypeErasureWrapperImplementation :\n+114 public Implementation >\n+115{\n+116public:\n+117\n+119 template =\n+0>\n+120 TypeErasureWrapperImplementation(TT&& t) :\n+121 Implementation >(std::forward(t))\n+122 {}\n+123\n+125 virtual TypeErasureWrapperImplementation* clone() const\n+126 {\n+127 return new TypeErasureWrapperImplementation(*this);\n+128 }\n+129\n+131 virtual TypeErasureWrapperImplementation* clone(void* buffer) const\n+132 {\n+133 return new (buffer) TypeErasureWrapperImplementation(*this);\n+134 }\n+135\n+137 virtual TypeErasureWrapperImplementation* move(void* buffer)\n+138 {\n+139 return new (buffer) TypeErasureWrapperImplementation(std::move(*this));\n+140 }\n+141\n+143 virtual const std::type_info& target_type() const\n+144 {\n+145 return typeid(T);\n 146 }\n-147 }\n-148 else // ( FiniteElement::Traits::LocalBasisType::Traits::dimRange != 1 )\n-149 {\n-150 // for all other finite elements: use the FiniteElementRange directly for\n-the interpolation\n-151 auto localF = [&](const LocalDomain& x){\n-152 const auto& y = localF_(x);\n-153 return FiniteElementRange(nodeToRangeEntry_(node, treePath, y));\n-154 };\n-155\n-156 fe.localInterpolation().interpolate(localF, interpolationCoefficients);\n-157 for (size_t i=0; i class Implementation, size_t\n+bufferSize = 56>\n+_\b1_\b6_\b4class _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n+165{\n+166public:\n 167\n-168\n-169protected:\n-170\n-171 VectorBackend& vector_;\n-172 const LocalFunction& localF_;\n-173 const BitVectorBackend& bitVector_;\n-174 const LocalView& localView_;\n-175 const NodeToRangeEntry& nodeToRangeEntry_;\n-176};\n-177\n-178\n-179} // namespace Imp\n-180\n-181\n+169 template = 0 >\n+_\b1_\b7_\b0 _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be(T&& t) :\n+171 _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_(Imp::TypeErasureWrapperImplementation::type>(std::forward(t)))\n+172 {}\n+173\n+_\b1_\b7_\b5 _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be() = default;\n+176\n+_\b1_\b7_\b8 Interface& _\ba_\bs_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be()\n+179 {\n+180 return _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_.get();\n+181 }\n 182\n-183\n-201template \n-_\b2_\b0_\b2void _\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-203{\n-204 using GridView = typename B::GridView;\n-205 using Element = typename GridView::template Codim<0>::Entity;\n-206\n-207 using Tree = typename B::LocalView::Tree;\n-208\n-209 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n-210\n-211 static_assert(Dune::Functions::Concept::isCallable(),\n-\"Function passed to interpolate does not model the Callable\n-concept\");\n-212\n-213 auto&& gridView = basis.gridView();\n-214\n-215 // Small helper functions to wrap vectors using istlVectorBackend\n-216 // if they do not already satisfy the VectorBackend interface.\n-217 auto toVectorBackend = [&](auto& v) -> decltype(auto) {\n-218 if constexpr (models, decltype(v)>()) {\n-219 return v;\n-220 } else {\n-221 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n-222 }\n-223 };\n-224\n-225 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {\n-226 if constexpr (models, decltype(v)>()) {\n-227 return v;\n-228 } else {\n-229 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n-230 }\n-231 };\n-232\n-233 auto&& bitVector = toConstVectorBackend(bv);\n-234 auto&& vector = toVectorBackend(coeff);\n-235 vector.resize(_\bs_\bi_\bz_\be_\bI_\bn_\bf_\bo(basis));\n-236\n-237\n-238\n-239 // Make a grid function supporting local evaluation out of f\n-240 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-241\n-242 // Obtain a local view of f\n-243 auto localF = localFunction(gf);\n-244\n-245 auto localView = basis.localView();\n-246\n-247 for (const auto& e : elements(gridView))\n-248 {\n-249 localView.bind(e);\n-250 localF.bind(e);\n-251\n-252 Imp::LocalInterpolateVisitor localInterpolateVisitor(basis, vector,\n-bitVector, localF, localView, nodeToRangeEntry);\n-253 TypeTree::applyToTree(localView.tree(),localInterpolateVisitor);\n-254 }\n-255}\n-256\n-273template \n-_\b2_\b7_\b4void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f, const BV& bitVector)\n-275{\n-276 _\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-277}\n-278\n-293template \n-_\b2_\b9_\b4void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const B& basis, C&& coeff, const F& f)\n-295{\n-296 _\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-297}\n-298\n-299} // namespace Functions\n-300} // namespace Dune\n-301\n-302#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n-_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\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-_\bs_\bi_\bz_\be_\bi_\bn_\bf_\bo_\b._\bh_\bh\n-_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh\n-_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n-_\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:346\n+_\b1_\b8_\b4 const Interface& _\ba_\bs_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be() const\n+185 {\n+186 return _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_.get();\n+187 }\n+188\n+_\b1_\b9_\b0 const std::type_info& _\bt_\ba_\br_\bg_\be_\bt_\b__\bt_\by_\bp_\be() const\n+191 {\n+192 return _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_.get().target_type();\n+193 }\n+194\n+195protected:\n+_\b1_\b9_\b6 _\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+197};\n+198\n+199\n+200}} // namespace Dune::Functions\n+201\n+202\n+203\n+204#endif // DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+_\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+_\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 _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:202\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< F >::type 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:68\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:69\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:179\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:30\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:_\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:45\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:165\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:190\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:170\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:196\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:178\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: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/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: basistags.hh File Reference\n+dune-functions: differentiablefunction_imp.hh File Reference\n \n \n \n \n \n \n \n@@ -65,85 +65,35 @@\n \n \n \n \n \n \n \n
    \n \n-
    basistags.hh File Reference
    \n+Namespaces
    \n+
    differentiablefunction_imp.hh File Reference
    \n \n
    \n-
    #include <type_traits>
    \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-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Classes

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

    \n Namespaces

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

    \n-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).
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,80 +1,20 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-basistags.hh File Reference\n-#include \n+ * _\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-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- 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/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: basistags.hh Source File\n+dune-functions: differentiablefunction_imp.hh Source File\n \n \n \n \n \n \n \n@@ -70,150 +70,120 @@\n
    \n \n \n \n \n \n \n
    \n-
    basistags.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n
    5
    \n-
    6#include <type_traits>
    \n+
    6#include <dune/common/exceptions.hh>
    \n
    7#include <dune/common/concept.hh>
    \n
    8
    \n-
    9namespace Dune {
    \n-
    10namespace Functions {
    \n+\n+
    10
    \n
    11
    \n-
    12 namespace Concept {
    \n-
    13
    \n-
    \n-\n-
    15 {
    \n-
    16 template<typename T>
    \n-
    17 auto require(T&& t) -> decltype(
    \n-
    18 registerIndexMergingStrategy(t)
    \n-
    19 );
    \n-
    20 };
    \n-
    \n-
    21
    \n-
    22 template<typename T>
    \n-
    \n-
    23 static constexpr bool isIndexMergingStrategy()
    \n-
    24 {
    \n-
    25 return models<Concept::IndexMergingStrategy,T>();
    \n-
    26 }
    \n-
    \n+
    12namespace Dune {
    \n+
    13namespace Functions {
    \n+
    14namespace Imp {
    \n+
    15
    \n+
    19struct HasFreeDerivative
    \n+
    20{
    \n+
    21 template<class F>
    \n+
    22 auto require(F&& f) -> decltype(
    \n+
    23 derivative(f)
    \n+
    24 );
    \n+
    25};
    \n+
    26
    \n
    27
    \n-
    28 template<typename T>
    \n-
    \n-
    29 static constexpr bool isIndexMergingStrategy(T&& t)
    \n-
    30 {
    \n-
    31 return models<Concept::IndexMergingStrategy,std::decay_t<T>>();
    \n-
    32 }
    \n-
    \n-
    33
    \n-
    34 } // namespace Concept
    \n-
    35
    \n+
    28
    \n+
    29template<class Dummy, class F,
    \n+
    30 typename std::enable_if<
    \n+
    31 models< HasFreeDerivative, F>() , int>::type = 0>
    \n+
    32auto derivativeIfImplemented(const F& f) -> decltype(derivative(f))
    \n+
    33{
    \n+
    34 return derivative(f);
    \n+
    35}
    \n
    36
    \n-
    \n-
    37namespace BasisFactory {
    \n+
    37
    \n
    38
    \n-\n-
    45
    \n-\n+
    39template<class Dummy, class F,
    \n+
    40 typename std::enable_if<
    \n+
    41 not(models< HasFreeDerivative, F>()) , int>::type = 0>
    \n+
    42Dummy derivativeIfImplemented(const F& f)
    \n+
    43{
    \n+
    44 DUNE_THROW(Dune::NotImplemented, "Derivative not implemented");
    \n+
    45}
    \n+
    46
    \n
    47
    \n-
    \n-\n-\n-
    80 {};
    \n-
    \n+
    48
    \n+
    49template<class Signature, class DerivativeInterface>
    \n+
    50class DifferentiableFunctionWrapperInterface
    \n+
    51{};
    \n+
    52
    \n+
    53// Interface of type erasure wrapper
    \n+
    54//
    \n+
    55// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n+
    56// will be added by the type erasure foundation classes.
    \n+
    57template<class Range, class Domain, class DerivativeInterface>
    \n+
    58class DifferentiableFunctionWrapperInterface<Range(Domain), DerivativeInterface>
    \n+
    59{
    \n+
    60public:
    \n+
    61 virtual Range operator() (const Domain& x) const = 0;
    \n+
    62
    \n+
    63 virtual DerivativeInterface derivative() const = 0;
    \n+
    64};
    \n+
    65
    \n+
    66
    \n+
    67
    \n+
    68template<class Signature, class DerivativeInterface, class B>
    \n+
    69class DifferentiableFunctionWrapperImplementation
    \n+
    70{};
    \n+
    71
    \n+
    72// Implementation of type erasure wrapper
    \n+
    73template<class Range, class Domain, class DerivativeInterface, class B>
    \n+
    74class DifferentiableFunctionWrapperImplementation< Range(Domain), DerivativeInterface, B> :
    \n+
    75 public B
    \n+
    76{
    \n+
    77public:
    \n+
    78
    \n+
    79 using B::B;
    \n+
    80 using Wrapped = typename B::Wrapped;
    \n
    81
    \n-
    \n-\n-
    113 : public IndexMergingStrategy
    \n-
    114 {};
    \n-
    \n-
    115
    \n-
    \n-\n-
    147 : public IndexMergingStrategy
    \n-
    148 {};
    \n-
    \n-
    149
    \n-\n-
    181
    \n-
    182
    \n-
    \n-\n-
    189 {
    \n-
    190 return {};
    \n-
    191 }
    \n-
    \n-
    192
    \n-
    \n-\n-
    199 {
    \n-
    200 return {};
    \n-
    201 }
    \n-
    \n-
    202
    \n-
    \n-\n-
    209 {
    \n-
    210 return {};
    \n-
    211 }
    \n-
    \n-
    212
    \n-
    \n-\n-
    219 {
    \n-
    220 return {};
    \n-
    221 }
    \n-
    \n-
    222
    \n-
    223} // end namespace BasisFactory
    \n-
    \n-
    224
    \n-
    225// Backward compatibility
    \n-
    \n-
    226namespace BasisBuilder {
    \n-
    227
    \n-
    228 using namespace BasisFactory;
    \n-
    229
    \n-
    230}
    \n-
    \n-
    231
    \n-
    232} // end namespace Functions
    \n-
    233} // end namespace Dune
    \n-
    234
    \n-
    235
    \n-
    236#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH
    \n-
    constexpr FlatLexicographic flatLexicographic()
    Creates a lexicographic merging of direct children without blocking.
    Definition basistags.hh:188
    \n-
    constexpr BlockedInterleaved blockedInterleaved()
    Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves c...
    Definition basistags.hh:218
    \n-
    constexpr FlatInterleaved flatInterleaved()
    Creates an interleaved merging of direct children without blocking.
    Definition basistags.hh:198
    \n-
    constexpr BlockedLexicographic blockedLexicographic()
    Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct ...
    Definition basistags.hh:208
    \n+
    82 virtual Range operator() (const Domain& x) const
    \n+
    83 {
    \n+
    84 return this->get()(x);
    \n+
    85 }
    \n+
    86
    \n+
    87 virtual DerivativeInterface derivative() const
    \n+
    88 {
    \n+
    89 return derivativeIfImplemented<DerivativeInterface, Wrapped>(this->get());
    \n+
    90 }
    \n+
    91};
    \n+
    92
    \n+
    93
    \n+
    94
    \n+
    95}}} // namespace Dune::Functions::Imp
    \n+
    96
    \n+
    97
    \n+
    98
    \n+
    99#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n+\n+
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:39
    \n
    Definition polynomial.hh:10
    \n-
    static constexpr bool isIndexMergingStrategy()
    Definition basistags.hh:23
    \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:44
    \n-
    Lexicographic merging of direct children without blocking.
    Definition basistags.hh:80
    \n-
    Interleaved merging of direct children without blocking.
    Definition basistags.hh:114
    \n-
    Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).
    Definition basistags.hh:148
    \n-
    Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...
    Definition basistags.hh:180
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,148 +1,118 @@\n dune-functions\u00a02.9.0\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+ * _\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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n 5\n-6#include \n+6#include \n 7#include \n 8\n-9namespace _\bD_\bu_\bn_\be {\n-10namespace Functions {\n+9#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\n 11\n-12 namespace Concept {\n-13\n-_\b1_\b4 struct _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-15 {\n-16 template\n-_\b1_\b7 auto _\br_\be_\bq_\bu_\bi_\br_\be(T&& t) -> decltype(\n-18 registerIndexMergingStrategy(t)\n-19 );\n-20 };\n-21\n-22 template\n-_\b2_\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()\n-24 {\n-25 return models();\n-26 }\n+12namespace _\bD_\bu_\bn_\be {\n+13namespace Functions {\n+14namespace Imp {\n+15\n+19struct HasFreeDerivative\n+20{\n+21 template\n+22 auto require(F&& f) -> decltype(\n+23 _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f)\n+24 );\n+25};\n+26\n 27\n-28 template\n-_\b2_\b9 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-30 {\n-31 return models>();\n-32 }\n-33\n-34 } // namespace Concept\n-35\n+28\n+29template() , int>::type = 0>\n+32auto derivativeIfImplemented(const F& f) -> decltype(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f))\n+33{\n+34 return _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f);\n+35}\n 36\n-_\b3_\b7namespace BasisFactory {\n+37\n 38\n-_\b4_\b4 struct _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by {};\n-45\n-_\b4_\b6 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+39template()) , int>::type = 0>\n+42Dummy derivativeIfImplemented(const F& f)\n+43{\n+44 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n+45}\n+46\n 47\n-_\b7_\b8 struct _\bF_\bl_\ba_\bt_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-79 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-80 {};\n+48\n+49template\n+50class DifferentiableFunctionWrapperInterface\n+51{};\n+52\n+53// Interface of type erasure wrapper\n+54//\n+55// Notice that the basic interface of polymorphic classes (destructor, clone,\n+...)\n+56// will be added by the type erasure foundation classes.\n+57template\n+58class DifferentiableFunctionWrapperInterface\n+59{\n+60public:\n+61 virtual Range operator() (const Domain& x) const = 0;\n+62\n+63 virtual DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be() const = 0;\n+64};\n+65\n+66\n+67\n+68template\n+69class DifferentiableFunctionWrapperImplementation\n+70{};\n+71\n+72// Implementation of type erasure wrapper\n+73template\n+74class DifferentiableFunctionWrapperImplementation< Range(Domain),\n+DerivativeInterface, B> :\n+75 public B\n+76{\n+77public:\n+78\n+79 using B::B;\n+80 using Wrapped = typename B::Wrapped;\n 81\n-_\b1_\b1_\b2 struct _\bF_\bl_\ba_\bt_\bI_\bn_\bt_\be_\br_\bl_\be_\ba_\bv_\be_\bd\n-113 : public _\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_\b4_\b6 struct _\bB_\bl_\bo_\bc_\bk_\be_\bd_\bL_\be_\bx_\bi_\bc_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc\n-147 : public _\bI_\bn_\bd_\be_\bx_\bM_\be_\br_\bg_\bi_\bn_\bg_\bS_\bt_\br_\ba_\bt_\be_\bg_\by\n-148 {};\n-149\n-_\b1_\b8_\b0 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-181\n-182\n-_\b1_\b8_\b8 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-189 {\n-190 return {};\n-191 }\n-192\n-_\b1_\b9_\b8 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-199 {\n-200 return {};\n-201 }\n-202\n-_\b2_\b0_\b8 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-209 {\n-210 return {};\n-211 }\n-212\n-_\b2_\b1_\b8 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-219 {\n-220 return {};\n-221 }\n-222\n-223} // end namespace BasisFactory\n-224\n-225// Backward compatibility\n-_\b2_\b2_\b6namespace BasisBuilder {\n-227\n-228 using namespace BasisFactory;\n-229\n-230}\n-231\n-232} // end namespace Functions\n-233} // end namespace Dune\n-234\n-235\n-236#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:188\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:218\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:198\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:208\n+82 virtual Range operator() (const Domain& x) const\n+83 {\n+84 return this->get()(x);\n+85 }\n+86\n+87 virtual DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be() const\n+88 {\n+89 return derivativeIfImplemented(this->get());\n+90 }\n+91};\n+92\n+93\n+94\n+95}}} // namespace Dune::Functions::Imp\n+96\n+97\n+98\n+99#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+_\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:39\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:23\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:15\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:44\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:80\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:114\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:148\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:180\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00113.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00113.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: nedelecbasis.hh File Reference\n+dune-functions: reserveddeque.hh File Reference\n \n \n \n \n \n \n \n@@ -65,68 +65,75 @@\n \n \n \n \n \n \n \n
    \n \n-
    nedelecbasis.hh File Reference
    \n+Macros
    \n+
    reserveddeque.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/nodes.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 Classes

    class  Dune::Functions::NedelecPreBasis< GV, Range, kind, order >
     
    class  Dune::Functions::NedelecNode< GV, Range, kind, order >
    class  Dune::Functions::ReservedDeque< T, n >
     A double-ended queue (deque) class with statically reserved memory. 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-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.
     

    \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": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,45 +1,37 @@\n dune-functions\u00a02.9.0\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/_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh>\n+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n+reserveddeque.hh File Reference\n+An stl-compliant double-ended queue which stores everything on the stack.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \n+#include \n _\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:_\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-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+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/a00113_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: nedelecbasis.hh Source File\n+dune-functions: reserveddeque.hh Source File\n \n \n \n \n \n \n \n@@ -70,418 +70,281 @@\n
    \n \n \n \n \n \n \n
    \n-
    nedelecbasis.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n
    5
    \n-
    6#include <array>
    \n-
    7#include <dune/common/exceptions.hh>
    \n-
    8
    \n-
    9#include <dune/grid/common/capabilities.hh>
    \n-
    10#include <dune/grid/common/mcmgmapper.hh>
    \n-
    11
    \n-
    12#include <dune/localfunctions/common/localfiniteelementvariant.hh>
    \n-
    13#include <dune/localfunctions/nedelec.hh>
    \n+
    10#include <algorithm>
    \n+
    11#include <iostream>
    \n+
    12#include <cstddef>
    \n+
    13#include <initializer_list>
    \n
    14
    \n-\n-\n-\n-
    18
    \n-
    19namespace Dune::Functions
    \n-
    20{
    \n-
    21
    \n-
    22namespace Impl
    \n-
    23{
    \n-
    24 template<typename GV, int dim, typename R, std::size_t order>
    \n-
    25 class Nedelec1stKindLocalFiniteElementMap
    \n-
    26 {
    \n-
    27 using D = typename GV::ctype;
    \n-
    28 constexpr static bool hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;
    \n-
    29
    \n-
    30 using CubeFiniteElement = Nedelec1stKindCubeLocalFiniteElement<D,R,dim,order>;
    \n-
    31 using SimplexFiniteElement = Nedelec1stKindSimplexLocalFiniteElement<D,R,dim,order>;
    \n-
    32
    \n-
    33 public:
    \n-
    34
    \n-
    35 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;
    \n-
    36
    \n-
    37 constexpr static unsigned int topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if hasFixedElementType is false
    \n-
    38 constexpr static GeometryType type = GeometryType(topologyId, GV::dimension);
    \n-
    39
    \n-
    40 using FiniteElement = std::conditional_t<hasFixedElementType,
    \n-
    41 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,
    \n-
    42 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;
    \n-
    43
    \n-
    44 static std::size_t numVariants(GeometryType type)
    \n-
    45 {
    \n-
    46 if (order!=1) // I am not sure whether the formula below is correct for all orders.
    \n-
    47 DUNE_THROW(NotImplemented, "Only Nedelec elements of order 1 are implemented!");
    \n-
    48
    \n-
    49 auto numEdges = referenceElement<D,dim>(type).size(dim-1);
    \n-
    50 return power(2,numEdges);
    \n-
    51 }
    \n-
    52
    \n-
    53 Nedelec1stKindLocalFiniteElementMap(const GV& gv)
    \n-
    54 : elementMapper_(gv, mcmgElementLayout()),
    \n-
    55 orientation_(gv.size(0))
    \n-
    56 {
    \n-
    57 // create all variants
    \n-
    58 if constexpr (hasFixedElementType)
    \n-
    59 {
    \n-
    60 variants_.resize(numVariants(type));
    \n-
    61 for (size_t i = 0; i < numVariants(type); i++)
    \n-
    62 variants_[i] = FiniteElement(i);
    \n-
    63 }
    \n-
    64 else
    \n-
    65 {
    \n-
    66 // for mixed grids add offset for cubes
    \n-
    67 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));
    \n-
    68 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)
    \n-
    69 variants_[i] = SimplexFiniteElement(i);
    \n-
    70 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)
    \n-
    71 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);
    \n-
    72 }
    \n-
    73
    \n-
    74
    \n-
    75 // compute orientation for all elements
    \n-
    76 const auto& indexSet = gv.indexSet();
    \n-
    77
    \n-
    78 for(const auto& element : elements(gv))
    \n-
    79 {
    \n-
    80 const auto& refElement = referenceElement(element);
    \n-
    81 auto elementIndex = elementMapper_.index(element);
    \n-
    82 orientation_[elementIndex] = 0;
    \n+
    15#include <dune/common/genericiterator.hh>
    \n+
    16
    \n+
    17#ifdef CHECK_RESERVEDDEQUE
    \n+
    18#define CHECKSIZE(X) assert(X)
    \n+
    19#else
    \n+
    20#define CHECKSIZE(X) {}
    \n+
    21#endif
    \n+
    22
    \n+
    23namespace Dune {
    \n+
    24namespace Functions {
    \n+
    25
    \n+
    43 template<class T, int n>
    \n+
    \n+\n+
    45 {
    \n+
    46 public:
    \n+
    47
    \n+
    51 typedef T value_type;
    \n+
    53 typedef T* pointer;
    \n+
    55 typedef T& reference;
    \n+
    57 typedef const T& const_reference;
    \n+
    59 typedef size_t size_type;
    \n+
    61 typedef std::ptrdiff_t difference_type;
    \n+
    63 typedef Dune::GenericIterator<ReservedDeque, value_type> iterator;
    \n+
    65 typedef Dune::GenericIterator<const ReservedDeque, const value_type> const_iterator;
    \n+
    66
    \n+
    \n+\n+
    73 size_(0),
    \n+
    74 first_(0)
    \n+
    75 {}
    \n+
    \n+
    76
    \n+
    \n+
    77 ReservedDeque(std::initializer_list<T> const &l)
    \n+
    78 {
    \n+
    79 assert(l.size() <= n);// Actually, this is not needed any more!
    \n+
    80 size_ = l.size();
    \n+
    81 std::copy_n(l.begin(), size_, data_);
    \n+
    82 }
    \n+
    \n
    83
    \n-
    84 for (std::size_t i=0; i<element.subEntities(dim-1); i++)
    \n-
    85 {
    \n-
    86 // Local vertex indices within the element
    \n-
    87 auto localV0 = refElement.subEntity(i,dim-1, 0,dim);
    \n-
    88 auto localV1 = refElement.subEntity(i,dim-1, 1,dim);
    \n-
    89
    \n-
    90 // Global vertex indices within the grid
    \n-
    91 auto globalV0 = indexSet.subIndex(element,localV0,dim);
    \n-
    92 auto globalV1 = indexSet.subIndex(element,localV1,dim);
    \n-
    93
    \n-
    94 if ( (localV0<localV1 && globalV0>globalV1) || (localV0>localV1 && globalV0<globalV1) )
    \n-
    95 orientation_[elementIndex] |= (1 << i);
    \n-
    96 }
    \n-
    97 // for mixed grids add offset for cubes
    \n-
    98 if constexpr (!hasFixedElementType)
    \n-
    99 if (element.type().isCube())
    \n-
    100 orientation_[elementIndex] += numVariants(GeometryTypes::simplex(dim));
    \n-
    101 }
    \n-
    102 }
    \n-
    103
    \n-
    104 template<class Element>
    \n-
    105 const auto& find(const Element& element) const
    \n-
    106 {
    \n-
    107 return variants_[orientation_[elementMapper_.index(element)]];
    \n-
    108 }
    \n-
    109
    \n-
    110 private:
    \n-
    111 std::vector<FiniteElement> variants_;
    \n-
    112 const Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;
    \n-
    113 std::vector<unsigned short> orientation_;
    \n-
    114 };
    \n-
    115
    \n-
    116
    \n-
    117} // namespace Impl
    \n-
    118
    \n-
    119
    \n-
    120// *****************************************************************************
    \n-
    121// This is the reusable part of the basis. It contains
    \n-
    122//
    \n-
    123// NedelecPreBasis
    \n-
    124// NedelecNode
    \n-
    125//
    \n-
    126// The pre-basis allows to create the others and is the owner of possible shared
    \n-
    127// state. These components do _not_ depend on the global basis and local view
    \n-
    128// and can be used without a global basis.
    \n-
    129// *****************************************************************************
    \n-
    130
    \n-
    131template<typename GV, typename Range, std::size_t kind, int order>
    \n-
    132class NedelecNode;
    \n-
    133
    \n-
    134template<typename GV, typename Range, std::size_t kind, int order>
    \n-
    \n-\n-
    136{
    \n-
    137 static const int dim = GV::dimension;
    \n-
    138 static_assert(kind==1, "Only the Nedelec basis of the first kind is currently implemented!");
    \n-
    139 using FiniteElementMap = typename Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;
    \n-
    140
    \n-
    141 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper<GV>;
    \n-
    142public:
    \n-
    143
    \n-
    145 using GridView = GV;
    \n-
    146 using size_type = std::size_t;
    \n-
    147
    \n-\n+
    \n+
    89 void clear()
    \n+
    90 {
    \n+
    91 first_ = 0;
    \n+
    92 size_ = 0;
    \n+
    93 }
    \n+
    \n+
    94
    \n+
    \n+
    96 void resize(size_t s)
    \n+
    97 {
    \n+
    98 CHECKSIZE(s<=n);
    \n+
    99 size_ = s;
    \n+
    100 }
    \n+
    \n+
    101
    \n+
    \n+
    103 void push_back(const T& t)
    \n+
    104 {
    \n+
    105 CHECKSIZE(size_<n);
    \n+
    106 data_[size_++ % n] = t;
    \n+
    107 }
    \n+
    \n+
    108
    \n+
    \n+
    110 void push_front(const T& t)
    \n+
    111 {
    \n+
    112 CHECKSIZE(size_<n);
    \n+
    113 ++size_;
    \n+
    114 first_ = (first_+(n-1)) % n;
    \n+
    115 data_[first_] = t;
    \n+
    116 }
    \n+
    \n+
    117
    \n+
    \n+
    119 void pop_back()
    \n+
    120 {
    \n+
    121 if (! empty())
    \n+
    122 size_--;
    \n+
    123 }
    \n+
    \n+
    124
    \n+
    \n+\n+
    127 {
    \n+
    128 if (! empty())
    \n+
    129 {
    \n+
    130 size_--;
    \n+
    131 first_ = (++first_) % n;
    \n+
    132 }
    \n+
    133 }
    \n+
    \n+
    134
    \n+
    \n+\n+
    137 return iterator(*this, 0);
    \n+
    138 }
    \n+
    \n+
    139
    \n+
    \n+\n+
    142 return const_iterator(*this, 0);
    \n+
    143 }
    \n+
    \n+
    144
    \n+
    \n+\n+
    147 return iterator(*this, size_);
    \n+
    148 }
    \n+
    \n
    149
    \n-
    150 static constexpr size_type maxMultiIndexSize = 1;
    \n-
    151 static constexpr size_type minMultiIndexSize = 1;
    \n-
    152 static constexpr size_type multiIndexBufferSize = 1;
    \n-
    153
    \n-
    \n-\n-
    156 gridView_(gv),
    \n-\n-
    158 mapper_(gridView_, mcmgLayout(Dim<1>{}))
    \n-
    159 {
    \n-
    160 if (kind!=1)
    \n-
    161 DUNE_THROW(NotImplemented, "Only Nedelec elements of the first kind are implemented!");
    \n-
    162
    \n-
    163 // There is no inherent reason why the basis shouldn't work for grids with more than two
    \n-
    164 // element types. Somebody simply has to sit down and implement the missing bits.
    \n-
    165 if (gv.indexSet().types(0).size() > 2)
    \n-
    166 DUNE_THROW(NotImplemented, "N\u00e9d\u00e9lec basis is only implemented for grids with simplex and cube elements");
    \n-
    167
    \n-
    168 for(auto type : gv.indexSet().types(0))
    \n-
    169 if (!type.isSimplex() && !type.isCube())
    \n-
    170 DUNE_THROW(NotImplemented, "N\u00e9d\u00e9lec basis is only implemented for grids with simplex or cube elements.");
    \n-
    171
    \n-
    172 if (order>1)
    \n-
    173 DUNE_THROW(NotImplemented, "Only first-order elements are implemented");
    \n-
    174
    \n-
    175 if (dim!=2 && dim!=3)
    \n-
    176 DUNE_THROW(NotImplemented, "Only 2d and 3d N\u00e9d\u00e9lec elements are implemented");
    \n-
    177 }
    \n-
    \n-
    178
    \n-
    \n-\n-
    180 {}
    \n+
    \n+\n+
    152 return const_iterator(*this, size_);
    \n+
    153 }
    \n+
    \n+
    154
    \n+
    \n+\n+
    157 {
    \n+
    158 CHECKSIZE(size_>i);
    \n+
    159 return data_[(first_ + i) % n];
    \n+
    160 }
    \n+
    \n+
    161
    \n+
    \n+\n+
    164 {
    \n+
    165 CHECKSIZE(size_>i);
    \n+
    166 return data_[(first_ + i) % n];
    \n+
    167 }
    \n+
    \n+
    168
    \n+
    \n+\n+
    171 {
    \n+
    172 CHECKSIZE(size_>0);
    \n+
    173 return data_[first_];
    \n+
    174 }
    \n+
    \n+
    175
    \n+
    \n+\n+
    178 {
    \n+
    179 CHECKSIZE(size_>0);
    \n+
    180 return data_[first_];
    \n+
    181 }
    \n
    \n-
    181
    \n+
    182
    \n
    \n-
    184 const GridView& gridView() const
    \n-
    185 {
    \n-
    186 return gridView_;
    \n-
    187 }
    \n-
    \n-
    188
    \n-
    189 /* \\brief Update the stored grid view, to be called if the grid has changed */
    \n-
    \n-
    190 void update (const GridView& gv)
    \n-
    191 {
    \n-
    192 gridView_ = gv;
    \n-
    193 mapper_.update(gridView_);
    \n-
    194 }
    \n-
    \n-
    195
    \n-
    \n-\n-
    200 {
    \n-
    201 return Node{&finiteElementMap_};
    \n-
    202 }
    \n-
    \n-
    203
    \n-
    \n-\n-
    205 {
    \n-
    206 return mapper_.size();
    \n-
    207 }
    \n-
    \n-
    208
    \n-
    210 template<class SizePrefix>
    \n-
    \n-
    211 size_type size(const SizePrefix& prefix) const
    \n-
    212 {
    \n-
    213 assert(prefix.size() == 0 || prefix.size() == 1);
    \n-
    214 return (prefix.size() == 0) ? size() : 0;
    \n-
    215 }
    \n-
    \n-
    216
    \n-
    \n-\n-
    218 {
    \n-
    219 return size();
    \n-
    220 }
    \n-
    \n-
    221
    \n-
    \n-\n-
    223 {
    \n-
    224 size_type result = 0;
    \n-
    225 for (auto&& type : gridView_.indexSet().types(0))
    \n-
    226 {
    \n-
    227 size_type numEdges = referenceElement<typename GV::ctype,dim>(type).size(dim-1);
    \n-
    228 result = std::max(result, numEdges);
    \n-
    229 }
    \n-
    230
    \n-
    231 return result;
    \n-
    232 }
    \n-
    \n-
    233
    \n-
    237 template<typename It>
    \n-
    \n-
    238 It indices(const Node& node, It it) const
    \n-
    239 {
    \n-
    240 const auto& element = node.element();
    \n-
    241
    \n-
    242 // throw if Element is not of predefined type
    \n-
    243 if (not(element.type().isCube()) and not(element.type().isSimplex()))
    \n-
    244 DUNE_THROW(NotImplemented, "NedelecBasis only implemented for cube and simplex elements.");
    \n+\n+
    185 {
    \n+
    186 CHECKSIZE(size_>0);
    \n+
    187 return data_[(first_ + size_-1) % n];
    \n+
    188 }
    \n+
    \n+
    189
    \n+
    \n+\n+
    192 {
    \n+
    193 CHECKSIZE(size_>0);
    \n+
    194 return data_[(first_ + size_-1) % n];
    \n+
    195 }
    \n+
    \n+
    196
    \n+
    \n+\n+
    203 {
    \n+
    204 return size_;
    \n+
    205 }
    \n+
    \n+
    206
    \n+
    \n+
    208 bool empty() const
    \n+
    209 {
    \n+
    210 return size_==0;
    \n+
    211 }
    \n+
    \n+
    212
    \n+
    \n+
    214 static constexpr size_type capacity()
    \n+
    215 {
    \n+
    216 return n;
    \n+
    217 }
    \n+
    \n+
    218
    \n+
    \n+
    220 static constexpr size_type max_size()
    \n+
    221 {
    \n+
    222 return n;
    \n+
    223 }
    \n+
    \n+
    224
    \n+
    \n+
    228 friend std::ostream& operator<< (std::ostream& s, const ReservedDeque& v)
    \n+
    229 {
    \n+
    230 for (size_t i=0; i<v.size(); i++)
    \n+
    231 s << v[i] << " ";
    \n+
    232 return s;
    \n+
    233 }
    \n+
    \n+
    234
    \n+
    235 private:
    \n+
    236 T data_[n];
    \n+
    237 size_type first_;
    \n+
    238 size_type size_;
    \n+
    239 };
    \n+
    \n+
    240
    \n+
    241} // end namespace Functions
    \n+
    242} // end namespace Dune
    \n+
    243
    \n+
    244#undef CHECKSIZE
    \n
    245
    \n-
    246 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)
    \n-
    247 {
    \n-
    248 Dune::LocalKey localKey = node.finiteElement().localCoefficients().localKey(i);
    \n-
    249 *it = { mapper_.subIndex(element, localKey.subEntity(), localKey.codim()) + localKey.index() };
    \n-
    250 }
    \n-
    251
    \n-
    252 return it;
    \n-
    253 }
    \n-
    \n-
    254
    \n-
    255protected:
    \n-\n-
    257 FiniteElementMap finiteElementMap_;
    \n-
    258 Mapper mapper_;
    \n-
    259};
    \n-
    \n-
    260
    \n-
    261
    \n-
    262
    \n-
    263template<typename GV, typename Range, size_t kind, int order>
    \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 static_assert(kind==1, "Only Nedelec elements of the first kind are implemented!");
    \n-
    274 using FiniteElementMap = typename Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;
    \n-
    275 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::CovariantPiolaTransformator,
    \n-
    276 typename FiniteElementMap::FiniteElement,
    \n-
    277 Element>;
    \n-
    278
    \n-
    \n-
    279 NedelecNode(const FiniteElementMap* finiteElementMap) :
    \n-
    280 element_(nullptr),
    \n-
    281 finiteElementMap_(finiteElementMap)
    \n-
    282 { }
    \n-
    \n-
    283
    \n-
    \n-
    285 const Element& element() const
    \n-
    286 {
    \n-
    287 return *element_;
    \n-
    288 }
    \n-
    \n-
    289
    \n-
    \n-\n-
    295 {
    \n-
    296 return finiteElement_;
    \n-
    297 }
    \n-
    \n-
    298
    \n-
    \n-
    300 void bind(const Element& e)
    \n-
    301 {
    \n-
    302 element_ = &e;
    \n-
    303 finiteElement_.bind((finiteElementMap_->find(*element_)), e);
    \n-
    304 this->setSize(finiteElement_.size());
    \n-
    305 }
    \n-
    \n-
    306
    \n-
    307protected:
    \n-
    308
    \n-\n-\n-\n-
    312};
    \n-
    \n-
    313
    \n-
    314
    \n-
    315
    \n-
    316namespace BasisFactory {
    \n-
    317
    \n-
    327template<std::size_t kind, std::size_t order, typename Range=double>
    \n-
    \n-\n-
    329{
    \n-
    330 return [](const auto& gridView) {
    \n-
    331 return NedelecPreBasis<std::decay_t<decltype(gridView)>, Range, kind, order>(gridView);
    \n-
    332 };
    \n-
    333}
    \n-
    \n-
    334
    \n-
    335} // end namespace BasisFactory
    \n-
    336
    \n-
    337
    \n-
    338
    \n-
    339// *****************************************************************************
    \n-
    340// This is the actual global basis implementation based on the reusable parts.
    \n-
    341// *****************************************************************************
    \n-
    342
    \n-
    350template<typename GV, std::size_t kind, std::size_t order, typename Range=double>
    \n-\n-
    352
    \n-
    353} // end namespace Dune::Functions
    \n-
    354
    \n-
    355
    \n-
    356#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH
    \n-\n-\n-\n-
    auto nedelec()
    Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.
    Definition nedelecbasis.hh:328
    \n-
    Definition polynomial.hh:11
    \n-
    Global basis for given pre-basis.
    Definition defaultglobalbasis.hh:46
    \n-
    Definition nedelecbasis.hh:266
    \n-
    const FiniteElementMap * finiteElementMap_
    Definition nedelecbasis.hh:311
    \n-
    FiniteElement finiteElement_
    Definition nedelecbasis.hh:309
    \n-
    Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement
    Definition nedelecbasis.hh:277
    \n-
    void bind(const Element &e)
    Bind to element.
    Definition nedelecbasis.hh:300
    \n-
    const Element & element() const
    Return current element, throw if unbound.
    Definition nedelecbasis.hh:285
    \n-
    typename GV::template Codim< 0 >::Entity Element
    Definition nedelecbasis.hh:272
    \n-
    const FiniteElement & finiteElement() const
    Return the LocalFiniteElement for the element we are bound to.
    Definition nedelecbasis.hh:294
    \n-
    NedelecNode(const FiniteElementMap *finiteElementMap)
    Definition nedelecbasis.hh:279
    \n-
    typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order > FiniteElementMap
    Definition nedelecbasis.hh:274
    \n-
    const Element * element_
    Definition nedelecbasis.hh:310
    \n-
    std::size_t size_type
    Definition nedelecbasis.hh:271
    \n-
    Definition nedelecbasis.hh:136
    \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:238
    \n-
    size_type size(const SizePrefix &prefix) const
    Return number possible values for next position in multi index.
    Definition nedelecbasis.hh:211
    \n-
    std::size_t size_type
    Definition nedelecbasis.hh:146
    \n-
    NedelecPreBasis(const GridView &gv)
    Constructor for a given grid view object.
    Definition nedelecbasis.hh:155
    \n-
    GV GridView
    The grid view that the FE space is defined on.
    Definition nedelecbasis.hh:145
    \n-
    size_type dimension() const
    Definition nedelecbasis.hh:217
    \n-
    static constexpr size_type maxMultiIndexSize
    Definition nedelecbasis.hh:150
    \n-
    static constexpr size_type multiIndexBufferSize
    Definition nedelecbasis.hh:152
    \n-
    GridView gridView_
    Definition nedelecbasis.hh:256
    \n-
    FiniteElementMap finiteElementMap_
    Definition nedelecbasis.hh:257
    \n-
    static constexpr size_type minMultiIndexSize
    Definition nedelecbasis.hh:151
    \n-
    void initializeIndices()
    Definition nedelecbasis.hh:179
    \n-
    void update(const GridView &gv)
    Definition nedelecbasis.hh:190
    \n-
    size_type maxNodeSize() const
    Definition nedelecbasis.hh:222
    \n-
    const GridView & gridView() const
    Obtain the grid view that the basis is defined on.
    Definition nedelecbasis.hh:184
    \n-
    Node makeNode() const
    Create tree node.
    Definition nedelecbasis.hh:199
    \n-
    size_type size() const
    Definition nedelecbasis.hh:204
    \n-
    Mapper mapper_
    Definition nedelecbasis.hh:258
    \n-
    size_type size() const
    Definition nodes.hh:142
    \n-
    void setSize(const size_type size)
    Definition nodes.hh:164
    \n-
    Definition nodes.hh:186
    \n+
    246#endif // DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH
    \n+
    #define CHECKSIZE(X)
    Definition reserveddeque.hh:20
    \n+
    Definition polynomial.hh:10
    \n+
    A double-ended queue (deque) class with statically reserved memory.
    Definition reserveddeque.hh:45
    \n+
    void pop_front()
    Erases the first element of the vector, O(1) time.
    Definition reserveddeque.hh:126
    \n+
    static constexpr size_type capacity()
    Returns current capacity (allocated memory) of the vector.
    Definition reserveddeque.hh:214
    \n+
    void clear()
    Erases all elements.
    Definition reserveddeque.hh:89
    \n+
    Dune::GenericIterator< ReservedDeque, value_type > iterator
    Iterator used to iterate through a vector.
    Definition reserveddeque.hh:63
    \n+
    T value_type
    The type of object, T, stored in the vector.
    Definition reserveddeque.hh:51
    \n+
    ReservedDeque()
    Constructor.
    Definition reserveddeque.hh:72
    \n+
    bool empty() const
    Returns true if vector has no elements.
    Definition reserveddeque.hh:208
    \n+
    const_reference back() const
    Returns const reference to last element of vector.
    Definition reserveddeque.hh:191
    \n+
    friend std::ostream & operator<<(std::ostream &s, const ReservedDeque &v)
    Send ReservedDeque to an output stream.
    Definition reserveddeque.hh:228
    \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:110
    \n+
    reference operator[](size_type i)
    Returns reference to the i'th element.
    Definition reserveddeque.hh:156
    \n+
    reference front()
    Returns reference to first element of vector.
    Definition reserveddeque.hh:170
    \n+
    T * pointer
    Pointer to T.
    Definition reserveddeque.hh:53
    \n+
    const_reference front() const
    Returns const reference to first element of vector.
    Definition reserveddeque.hh:177
    \n+
    iterator end()
    Returns an iterator pointing to the end of the vector.
    Definition reserveddeque.hh:146
    \n+
    reference back()
    Returns reference to last element of vector.
    Definition reserveddeque.hh:184
    \n+
    void pop_back()
    Erases the last element of the vector, O(1) time.
    Definition reserveddeque.hh:119
    \n+
    const T & const_reference
    Const reference to T.
    Definition reserveddeque.hh:57
    \n+
    static constexpr size_type max_size()
    Returns the maximum length of the vector.
    Definition reserveddeque.hh:220
    \n+
    std::ptrdiff_t difference_type
    A signed integral type.
    Definition reserveddeque.hh:61
    \n+
    T & reference
    Reference to T.
    Definition reserveddeque.hh:55
    \n+
    Dune::GenericIterator< const ReservedDeque, const value_type > const_iterator
    Const iterator used to iterate through a vector.
    Definition reserveddeque.hh:65
    \n+
    size_type size() const
    Returns number of elements in the vector.
    Definition reserveddeque.hh:202
    \n+
    const_iterator end() const
    Returns a const_iterator pointing to the end of the vector.
    Definition reserveddeque.hh:151
    \n+
    void resize(size_t s)
    Specifies a new size for the vector.
    Definition reserveddeque.hh:96
    \n+
    iterator begin()
    Returns a iterator pointing to the beginning of the vector.
    Definition reserveddeque.hh:136
    \n+
    const_iterator begin() const
    Returns a const_iterator pointing to the beginning of the vector.
    Definition reserveddeque.hh:141
    \n+
    ReservedDeque(std::initializer_list< T > const &l)
    Definition reserveddeque.hh:77
    \n+
    size_t size_type
    An unsigned integral type.
    Definition reserveddeque.hh:59
    \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:103
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \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,496 +1,318 @@\n dune-functions\u00a02.9.0\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+ * _\bc_\bo_\bm_\bm_\bo_\bn\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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n+4#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n 5\n-6#include \n-7#include \n-8\n-9#include \n-10#include \n-11\n-12#include \n-13#include \n+10#include \n+11#include \n+12#include \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/_\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/\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-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-19namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-20{\n-21\n-22namespace Impl\n-23{\n-24 template\n-25 class Nedelec1stKindLocalFiniteElementMap\n-26 {\n-27 using D = typename GV::ctype;\n-28 constexpr static bool hasFixedElementType = Capabilities::\n-hasSingleGeometryType::v;\n-29\n-30 using CubeFiniteElement =\n-Nedelec1stKindCubeLocalFiniteElement;\n-31 using SimplexFiniteElement =\n-Nedelec1stKindSimplexLocalFiniteElement;\n-32\n-33 public:\n-34\n-35 using T = LocalBasisTraits, R, dim,\n-FieldVector, FieldMatrix >;\n-36\n-37 constexpr static unsigned int topologyId = Capabilities::\n-hasSingleGeometryType::topologyId; // meaningless if\n-hasFixedElementType is false\n-38 constexpr static GeometryType type = GeometryType(topologyId, GV::\n-dimension);\n-39\n-40 using FiniteElement = std::conditional_t,\n-42 LocalFiniteElementVariant >;\n-43\n-44 static std::size_t numVariants(GeometryType type)\n+15#include \n+16\n+17#ifdef CHECK_RESERVEDDEQUE\n+18#define CHECKSIZE(X) assert(X)\n+19#else\n+_\b2_\b0#define CHECKSIZE(X) {}\n+21#endif\n+22\n+23namespace _\bD_\bu_\bn_\be {\n+24namespace Functions {\n+25\n+43 template\n+_\b4_\b4 class _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be\n 45 {\n-46 if (order!=1) // I am not sure whether the formula below is correct for all\n-orders.\n-47 DUNE_THROW(NotImplemented, \"Only Nedelec elements of order 1 are\n-implemented!\");\n-48\n-49 auto numEdges = referenceElement(type).size(dim-1);\n-50 return power(2,numEdges);\n-51 }\n-52\n-53 Nedelec1stKindLocalFiniteElementMap(const GV& gv)\n-54 : elementMapper_(gv, mcmgElementLayout()),\n-55 orientation_(gv.size(0))\n-56 {\n-57 // create all variants\n-58 if constexpr (hasFixedElementType)\n-59 {\n-60 variants_.resize(numVariants(type));\n-61 for (size_t i = 0; i < numVariants(type); i++)\n-62 variants_[i] = FiniteElement(i);\n-63 }\n-64 else\n-65 {\n-66 // for mixed grids add offset for cubes\n-67 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n-(GeometryTypes::cube(dim)));\n-68 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n-69 variants_[i] = SimplexFiniteElement(i);\n-70 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n-71 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n-(i);\n-72 }\n-73\n-74\n-75 // compute orientation for all elements\n-76 const auto& indexSet = gv.indexSet();\n-77\n-78 for(const auto& element : elements(gv))\n-79 {\n-80 const auto& refElement = referenceElement(element);\n-81 auto elementIndex = elementMapper_.index(element);\n-82 orientation_[elementIndex] = 0;\n+46 public:\n+47\n+_\b5_\b1 typedef T _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+_\b5_\b3 typedef T* _\bp_\bo_\bi_\bn_\bt_\be_\br;\n+_\b5_\b5 typedef T& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+_\b5_\b7 typedef const T& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+_\b5_\b9 typedef size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n+_\b6_\b1 typedef std::ptrdiff_t _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be;\n+_\b6_\b3 typedef Dune::GenericIterator _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b6_\b5 typedef Dune::GenericIterator\n+_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+66\n+_\b7_\b2 _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be() :\n+73 size_(0),\n+74 first_(0)\n+75 {}\n+76\n+_\b7_\b7 _\bR_\be_\bs_\be_\br_\bv_\be_\bd_\bD_\be_\bq_\bu_\be(std::initializer_list const &l)\n+78 {\n+79 assert(l.size() <= n);// Actually, this is not needed any more!\n+80 size_ = l.size();\n+81 std::copy_n(l.begin(), size_, data_);\n+82 }\n 83\n-84 for (std::size_t i=0; iglobalV1) || (localV0>localV1 &&\n-globalV0\n-105 const auto& find(const Element& element) const\n-106 {\n-107 return variants_[orientation_[elementMapper_.index(element)]];\n-108 }\n-109\n-110 private:\n-111 std::vector variants_;\n-112 const Dune::MultipleCodimMultipleGeomTypeMapper elementMapper_;\n-113 std::vector orientation_;\n-114 };\n-115\n-116\n-117} // namespace Impl\n-118\n-119\n-120/\n-/ *****************************************************************************\n-121// This is the reusable part of the basis. It contains\n-122//\n-123// NedelecPreBasis\n-124// NedelecNode\n-125//\n-126// The pre-basis allows to create the others and is the owner of possible\n-shared\n-127// state. These components do _not_ depend on the global basis and local\n-view\n-128// and can be used without a global basis.\n-129/\n-/ *****************************************************************************\n-130\n-131template\n-132class NedelecNode;\n-133\n-134template\n-_\b1_\b3_\b5class _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs\n-136{\n-137 static const int dim = GV::dimension;\n-138 static_assert(kind==1, \"Only the Nedelec basis of the first kind is\n-currently implemented!\");\n-139 using FiniteElementMap = typename Impl::\n-Nedelec1stKindLocalFiniteElementMap;\n-140\n-141 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper;\n-142public:\n-143\n-_\b1_\b4_\b5 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n-_\b1_\b4_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-147\n-_\b1_\b4_\b8 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+_\b8_\b9 void _\bc_\bl_\be_\ba_\br()\n+90 {\n+91 first_ = 0;\n+92 size_ = 0;\n+93 }\n+94\n+_\b9_\b6 void _\br_\be_\bs_\bi_\bz_\be(size_t s)\n+97 {\n+98 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(s<=n);\n+99 size_ = s;\n+100 }\n+101\n+_\b1_\b0_\b3 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const T& t)\n+104 {\n+105 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_{}))\n-159 {\n-160 if (kind!=1)\n-161 DUNE_THROW(NotImplemented, \"Only Nedelec elements of the first kind are\n-implemented!\");\n-162\n-163 // There is no inherent reason why the basis shouldn't work for grids with\n-more than two\n-164 // element types. Somebody simply has to sit down and implement the missing\n-bits.\n-165 if (gv.indexSet().types(0).size() > 2)\n-166 DUNE_THROW(NotImplemented, \"N\u00c3\u00a9d\u00c3\u00a9lec basis is only implemented for grids\n-with simplex and cube elements\");\n-167\n-168 for(auto type : gv.indexSet().types(0))\n-169 if (!type.isSimplex() && !type.isCube())\n-170 DUNE_THROW(NotImplemented, \"N\u00c3\u00a9d\u00c3\u00a9lec basis is only implemented for grids\n-with simplex or cube elements.\");\n-171\n-172 if (order>1)\n-173 DUNE_THROW(NotImplemented, \"Only first-order elements are implemented\");\n-174\n-175 if (dim!=2 && dim!=3)\n-176 DUNE_THROW(NotImplemented, \"Only 2d and 3d N\u00c3\u00a9d\u00c3\u00a9lec elements are\n-implemented\");\n-177 }\n-178\n-_\b1_\b7_\b9 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bI_\bn_\bd_\bi_\bc_\be_\bs()\n-180 {}\n-181\n-_\b1_\b8_\b4 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+_\b1_\b5_\b1 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const {\n+152 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, size_);\n+153 }\n+154\n+_\b1_\b5_\b6 _\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+157 {\n+158 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>i);\n+159 return data_[(first_ + i) % n];\n+160 }\n+161\n+_\b1_\b6_\b3 _\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+164 {\n+165 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>i);\n+166 return data_[(first_ + i) % n];\n+167 }\n+168\n+_\b1_\b7_\b0 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt()\n+171 {\n+172 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n+173 return data_[first_];\n+174 }\n+175\n+_\b1_\b7_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt() const\n+178 {\n+179 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n+180 return data_[first_];\n+181 }\n+182\n+_\b1_\b8_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk()\n 185 {\n-186 return _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_;\n-187 }\n-188\n-189 /* \\brief Update the stored grid view, to be called if the grid has changed\n-*/\n-_\b1_\b9_\b0 void _\bu_\bp_\bd_\ba_\bt_\be (const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& gv)\n-191 {\n-192 _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_ = gv;\n-193 _\bm_\ba_\bp_\bp_\be_\br_\b_.update(_\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_);\n-194 }\n-195\n-_\b1_\b9_\b9 _\bN_\bo_\bd_\be _\bm_\ba_\bk_\be_\bN_\bo_\bd_\be() const\n-200 {\n-201 return _\bN_\bo_\bd_\be{&_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_};\n-202 }\n-203\n-_\b2_\b0_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-205 {\n-206 return _\bm_\ba_\bp_\bp_\be_\br_\b_.size();\n-207 }\n-208\n-210 template\n-_\b2_\b1_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be(const SizePrefix& prefix) const\n-212 {\n-213 assert(prefix.size() == 0 || prefix.size() == 1);\n-214 return (prefix.size() == 0) ? _\bs_\bi_\bz_\be() : 0;\n-215 }\n-216\n-_\b2_\b1_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn() const\n-218 {\n-219 return _\bs_\bi_\bz_\be();\n-220 }\n-221\n-_\b2_\b2_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\bN_\bo_\bd_\be_\bS_\bi_\bz_\be() const\n-223 {\n-224 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be result = 0;\n-225 for (auto&& type : _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw_\b_.indexSet().types(0))\n-226 {\n-227 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be numEdges = referenceElement(type).size\n-(dim-1);\n-228 result = std::max(result, numEdges);\n-229 }\n-230\n-231 return result;\n-232 }\n-233\n-237 template\n-_\b2_\b3_\b8 It _\bi_\bn_\bd_\bi_\bc_\be_\bs(const _\bN_\bo_\bd_\be& node, It it) const\n-239 {\n-240 const auto& element = node._\be_\bl_\be_\bm_\be_\bn_\bt();\n-241\n-242 // throw if Element is not of predefined type\n-243 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n-244 DUNE_THROW(NotImplemented, \"NedelecBasis only implemented for cube and\n-simplex elements.\");\n+186 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n+187 return data_[(first_ + size_-1) % n];\n+188 }\n+189\n+_\b1_\b9_\b1 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() const\n+192 {\n+193 _\bC_\bH_\bE_\bC_\bK_\bS_\bI_\bZ_\bE(size_>0);\n+194 return data_[(first_ + size_-1) % n];\n+195 }\n+196\n+_\b2_\b0_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be () const\n+203 {\n+204 return size_;\n+205 }\n+206\n+_\b2_\b0_\b8 bool _\be_\bm_\bp_\bt_\by() const\n+209 {\n+210 return size_==0;\n+211 }\n+212\n+_\b2_\b1_\b4 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by()\n+215 {\n+216 return n;\n+217 }\n+218\n+_\b2_\b2_\b0 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be()\n+221 {\n+222 return n;\n+223 }\n+224\n+_\b2_\b2_\b8 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+229 {\n+230 for (size_t i=0; i\n-_\b2_\b6_\b4class _\bN_\be_\bd_\be_\bl_\be_\bc_\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-273 static_assert(kind==1, \"Only Nedelec elements of the first kind are\n-implemented!\");\n-_\b2_\b7_\b4 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp = typename Impl::\n-Nedelec1stKindLocalFiniteElementMap;\n-_\b2_\b7_\b5 using _\bF_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = Impl::GlobalValuedLocalFiniteElement;\n-278\n-_\b2_\b7_\b9 _\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-280 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_(nullptr),\n-281 _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bM_\ba_\bp_\b_(finiteElementMap)\n-282 { }\n-283\n-_\b2_\b8_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\be_\bl_\be_\bm_\be_\bn_\bt() const\n-286 {\n-287 return *_\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-288 }\n-289\n-_\b2_\b9_\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-295 {\n-296 return _\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-297 }\n-298\n-_\b3_\b0_\b0 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e)\n-301 {\n-302 _\be_\bl_\be_\bm_\be_\bn_\bt_\b_ = &e;\n-303 _\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-304 this->_\bs_\be_\bt_\bS_\bi_\bz_\be(_\bf_\bi_\bn_\bi_\bt_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b_.size());\n-305 }\n-306\n-307protected:\n-308\n-_\b3_\b0_\b9 _\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_\b1_\b0 const _\bE_\bl_\be_\bm_\be_\bn_\bt* _\be_\bl_\be_\bm_\be_\bn_\bt_\b_;\n-_\b3_\b1_\b1 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-312};\n-313\n-314\n-315\n-316namespace BasisFactory {\n-317\n-327template\n-_\b3_\b2_\b8auto _\bn_\be_\bd_\be_\bl_\be_\bc()\n-329{\n-330 return [](const auto& gridView) {\n-331 return _\bN_\be_\bd_\be_\bl_\be_\bc_\bP_\br_\be_\bB_\ba_\bs_\bi_\bs, Range, kind,\n-order>(gridView);\n-332 };\n-333}\n-334\n-335} // end namespace BasisFactory\n-336\n-337\n-338\n-339/\n-/ *****************************************************************************\n-340// This is the actual global basis implementation based on the reusable\n-parts.\n-341/\n-/ *****************************************************************************\n-342\n-350template\n-_\b3_\b5_\b1using _\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-352\n-353} // end namespace Dune::Functions\n-354\n-355\n-356#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bg_\bl_\bo_\bb_\ba_\bl_\bb_\ba_\bs_\bi_\bs_\b._\bh_\bh\n-_\bn_\bo_\bd_\be_\bs_\b._\bh_\bh\n-_\bg_\bl_\bo_\bb_\ba_\bl_\bv_\ba_\bl_\bu_\be_\bd_\bl_\bo_\bc_\ba_\bl_\bf_\bi_\bn_\bi_\bt_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\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:328\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:11\n-_\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:46\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: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:_\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:311\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:309\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:277\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: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:_\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:285\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:272\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:294\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:279\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: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_\b_\n-const Element * element_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:310\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:271\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:136\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:238\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\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 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:_\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:146\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:155\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:145\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:217\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_\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 nedelecbasis.hh:150\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_\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 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:_\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:256\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:257\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_\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 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:_\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:179\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:190\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:222\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:184\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:199\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\n+246#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:20\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:45\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:126\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:214\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:89\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: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:_\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:51\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:72\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:208\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:191\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:228\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:65\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nedelecbasis.hh:204\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:258\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:142\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:164\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:186\n+Returns number of elements in the vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn reserveddeque.hh:202\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:151\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:96\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:136\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:141\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:77\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:59\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:103\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: globalvaluedlocalfiniteelement.hh File Reference\n+dune-functions: callable.hh File Reference\n \n \n \n \n \n \n \n@@ -65,42 +65,55 @@\n \n \n \n \n \n \n \n
    \n \n-
    globalvaluedlocalfiniteelement.hh File Reference
    \n+Classes |\n+Namespaces |\n+Functions
    \n+
    callable.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/localfunctions/common/localinterpolation.hh>
    \n+
    #include <memory>
    \n+#include <functional>
    \n+#include <dune/common/function.hh>
    \n+#include <dune/common/shared_ptr.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n+Classes

    class  Dune::Functions::CallableFunctionWrapper< F >
     Wrap a Dune::VirtualFunction into a callable object. 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 >
    CallableFunctionWrapper< F > Dune::Functions::callable (const F &f)
     Create a callable object from some Dune::VirtualFunction.
     
    template<class F >
    CallableFunctionWrapper< F > Dune::Functions::callable (const std::shared_ptr< F > &fp)
     Create a callable object from std::shared_ptr<F>
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,36 @@\n dune-functions\u00a02.9.0\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-#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 | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+callable.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:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bF_\b _\b>\n+\u00a0 Wrap a Dune::VirtualFunction into a callable object. _\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+_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br< F >\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 (const F &f)\n+\u00a0 Create a callable object from some Dune::\n+ VirtualFunction.\n+\u00a0\n+template\n+_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br< F >\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 (const std::shared_ptr<\n+ F > &fp)\n+\u00a0 Create a callable object from std::shared_ptr\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: globalvaluedlocalfiniteelement.hh Source File\n+dune-functions: callable.hh Source File\n \n \n \n \n \n \n \n@@ -70,328 +70,106 @@\n
    \n \n \n \n \n \n \n
    \n-
    globalvaluedlocalfiniteelement.hh
    \n+
    callable.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_CALLABLE_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_CALLABLE_HH
    \n
    5
    \n-
    6#include <array>
    \n-
    7#include <numeric>
    \n+
    6#include <memory>
    \n+
    7#include <functional>
    \n
    8
    \n-
    9#include <dune/common/fmatrix.hh>
    \n-
    10#include <dune/common/fvector.hh>
    \n-
    11#include <dune/common/math.hh>
    \n-
    12#include <dune/common/rangeutilities.hh>
    \n-
    13
    \n-
    14#include <dune/geometry/referenceelements.hh>
    \n+
    9#include <dune/common/function.hh>
    \n+
    10#include <dune/common/shared_ptr.hh>
    \n+
    11
    \n+
    12
    \n+
    13namespace Dune {
    \n+
    14namespace Functions {
    \n
    15
    \n-
    16#include <dune/localfunctions/common/localbasis.hh>
    \n-
    17#include <dune/localfunctions/common/localfiniteelementtraits.hh>
    \n-
    18#include <dune/localfunctions/common/localinterpolation.hh>
    \n-
    19
    \n-
    20namespace Dune::Functions::Impl
    \n-
    21{
    \n-
    22
    \n-
    36 struct ContravariantPiolaTransformator
    \n-
    37 {
    \n-
    42 template<typename Values, typename LocalCoordinate, typename Geometry>
    \n-
    43 static auto apply(Values& values,
    \n-
    44 const LocalCoordinate& xi,
    \n-
    45 const Geometry& geometry)
    \n-
    46 {
    \n-
    47 auto jacobianTransposed = geometry.jacobianTransposed(xi);
    \n-
    48 auto integrationElement = geometry.integrationElement(xi);
    \n-
    49
    \n-
    50 for (auto& value : values)
    \n-
    51 {
    \n-
    52 auto tmp = value;
    \n-
    53 jacobianTransposed.mtv(tmp, value);
    \n-
    54 value /= integrationElement;
    \n-
    55 }
    \n-
    56 }
    \n-
    57
    \n-
    67 template<typename Gradients, typename LocalCoordinate, typename Geometry>
    \n-
    68 static auto applyJacobian(Gradients& gradients,
    \n-
    69 const LocalCoordinate& xi,
    \n-
    70 const Geometry& geometry)
    \n-
    71 {
    \n-
    72 auto jacobianTransposed = geometry.jacobianTransposed(xi);
    \n-
    73 auto integrationElement = geometry.integrationElement(xi);
    \n-
    74 for (auto& gradient : gradients)
    \n-
    75 {
    \n-
    76 auto tmp = gradient;
    \n-
    77 gradient = 0;
    \n-
    78 for (size_t k=0; k<gradient.M(); k++)
    \n-
    79 for (size_t l=0; l<tmp.N(); l++)
    \n-
    80 // Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix
    \n-
    81 for(auto&& [jacobianTransposed_l_j, j] : sparseRange(jacobianTransposed[l]))
    \n-
    82 gradient[j][k] += jacobianTransposed_l_j * tmp[l][k];
    \n-
    83 gradient /= integrationElement;
    \n-
    84 }
    \n-
    85 }
    \n-
    86
    \n-
    94 template<class Function, class LocalCoordinate, class Element>
    \n-
    95 class LocalValuedFunction
    \n-
    96 {
    \n-
    97 const Function& f_;
    \n-
    98 const Element& element_;
    \n-
    99
    \n-
    100 public:
    \n-
    101
    \n-
    102 LocalValuedFunction(const Function& f, const Element& element)
    \n-
    103 : f_(f), element_(element)
    \n-
    104 {}
    \n-
    105
    \n-
    106 auto operator()(const LocalCoordinate& xi) const
    \n-
    107 {
    \n-
    108 auto&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);
    \n-
    109 auto globalValue = f(xi);
    \n+
    16
    \n+
    17
    \n+
    18
    \n+
    36template<class F>
    \n+
    \n+\n+
    38{
    \n+
    39 using Range = typename F::RangeType;
    \n+
    40 using Domain = typename F::DomainType;
    \n+
    41
    \n+
    42 public:
    \n+
    43
    \n+
    \n+\n+
    51 {
    \n+
    52 f_ = Dune::stackobject_to_shared_ptr(f);
    \n+
    53 }
    \n+
    \n+
    54
    \n+
    \n+
    61 CallableFunctionWrapper(const std::shared_ptr<const F>& f) :
    \n+
    62 f_(f)
    \n+
    63 {}
    \n+
    \n+
    64
    \n+
    \n+
    70 Range operator()(const Domain& x) const
    \n+
    71 {
    \n+
    72 Range y;
    \n+
    73 f_->evaluate(x, y);
    \n+
    74 return y;
    \n+
    75 }
    \n+
    \n+
    76
    \n+
    77 private:
    \n+
    78 std::shared_ptr<const F> f_;
    \n+
    79};
    \n+
    \n+
    80
    \n+
    81
    \n+
    82
    \n+
    104template<class F>
    \n+
    \n+\n+
    106{
    \n+\n+
    108}
    \n+
    \n+
    109
    \n
    110
    \n-
    111 // Apply the inverse Piola transform
    \n-
    112 auto jacobianInverseTransposed = element_.geometry().jacobianInverseTransposed(xi);
    \n-
    113 auto integrationElement = element_.geometry().integrationElement(xi);
    \n-
    114
    \n-
    115 auto localValue = globalValue;
    \n-
    116 jacobianInverseTransposed.mtv(globalValue, localValue);
    \n-
    117 localValue *= integrationElement;
    \n-
    118
    \n-
    119 return localValue;
    \n-
    120 }
    \n-
    121 };
    \n-
    122 };
    \n-
    123
    \n-
    137 struct CovariantPiolaTransformator
    \n-
    138 {
    \n-
    143 template<typename Values, typename LocalCoordinate, typename Geometry>
    \n-
    144 static auto apply(Values& values,
    \n-
    145 const LocalCoordinate& xi,
    \n-
    146 const Geometry& geometry)
    \n-
    147 {
    \n-
    148 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);
    \n-
    149
    \n-
    150 for (auto& value : values)
    \n-
    151 {
    \n-
    152 auto tmp = value;
    \n-
    153 jacobianInverseTransposed.mv(tmp, value);
    \n-
    154 }
    \n-
    155 }
    \n-
    156
    \n-
    166 template<typename Gradients, typename LocalCoordinate, typename Geometry>
    \n-
    167 static auto applyJacobian(Gradients& gradients,
    \n-
    168 const LocalCoordinate& xi,
    \n-
    169 const Geometry& geometry)
    \n-
    170 {
    \n-
    171 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);
    \n-
    172
    \n-
    173 for (auto& gradient : gradients)
    \n-
    174 {
    \n-
    175 auto tmp = gradient;
    \n-
    176 gradient = 0;
    \n-
    177 for (size_t j=0; j<gradient.N(); j++)
    \n-
    178 for (size_t k=0; k<gradient.M(); k++)
    \n-
    179 // Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix
    \n-
    180 for(auto&& [jacobianInverseTransposed_j_l, l] : sparseRange(jacobianInverseTransposed[j]))
    \n-
    181 gradient[j][k] += jacobianInverseTransposed_j_l * tmp[l][k];
    \n-
    182 }
    \n-
    183 }
    \n-
    184
    \n-
    192 template<class Function, class LocalCoordinate, class Element>
    \n-
    193 class LocalValuedFunction
    \n-
    194 {
    \n-
    195 const Function& f_;
    \n-
    196 const Element& element_;
    \n-
    197
    \n-
    198 public:
    \n-
    199
    \n-
    200 LocalValuedFunction(const Function& f, const Element& element)
    \n-
    201 : f_(f), element_(element)
    \n-
    202 {}
    \n-
    203
    \n-
    204 auto operator()(const LocalCoordinate& xi) const
    \n-
    205 {
    \n-
    206 auto&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);
    \n-
    207 auto globalValue = f(xi);
    \n-
    208
    \n-
    209 // Apply the inverse Piola transform
    \n-
    210 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);
    \n-
    211
    \n-
    212 auto localValue = globalValue;
    \n-
    213 jacobianTransposed.mv(globalValue, localValue);
    \n-
    214
    \n-
    215 return localValue;
    \n-
    216 }
    \n-
    217 };
    \n-
    218 };
    \n-
    219
    \n-
    226 template<class Transformator, class LocalValuedLocalBasis, class Element>
    \n-
    227 class GlobalValuedLocalBasis
    \n-
    228 {
    \n-
    229 public:
    \n-
    230 using Traits = typename LocalValuedLocalBasis::Traits;
    \n-
    231
    \n-
    234 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const Element& element)
    \n-
    235 {
    \n-
    236 localValuedLocalBasis_ = &localValuedLocalBasis;
    \n-
    237 element_ = &element;
    \n-
    238 }
    \n-
    239
    \n-
    242 auto size() const
    \n-
    243 {
    \n-
    244 return localValuedLocalBasis_->size();
    \n-
    245 }
    \n-
    246
    \n-
    248 void evaluateFunction(const typename Traits::DomainType& x,
    \n-
    249 std::vector<typename Traits::RangeType>& out) const
    \n-
    250 {
    \n-
    251 localValuedLocalBasis_->evaluateFunction(x,out);
    \n-
    252
    \n-
    253 Transformator::apply(out, x, element_->geometry());
    \n-
    254 }
    \n-
    255
    \n-
    261 void evaluateJacobian(const typename Traits::DomainType& x,
    \n-
    262 std::vector<typename Traits::JacobianType>& out) const
    \n-
    263 {
    \n-
    264 localValuedLocalBasis_->evaluateJacobian(x,out);
    \n-
    265
    \n-
    266 Transformator::applyJacobian(out, x, element_->geometry());
    \n-
    267 }
    \n-
    268
    \n-
    275 void partial(const std::array<unsigned int,2>& order,
    \n-
    276 const typename Traits::DomainType& x,
    \n-
    277 std::vector<typename Traits::RangeType>& out) const
    \n-
    278 {
    \n-
    279 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
    \n-
    280 if (totalOrder == 0) {
    \n-
    281 evaluateFunction(x, out);
    \n-
    282 } else if (totalOrder == 1) {
    \n-
    283 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
    \n-
    284 out.resize(size());
    \n-
    285
    \n-
    286 // TODO: The following is wasteful: We compute the full Jacobian and then return
    \n-
    287 // only a part of it. While we need the full Jacobian of the underlying local-valued LFE,
    \n-
    288 // it should be possible to compute only a partial Piola transform for the requested
    \n-
    289 // partial derivatives.
    \n-
    290 std::vector<typename Traits::JacobianType> fullJacobian;
    \n-
    291 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);
    \n-
    292
    \n-
    293 Transformator::applyJacobian(fullJacobian, x, element_->geometry());
    \n-
    294
    \n-
    295 for (std::size_t i=0; i<out.size(); i++)
    \n-
    296 for (std::size_t j=0; j<out[i].size(); j++)
    \n-
    297 out[i][j] = fullJacobian[i][j][direction];
    \n-
    298
    \n-
    299 } else
    \n-
    300 DUNE_THROW(NotImplemented, "Partial derivatives of order 2 or higher");
    \n-
    301 }
    \n-
    302
    \n-
    304 auto order() const
    \n-
    305 {
    \n-
    306 return localValuedLocalBasis_->order();
    \n-
    307 }
    \n-
    308
    \n-
    309 const LocalValuedLocalBasis* localValuedLocalBasis_;
    \n-
    310 const Element* element_;
    \n-
    311 };
    \n-
    312
    \n-
    321 template<class Transformator, class LocalValuedLocalInterpolation, class Element>
    \n-
    322 class GlobalValuedLocalInterpolation
    \n-
    323 {
    \n-
    324 public:
    \n-
    327 void bind(const LocalValuedLocalInterpolation& localValuedLocalInterpolation, const Element& element)
    \n-
    328 {
    \n-
    329 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;
    \n-
    330 element_ = &element;
    \n-
    331 }
    \n-
    332
    \n-
    333 template<typename F, typename C>
    \n-
    334 void interpolate (const F& f, std::vector<C>& out) const
    \n-
    335 {
    \n-
    336 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;
    \n-
    337 typename Transformator::template LocalValuedFunction<F,LocalCoordinate,Element> localValuedFunction(f, *element_);
    \n-
    338 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);
    \n-
    339 }
    \n-
    340
    \n-
    341 private:
    \n-
    342 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;
    \n-
    343 const Element* element_;
    \n-
    344 };
    \n-
    345
    \n-
    346
    \n-
    353 template<class Transformator, class LocalValuedLFE, class Element>
    \n-
    354 class GlobalValuedLocalFiniteElement
    \n-
    355 {
    \n-
    356 using LocalBasis = GlobalValuedLocalBasis<Transformator,
    \n-
    357 typename LocalValuedLFE::Traits::LocalBasisType,
    \n-
    358 Element>;
    \n-
    359 using LocalInterpolation = GlobalValuedLocalInterpolation<Transformator,
    \n-
    360 typename LocalValuedLFE::Traits::LocalInterpolationType,
    \n-
    361 Element>;
    \n-
    362
    \n-
    363 public:
    \n-
    366 using Traits = LocalFiniteElementTraits<LocalBasis,
    \n-
    367 typename LocalValuedLFE::Traits::LocalCoefficientsType,
    \n-
    368 LocalInterpolation>;
    \n-
    369
    \n-
    370 GlobalValuedLocalFiniteElement() {}
    \n-
    371
    \n-
    372 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)
    \n-
    373 {
    \n-
    374 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);
    \n-
    375 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(), element);
    \n-
    376 localValuedLFE_ = &localValuedLFE;
    \n-
    377 }
    \n-
    378
    \n-
    381 const typename Traits::LocalBasisType& localBasis() const
    \n-
    382 {
    \n-
    383 return globalValuedLocalBasis_;
    \n-
    384 }
    \n-
    385
    \n-
    388 const typename Traits::LocalCoefficientsType& localCoefficients() const
    \n-
    389 {
    \n-
    390 return localValuedLFE_->localCoefficients();
    \n-
    391 }
    \n-
    392
    \n-
    395 const typename Traits::LocalInterpolationType& localInterpolation() const
    \n-
    396 {
    \n-
    397 return globalValuedLocalInterpolation_;
    \n-
    398 }
    \n-
    399
    \n-
    401 std::size_t size() const
    \n-
    402 {
    \n-
    403 return localValuedLFE_->size();
    \n-
    404 }
    \n-
    405
    \n-
    408 GeometryType type() const
    \n-
    409 {
    \n-
    410 return localValuedLFE_->type();
    \n-
    411 }
    \n-
    412
    \n-
    413 private:
    \n-
    414
    \n-
    415 typename Traits::LocalBasisType globalValuedLocalBasis_;
    \n-
    416 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;
    \n-
    417 const LocalValuedLFE* localValuedLFE_;
    \n-
    418 };
    \n-
    419
    \n-
    420} // namespace Dune::Functions::Impl
    \n-
    421
    \n-
    422#endif // 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:202
    \n+
    136template<class F>
    \n+
    \n+
    137CallableFunctionWrapper<F> callable(const std::shared_ptr<F>& fp)
    \n+
    138{
    \n+\n+
    140}
    \n+
    \n+
    141
    \n+
    142
    \n+
    143
    \n+
    144} // namespace Functions
    \n+
    145} // namespace Dune
    \n+
    146
    \n+
    147#endif //DUNE_FUNCTIONS_COMMON_CALLABLE_HH
    \n+
    CallableFunctionWrapper< F > callable(const F &f)
    Create a callable object from some Dune::VirtualFunction.
    Definition callable.hh:105
    \n+
    Definition polynomial.hh:10
    \n+
    Wrap a Dune::VirtualFunction into a callable object.
    Definition callable.hh:38
    \n+
    Range operator()(const Domain &x) const
    Forward operator() to F::evaluate()
    Definition callable.hh:70
    \n+
    CallableFunctionWrapper(const F &f)
    Instantiate from reference to f.
    Definition callable.hh:50
    \n+
    CallableFunctionWrapper(const std::shared_ptr< const F > &f)
    Instantiate from std::shared_ptr to f.
    Definition callable.hh:61
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,336 +1,99 @@\n dune-functions\u00a02.9.0\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+ * _\bc_\bo_\bm_\bm_\bo_\bn\n+callable.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n+4#define DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n 5\n-6#include \n-7#include \n+6#include \n+7#include \n 8\n-9#include \n-10#include \n-11#include \n-12#include \n-13\n-14#include \n+9#include \n+10#include \n+11\n+12\n+13namespace _\bD_\bu_\bn_\be {\n+14namespace Functions {\n 15\n-16#include \n-17#include \n-18#include \n-19\n-20namespace Dune::Functions::Impl\n-21{\n-22\n-36 struct ContravariantPiolaTransformator\n-37 {\n-42 template\n-43 static auto apply(Values& values,\n-44 const LocalCoordinate& xi,\n-45 const Geometry& geometry)\n-46 {\n-47 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n-48 auto integrationElement = geometry.integrationElement(xi);\n-49\n-50 for (auto& value : values)\n+16\n+17\n+18\n+36template\n+_\b3_\b7class _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n+38{\n+39 using Range = typename F::RangeType;\n+40 using Domain = typename F::DomainType;\n+41\n+42 public:\n+43\n+_\b5_\b0 _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br(const F& f)\n 51 {\n-52 auto tmp = value;\n-53 jacobianTransposed.mtv(tmp, value);\n-54 value /= integrationElement;\n-55 }\n-56 }\n-57\n-67 template\n-68 static auto applyJacobian(Gradients& gradients,\n-69 const LocalCoordinate& xi,\n-70 const Geometry& geometry)\n+52 f_ = Dune::stackobject_to_shared_ptr(f);\n+53 }\n+54\n+_\b6_\b1 _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br(const std::shared_ptr& f) :\n+62 f_(f)\n+63 {}\n+64\n+_\b7_\b0 Range _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Domain& x) const\n 71 {\n-72 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n-73 auto integrationElement = geometry.integrationElement(xi);\n-74 for (auto& gradient : gradients)\n-75 {\n-76 auto tmp = gradient;\n-77 gradient = 0;\n-78 for (size_t k=0; k\n-95 class LocalValuedFunction\n-96 {\n-97 const Function& f_;\n-98 const Element& element_;\n-99\n-100 public:\n-101\n-102 LocalValuedFunction(const Function& f, const Element& element)\n-103 : f_(f), element_(element)\n-104 {}\n-105\n-106 auto operator()(const LocalCoordinate& xi) const\n-107 {\n-108 auto&& f = Dune::Impl::makeFunctionWithCallOperator(f_);\n-109 auto globalValue = f(xi);\n+72 Range y;\n+73 f_->evaluate(x, y);\n+74 return y;\n+75 }\n+76\n+77 private:\n+78 std::shared_ptr f_;\n+79};\n+80\n+81\n+82\n+104template\n+_\b1_\b0_\b5_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bF_\b> _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be(const F& f)\n+106{\n+107 return _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bF_\b>(f);\n+108}\n+109\n 110\n-111 // Apply the inverse Piola transform\n-112 auto jacobianInverseTransposed = element_.geometry\n-().jacobianInverseTransposed(xi);\n-113 auto integrationElement = element_.geometry().integrationElement(xi);\n-114\n-115 auto localValue = globalValue;\n-116 jacobianInverseTransposed.mtv(globalValue, localValue);\n-117 localValue *= integrationElement;\n-118\n-119 return localValue;\n-120 }\n-121 };\n-122 };\n-123\n-137 struct CovariantPiolaTransformator\n-138 {\n-143 template\n-144 static auto apply(Values& values,\n-145 const LocalCoordinate& xi,\n-146 const Geometry& geometry)\n-147 {\n-148 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n-149\n-150 for (auto& value : values)\n-151 {\n-152 auto tmp = value;\n-153 jacobianInverseTransposed.mv(tmp, value);\n-154 }\n-155 }\n-156\n-166 template\n-167 static auto applyJacobian(Gradients& gradients,\n-168 const LocalCoordinate& xi,\n-169 const Geometry& geometry)\n-170 {\n-171 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n-172\n-173 for (auto& gradient : gradients)\n-174 {\n-175 auto tmp = gradient;\n-176 gradient = 0;\n-177 for (size_t j=0; j\n-193 class LocalValuedFunction\n-194 {\n-195 const Function& f_;\n-196 const Element& element_;\n-197\n-198 public:\n-199\n-200 LocalValuedFunction(const Function& f, const Element& element)\n-201 : f_(f), element_(element)\n-202 {}\n-203\n-204 auto operator()(const LocalCoordinate& xi) const\n-205 {\n-206 auto&& f = Dune::Impl::makeFunctionWithCallOperator(f_);\n-207 auto globalValue = f(xi);\n-208\n-209 // Apply the inverse Piola transform\n-210 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);\n-211\n-212 auto localValue = globalValue;\n-213 jacobianTransposed.mv(globalValue, localValue);\n-214\n-215 return localValue;\n-216 }\n-217 };\n-218 };\n-219\n-226 template\n-227 class GlobalValuedLocalBasis\n-228 {\n-229 public:\n-230 using Traits = typename LocalValuedLocalBasis::Traits;\n-231\n-234 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const\n-Element& element)\n-235 {\n-236 localValuedLocalBasis_ = &localValuedLocalBasis;\n-237 element_ = &element;\n-238 }\n-239\n-242 auto size() const\n-243 {\n-244 return localValuedLocalBasis_->size();\n-245 }\n-246\n-248 void evaluateFunction(const typename Traits::DomainType& x,\n-249 std::vector& out) const\n-250 {\n-251 localValuedLocalBasis_->evaluateFunction(x,out);\n-252\n-253 Transformator::apply(out, x, element_->geometry());\n-254 }\n-255\n-261 void evaluateJacobian(const typename Traits::DomainType& x,\n-262 std::vector& out) const\n-263 {\n-264 localValuedLocalBasis_->evaluateJacobian(x,out);\n-265\n-266 Transformator::applyJacobian(out, x, element_->geometry());\n-267 }\n-268\n-275 void partial(const std::array& order,\n-276 const typename Traits::DomainType& x,\n-277 std::vector& out) const\n-278 {\n-279 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);\n-280 if (totalOrder == 0) {\n-281 evaluateFunction(x, out);\n-282 } else if (totalOrder == 1) {\n-283 auto const direction = std::distance(order.begin(), std::find(order.begin\n-(), order.end(), 1));\n-284 out.resize(size());\n-285\n-286 // TODO: The following is wasteful: We compute the full Jacobian and then\n-return\n-287 // only a part of it. While we need the full Jacobian of the underlying\n-local-valued LFE,\n-288 // it should be possible to compute only a partial Piola transform for the\n-requested\n-289 // partial derivatives.\n-290 std::vector fullJacobian;\n-291 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);\n-292\n-293 Transformator::applyJacobian(fullJacobian, x, element_->geometry());\n-294\n-295 for (std::size_t i=0; iorder();\n-307 }\n-308\n-309 const LocalValuedLocalBasis* localValuedLocalBasis_;\n-310 const Element* element_;\n-311 };\n-312\n-321 template\n-322 class GlobalValuedLocalInterpolation\n-323 {\n-324 public:\n-327 void bind(const LocalValuedLocalInterpolation&\n-localValuedLocalInterpolation, const Element& element)\n-328 {\n-329 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;\n-330 element_ = &element;\n-331 }\n-332\n-333 template\n-334 void _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const F& f, std::vector& out) const\n-335 {\n-336 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;\n-337 typename Transformator::template\n-LocalValuedFunction localValuedFunction(f,\n-*element_);\n-338 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);\n-339 }\n-340\n-341 private:\n-342 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;\n-343 const Element* element_;\n-344 };\n-345\n-346\n-353 template\n-354 class GlobalValuedLocalFiniteElement\n-355 {\n-356 using LocalBasis = GlobalValuedLocalBasis;\n-359 using LocalInterpolation = GlobalValuedLocalInterpolation;\n-362\n-363 public:\n-366 using Traits = LocalFiniteElementTraits;\n-369\n-370 GlobalValuedLocalFiniteElement() {}\n-371\n-372 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)\n-373 {\n-374 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);\n-375 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(),\n-element);\n-376 localValuedLFE_ = &localValuedLFE;\n-377 }\n-378\n-381 const typename Traits::LocalBasisType& localBasis() const\n-382 {\n-383 return globalValuedLocalBasis_;\n-384 }\n-385\n-388 const typename Traits::LocalCoefficientsType& localCoefficients() const\n-389 {\n-390 return localValuedLFE_->localCoefficients();\n-391 }\n-392\n-395 const typename Traits::LocalInterpolationType& localInterpolation() const\n-396 {\n-397 return globalValuedLocalInterpolation_;\n-398 }\n-399\n-401 std::size_t size() const\n-402 {\n-403 return localValuedLFE_->size();\n-404 }\n-405\n-408 GeometryType type() const\n-409 {\n-410 return localValuedLFE_->type();\n-411 }\n-412\n-413 private:\n-414\n-415 typename Traits::LocalBasisType globalValuedLocalBasis_;\n-416 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;\n-417 const LocalValuedLFE* localValuedLFE_;\n-418 };\n-419\n-420} // namespace Dune::Functions::Impl\n-421\n-422#endif /\n-/ DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n-_\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:202\n+136template\n+_\b1_\b3_\b7_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bF_\b> _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be(const std::shared_ptr& fp)\n+138{\n+139 return _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bF_\b>(fp);\n+140}\n+141\n+142\n+143\n+144} // namespace Functions\n+145} // namespace Dune\n+146\n+147#endif //DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n+_\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\n+CallableFunctionWrapper< F > callable(const F &f)\n+Create a callable object from some Dune::VirtualFunction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:105\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n+Wrap a Dune::VirtualFunction into a callable object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:38\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_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+Range operator()(const Domain &x) const\n+Forward operator() to F::evaluate()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:70\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_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n+CallableFunctionWrapper(const F &f)\n+Instantiate from reference to f.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:50\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_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n+CallableFunctionWrapper(const std::shared_ptr< const F > &f)\n+Instantiate from std::shared_ptr to f.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:61\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: istlvectorbackend.hh File Reference\n+dune-functions: polymorphicsmallobject.hh File Reference\n \n \n \n \n \n \n \n@@ -65,61 +65,41 @@\n \n \n \n \n \n \n \n
    \n \n-
    istlvectorbackend.hh File Reference
    \n+Classes |\n+Namespaces
    \n+
    polymorphicsmallobject.hh File Reference
    \n \n
    \n-
    #include <cstddef>
    \n-#include <utility>
    \n+
    #include <utility>
    \n #include <type_traits>
    \n-#include <dune/common/std/type_traits.hh>
    \n-#include <dune/common/indices.hh>
    \n-#include <dune/common/hybridutilities.hh>
    \n-#include <dune/common/concept.hh>
    \n-#include <dune/functions/common/indexaccess.hh>
    \n-#include <dune/functions/functionspacebases/concepts.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n+Classes

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

    \n Namespaces

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

    \n-Functions

    template<class V >
    constexpr auto Dune::Functions::fieldTypes ()
     Generate list of field types in container.
     
    template<class V >
    constexpr bool Dune::Functions::hasUniqueFieldType ()
     Check if container has a unique field type.
     
    template<class Vector >
    auto Dune::Functions::istlVectorBackend (Vector &v)
     Return a vector backend wrapping non-const ISTL like containers.
     
    template<class Vector >
    auto Dune::Functions::istlVectorBackend (const Vector &v)
     Return a vector backend wrapping const ISTL like containers.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +1,24 @@\n dune-functions\u00a02.9.0\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+ * _\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-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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-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/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: istlvectorbackend.hh Source File\n+dune-functions: polymorphicsmallobject.hh Source File\n \n \n \n \n \n \n \n@@ -70,347 +70,192 @@\n
    \n \n \n \n \n \n \n
    \n-
    istlvectorbackend.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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n-
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n
    5
    \n-
    6#include <cstddef>
    \n-
    7#include <utility>
    \n-
    8#include <type_traits>
    \n-
    9
    \n-
    10#include <dune/common/std/type_traits.hh>
    \n-
    11#include <dune/common/indices.hh>
    \n-
    12#include <dune/common/hybridutilities.hh>
    \n-
    13#include <dune/common/concept.hh>
    \n-
    14
    \n-\n-\n-
    17
    \n-
    18
    \n-
    19namespace Dune {
    \n-
    20namespace Functions {
    \n-
    21
    \n-
    22namespace Impl {
    \n-
    23
    \n-
    24template<class V,
    \n-
    25 std::enable_if_t<not Dune::models<Imp::Concept::HasStaticIndexAccess, V>() , int> = 0>
    \n-
    26auto fieldTypes(V&& /*v*/)
    \n-
    27{
    \n-
    28 return TypeList<V>{};
    \n-
    29}
    \n-
    30
    \n-
    31template<class V,
    \n-
    32 std::enable_if_t<Dune::models<Imp::Concept::HasStaticIndexAccess, V>(), int> = 0>
    \n-
    33auto fieldTypes(V&& v)
    \n-
    34{
    \n-
    35 if constexpr (Dune::models<Imp::Concept::HasDynamicIndexAccess<std::size_t>, V>())
    \n-
    36 return fieldTypes(v[std::size_t{0}]);
    \n-
    37 else
    \n-
    38 {
    \n-
    39 auto indexRange = typename decltype(range(Hybrid::size(v)))::integer_sequence();
    \n-
    40 return unpackIntegerSequence([&](auto... i) {
    \n-
    41 return uniqueTypeList(std::tuple_cat(fieldTypes(v[i])...));
    \n-
    42 }, indexRange);
    \n-
    43 }
    \n-
    44}
    \n-
    45
    \n-
    46} // namespace Impl
    \n+
    6#include <utility>
    \n+
    7#include <type_traits>
    \n+
    8
    \n+
    9namespace Dune {
    \n+
    10namespace Functions {
    \n+
    11
    \n+
    12
    \n+
    43template<class Base, size_t bufferSize>
    \n+
    \n+\n+
    45{
    \n+
    46public:
    \n
    47
    \n-
    48
    \n-
    49
    \n-
    62template<class V>
    \n-
    \n-
    63constexpr auto fieldTypes()
    \n-
    64{
    \n-
    65 return decltype(Impl::fieldTypes(std::declval<V>())){};
    \n-
    66}
    \n-
    \n-
    67
    \n-
    73template<class V>
    \n-
    \n-
    74constexpr bool hasUniqueFieldType()
    \n-
    75{
    \n-
    76 return std::tuple_size<std::decay_t<decltype(fieldTypes<V>())>>::value==1;
    \n-
    77}
    \n-
    \n-
    78
    \n-
    79
    \n-
    80
    \n-
    81namespace Impl {
    \n-
    82
    \n-
    83/*
    \n-
    84 * \\brief A wrapper providing multi-index access to vector entries
    \n-
    85 *
    \n-
    86 * The wrapped vector type should be an istl like random
    \n-
    87 * access container providing operator[] and size() methods.
    \n-
    88 * For classical containers this should support indices
    \n-
    89 * of type std::size_t. For multi-type containers indices
    \n-
    90 * of the form Dune::index_constant<i> should be supported
    \n-
    91 * while size() should be a static constexpr method.
    \n-
    92 *
    \n-
    93 * When resolving multi-indices the backend appends indices
    \n-
    94 * using operator[] as long as the result is not a scalar.
    \n-
    95 * If this exhausts the digits of the multi-index, additional
    \n-
    96 * zero`s are appended.
    \n-
    97 *
    \n-
    98 * \\tparam V Type of the raw wrapper vector
    \n-
    99 */
    \n-
    100template<class V>
    \n-
    101class ISTLVectorBackend
    \n-
    102{
    \n-
    103
    \n-
    104 // Template aliases for using detection idiom.
    \n-
    105 template<class C>
    \n-
    106 using dynamicIndexAccess_t = decltype(std::declval<C>()[0]);
    \n-
    107
    \n-
    108 template<class C>
    \n-
    109 using staticIndexAccess_t = decltype(std::declval<C>()[Dune::Indices::_0]);
    \n-
    110
    \n-
    111 template<class C>
    \n-
    112 using resizeMethod_t = decltype(std::declval<C>().resize(0));
    \n-
    113
    \n+
    \n+\n+
    50 p_(nullptr)
    \n+
    51 {}
    \n+
    \n+
    52
    \n+
    59 template<class Derived,
    \n+
    60 typename std::enable_if<std::is_base_of<Base, std::remove_cv_t<
    \n+
    61 std::remove_reference_t<Derived>>>::value, int>::type = 0>
    \n+
    \n+
    62 PolymorphicSmallObject(Derived&& derived)
    \n+
    63 {
    \n+
    64 constexpr bool useBuffer = sizeof(Derived) <= bufferSize;
    \n+
    65 if constexpr (useBuffer) {
    \n+
    66 p_ = new (&buffer_) Derived(std::forward<Derived>(derived));
    \n+
    67 } else {
    \n+
    68 p_ = new Derived(std::forward<Derived>(derived));
    \n+
    69 }
    \n+
    70 }
    \n+
    \n+
    71
    \n+
    \n+\n+
    74 {
    \n+
    75 moveToWrappedObject(std::move(other));
    \n+
    76 }
    \n+
    \n+
    77
    \n+
    \n+\n+
    80 {
    \n+
    81 copyToWrappedObject(other);
    \n+
    82 }
    \n+
    \n+
    83
    \n+
    \n+\n+
    86 {
    \n+
    87 destroyWrappedObject();
    \n+
    88 }
    \n+
    \n+
    89
    \n+
    \n+\n+
    92 {
    \n+
    93 if (&other!=this)
    \n+
    94 {
    \n+
    95 destroyWrappedObject();
    \n+
    96 copyToWrappedObject(other);
    \n+
    97 }
    \n+
    98 return *this;
    \n+
    99 }
    \n+
    \n+
    100
    \n+
    \n+\n+
    103 {
    \n+
    104 destroyWrappedObject();
    \n+
    105 moveToWrappedObject(std::move(other));
    \n+
    106 return *this;
    \n+
    107 }
    \n+
    \n+
    108
    \n+
    \n+
    110 explicit operator bool() const
    \n+
    111 {
    \n+
    112 return p_;
    \n+
    113 }
    \n+
    \n
    114
    \n-
    115
    \n-
    116 // Short cuts for feature detection
    \n-
    117 template<class C>
    \n-
    118 using hasDynamicIndexAccess = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;
    \n-
    119
    \n-
    120 template<class C>
    \n-
    121 using hasStaticIndexAccess = Dune::Std::is_detected<staticIndexAccess_t, std::remove_reference_t<C>>;
    \n-
    122
    \n-
    123 template<class C>
    \n-
    124 using hasResizeMethod = Dune::Std::is_detected<resizeMethod_t, std::remove_reference_t<C>>;
    \n-
    125
    \n-
    126 template<class C>
    \n-
    127 using isDynamicVector = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;
    \n-
    128
    \n-
    129 template<class C>
    \n-
    130 using isStaticVector = Dune::Std::bool_constant<
    \n-
    131 Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>
    \n-
    132 and not Dune::Std::is_detected_v<dynamicIndexAccess_t, std::remove_reference_t<C>>>;
    \n-
    133
    \n-
    134 template<class C>
    \n-
    135 using isScalar = Dune::Std::bool_constant<not Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;
    \n-
    136
    \n-
    137 template<class C>
    \n-
    138 using isVector = Dune::Std::bool_constant<Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;
    \n-
    139
    \n-
    140
    \n-
    141
    \n-
    142 template<class... Args>
    \n-
    143 static void forwardToResize(Args&&... args)
    \n-
    144 {
    \n-
    145 resize(std::forward<Args>(args)...);
    \n-
    146 }
    \n-
    147
    \n-
    148
    \n-
    149 template<class C, class SizeProvider,
    \n-
    150 std::enable_if_t<hasResizeMethod<C>::value, int> = 0>
    \n-
    151 static void resize(C&& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    152 {
    \n-
    153 auto size = sizeProvider.size(prefix);
    \n-
    154 if (size==0)
    \n-
    155 {
    \n-
    156 // If size==0 this prefix refers to a single coefficient c.
    \n-
    157 // But being in this overload means that c is not a scalar
    \n-
    158 // because is has a resize() method. Since operator[] deliberately
    \n-
    159 // supports implicit padding of multi-indices by as many
    \n-
    160 // [0]'s as needed to resolve a scalar entry, we should also
    \n-
    161 // except a non-scalar c here. However, this requires that
    \n-
    162 // we silently believe that whatever size c already has is
    \n-
    163 // intended by the user. The only exception is c.size()==0
    \n-
    164 // which is not acceptable but we also cannot know the desired size.
    \n-
    165 if (c.size()==0)
    \n-
    166 DUNE_THROW(RangeError, "The vector entry v[" << prefix << "] should refer to a "
    \n-
    167 << "scalar coefficient, but is a dynamically sized vector of size==0");
    \n-
    168 else
    \n-
    169 // Accept non-zero sized coefficients to avoid that resize(basis)
    \n-
    170 // fails for a vector that works with operator[] and already
    \n-
    171 // has the appropriate size.
    \n-
    172 return;
    \n-
    173 }
    \n-
    174 c.resize(size);
    \n-
    175 prefix.push_back(0);
    \n-
    176 for(std::size_t i=0; i<size; ++i)
    \n-
    177 {
    \n-
    178 prefix.back() = i;
    \n-
    179 resize(c[i], sizeProvider, prefix);
    \n-
    180 }
    \n-
    181 }
    \n-
    182
    \n-
    183 template<class C, class SizeProvider,
    \n-
    184 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,
    \n-
    185 std::enable_if_t<isVector<C>::value, int> = 0>
    \n-
    186 static void resize(C&& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    187 {
    \n-
    188 auto size = sizeProvider.size(prefix);
    \n-
    189 // If size == 0 there's nothing to do:
    \n-
    190 // We can't resize c and it's already
    \n-
    191 // large enough anyway.
    \n-
    192 if (size == 0)
    \n-
    193 return;
    \n-
    194
    \n-
    195 // If size>0 but c does not have the appropriate
    \n-
    196 // size we throw an exception.
    \n-
    197 //
    \n-
    198 // We could perhaps also allow c.size()>size.
    \n-
    199 // But then looping the loop below gets complicated:
    \n-
    200 // We're not allowed to loop until c.size(). But
    \n-
    201 // we also cannot use size for termination,
    \n-
    202 // because this fails if c is a static vector.
    \n-
    203 if (c.size() != size)
    \n-
    204 DUNE_THROW(RangeError, "Can't resize non-resizable entry v[" << prefix << "] of size " << c.size() << " to size(" << prefix << ")=" << size);
    \n-
    205
    \n-
    206 // Recursively resize all entries of c now.
    \n-
    207 using namespace Dune::Hybrid;
    \n-
    208 prefix.push_back(0);
    \n-
    209 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {
    \n-
    210 prefix.back() = i;
    \n-
    211 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);
    \n-
    212 // but even gcc-7 does not except this bus reports
    \n-
    213 // "error: \u2018this\u2019 was not captured for this lambda function"
    \n-
    214 // although there's no 'this' because we're in a static method.
    \n-
    215 // Bypassing this by and additional method that does perfect
    \n-
    216 // forwarding allows to workaround this.
    \n-
    217 ISTLVectorBackend<V>::forwardToResize(c[i], sizeProvider, prefix);
    \n-
    218 });
    \n-
    219 }
    \n-
    220
    \n-
    221 template<class C, class SizeProvider,
    \n-
    222 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,
    \n-
    223 std::enable_if_t<isScalar<C>::value, int> = 0>
    \n-
    224 static void resize(C&&, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n-
    225 {
    \n-
    226 auto size = sizeProvider.size(prefix);
    \n-
    227 if (size != 0)
    \n-
    228 DUNE_THROW(RangeError, "Can't resize scalar vector entry v[" << prefix << "] to size(" << prefix << ")=" << size);
    \n-
    229 }
    \n-
    230
    \n-
    231 template<class C, class T,
    \n-
    232 std::enable_if_t<std::is_assignable<C&,T>::value, int> = 0>
    \n-
    233 void recursiveAssign(C& c, const T& t)
    \n-
    234 {
    \n-
    235 c = t;
    \n-
    236 }
    \n-
    237
    \n-
    238 template<class C, class T,
    \n-
    239 std::enable_if_t<not std::is_assignable<C&,T>::value, int> = 0>
    \n-
    240 void recursiveAssign(C& c, const T& t)
    \n-
    241 {
    \n-
    242 Dune::Hybrid::forEach(c, [&](auto&& ci) {
    \n-
    243 recursiveAssign(ci, t);
    \n-
    244 });
    \n-
    245 }
    \n-
    246
    \n-
    247public:
    \n-
    248
    \n-
    249 using Vector = V;
    \n-
    250
    \n-
    251 ISTLVectorBackend(Vector& vector) :
    \n-
    252 vector_(&vector)
    \n-
    253 {}
    \n-
    254
    \n-
    255 template<class SizeProvider>
    \n-
    256 void resize(const SizeProvider& sizeProvider)
    \n-
    257 {
    \n-
    258 auto prefix = typename SizeProvider::SizePrefix();
    \n-
    259 prefix.resize(0);
    \n-
    260 resize(*vector_, sizeProvider, prefix);
    \n-
    261 }
    \n-
    262
    \n-
    263 template<class MultiIndex>
    \n-
    264 decltype(auto) operator[](const MultiIndex& index) const
    \n-
    265 {
    \n-
    266 return resolveDynamicMultiIndex(*vector_, index);
    \n-
    267 }
    \n-
    268
    \n-
    269 template<class MultiIndex>
    \n-
    270 decltype(auto) operator[](const MultiIndex& index)
    \n-
    271 {
    \n-
    272 return resolveDynamicMultiIndex(*vector_, index);
    \n-
    273 }
    \n-
    274
    \n-
    283 template<typename T>
    \n-
    284 void operator= (const T& other)
    \n-
    285 {
    \n-
    286 recursiveAssign(vector(), other);
    \n-
    287 }
    \n-
    288
    \n-
    289 template<typename T>
    \n-
    290 void operator= (const ISTLVectorBackend<T>& other)
    \n-
    291 {
    \n-
    292 vector() = other.vector();
    \n-
    293 }
    \n-
    294
    \n-
    295 const Vector& vector() const
    \n-
    296 {
    \n-
    297 return *vector_;
    \n-
    298 }
    \n-
    299
    \n-
    300 Vector& vector()
    \n-
    301 {
    \n-
    302 return *vector_;
    \n-
    303 }
    \n-
    304
    \n-
    305private:
    \n-
    306
    \n-
    307 Vector* vector_;
    \n-
    308};
    \n-
    309
    \n-
    310} // end namespace Impl
    \n-
    311
    \n-
    312
    \n-
    313
    \n-
    345template<class Vector>
    \n-
    \n-
    346auto istlVectorBackend(Vector& v)
    \n-
    347{
    \n-
    348 static_assert(hasUniqueFieldType<Vector&>(), "Vector type passed to istlVectorBackend() does not have a unique field type.");
    \n-
    349 return Impl::ISTLVectorBackend<Vector>(v);
    \n-
    350}
    \n-
    \n-
    351
    \n-
    352
    \n-
    353
    \n-
    383template<class Vector>
    \n-
    \n-
    384auto istlVectorBackend(const Vector& v)
    \n-
    385{
    \n-
    386 static_assert(hasUniqueFieldType<const Vector&>(), "Vector type passed to istlVectorBackend() does not have a unique field type.");
    \n-
    387 return Impl::ISTLVectorBackend<const Vector>(v);
    \n-
    388}
    \n-
    \n-
    389
    \n-
    390
    \n-
    391
    \n-
    392} // namespace Functions
    \n-
    393} // namespace Dune
    \n-
    394
    \n-
    395
    \n-
    396#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n-\n-
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:346
    \n-
    constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:354
    \n+
    \n+
    116 bool bufferUsed() const
    \n+
    117 {
    \n+
    118 return ((void*) (p_) == (void*)(&buffer_));
    \n+
    119 }
    \n+
    \n+
    120
    \n+
    \n+
    122 const Base& get() const
    \n+
    123 {
    \n+
    124 return *p_;
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    \n+
    128 Base& get()
    \n+
    129 {
    \n+
    130 return *p_;
    \n+
    131 }
    \n+
    \n+
    132
    \n+
    133private:
    \n+
    134
    \n+
    135 void destroyWrappedObject() noexcept
    \n+
    136 {
    \n+
    137 if (operator bool())
    \n+
    138 {
    \n+
    139 if (bufferUsed())
    \n+
    140 p_->~Base();
    \n+
    141 else
    \n+
    142 delete p_;
    \n+
    143 }
    \n+
    144 }
    \n+
    145
    \n+
    146 void moveToWrappedObject(PolymorphicSmallObject&& other) noexcept
    \n+
    147 {
    \n+
    148 if (other.bufferUsed())
    \n+
    149 p_ = other.p_->move(&buffer_);
    \n+
    150 else
    \n+
    151 {
    \n+
    152 // We don't need to check for &other_!=this, because you can't
    \n+
    153 // have an rvalue to *this and call it's assignment/constructor
    \n+
    154 // at the same time. (Despite trying to shoot yourself in the foot
    \n+
    155 // with std::move explicitly.)
    \n+
    156
    \n+
    157 // Take ownership of allocated object
    \n+
    158 p_ = other.p_;
    \n+
    159
    \n+
    160 // Leave pointer in a clean state to avoid double freeing it.
    \n+
    161 other.p_ = 0;
    \n+
    162 }
    \n+
    163 }
    \n+
    164
    \n+
    165 void copyToWrappedObject(const PolymorphicSmallObject& other)
    \n+
    166 {
    \n+
    167 if (other.bufferUsed())
    \n+
    168 p_ = other.p_->clone(&buffer_);
    \n+
    169 else
    \n+
    170 p_ = other.p_->clone();
    \n+
    171 }
    \n+
    172
    \n+
    173 std::aligned_storage_t<bufferSize> buffer_;
    \n+
    174 Base* p_;
    \n+
    175};
    \n+
    \n+
    176
    \n+
    177
    \n+
    178} // namespace Functions
    \n+
    179} // namespace Dune
    \n+
    180
    \n+
    181#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n
    Definition polynomial.hh:10
    \n-
    constexpr auto fieldTypes()
    Generate list of field types in container.
    Definition istlvectorbackend.hh:63
    \n-
    constexpr bool hasUniqueFieldType()
    Check if container has a unique field type.
    Definition istlvectorbackend.hh:74
    \n-\n+
    A wrapper providing small object optimization with polymorphic types.
    Definition polymorphicsmallobject.hh:45
    \n+
    const Base & get() const
    Obtain reference to stored object.
    Definition polymorphicsmallobject.hh:122
    \n+
    bool bufferUsed() const
    Check if object is stored in internal stack buffer.
    Definition polymorphicsmallobject.hh:116
    \n+
    PolymorphicSmallObject(Derived &&derived)
    Construct from object.
    Definition polymorphicsmallobject.hh:62
    \n+
    PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept
    Move constructor from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:73
    \n+
    PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)
    Copy assignment from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:91
    \n+
    PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept
    Move assignment from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:102
    \n+
    PolymorphicSmallObject(const PolymorphicSmallObject &other)
    Copy constructor from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:79
    \n+
    ~PolymorphicSmallObject()
    Destructor.
    Definition polymorphicsmallobject.hh:85
    \n+
    PolymorphicSmallObject()
    Default constructor.
    Definition polymorphicsmallobject.hh:49
    \n+
    Base & get()
    Obtain mutable reference to stored object.
    Definition polymorphicsmallobject.hh:128
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \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,362 +1,191 @@\n dune-functions\u00a02.9.0\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+ * _\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#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n-4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+4#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n 5\n-6#include \n-7#include \n-8#include \n-9\n-10#include \n-11#include \n-12#include \n-13#include \n-14\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_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-17\n-18\n-19namespace _\bD_\bu_\bn_\be {\n-20namespace Functions {\n-21\n-22namespace Impl {\n-23\n-24template() ,\n-int> = 0>\n-26auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(V&& /*v*/)\n-27{\n-28 return TypeList{};\n-29}\n-30\n-31template(), int>\n-= 0>\n-33auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(V&& v)\n-34{\n-35 if constexpr (Dune::models,\n-V>())\n-36 return _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(v[std::size_t{0}]);\n-37 else\n-38 {\n-39 auto indexRange = typename decltype(range(Hybrid::size(v)))::\n-integer_sequence();\n-40 return unpackIntegerSequence([&](auto... i) {\n-41 return uniqueTypeList(std::tuple_cat(_\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(v[i])...));\n-42 }, indexRange);\n-43 }\n-44}\n-45\n-46} // namespace Impl\n+6#include \n+7#include \n+8\n+9namespace _\bD_\bu_\bn_\be {\n+10namespace Functions {\n+11\n+12\n+43template\n+_\b4_\b4class _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n+45{\n+46public:\n 47\n-48\n-49\n-62template\n-_\b6_\b3constexpr auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs()\n-64{\n-65 return decltype(Impl::fieldTypes(std::declval())){};\n-66}\n-67\n-73template\n-_\b7_\b4constexpr bool _\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bF_\bi_\be_\bl_\bd_\bT_\by_\bp_\be()\n-75{\n-76 return std::tuple_size())>>::value==1;\n-77}\n-78\n-79\n-80\n-81namespace Impl {\n-82\n-83/*\n-84 * \\brief A wrapper providing multi-index access to vector entries\n-85 *\n-86 * The wrapped vector type should be an istl like random\n-87 * access container providing operator[] and size() methods.\n-88 * For classical containers this should support indices\n-89 * of type std::size_t. For multi-type containers indices\n-90 * of the form Dune::index_constant should be supported\n-91 * while size() should be a static constexpr method.\n-92 *\n-93 * When resolving multi-indices the backend appends indices\n-94 * using operator[] as long as the result is not a scalar.\n-95 * If this exhausts the digits of the multi-index, additional\n-96 * zero`s are appended.\n-97 *\n-98 * \\tparam V Type of the raw wrapper vector\n-99 */\n-100template\n-101class ISTLVectorBackend\n-102{\n-103\n-104 // Template aliases for using detection idiom.\n-105 template\n-106 using dynamicIndexAccess_t = decltype(std::declval()[0]);\n-107\n-108 template\n-109 using staticIndexAccess_t = decltype(std::declval()[Dune::Indices::_0]);\n-110\n-111 template\n-112 using resizeMethod_t = decltype(std::declval().resize(0));\n-113\n+_\b4_\b9 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt() :\n+50 p_(nullptr)\n+51 {}\n+52\n+59 template>>::value, int>::type = 0>\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(Derived&& derived)\n+63 {\n+64 constexpr bool useBuffer = sizeof(Derived) <= bufferSize;\n+65 if constexpr (useBuffer) {\n+66 p_ = new (&buffer_) Derived(std::forward(derived));\n+67 } else {\n+68 p_ = new Derived(std::forward(derived));\n+69 }\n+70 }\n+71\n+_\b7_\b3 _\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+74 {\n+75 moveToWrappedObject(std::move(other));\n+76 }\n+77\n+_\b7_\b9 _\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+80 {\n+81 copyToWrappedObject(other);\n+82 }\n+83\n+_\b8_\b5 _\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt()\n+86 {\n+87 destroyWrappedObject();\n+88 }\n+89\n+_\b9_\b1 _\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+92 {\n+93 if (&other!=this)\n+94 {\n+95 destroyWrappedObject();\n+96 copyToWrappedObject(other);\n+97 }\n+98 return *this;\n+99 }\n+100\n+_\b1_\b0_\b2 _\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+103 {\n+104 destroyWrappedObject();\n+105 moveToWrappedObject(std::move(other));\n+106 return *this;\n+107 }\n+108\n+_\b1_\b1_\b0 explicit operator bool() const\n+111 {\n+112 return p_;\n+113 }\n 114\n-115\n-116 // Short cuts for feature detection\n-117 template\n-118 using hasDynamicIndexAccess = Dune::Std::is_detected>;\n-119\n-120 template\n-121 using hasStaticIndexAccess = Dune::Std::is_detected>;\n-122\n-123 template\n-124 using hasResizeMethod = Dune::Std::is_detected>;\n-125\n-126 template\n-127 using isDynamicVector = Dune::Std::is_detected>;\n-128\n-129 template\n-130 using isStaticVector = Dune::Std::bool_constant<\n-131 Dune::Std::is_detected_v>\n-132 and not Dune::Std::is_detected_v>>;\n-133\n-134 template\n-135 using isScalar = Dune::Std::bool_constant>>;\n-136\n-137 template\n-138 using isVector = Dune::Std::bool_constant>>;\n-139\n-140\n-141\n-142 template\n-143 static void forwardToResize(Args&&... args)\n-144 {\n-145 resize(std::forward(args)...);\n-146 }\n-147\n-148\n-149 template::value, int> = 0>\n-151 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-152 {\n-153 auto size = sizeProvider.size(prefix);\n-154 if (size==0)\n-155 {\n-156 // If size==0 this prefix refers to a single coefficient c.\n-157 // But being in this overload means that c is not a scalar\n-158 // because is has a resize() method. Since operator[] deliberately\n-159 // supports implicit padding of multi-indices by as many\n-160 // [0]'s as needed to resolve a scalar entry, we should also\n-161 // except a non-scalar c here. However, this requires that\n-162 // we silently believe that whatever size c already has is\n-163 // intended by the user. The only exception is c.size()==0\n-164 // which is not acceptable but we also cannot know the desired size.\n-165 if (c.size()==0)\n-166 DUNE_THROW(RangeError, \"The vector entry v[\" << prefix << \"] should refer\n-to a \"\n-167 << \"scalar coefficient, but is a dynamically sized vector of size==0\");\n-168 else\n-169 // Accept non-zero sized coefficients to avoid that resize(basis)\n-170 // fails for a vector that works with operator[] and already\n-171 // has the appropriate size.\n-172 return;\n-173 }\n-174 c.resize(size);\n-175 prefix.push_back(0);\n-176 for(std::size_t i=0; i::value, int> = 0,\n-185 std::enable_if_t::value, int> = 0>\n-186 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-187 {\n-188 auto size = sizeProvider.size(prefix);\n-189 // If size == 0 there's nothing to do:\n-190 // We can't resize c and it's already\n-191 // large enough anyway.\n-192 if (size == 0)\n-193 return;\n-194\n-195 // If size>0 but c does not have the appropriate\n-196 // size we throw an exception.\n-197 //\n-198 // We could perhaps also allow c.size()>size.\n-199 // But then looping the loop below gets complicated:\n-200 // We're not allowed to loop until c.size(). But\n-201 // we also cannot use size for termination,\n-202 // because this fails if c is a static vector.\n-203 if (c.size() != size)\n-204 DUNE_THROW(RangeError, \"Can't resize non-resizable entry v[\" << prefix <<\n-\"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n-205\n-206 // Recursively resize all entries of c now.\n-207 using namespace Dune::Hybrid;\n-208 prefix.push_back(0);\n-209 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n-210 prefix.back() = i;\n-211 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);\n-212 // but even gcc-7 does not except this bus reports\n-213 // \"error: \u00e2\u0080\u0098this\u00e2\u0080\u0099 was not captured for this lambda function\"\n-214 // although there's no 'this' because we're in a static method.\n-215 // Bypassing this by and additional method that does perfect\n-216 // forwarding allows to workaround this.\n-217 ISTLVectorBackend::forwardToResize(c[i], sizeProvider, prefix);\n-218 });\n-219 }\n-220\n-221 template::value, int> = 0,\n-223 std::enable_if_t::value, int> = 0>\n-224 static void resize(C&&, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n-225 {\n-226 auto size = sizeProvider.size(prefix);\n-227 if (size != 0)\n-228 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n-\"] to size(\" << prefix << \")=\" << size);\n-229 }\n-230\n-231 template::value, int> = 0>\n-233 void recursiveAssign(C& c, const T& t)\n-234 {\n-235 c = t;\n-236 }\n-237\n-238 template::value, int> = 0>\n-240 void recursiveAssign(C& c, const T& t)\n-241 {\n-242 Dune::Hybrid::forEach(c, [&](auto&& ci) {\n-243 recursiveAssign(ci, t);\n-244 });\n-245 }\n-246\n-247public:\n-248\n-249 using Vector = V;\n-250\n-251 ISTLVectorBackend(Vector& vector) :\n-252 vector_(&vector)\n-253 {}\n-254\n-255 template\n-256 void resize(const SizeProvider& sizeProvider)\n-257 {\n-258 auto prefix = typename SizeProvider::SizePrefix();\n-259 prefix.resize(0);\n-260 resize(*vector_, sizeProvider, prefix);\n-261 }\n-262\n-263 template\n-264 decltype(auto) operator[](const MultiIndex& index) const\n-265 {\n-266 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-267 }\n-268\n-269 template\n-270 decltype(auto) operator[](const MultiIndex& index)\n-271 {\n-272 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-273 }\n-274\n-283 template\n-284 void operator= (const T& other)\n-285 {\n-286 recursiveAssign(vector(), other);\n-287 }\n-288\n-289 template\n-290 void operator= (const ISTLVectorBackend& other)\n-291 {\n-292 vector() = other.vector();\n-293 }\n-294\n-295 const Vector& vector() const\n-296 {\n-297 return *vector_;\n-298 }\n-299\n-300 Vector& vector()\n-301 {\n-302 return *vector_;\n-303 }\n-304\n-305private:\n-306\n-307 Vector* vector_;\n-308};\n-309\n-310} // end namespace Impl\n-311\n-312\n-313\n-345template\n-_\b3_\b4_\b6auto _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(Vector& v)\n-347{\n-348 static_assert(hasUniqueFieldType(), \"Vector type passed to\n-istlVectorBackend() does not have a unique field type.\");\n-349 return Impl::ISTLVectorBackend(v);\n-350}\n-351\n-352\n-353\n-383template\n-_\b3_\b8_\b4auto _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(const Vector& v)\n-385{\n-386 static_assert(hasUniqueFieldType(), \"Vector type passed to\n-istlVectorBackend() does not have a unique field type.\");\n-387 return Impl::ISTLVectorBackend(v);\n-388}\n-389\n-390\n-391\n-392} // namespace Functions\n-393} // namespace Dune\n-394\n-395\n-396#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n-_\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:346\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:354\n+_\b1_\b1_\b6 bool _\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd() const\n+117 {\n+118 return ((void*) (p_) == (void*)(&buffer_));\n+119 }\n+120\n+_\b1_\b2_\b2 const Base& _\bg_\be_\bt() const\n+123 {\n+124 return *p_;\n+125 }\n+126\n+_\b1_\b2_\b8 Base& _\bg_\be_\bt()\n+129 {\n+130 return *p_;\n+131 }\n+132\n+133private:\n+134\n+135 void destroyWrappedObject() noexcept\n+136 {\n+137 if (operator bool())\n+138 {\n+139 if (_\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd())\n+140 p_->~Base();\n+141 else\n+142 delete p_;\n+143 }\n+144 }\n+145\n+146 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+147 {\n+148 if (other.bufferUsed())\n+149 p_ = other.p_->move(&buffer_);\n+150 else\n+151 {\n+152 // We don't need to check for &other_!=this, because you can't\n+153 // have an rvalue to *this and call it's assignment/constructor\n+154 // at the same time. (Despite trying to shoot yourself in the foot\n+155 // with std::move explicitly.)\n+156\n+157 // Take ownership of allocated object\n+158 p_ = other.p_;\n+159\n+160 // Leave pointer in a clean state to avoid double freeing it.\n+161 other.p_ = 0;\n+162 }\n+163 }\n+164\n+165 void copyToWrappedObject(const _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& other)\n+166 {\n+167 if (other.bufferUsed())\n+168 p_ = other.p_->clone(&buffer_);\n+169 else\n+170 p_ = other.p_->clone();\n+171 }\n+172\n+173 std::aligned_storage_t buffer_;\n+174 Base* p_;\n+175};\n+176\n+177\n+178} // namespace Functions\n+179} // namespace Dune\n+180\n+181#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:63\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:74\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:_\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:45\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:122\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:116\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: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:_\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:73\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:91\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:102\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:79\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:85\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:49\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:128\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: polynomial.hh File Reference\n+dune-functions: defaultderivativetraits.hh File Reference\n \n \n \n \n \n \n \n@@ -65,34 +65,50 @@\n \n \n \n \n \n \n \n
    \n \n-
    polynomial.hh File Reference
    \n+
    defaultderivativetraits.hh File Reference
    \n
    \n
    \n-
    #include <cmath>
    \n-#include <initializer_list>
    \n-#include <vector>
    \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::Polynomial< K >
     A scalar polynomial implementation. 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": "@@ -1,23 +1,41 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-polynomial.hh File Reference\n-#include \n-#include \n-#include \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:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\b _\bK_\b _\b>\n-\u00a0 A scalar polynomial implementation. _\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/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: polynomial.hh Source File\n+dune-functions: defaultderivativetraits.hh Source File\n \n \n \n \n \n \n \n@@ -70,124 +70,97 @@\n \n \n \n \n \n \n \n
    \n-
    polynomial.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#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n-
    4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n
    5
    \n-
    6#include <cmath>
    \n-
    7#include <initializer_list>
    \n-
    8#include <vector>
    \n-
    9
    \n-
    \n-
    10namespace Dune {
    \n-
    \n-
    11namespace Functions {
    \n-
    12
    \n-
    13
    \n-
    24template<class K>
    \n-
    \n-\n-
    26{
    \n-
    27public:
    \n-
    28
    \n-
    30 Polynomial() = default;
    \n-
    31
    \n-
    33 Polynomial(const Polynomial& other) = default;
    \n-
    34
    \n-
    36 Polynomial(Polynomial&& other) = default;
    \n-
    37
    \n-
    39 Polynomial& operator=(const Polynomial& other) = default;
    \n-
    40
    \n-
    42 Polynomial& operator=(Polynomial&& other) = default;
    \n-
    43
    \n-
    \n-
    50 Polynomial(std::initializer_list<K> coefficients) :
    \n-
    51 coefficients_(coefficients)
    \n-
    52 {}
    \n-
    \n-
    53
    \n-
    \n-
    61 Polynomial(std::vector<K>&& coefficients) :
    \n-
    62 coefficients_(std::move(coefficients))
    \n-
    63 {}
    \n-
    \n-
    64
    \n-
    \n-
    72 Polynomial(const std::vector<K>& coefficients) :
    \n-
    73 coefficients_(coefficients)
    \n-
    74 {}
    \n-
    \n-
    75
    \n-
    \n-
    77 K operator() (const K& x) const
    \n-
    78 {
    \n-
    79 auto y = K(0);
    \n-
    80 for (size_t i=0; i<coefficients_.size(); ++i)
    \n-
    81 y += coefficients_[i] * std::pow(x, i);
    \n-
    82 return y;
    \n-
    83 }
    \n-
    \n-
    84
    \n-
    \n-\n-
    95 {
    \n-
    96 std::vector<K> dpCoefficients(p.coefficients().size()-1);
    \n-
    97 for (size_t i=1; i<p.coefficients_.size(); ++i)
    \n-
    98 dpCoefficients[i-1] = p.coefficients()[i]*i;
    \n-
    99 return Polynomial(std::move(dpCoefficients));
    \n-
    100 }
    \n-
    \n-
    101
    \n-
    \n-
    103 const std::vector<K>& coefficients() const
    \n-
    104 {
    \n-
    105 return coefficients_;
    \n-
    106 }
    \n-
    \n+
    6#include <type_traits>
    \n+
    7#include <utility>
    \n+
    8
    \n+
    9#include <dune/common/fvector.hh>
    \n+
    10#include <dune/common/fmatrix.hh>
    \n+
    11
    \n+
    12namespace Dune {
    \n+
    13namespace Functions {
    \n+
    14
    \n+
    15
    \n+
    16
    \n+
    \n+\n+
    23{};
    \n+
    \n+
    24
    \n+
    25
    \n+
    35template<class Signature>
    \n+
    \n+\n+
    37{
    \n+\n+
    40};
    \n+
    \n+
    41
    \n+
    42
    \n+
    50template<>
    \n+
    \n+
    51struct DefaultDerivativeTraits< double(double) >
    \n+
    52{
    \n+
    54 typedef double Range;
    \n+
    55};
    \n+
    \n+
    56
    \n+
    66template<typename K, int n>
    \n+
    \n+
    67struct DefaultDerivativeTraits<K(FieldVector<K,n>)>
    \n+
    68{
    \n+
    70 typedef FieldVector<K,n> Range;
    \n+
    71};
    \n+
    \n+
    72
    \n+
    82template<typename K, int n, int m>
    \n+
    \n+
    83struct DefaultDerivativeTraits<FieldVector<K,m>(FieldVector<K,n>)>
    \n+
    84{
    \n+
    86 typedef FieldMatrix<K,m,n> Range;
    \n+
    87};
    \n+
    \n+
    88
    \n+
    98template<typename K, int n, int m>
    \n+
    \n+
    99struct DefaultDerivativeTraits<FieldMatrix<K,1,m>(FieldVector<K,n>)>
    \n+
    100{
    \n+
    102 typedef FieldMatrix<K,m,n> Range;
    \n+
    103};
    \n+
    \n+
    104
    \n+
    105
    \n+
    106}} // namespace Dune::Functions
    \n
    107
    \n-
    108private:
    \n-
    109 std::vector<K> coefficients_;
    \n-
    110};
    \n-
    \n-
    111
    \n-
    112
    \n-
    113
    \n-
    114}} // namespace Dune::Functions
    \n-
    \n-
    \n-
    115
    \n-
    116
    \n-
    117
    \n-
    118#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n-
    friend Polynomial derivative(const Polynomial &p)
    Obtain derivative of Polynomial function.
    Definition polynomial.hh:94
    \n+
    108
    \n+
    109#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n
    Definition polynomial.hh:10
    \n-
    A scalar polynomial implementation.
    Definition polynomial.hh:26
    \n-
    Polynomial()=default
    Default constructor.
    \n-
    const std::vector< K > & coefficients() const
    Obtain reference to coefficient vector.
    Definition polynomial.hh:103
    \n-
    Polynomial & operator=(const Polynomial &other)=default
    Copy-assignment operator.
    \n-
    Polynomial & operator=(Polynomial &&other)=default
    Move-assignment operator.
    \n-
    Polynomial(std::initializer_list< K > coefficients)
    Create from list of coefficients.
    Definition polynomial.hh:50
    \n-
    K operator()(const K &x) const
    Evaluate polynomial.
    Definition polynomial.hh:77
    \n-
    Polynomial(const Polynomial &other)=default
    Copy constructor.
    \n-
    Polynomial(Polynomial &&other)=default
    Move constructor.
    \n-
    Polynomial(const std::vector< K > &coefficients)
    Create from list of coefficients.
    Definition polynomial.hh:72
    \n-
    Polynomial(std::vector< K > &&coefficients)
    Create from list of coefficients.
    Definition polynomial.hh:61
    \n+
    Dummy range class to be used if no proper type is available.
    Definition defaultderivativetraits.hh:23
    \n+
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:37
    \n+
    InvalidRange Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:39
    \n+
    double Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:54
    \n+
    FieldVector< K, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:70
    \n+
    FieldMatrix< K, m, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:86
    \n+
    FieldMatrix< K, m, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:102
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,127 +1,97 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n-4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+4#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n 5\n-6#include \n-7#include \n-8#include \n-9\n-_\b1_\b0namespace _\bD_\bu_\bn_\be {\n-_\b1_\b1namespace Functions {\n-12\n-13\n-24template\n-_\b2_\b5class _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n-26{\n-27public:\n-28\n-_\b3_\b0 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl() = default;\n-31\n-_\b3_\b3 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(const _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& other) = default;\n-34\n-_\b3_\b6 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl&& other) = default;\n-37\n-_\b3_\b9 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& other) = default;\n-40\n-_\b4_\b2 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl&& other) = default;\n-43\n-_\b5_\b0 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::initializer_list _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs) :\n-51 coefficients_(_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs)\n-52 {}\n-53\n-_\b6_\b1 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::vector&& _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs) :\n-62 coefficients_(std::move(_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs))\n-63 {}\n-64\n-_\b7_\b2 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(const std::vector& _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs) :\n-73 coefficients_(_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs)\n-74 {}\n-75\n-_\b7_\b7 K _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)_\b (const K& x) const\n-78 {\n-79 auto y = K(0);\n-80 for (size_t i=0; i dpCoefficients(p._\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs().size()-1);\n-97 for (size_t i=1; i& _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs() const\n-104 {\n-105 return coefficients_;\n-106 }\n+6#include \n+7#include \n+8\n+9#include \n+10#include \n+11\n+12namespace _\bD_\bu_\bn_\be {\n+13namespace Functions {\n+14\n+15\n+16\n+_\b2_\b2class _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n+23{};\n+24\n+25\n+35template\n+_\b3_\b6struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+37{\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\n+50template<>\n+_\b5_\b1struct _\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+52{\n+_\b5_\b4 typedef double _\bR_\ba_\bn_\bg_\be;\n+55};\n+56\n+66template\n+_\b6_\b7struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs)>\n+68{\n+_\b7_\b0 typedef FieldVector _\bR_\ba_\bn_\bg_\be;\n+71};\n+72\n+82template\n+_\b8_\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+84{\n+_\b8_\b6 typedef FieldMatrix _\bR_\ba_\bn_\bg_\be;\n+87};\n+88\n+98template\n+_\b9_\b9struct _\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+100{\n+_\b1_\b0_\b2 typedef FieldMatrix _\bR_\ba_\bn_\bg_\be;\n+103};\n+104\n+105\n+106}} // namespace Dune::Functions\n 107\n-108private:\n-109 std::vector coefficients_;\n-110};\n-111\n-112\n-113\n-114}} // namespace Dune::Functions\n-115\n-116\n-117\n-118#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n-_\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 Polynomial derivative(const Polynomial &p)\n-Obtain derivative of Polynomial function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:94\n+108\n+109#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:10\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 scalar polynomial implementation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:26\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:_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n-const std::vector< K > & coefficients() const\n-Obtain reference to coefficient vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:103\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=\n-Polynomial & operator=(const Polynomial &other)=default\n-Copy-assignment operator.\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=\n-Polynomial & operator=(Polynomial &&other)=default\n-Move-assignment operator.\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(std::initializer_list< K > coefficients)\n-Create from list of coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:50\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:77\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(const Polynomial &other)=default\n-Copy 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:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n-Polynomial(Polynomial &&other)=default\n-Move 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:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n-Polynomial(const std::vector< K > &coefficients)\n-Create from list of coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:72\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(std::vector< K > &&coefficients)\n-Create from list of coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:61\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:23\n+_\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:37\n+_\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: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_\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:54\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\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: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_\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: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_\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:102\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: trigonometricfunction.hh File Reference\n+dune-functions: type_traits.hh File Reference\n \n \n \n \n \n \n \n@@ -65,48 +65,52 @@\n \n \n \n \n \n \n \n
    \n \n-
    trigonometricfunction.hh File Reference
    \n+Typedefs
    \n+
    type_traits.hh File Reference
    \n \n
    \n-
    #include <cmath>
    \n+
    #include <type_traits>
    \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 \n

    \n Classes

    class  Dune::Functions::TrigonometricFunction< K, sinFactor, cosFactor >
     A linear combination of trigonomic functions. More...
    struct  Dune::Functions::HasStaticSize< T >
     Check if type is a statically sized container. More...
     
    struct  Dune::Functions::StaticSize< T >
     Obtain size of statically sized container. 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-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+Typedefs

    template<class T , class... Args>
    using Dune::Functions::enableIfConstructible = typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type
     Helper to constrain forwarding constructors.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,32 @@\n dune-functions\u00a02.9.0\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 | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+type_traits.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:_\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+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_\b<_\b _\bT_\b _\b>\n+\u00a0 Obtain size of statically sized container. _\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+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 = typename std::enable_if< std::\n+ is_constructible< T, Args... >::value, int >::type\n+\u00a0 Helper to constrain forwarding constructors.\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: trigonometricfunction.hh Source File\n+dune-functions: type_traits.hh Source File\n \n \n \n \n \n \n \n@@ -70,67 +70,108 @@\n
    \n \n \n \n \n \n \n
    \n-
    trigonometricfunction.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#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n-
    4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH
    \n
    5
    \n-
    6#include <cmath>
    \n+
    6#include <type_traits>
    \n
    7
    \n-
    8namespace Dune {
    \n-
    9namespace Functions {
    \n-
    10
    \n-
    11
    \n+
    8#include <dune/common/typeutilities.hh>
    \n+
    9
    \n+
    10namespace Dune {
    \n+
    11namespace Functions {
    \n
    12
    \n-
    25template<class K, int sinFactor, int cosFactor>
    \n-
    \n-\n-
    27{
    \n-
    28public:
    \n-
    \n-
    30 K operator () (const K& x) const
    \n-
    31 {
    \n-
    32 return sinFactor * std::sin(x) + cosFactor * std::cos(x);
    \n-
    33 }
    \n-
    \n-
    34};
    \n-
    \n-
    35
    \n-
    36
    \n-
    38template<class K, int sinFactor, int cosFactor>
    \n-
    \n-\n-
    40{
    \n-
    41 return TrigonometricFunction<K, -cosFactor, sinFactor>();
    \n-
    42}
    \n-
    \n-
    43
    \n-
    44
    \n-
    45
    \n-
    46}} // namespace Dune::Functions
    \n+
    13
    \n+
    24template<class T, class... Args>
    \n+
    25using enableIfConstructible = typename std::enable_if<
    \n+
    26 std::is_constructible<T, Args...>::value, int>::type;
    \n+
    27
    \n+
    28
    \n+
    29
    \n+
    30namespace Imp {
    \n+
    31
    \n+
    32 // As a last resort try if there's a static constexpr size()
    \n+
    33 template<class T>
    \n+
    34 constexpr auto staticSize(const T*, const PriorityTag<0>&)
    \n+
    35 -> decltype(std::integral_constant<std::size_t,T::size()>())
    \n+
    36 {
    \n+
    37 return {};
    \n+
    38 }
    \n+
    39
    \n+
    40 // Try if class has constexpr default constructor and size method
    \n+
    41 template<class T>
    \n+
    42 constexpr auto staticSize(const T*, const PriorityTag<1>&)
    \n+
    43 -> decltype(std::integral_constant<std::size_t,T().size()>())
    \n+
    44 {
    \n+
    45 return {};
    \n+
    46 }
    \n
    47
    \n-
    48
    \n-
    49
    \n-
    50#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:39
    \n+
    48 // Try if tuple_size is implemented for class
    \n+
    49 template<class T>
    \n+
    50 constexpr auto staticSize(const T*, const PriorityTag<2>&)
    \n+
    51 -> decltype(std::integral_constant<std::size_t,std::tuple_size<T>::value>())
    \n+
    52 {
    \n+
    53 return {};
    \n+
    54 }
    \n+
    55
    \n+
    56 template<class T>
    \n+
    57 constexpr std::false_type hasStaticSize(const T* t, const PriorityTag<0>& p)
    \n+
    58 {
    \n+
    59 return {};
    \n+
    60 }
    \n+
    61
    \n+
    62 template<class T>
    \n+
    63 constexpr auto hasStaticSize(const T* t, const PriorityTag<1>& p)
    \n+
    64 -> decltype(staticSize(t ,PriorityTag<42>()), std::true_type())
    \n+
    65 {
    \n+
    66 return {};
    \n+
    67 }
    \n+
    68
    \n+
    69}
    \n+
    70
    \n+
    71
    \n+
    72
    \n+
    80template<class T>
    \n+
    \n+\n+
    82 public decltype(Imp::hasStaticSize((typename std::decay<T>::type*)(nullptr), PriorityTag<42>()))
    \n+
    83{};
    \n+
    \n+
    84
    \n+
    85
    \n+
    86
    \n+
    94template<class T>
    \n+
    \n+
    95struct StaticSize :
    \n+
    96 public decltype(Imp::staticSize((typename std::decay<T>::type*)(nullptr), PriorityTag<42>()))
    \n+
    97{};
    \n+
    \n+
    98
    \n+
    99
    \n+
    100
    \n+
    101}} // namespace Dune::Functions
    \n+
    102
    \n+
    103#endif // DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH
    \n+
    typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:26
    \n
    Definition polynomial.hh:10
    \n-
    A linear combination of trigonomic functions.
    Definition trigonometricfunction.hh:27
    \n-
    K operator()(const K &x) const
    Evaluate function.
    Definition trigonometricfunction.hh:30
    \n+
    Check if type is a statically sized container.
    Definition type_traits.hh:83
    \n+
    Obtain size of statically sized container.
    Definition type_traits.hh:97
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,62 +1,105 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n-4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n+4#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n 5\n-6#include \n+6#include \n 7\n-8namespace _\bD_\bu_\bn_\be {\n-9namespace Functions {\n-10\n-11\n+8#include \n+9\n+10namespace _\bD_\bu_\bn_\be {\n+11namespace Functions {\n 12\n-25template\n-_\b2_\b6class _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-27{\n-28public:\n-_\b3_\b0 K _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b(_\b)_\b (const K& x) const\n-31 {\n-32 return sinFactor * std::sin(x) + cosFactor * std::cos(x);\n-33 }\n-34};\n-35\n-36\n-38template\n-_\b3_\b9_\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-40{\n-41 return _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn();\n-42}\n-43\n-44\n-45\n-46}} // namespace Dune::Functions\n+13\n+24template\n+_\b2_\b5using _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be = typename std::enable_if<\n+26 std::is_constructible::value, int>::type;\n+27\n+28\n+29\n+30namespace Imp {\n+31\n+32 // As a last resort try if there's a static constexpr size()\n+33 template\n+34 constexpr auto staticSize(const T*, const PriorityTag<0>&)\n+35 -> decltype(std::integral_constant())\n+36 {\n+37 return {};\n+38 }\n+39\n+40 // Try if class has constexpr default constructor and size method\n+41 template\n+42 constexpr auto staticSize(const T*, const PriorityTag<1>&)\n+43 -> decltype(std::integral_constant())\n+44 {\n+45 return {};\n+46 }\n 47\n-48\n-49\n-50#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:39\n+48 // Try if tuple_size is implemented for class\n+49 template\n+50 constexpr auto staticSize(const T*, const PriorityTag<2>&)\n+51 -> decltype(std::integral_constant::value>())\n+52 {\n+53 return {};\n+54 }\n+55\n+56 template\n+57 constexpr std::false_type hasStaticSize(const T* t, const PriorityTag<0>& p)\n+58 {\n+59 return {};\n+60 }\n+61\n+62 template\n+63 constexpr auto hasStaticSize(const T* t, const PriorityTag<1>& p)\n+64 -> decltype(staticSize(t ,PriorityTag<42>()), std::true_type())\n+65 {\n+66 return {};\n+67 }\n+68\n+69}\n+70\n+71\n+72\n+80template\n+_\b8_\b1struct _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be :\n+82 public decltype(Imp::hasStaticSize((typename std::decay::type*)(nullptr),\n+PriorityTag<42>()))\n+83{};\n+84\n+85\n+86\n+94template\n+_\b9_\b5struct _\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be :\n+96 public decltype(Imp::staticSize((typename std::decay::type*)(nullptr),\n+PriorityTag<42>()))\n+97{};\n+98\n+99\n+100\n+101}} // namespace Dune::Functions\n+102\n+103#endif // DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n+_\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+typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n+type enableIfConstructible\n+Helper to constrain forwarding constructors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:26\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:27\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:30\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:83\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+Obtain size of statically sized container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:97\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: multiindex.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-
    multiindex.hh File Reference
    \n+
    indexaccess.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/typetraits.hh>
    \n+#include <dune/common/concept.hh>
    \n+#include <dune/common/hybridutilities.hh>
    \n+#include <dune/functions/common/utility.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n-Classes

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

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Functions
     
    \n \n-\n-\n-\n+\n+\n+\n+\n+\n+\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 C , class I , class F , typename std::enable_if< Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 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 , typename std::enable_if< not Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 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,35 +1,56 @@\n dune-functions\u00a02.9.0\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+_\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/_\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:_\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+template, C >(), int >::type = 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 >::type = 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/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: multiindex.hh Source File\n+dune-functions: indexaccess.hh Source File\n \n \n \n \n \n \n \n@@ -74,114 +74,324 @@\n \n \n
    \n
    \n-
    multiindex.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#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n
    5
    \n-
    6#include <cstddef>
    \n-
    7#include <array>
    \n-
    8#include <iostream>
    \n+
    6
    \n+
    7#include <utility>
    \n+
    8#include <type_traits>
    \n
    9
    \n-
    10#include <dune/common/hash.hh>
    \n-
    11
    \n-
    12
    \n-
    13namespace Dune::Functions {
    \n-
    14
    \n+
    10#include <dune/common/typetraits.hh>
    \n+
    11#include <dune/common/concept.hh>
    \n+
    12#include <dune/common/hybridutilities.hh>
    \n+
    13
    \n+\n
    15
    \n
    16
    \n-
    22template<class size_type, std::size_t n>
    \n-
    \n-\n-
    24 public std::array<size_type, n>
    \n-
    25{
    \n-
    26public:
    \n-
    27 static constexpr std::size_t size() { return n; }
    \n-
    28
    \n-
    \n-
    29 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {
    \n-
    30 return hash_range(v.begin(), v.end());
    \n-
    31 }
    \n-
    \n-
    32
    \n+
    17
    \n+
    18namespace Dune {
    \n+
    19namespace Functions {
    \n+
    20
    \n+
    21
    \n+
    22namespace Imp {
    \n+
    23
    \n+
    24namespace Concept {
    \n+
    25
    \n+
    26template<class size_type>
    \n+
    27struct HasDynamicIndexAccess
    \n+
    28{
    \n+
    29 template<class C>
    \n+
    30 auto require(C&& c) -> decltype(
    \n+
    31 c[std::declval<size_type>()]
    \n+
    32 );
    \n
    33};
    \n-
    \n
    34
    \n-
    35
    \n-
    36
    \n-
    46template<class size_type>
    \n-
    \n-
    47class StaticMultiIndex<size_type,1> :
    \n-
    48 public std::array<size_type, 1>
    \n-
    49{
    \n-
    50public:
    \n-
    51
    \n-
    52 static constexpr std::size_t size() { return 1; }
    \n-
    53
    \n-
    \n-
    54 operator const size_type& () const {
    \n-
    55 return (*this)[0];
    \n-
    56 }
    \n-
    \n-
    57
    \n-
    \n-
    58 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {
    \n-
    59 return hash_range(v.begin(), v.end());
    \n-
    60 }
    \n-
    \n-
    61
    \n-
    \n-
    62 operator size_type& () {
    \n-
    63 return (*this)[0];
    \n-
    64 }
    \n-
    \n-
    65
    \n-
    66};
    \n+
    35struct HasStaticIndexAccess
    \n+
    36{
    \n+
    37 template<class C>
    \n+
    38 auto require(C&& c) -> decltype(
    \n+
    39 c[Dune::Indices::_0]
    \n+
    40 );
    \n+
    41};
    \n+
    42
    \n+
    43} // namespace Concept
    \n+
    44
    \n+
    45} // namespace Imp
    \n+
    46
    \n+
    47
    \n+
    48
    \n+
    61template<class C, class I, class F,
    \n+
    62 typename std::enable_if< Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), int>::type = 0>
    \n+
    \n+
    63auto hybridIndexAccess(C&& c, const I& i, F&& f)
    \n+
    64 -> decltype(f(c[i]))
    \n+
    65{
    \n+
    66 return f(c[i]);
    \n+
    67}
    \n
    \n-
    67
    \n
    68
    \n-
    69
    \n-
    70template<typename Stream, class size_type, std::size_t n>
    \n-
    \n-
    71inline Stream& operator<<(Stream& stream, const StaticMultiIndex<size_type,n>& c) {
    \n-
    72 for (const auto& ci : c)
    \n-
    73 stream << ci << " ";
    \n-
    74 return stream;
    \n-
    75}
    \n-
    \n-
    76
    \n-
    77
    \n-
    78
    \n-
    79} // namespace Dune::Functions
    \n-
    80
    \n-
    81template<class size_type, std::size_t n>
    \n-
    \n-
    82struct std::tuple_size< Dune::Functions::StaticMultiIndex<size_type,n> >
    \n-
    83 : std::integral_constant<std::size_t, n> { };
    \n-
    \n-
    84
    \n-
    85DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(typename size_type, std::size_t n),DUNE_HASH_TYPE(Dune::Functions::StaticMultiIndex<size_type,n>))
    \n-
    86
    \n-
    87#endif // DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH
    \n+
    86template<class C, class I, class F,
    \n+
    87 typename std::enable_if< not Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), int>::type = 0>
    \n+
    \n+
    88decltype(auto) hybridIndexAccess(C&& c, const I& i, F&& f)
    \n+
    89{
    \n+
    90 using Size = decltype(Hybrid::size(c));
    \n+
    91 return Hybrid::switchCases(std::make_index_sequence<Size::value>(), i,
    \n+
    92 [&](const auto& ii) -> decltype(auto){
    \n+
    93 return f(c[ii]);
    \n+
    94 }, [&]() -> decltype(auto){
    \n+
    95 return f(c[Dune::Indices::_0]);
    \n+
    96 });
    \n+
    97}
    \n+
    \n+
    98
    \n+
    99
    \n+
    100namespace Imp {
    \n+
    101
    \n+
    115 template<class Index, std::size_t offset=1>
    \n+
    116 class ShiftedDynamicMultiIndex
    \n+
    117 {
    \n+
    118 public:
    \n+
    119 ShiftedDynamicMultiIndex(const Index& index) :
    \n+
    120 index_(index)
    \n+
    121 {}
    \n+
    122
    \n+
    123 std::size_t operator[](std::size_t position) const
    \n+
    124 {
    \n+
    125 if (position<size())
    \n+
    126 return index_[position+offset];
    \n+
    127 else
    \n+
    128 return 0;
    \n+
    129 }
    \n+
    130
    \n+
    134 ShiftedDynamicMultiIndex<Index, offset+1> pop() const
    \n+
    135 {
    \n+
    136 return {index_};
    \n+
    137 }
    \n+
    138
    \n+
    139 std::size_t size() const
    \n+
    140 {
    \n+
    141 if (offset < index_.size())
    \n+
    142 return index_.size() - offset;
    \n+
    143 else
    \n+
    144 return 0;
    \n+
    145 }
    \n+
    146
    \n+
    147 private:
    \n+
    148 const Index& index_;
    \n+
    149 };
    \n+
    150
    \n+
    151 template<class Index, std::size_t offset=1>
    \n+
    152 class ShiftedStaticMultiIndex
    \n+
    153 {
    \n+
    154 public:
    \n+
    155 ShiftedStaticMultiIndex(const Index& index) :
    \n+
    156 index_(index)
    \n+
    157 {}
    \n+
    158
    \n+
    159 template<std::size_t i>
    \n+
    160 auto operator[](Dune::index_constant<i>) const
    \n+
    161 {
    \n+
    162 if constexpr (i<size()) {
    \n+
    163 return index_[Dune::index_constant<i+offset>{}];
    \n+
    164 } else {
    \n+
    165 return Dune::index_constant<0>{};
    \n+
    166 }
    \n+
    167 }
    \n+
    168
    \n+
    172 ShiftedStaticMultiIndex<Index, offset+1> pop() const
    \n+
    173 {
    \n+
    174 return {index_};
    \n+
    175 }
    \n+
    176
    \n+
    177 static constexpr std::size_t size()
    \n+
    178 {
    \n+
    179 auto fullSize = decltype(Hybrid::size(std::declval<Index>()))::value;
    \n+
    180 if (offset < fullSize)
    \n+
    181 return fullSize - offset;
    \n+
    182 else
    \n+
    183 return 0;
    \n+
    184 }
    \n+
    185
    \n+
    186 private:
    \n+
    187 const Index& index_;
    \n+
    188 };
    \n+
    189
    \n+
    195 template<std::size_t offset, class Index>
    \n+
    196 ShiftedDynamicMultiIndex<Index, offset> shiftedDynamicMultiIndex(const Index& index)
    \n+
    197 {
    \n+
    198 return {index};
    \n+
    199 }
    \n+
    200
    \n+
    201 template<std::size_t offset, class Index>
    \n+
    202 ShiftedStaticMultiIndex<Index, offset> shiftedStaticMultiIndex(const Index& index)
    \n+
    203 {
    \n+
    204 return {index};
    \n+
    205 }
    \n+
    206
    \n+
    207} // namespace Imp
    \n+
    208
    \n+
    209
    \n+
    210
    \n+
    211
    \n+
    212namespace Imp {
    \n+
    213
    \n+
    214template<class Result, class Index>
    \n+
    215struct MultiIndexResolver
    \n+
    216{
    \n+
    217 MultiIndexResolver(const Index& index) :
    \n+
    218 index_(index)
    \n+
    219 {}
    \n+
    220
    \n+
    221 template<class C,
    \n+
    222 typename std::enable_if<not std::is_convertible<C&, Result>::value, int>::type = 0>
    \n+
    223 Result operator()(C&& c)
    \n+
    224 {
    \n+
    225 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);
    \n+
    226 auto&& subIndexResolver = MultiIndexResolver<Result, decltype(subIndex)>(subIndex);
    \n+
    227 return (Result)(hybridIndexAccess(c, index_[Dune::Indices::_0], subIndexResolver));
    \n+
    228 }
    \n+
    229
    \n+
    230 template<class C,
    \n+
    231 typename std::enable_if<std::is_convertible<C&, Result>::value, int>::type = 0>
    \n+
    232 Result operator()(C&& c)
    \n+
    233 {
    \n+
    234 return (Result)(std::forward<C>(c));
    \n+
    235 }
    \n+
    236
    \n+
    237 const Index& index_;
    \n+
    238};
    \n+
    239
    \n+
    240} // namespace Imp
    \n+
    241
    \n+
    242
    \n+
    243
    \n+
    262template<class Result, class C, class MultiIndex>
    \n+
    \n+
    263Result hybridMultiIndexAccess(C&& c, const MultiIndex& index)
    \n+
    264{
    \n+
    265
    \n+
    266 Imp::MultiIndexResolver<Result, MultiIndex> multiIndexResolver(index);
    \n+
    267 return multiIndexResolver(c);
    \n+
    268}
    \n+
    \n+
    269
    \n+
    270
    \n+
    271
    \n+
    272
    \n+
    273
    \n+
    274
    \n+
    275namespace Imp {
    \n+
    276
    \n+
    277 template<class C, class MultiIndex, class IsFinal>
    \n+
    278 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex, const IsFinal& isFinal)
    \n+
    279 {
    \n+
    280 // If c is already considered final simply return it,
    \n+
    281 // else resolve the next multiIndex entry.
    \n+
    282 return Hybrid::ifElse(isFinal(c), [&, c = forwardCapture(std::forward<C>(c))](auto) -> decltype(auto) {
    \n+
    283 assert(multiIndex.size() == 0);
    \n+
    284 return c.forward();
    \n+
    285 }, [&](auto) -> decltype(auto) {
    \n+
    286 auto hasDynamicAccess = callableCheck([](auto&& cc) -> std::void_t<decltype(cc[0])> {});
    \n+
    287
    \n+
    288 // Split multiIndex into first entry and remaining ones.
    \n+
    289 auto i = multiIndex[0];
    \n+
    290 auto tail = multiIndex.pop();
    \n+
    291
    \n+
    292 // Resolve first multiIndex entry by c[multiIndex[0]] and
    \n+
    293 // continue resolving with the remaining remaining ones.
    \n+
    294 // If c has a dynamic operator[] this is straight forward.
    \n+
    295 // Else the dynamic multiIndex[0] has to be translated into
    \n+
    296 // a static one using hybridIndexAccess.
    \n+
    297 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto) {
    \n+
    298 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);
    \n+
    299 }, [&](auto id) -> decltype(auto) {
    \n+
    300 // auto indexRange = range(Hybrid::size(id(c)));
    \n+
    301 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::integer_sequence();
    \n+
    302 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype(auto){
    \n+
    303 // Do rescursion with static version of i
    \n+
    304 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);
    \n+
    305 }, [&]() -> decltype(auto){
    \n+
    306 // As fallback we use c[0] this is needed, because there must be one branch that matches.
    \n+
    307 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail, isFinal);
    \n+
    308 });
    \n+
    309 });
    \n+
    310 });
    \n+
    311 }
    \n+
    312
    \n+
    313 template<class C, class MultiIndex>
    \n+
    314 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n+
    315 {
    \n+
    316 auto isExhausted = Hybrid::equals(Hybrid::size(multiIndex), Dune::Indices::_0);
    \n+
    317 return Hybrid::ifElse(isExhausted, [&, c = forwardCapture(std::forward<C>(c))](auto) -> decltype(auto) {
    \n+
    318 return c.forward();
    \n+
    319 }, [&](auto id) -> decltype(auto) {
    \n+
    320 auto head = multiIndex[Dune::Indices::_0];
    \n+
    321 auto tail = multiIndex.pop();
    \n+
    322
    \n+
    323 return Imp::resolveStaticMultiIndex(id(c)[head], tail);
    \n+
    324 });
    \n+
    325 }
    \n+
    326
    \n+
    327} // namespace Imp
    \n+
    328
    \n+
    329
    \n+
    330
    \n+
    353template<class C, class MultiIndex, class IsFinal>
    \n+
    \n+
    354constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex, const IsFinal& isFinal)
    \n+
    355{
    \n+
    356 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), isFinal);
    \n+
    357}
    \n+
    \n+
    358
    \n+
    375template<class C, class MultiIndex>
    \n+
    \n+
    376constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n+
    377{
    \n+
    378 auto hasNoIndexAccess = negatePredicate(callableCheck([](auto&& cc) -> std::void_t<decltype(cc[Dune::Indices::_0])> {}));
    \n+
    379 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);
    \n+
    380}
    \n+
    \n+
    381
    \n+
    397template<class C, class MultiIndex>
    \n+
    \n+
    398constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n+
    399{
    \n+
    400 return Imp::resolveStaticMultiIndex(std::forward<C>(c), Imp::shiftedStaticMultiIndex<0>(multiIndex));
    \n+
    401}
    \n+
    \n+
    402
    \n+
    403
    \n+
    404
    \n+
    405} // namespace Dune::Functions
    \n+
    406} // namespace Dune
    \n+
    407
    \n+
    408
    \n+
    409
    \n+
    410#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n+\n+
    auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))
    Provide operator[] index-access for containers.
    Definition indexaccess.hh:63
    \n+
    constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:398
    \n+
    auto callableCheck(Expression f)
    Create a predicate for checking validity of expressions.
    Definition utility.hh:279
    \n+
    constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:354
    \n+
    Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:263
    \n+
    auto negatePredicate(Check check)
    Negate given predicate.
    Definition utility.hh:304
    \n
    Definition polynomial.hh:10
    \n-
    Definition polynomial.hh:11
    \n-
    Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)
    Definition multiindex.hh:71
    \n-
    A statically sized MultiIndex type.
    Definition multiindex.hh:25
    \n-
    static constexpr std::size_t size()
    Definition multiindex.hh:27
    \n-
    friend std::size_t hash_value(const StaticMultiIndex &v) noexcept
    Definition multiindex.hh:29
    \n-
    static constexpr std::size_t size()
    Definition multiindex.hh:52
    \n-
    friend std::size_t hash_value(const StaticMultiIndex &v) noexcept
    Definition multiindex.hh:58
    \n+
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:372
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,108 +1,355 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n-4#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+4#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n 5\n-6#include \n-7#include \n-8#include \n+6\n+7#include \n+8#include \n 9\n-10#include \n-11\n-12\n-13namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n-14\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\n 16\n-22template\n-_\b2_\b3class _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx :\n-24 public std::array\n-25{\n-26public:\n-_\b2_\b7 static constexpr std::size_t _\bs_\bi_\bz_\be() { return n; }\n-28\n-_\b2_\b9 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-30 return hash_range(v.begin(), v.end());\n-31 }\n-32\n+17\n+18namespace _\bD_\bu_\bn_\be {\n+19namespace Functions {\n+20\n+21\n+22namespace Imp {\n+23\n+24namespace Concept {\n+25\n+26template\n+27struct HasDynamicIndexAccess\n+28{\n+29 template\n+30 auto require(C&& c) -> decltype(\n+31 c[std::declval()]\n+32 );\n 33};\n 34\n-35\n-36\n-46template\n-_\b4_\b7class _\bS_\bt_\ba_\bt_\bi_\bc_\bM_\bu_\bl_\bt_\bi_\bI_\bn_\bd_\be_\bx :\n-48 public std::array\n-49{\n-50public:\n-51\n-_\b5_\b2 static constexpr std::size_t _\bs_\bi_\bz_\be() { return 1; }\n-53\n-_\b5_\b4 operator const size_type& () const {\n-55 return (*this)[0];\n-56 }\n-57\n-_\b5_\b8 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-59 return hash_range(v.begin(), v.end());\n-60 }\n-61\n-_\b6_\b2 operator size_type& () {\n-63 return (*this)[0];\n-64 }\n-65\n-66};\n-67\n+35struct HasStaticIndexAccess\n+36{\n+37 template\n+38 auto require(C&& c) -> decltype(\n+39 c[Dune::Indices::_0]\n+40 );\n+41};\n+42\n+43} // namespace Concept\n+44\n+45} // namespace Imp\n+46\n+47\n+48\n+61template, C>(), int>::type = 0>\n+_\b6_\b3auto _\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+64 -> decltype(f(c[i]))\n+65{\n+66 return f(c[i]);\n+67}\n 68\n-69\n-70template\n-_\b7_\b1inline 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-72 for (const auto& ci : c)\n-73 stream << ci << \" \";\n-74 return stream;\n-75}\n-76\n-77\n-78\n-79} // namespace Dune::Functions\n-80\n-81template\n-_\b8_\b2struct std::tuple_size< _\bD_\bu_\bn_\be::Functions::StaticMultiIndex >\n-83 : std::integral_constant { };\n-84\n-85DUNE_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-86\n-87#endif // DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+86template, C>(), int>::type = 0>\n+_\b8_\b8decltype(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+89{\n+90 using Size = decltype(Hybrid::size(c));\n+91 return Hybrid::switchCases(std::make_index_sequence(), i,\n+92 [&](const auto& ii) -> decltype(auto){\n+93 return f(c[ii]);\n+94 }, [&]() -> decltype(auto){\n+95 return f(c[Dune::Indices::_0]);\n+96 });\n+97}\n+98\n+99\n+100namespace Imp {\n+101\n+115 template\n+116 class ShiftedDynamicMultiIndex\n+117 {\n+118 public:\n+119 ShiftedDynamicMultiIndex(const Index& index) :\n+120 index_(index)\n+121 {}\n+122\n+123 std::size_t operator[](std::size_t position) const\n+124 {\n+125 if (position pop() const\n+135 {\n+136 return {index_};\n+137 }\n+138\n+139 std::size_t size() const\n+140 {\n+141 if (offset < index_.size())\n+142 return index_.size() - offset;\n+143 else\n+144 return 0;\n+145 }\n+146\n+147 private:\n+148 const Index& index_;\n+149 };\n+150\n+151 template\n+152 class ShiftedStaticMultiIndex\n+153 {\n+154 public:\n+155 ShiftedStaticMultiIndex(const Index& index) :\n+156 index_(index)\n+157 {}\n+158\n+159 template\n+160 auto operator[](Dune::index_constant) const\n+161 {\n+162 if constexpr (i{}];\n+164 } else {\n+165 return Dune::index_constant<0>{};\n+166 }\n+167 }\n+168\n+172 ShiftedStaticMultiIndex pop() const\n+173 {\n+174 return {index_};\n+175 }\n+176\n+177 static constexpr std::size_t size()\n+178 {\n+179 auto fullSize = decltype(Hybrid::size(std::declval()))::value;\n+180 if (offset < fullSize)\n+181 return fullSize - offset;\n+182 else\n+183 return 0;\n+184 }\n+185\n+186 private:\n+187 const Index& index_;\n+188 };\n+189\n+195 template\n+196 ShiftedDynamicMultiIndex shiftedDynamicMultiIndex(const\n+Index& index)\n+197 {\n+198 return {index};\n+199 }\n+200\n+201 template\n+202 ShiftedStaticMultiIndex shiftedStaticMultiIndex(const Index&\n+index)\n+203 {\n+204 return {index};\n+205 }\n+206\n+207} // namespace Imp\n+208\n+209\n+210\n+211\n+212namespace Imp {\n+213\n+214template\n+215struct MultiIndexResolver\n+216{\n+217 MultiIndexResolver(const Index& index) :\n+218 index_(index)\n+219 {}\n+220\n+221 template::value, int>::\n+type = 0>\n+223 Result operator()(C&& c)\n+224 {\n+225 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);\n+226 auto&& subIndexResolver = MultiIndexResolver\n+(subIndex);\n+227 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+228 }\n+229\n+230 template::value, int>::type\n+= 0>\n+232 Result operator()(C&& c)\n+233 {\n+234 return (Result)(std::forward(c));\n+235 }\n+236\n+237 const Index& index_;\n+238};\n+239\n+240} // namespace Imp\n+241\n+242\n+243\n+262template\n+_\b2_\b6_\b3Result _\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+264{\n+265\n+266 Imp::MultiIndexResolver multiIndexResolver(index);\n+267 return multiIndexResolver(c);\n+268}\n+269\n+270\n+271\n+272\n+273\n+274\n+275namespace Imp {\n+276\n+277 template\n+278 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n+multiIndex, const IsFinal& isFinal)\n+279 {\n+280 // If c is already considered final simply return it,\n+281 // else resolve the next multiIndex entry.\n+282 return Hybrid::ifElse(isFinal(c), [&, c = _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(std::forward\n+(c))](auto) -> decltype(auto) {\n+283 assert(multiIndex.size() == 0);\n+284 return c.forward();\n+285 }, [&](auto) -> decltype(auto) {\n+286 auto hasDynamicAccess = _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk([](auto&& cc) -> std::void_t {});\n+287\n+288 // Split multiIndex into first entry and remaining ones.\n+289 auto i = multiIndex[0];\n+290 auto tail = multiIndex.pop();\n+291\n+292 // Resolve first multiIndex entry by c[multiIndex[0]] and\n+293 // continue resolving with the remaining remaining ones.\n+294 // If c has a dynamic operator[] this is straight forward.\n+295 // Else the dynamic multiIndex[0] has to be translated into\n+296 // a static one using hybridIndexAccess.\n+297 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto) {\n+298 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);\n+299 }, [&](auto id) -> decltype(auto) {\n+300 // auto indexRange = range(Hybrid::size(id(c)));\n+301 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::\n+integer_sequence();\n+302 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype\n+(auto){\n+303 // Do rescursion with static version of i\n+304 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);\n+305 }, [&]() -> decltype(auto){\n+306 // As fallback we use c[0] this is needed, because there must be one branch\n+that matches.\n+307 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail,\n+isFinal);\n+308 });\n+309 });\n+310 });\n+311 }\n+312\n+313 template\n+314 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex&\n+multiIndex)\n+315 {\n+316 auto isExhausted = Hybrid::equals(Hybrid::size(multiIndex), Dune::Indices::\n+_0);\n+317 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+318 return c.forward();\n+319 }, [&](auto id) -> decltype(auto) {\n+320 auto head = multiIndex[Dune::Indices::_0];\n+321 auto tail = multiIndex.pop();\n+322\n+323 return Imp::resolveStaticMultiIndex(id(c)[head], tail);\n+324 });\n+325 }\n+326\n+327} // namespace Imp\n+328\n+329\n+330\n+353template\n+_\b3_\b5_\b4constexpr 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+355{\n+356 return Imp::resolveDynamicMultiIndex(std::forward(c), Imp::\n+shiftedDynamicMultiIndex<0>(multiIndex), isFinal);\n+357}\n+358\n+375template\n+_\b3_\b7_\b6constexpr 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+377{\n+378 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+379 return Imp::resolveDynamicMultiIndex(std::forward(c), Imp::\n+shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);\n+380}\n+381\n+397template\n+_\b3_\b9_\b8constexpr 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+399{\n+400 return Imp::resolveStaticMultiIndex(std::forward(c), Imp::\n+shiftedStaticMultiIndex<0>(multiIndex));\n+401}\n+402\n+403\n+404\n+405} // namespace Dune::Functions\n+406} // namespace Dune\n+407\n+408\n+409\n+410#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+_\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:63\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:398\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:279\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:354\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:263\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:304\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:11\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:71\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:25\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:27\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: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>_\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:52\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:58\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:372\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: functionfromcallable.hh File Reference\n+dune-functions: differentiablefunctionfromcallables.hh File Reference\n \n \n \n \n \n \n \n@@ -71,35 +71,49 @@\n \n
    \n \n
    \n \n-
    functionfromcallable.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    differentiablefunctionfromcallables.hh File Reference
    \n \n
    \n-
    #include <dune/common/function.hh>
    \n-#include <dune/functions/common/signature.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 \n-\n-\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >
     Wrap a callable object as Dune::Function or Dune::VirtualFunction. More...
    class  Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >
     Wrap a list of callable objects as derivative sequence modelling Concept::DifferentiableFunction<Range(Domain), DerivativeTraits> More...
     
    class  Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >
     Wrap a list of callable objects as derivative sequence modelling Concept::DifferentiableFunction<Range(Domain), DerivativeTraits> More...
     
    \n \n \n \n \n \n+

    \n Namespaces

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

    \n+Functions

    template<class Signature , template< class > class DerivativeTraits, class... F>
    DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > Dune::Functions::makeDifferentiableFunctionFromCallables (const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)
     Create a DifferentiableFunction from callables.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,46 @@\n dune-functions\u00a02.9.0\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-functionfromcallable.hh File Reference\n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+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:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bF_\b,\n- _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>\n-\u00a0 Wrap a callable object as Dune::Function or Dune::VirtualFunction.\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+\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: functionfromcallable.hh Source File\n+dune-functions: differentiablefunctionfromcallables.hh Source File\n \n \n \n \n \n \n \n@@ -74,81 +74,159 @@\n \n \n
    \n
    \n-
    functionfromcallable.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#ifndef DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n
    5
    \n-
    6#include <dune/common/function.hh>
    \n-
    7
    \n-\n+
    6
    \n+
    7#include <dune/common/typeutilities.hh>
    \n+
    8#include <dune/common/hybridutilities.hh>
    \n
    9
    \n-
    10
    \n-
    11namespace Dune {
    \n-
    12namespace Functions {
    \n-
    13
    \n+\n+
    11
    \n+\n+\n
    14
    \n
    15
    \n-
    16template<class Signature, class F,
    \n-
    17 class FunctionInterface = typename Dune::VirtualFunction<
    \n-
    18 typename SignatureTraits<Signature>::RawDomain,
    \n-
    19 typename SignatureTraits<Signature>::RawRange> >
    \n-\n+
    16
    \n+
    17namespace Dune {
    \n+
    18namespace Functions {
    \n+
    19
    \n+
    20
    \n
    21
    \n-
    37template<class Range, class Domain, class F, class FunctionInterface>
    \n-
    \n-
    38class FunctionFromCallable<Range(Domain), F, FunctionInterface> :
    \n-
    39 public FunctionInterface
    \n-
    40{
    \n-
    41public:
    \n-
    42
    \n-
    \n-\n-
    53 f_(f)
    \n-
    54 {}
    \n-
    \n+
    22template<class Signature, template<class> class DerivativeTraits, class... Callables>
    \n+\n+
    24
    \n+
    25
    \n+
    26
    \n+
    43template<class Range, class Domain, template<class> class DerivativeTraits, class F>
    \n+
    \n+
    44class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F>
    \n+
    45{
    \n+
    46public:
    \n+
    47
    \n+
    49 using Signature = Range(Domain);
    \n+
    50
    \n+\n+
    52
    \n+
    54 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n
    55
    \n-
    \n-\n-
    65 f_(f)
    \n-
    66 {}
    \n-
    \n-
    67
    \n-
    \n-
    73 void evaluate(const Domain& x, Range&y) const
    \n-
    74 {
    \n-
    75 y = f_(x);
    \n-
    76 }
    \n-
    \n-
    77
    \n-
    78private:
    \n-
    79 F f_;
    \n-
    80};
    \n-
    \n-
    81
    \n-
    82
    \n-
    83
    \n-
    84} // namespace Functions
    \n-
    85} // namespace Dune
    \n+\n+
    58
    \n+
    60 template<class FF, disableCopyMove<DifferentiableFunctionFromCallables, FF> = 0>
    \n+
    \n+\n+
    62 f_(std::forward<FF>(f))
    \n+
    63 {}
    \n+
    \n+
    64
    \n+
    \n+
    66 Range operator() (const Domain& x) const
    \n+
    67 {
    \n+
    68 return f_(x);
    \n+
    69 }
    \n+
    \n+
    70
    \n+
    \n+\n+
    77 {
    \n+
    78 DUNE_THROW(Dune::NotImplemented, "Derivative not implemented");
    \n+
    79 }
    \n+
    \n+
    80
    \n+
    81private:
    \n+
    82 F f_;
    \n+
    83};
    \n+
    \n+
    84
    \n+
    85
    \n
    86
    \n-
    87#endif //DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH
    \n-\n+
    103template<class Range, class Domain, template<class> class DerivativeTraits, class F, class DF, class... Derivatives>
    \n+
    \n+
    104class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F, DF, Derivatives...>
    \n+
    105{
    \n+
    106public:
    \n+
    107
    \n+
    108 using Signature = Range(Domain);
    \n+\n+
    110 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n+
    111
    \n+
    112 using Derivative = DifferentiableFunctionFromCallables<DerivativeSignature, DerivativeTraits, DF, Derivatives...>;
    \n+
    113
    \n+
    120 template<class FF, class DFF, class... DDFF>
    \n+
    \n+
    121 DifferentiableFunctionFromCallables(FF&& f, DFF&& df, DDFF&&... ddf) :
    \n+
    122 f_(std::forward<FF>(f)),
    \n+
    123 df_(std::forward<DFF>(df), std::forward<DDFF>(ddf)...)
    \n+
    124 {}
    \n+
    \n+
    125
    \n+
    \n+
    127 Range operator() (const Domain& x) const
    \n+
    128 {
    \n+
    129 return f_(x);
    \n+
    130 }
    \n+
    \n+
    131
    \n+
    \n+\n+
    138 {
    \n+
    139 return t.df_;
    \n+
    140 }
    \n+
    \n+
    141
    \n+
    142private:
    \n+
    143 F f_;
    \n+
    144 Derivative df_;
    \n+
    145};
    \n+
    \n+
    146
    \n+
    147
    \n+
    162template<class Signature, template<class> class DerivativeTraits, class... F>
    \n+
    163DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>
    \n+
    \n+\n+
    165{
    \n+
    166 return DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>(f...);
    \n+
    167}
    \n+
    \n+
    168
    \n+
    169
    \n+
    170
    \n+
    171} // namespace Functions
    \n+
    172} // namespace Dune
    \n+
    173
    \n+
    174#endif //DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n+\n+\n+\n+
    friend Derivative derivative(const DifferentiableFunctionFromCallables &t)
    Get derivative of DifferentiableFunctionFromCallables.
    Definition differentiablefunctionfromcallables.hh:76
    \n+
    DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > makeDifferentiableFunctionFromCallables(const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)
    Create a DifferentiableFunction from callables.
    Definition differentiablefunctionfromcallables.hh:164
    \n
    Definition polynomial.hh:10
    \n-
    Definition functionfromcallable.hh:20
    \n-
    FunctionFromCallable(F &&f)
    Create VirtualFunction from callable object.
    Definition functionfromcallable.hh:52
    \n-
    void evaluate(const Domain &x, Range &y) const
    Evaluate function.
    Definition functionfromcallable.hh:73
    \n-
    FunctionFromCallable(const F &f)
    Create VirtualFunction from callable object.
    Definition functionfromcallable.hh:64
    \n+
    Definition differentiablefunction.hh:29
    \n+
    Definition differentiablefunctionfromcallables.hh:23
    \n+
    DifferentiableFunctionFromCallables(FF &&f)
    Constructor copying the given function.
    Definition differentiablefunctionfromcallables.hh:61
    \n+
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition differentiablefunctionfromcallables.hh:51
    \n+
    Range(Domain) Signature
    Signature of function.
    Definition differentiablefunctionfromcallables.hh:49
    \n+
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Signature of derivative.
    Definition differentiablefunctionfromcallables.hh:54
    \n+
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Definition differentiablefunctionfromcallables.hh:110
    \n+\n+
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition differentiablefunctionfromcallables.hh:109
    \n+
    DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)
    Constructor copying the given functions.
    Definition differentiablefunctionfromcallables.hh:121
    \n+
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n+
    Definition signature.hh:102
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,81 +1,190 @@\n dune-functions\u00a02.9.0\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-functionfromcallable.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#ifndef DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n-4#define DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n+4#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n 5\n-6#include \n-7\n-8#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+6\n+7#include \n+8#include \n 9\n-10\n-11namespace _\bD_\bu_\bn_\be {\n-12namespace Functions {\n-13\n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\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/_\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+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n 14\n 15\n-16template::RawDomain,\n-19 typename SignatureTraits::RawRange> >\n-_\b2_\b0class _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be;\n+16\n+17namespace _\bD_\bu_\bn_\be {\n+18namespace Functions {\n+19\n+20\n 21\n-37template\n-_\b3_\b8class _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be :\n-39 public FunctionInterface\n-40{\n-41public:\n-42\n-_\b5_\b2 _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(F&& f) :\n-53 f_(f)\n-54 {}\n+22template class DerivativeTraits, class...\n+Callables>\n+_\b2_\b3class _\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+24\n+25\n+26\n+43template class DerivativeTraits,\n+class F>\n+_\b4_\b4class _\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+45{\n+46public:\n+47\n+_\b4_\b9 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n+50\n+_\b5_\b1 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+52\n+_\b5_\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 55\n-_\b6_\b4 _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(const F& f) :\n-65 f_(f)\n-66 {}\n-67\n-_\b7_\b3 void _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const Domain& x, Range&y) const\n-74 {\n-75 y = f_(x);\n-76 }\n-77\n-78private:\n-79 F f_;\n-80};\n-81\n-82\n-83\n-84} // namespace Functions\n-85} // namespace Dune\n+_\b5_\b7 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+58\n+60 template\n+= 0>\n+_\b6_\b1 _\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+62 f_(std::forward(f))\n+63 {}\n+64\n+_\b6_\b6 Range operator() (const Domain& x) const\n+67 {\n+68 return f_(x);\n+69 }\n+70\n+_\b7_\b6 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+77 {\n+78 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n+79 }\n+80\n+81private:\n+82 F f_;\n+83};\n+84\n+85\n 86\n-87#endif //DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n+103template class DerivativeTraits,\n+class F, class DF, class... Derivatives>\n+_\b1_\b0_\b4class _\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+105{\n+106public:\n+107\n+_\b1_\b0_\b8 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n+_\b1_\b0_\b9 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_\b0 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+111\n+_\b1_\b1_\b2 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+113\n+120 template\n+_\b1_\b2_\b1 _\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+122 f_(std::forward(f)),\n+123 df_(std::forward(df), std::forward(ddf)...)\n+124 {}\n+125\n+_\b1_\b2_\b7 Range operator() (const Domain& x) const\n+128 {\n+129 return f_(x);\n+130 }\n+131\n+_\b1_\b3_\b7 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+138 {\n+139 return t.df_;\n+140 }\n+141\n+142private:\n+143 F f_;\n+144 Derivative df_;\n+145};\n+146\n+147\n+162template class DerivativeTraits, class...\n+F>\n+163DifferentiableFunctionFromCallables\n+_\b1_\b6_\b4 _\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+165{\n+166 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+167}\n+168\n+169\n+170\n+171} // namespace Functions\n+172} // namespace Dune\n+173\n+174#endif //DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n _\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:76\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:164\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionfromcallable.hh:20\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bF_\b,_\b _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>_\b:_\b:\n-_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-FunctionFromCallable(F &&f)\n-Create VirtualFunction from callable object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionfromcallable.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bF_\b,_\b _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>_\b:_\b:\n-_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n-void evaluate(const Domain &x, Range &y) const\n-Evaluate function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionfromcallable.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bF_\b,_\b _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>_\b:_\b:\n-_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-FunctionFromCallable(const F &f)\n-Create VirtualFunction from callable object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionfromcallable.hh:64\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:29\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:23\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:61\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:51\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:49\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:54\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: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_\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:108\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:109\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:121\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:56\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:102\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: 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.9.0\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/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: differentiablefunction.hh Source File\n+dune-functions: signature.hh Source File\n \n \n \n \n \n \n \n@@ -74,138 +74,164 @@\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#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n
    5
    \n
    6#include <type_traits>
    \n-
    7
    \n-
    8#include <dune/common/typeutilities.hh>
    \n-
    9
    \n-\n-\n-\n-\n-\n-\n-
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n-
    19
    \n-
    20
    \n+
    7#include <tuple>
    \n+
    8
    \n+\n+
    10
    \n+
    11namespace Dune {
    \n+
    12namespace Functions {
    \n+
    13
    \n+
    19template<typename F>
    \n+\n
    21
    \n-
    22/*
    \n-
    23 * Default implementation is empty
    \n-
    24 * The actual implementation is only given if Signature is an type
    \n-
    25 * describing a function signature as Range(Domain).
    \n-
    26 */
    \n-
    27template<class Signature, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n-
    \n-\n-
    29{};
    \n-
    \n-
    30
    \n-
    31
    \n-
    32
    \n-
    33namespace Imp
    \n-
    34{
    \n-
    35
    \n-
    37 template<class S, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    38 struct DifferentiableFunctionTraits
    \n-
    39 {
    \n-
    41 using Signature = S;
    \n+
    22#ifndef DOXYGEN
    \n+
    23template<typename F>
    \n+
    24struct IsCallable
    \n+
    25{
    \n+
    26 struct yes { std::size_t dummy[2]; };
    \n+
    27 struct no { std::size_t dummy[1]; };
    \n+
    28
    \n+
    29 template<typename C>
    \n+
    30 static yes test(const decltype(&C::operator()) *);
    \n+
    31 template<typename C>
    \n+
    32 static no test(...);
    \n+
    33
    \n+
    34 enum { value = (sizeof(test<F>(0)) == sizeof(yes)) };
    \n+
    35};
    \n+
    36
    \n+
    37template<typename R, typename D>
    \n+
    38struct IsCallable<R(D)>
    \n+
    39{
    \n+
    40 enum { value = true };
    \n+
    41};
    \n
    42
    \n-
    44 using Range = typename SignatureTraits<Signature>::Range;
    \n-
    45
    \n-
    47 using Domain = typename SignatureTraits<Signature>::Domain;
    \n-
    48
    \n-
    50 using DerivativeSignature = typename SignatureTraits<Signature>::template DerivativeSignature<DerivativeTraits>;
    \n-
    51
    \n-\n-
    54
    \n-
    56 using Concept = DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>;
    \n+
    43template<typename R, typename D>
    \n+
    44struct IsCallable<R(*)(D)>
    \n+
    45{
    \n+
    46 enum { value = true };
    \n+
    47};
    \n+
    48#endif
    \n+
    49
    \n+
    55template<class Signature, bool isCallable = IsCallable<Signature>::value >
    \n+\n
    57
    \n-
    59 template<class B>
    \n-
    60 using Model = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n-
    61 };
    \n-
    62}
    \n-
    63
    \n+
    58#ifndef DOXYGEN
    \n+
    60template<class T>
    \n+
    61struct SignatureTraits<T, true>
    \n+
    62 : public SignatureTraits<decltype(&T::operator()), true>
    \n+
    63{};
    \n
    64
    \n-
    65
    \n-
    80template<class Range, class Domain, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    \n-
    81class DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize> :
    \n-
    82 public TypeErasureBase<
    \n-
    83 typename Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::Concept,
    \n-
    84 Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::template Model>
    \n-
    85{
    \n-
    86 using Traits = Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>;
    \n-
    87
    \n-\n+
    66template <typename C, typename R, typename D>
    \n+
    67struct SignatureTraits<R(C::*)(D) const, true>
    \n+
    68 : public SignatureTraits<R(D), true>
    \n+
    69{};
    \n+
    70
    \n+
    72template <typename C, typename R, typename D>
    \n+
    73struct SignatureTraits<R(C::*)(D), true>
    \n+
    74 : public SignatureTraits<R(D), true>
    \n+
    75{};
    \n+
    76
    \n+
    78template <typename R, typename D>
    \n+
    79struct SignatureTraits<R(*)(D), true>
    \n+
    80 : public SignatureTraits<R(D), true>
    \n+
    81{};
    \n+
    82
    \n+
    84template<class R, class D>
    \n+
    85struct SignatureTraits<R(D), true>
    \n+
    86{
    \n+
    87 using Range = R;
    \n+
    88 using Domain = D;
    \n
    89
    \n-
    90 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n-
    91
    \n-
    92public:
    \n-
    93
    \n-
    105 template<class F, disableCopyMove<DifferentiableFunction, F> = 0 >
    \n-
    \n-\n-
    107 Base(std::forward<F>(f))
    \n-
    108 {
    \n-
    109 static_assert(Dune::Functions::Concept::isFunction<F, Range(Domain)>(), "Trying to construct a DifferentiableFunction from type that does not model the Function concept");
    \n-
    110 }
    \n-
    \n-
    111
    \n-\n-
    114
    \n-
    \n-
    118 Range operator() (const Domain& x) const
    \n-
    119 {
    \n-
    120 return this->asInterface().operator()(x);
    \n-
    121 }
    \n+
    90 using RawRange = typename std::decay<Range>::type;
    \n+
    91 using RawDomain = typename std::decay<Domain>::type;
    \n+
    92
    \n+
    93 using RawSignature = RawRange(RawDomain);
    \n+
    94
    \n+
    95 template<template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+
    96 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n+
    97};
    \n+
    98#endif
    \n+
    99
    \n+
    100
    \n+
    101template<class Signature, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+\n+
    103
    \n+
    113template<class Range, class Domain, template<class> class DerivativeTraitsT>
    \n+
    \n+
    114struct SignatureTag<Range(Domain), DerivativeTraitsT>
    \n+
    115{
    \n+
    116 using Signature = Range(Domain);
    \n+
    117
    \n+
    118 template<class T>
    \n+
    119 using DerivativeTraits = DerivativeTraitsT<T>;
    \n+
    120};
    \n
    \n+
    121
    \n
    122
    \n-
    \n-
    130 friend DerivativeInterface derivative(const DifferentiableFunction& t)
    \n-
    131 {
    \n-
    132 return t.asInterface().derivative();
    \n-
    133 }
    \n-
    \n-
    134};
    \n-
    \n-
    135
    \n-
    136
    \n-
    137
    \n-
    138}} // namespace Dune::Functions
    \n+
    123
    \n+
    132template<class Range, class Domain, template<class> class DerivativeTraits>
    \n+
    \n+
    133auto derivativeSignatureTag(SignatureTag<Range(Domain), DerivativeTraits> tag)
    \n+
    134{
    \n+
    135 using DerivativeRange = typename DerivativeTraits<Range(Domain)>::Range;
    \n+\n+
    137}
    \n+
    \n+
    138
    \n
    139
    \n
    140
    \n-
    141
    \n-
    142#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:130
    \n+
    154template<std::size_t maxOrder, class Signature, template<class> class DerivativeTraits>
    \n+
    \n+\n+
    156{
    \n+
    157 if constexpr (maxOrder==0) {
    \n+
    158 // If maxOrder== 0 we just need the given SignatureTag
    \n+
    159 return std::make_tuple(tag);
    \n+
    160 } else {
    \n+
    161 // else we first construct the tail tuple with SignatureTags for derivatives
    \n+
    162 // of order 1 to maxOrder
    \n+
    163 auto tailTagsTuple = derivativeSignatureTags<std::size_t(maxOrder-1)>(derivativeSignatureTag(tag));
    \n+
    164 // and prepend this with the given SignatureTag.
    \n+
    165 // This is done by unpacking the tail tuple with apply().
    \n+
    166 return std::apply([&](auto&&... tailTags){
    \n+
    167 return std::make_tuple(tag, tailTags...);
    \n+
    168 }, tailTagsTuple);
    \n+
    169 }
    \n+
    170}
    \n+
    \n+
    171
    \n+
    172
    \n+
    173
    \n+
    174} // namespace Functions
    \n+
    175} // namespace Dune
    \n+
    176
    \n+
    177#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n+\n+
    auto derivativeSignatureTag(SignatureTag< Range(Domain), DerivativeTraits > tag)
    Construct SignatureTag for derivative.
    Definition signature.hh:133
    \n+
    auto derivativeSignatureTags(Dune::Functions::SignatureTag< Signature, DerivativeTraits > tag)
    Construct SignatureTags for derivatives.
    Definition signature.hh:155
    \n
    Definition polynomial.hh:10
    \n-
    Definition differentiablefunction.hh:29
    \n-
    DifferentiableFunction(F &&f)
    Construct from function.
    Definition differentiablefunction.hh:106
    \n-\n+
    Helper class to check that F is callable.
    Definition signature.hh:20
    \n
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n-
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:165
    \n+
    Definition signature.hh:102
    \n+
    DerivativeTraitsT< T > DerivativeTraits
    Definition signature.hh:119
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,151 +1,178 @@\n dune-functions\u00a02.9.0\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#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n-4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n+4#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n 5\n 6#include \n-7\n-8#include \n-9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\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#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n-13#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/_\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/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-16\n-17namespace _\bD_\bu_\bn_\be {\n-18namespace Functions {\n-19\n-20\n+7#include \n+8\n+9#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+10\n+11namespace _\bD_\bu_\bn_\be {\n+12namespace Functions {\n+13\n+19template\n+_\b2_\b0struct _\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be;\n 21\n-22/*\n-23 * Default implementation is empty\n-24 * The actual implementation is only given if Signature is an type\n-25 * describing a function signature as Range(Domain).\n-26 */\n-27template class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-_\b2_\b8class _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-29{};\n-30\n-31\n-32\n-33namespace Imp\n-34{\n-35\n-37 template class DerivativeTraits, size_t bufferSize>\n-38 struct DifferentiableFunctionTraits\n-39 {\n-41 using Signature = S;\n+22#ifndef DOXYGEN\n+23template\n+24struct _\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+25{\n+26 struct yes { std::size_t dummy[2]; };\n+27 struct no { std::size_t dummy[1]; };\n+28\n+29 template\n+30 static yes test(const decltype(&C::operator()) *);\n+31 template\n+32 static no test(...);\n+33\n+34 enum { value = (sizeof(test(0)) == sizeof(yes)) };\n+35};\n+36\n+37template\n+38struct IsCallable\n+39{\n+40 enum { value = true };\n+41};\n 42\n-44 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-45\n-47 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-48\n-50 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-51\n-53 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-54\n-56 using Concept = DifferentiableFunctionWrapperInterface;\n+43template\n+44struct IsCallable\n+45{\n+46 enum { value = true };\n+47};\n+48#endif\n+49\n+55template::value >\n+_\b5_\b6struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs {};\n 57\n-59 template\n-60 using Model = DifferentiableFunctionWrapperImplementation;\n-61 };\n-62}\n-63\n+58#ifndef DOXYGEN\n+60template\n+61struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n+62 : public _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n+63{};\n 64\n-65\n-80template class DerivativeTraits,\n-size_t bufferSize>\n-_\b8_\b1class _\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-82 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n-83 typename Imp::DifferentiableFunctionTraits::Concept,\n-84 Imp::DifferentiableFunctionTraits::template Model>\n-85{\n-86 using Traits = Imp::DifferentiableFunctionTraits;\n-87\n-88 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+66template \n+67struct SignatureTraits\n+68 : public SignatureTraits\n+69{};\n+70\n+72template \n+73struct SignatureTraits\n+74 : public SignatureTraits\n+75{};\n+76\n+78template \n+79struct SignatureTraits\n+80 : public SignatureTraits\n+81{};\n+82\n+84template\n+85struct SignatureTraits\n+86{\n+87 using Range = R;\n+88 using Domain = D;\n 89\n-90 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-91\n-92public:\n-93\n-105 template = 0 >\n-_\b1_\b0_\b6 _\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-107 _\bB_\ba_\bs_\be(std::forward(f))\n-108 {\n-109 static_assert(Dune::Functions::Concept::isFunction(),\n-\"Trying to construct a DifferentiableFunction from type that does not model the\n-Function concept\");\n-110 }\n-111\n-_\b1_\b1_\b3 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n-114\n-_\b1_\b1_\b8 Range operator() (const Domain& x) const\n-119 {\n-120 return this->asInterface().operator()(x);\n-121 }\n+90 using RawRange = typename std::decay::type;\n+91 using RawDomain = typename std::decay::type;\n+92\n+93 using RawSignature = RawRange(RawDomain);\n+94\n+95 template class DerivativeTraits=DefaultDerivativeTraits>\n+96 using DerivativeSignature = typename DerivativeTraits::Range\n+(Domain);\n+97};\n+98#endif\n+99\n+100\n+101template class\n+DerivativeTraits=DefaultDerivativeTraits>\n+_\b1_\b0_\b2struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg;\n+103\n+113template class DerivativeTraitsT>\n+_\b1_\b1_\b4struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n+115{\n+_\b1_\b1_\b6 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n+117\n+118 template\n+_\b1_\b1_\b9 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs = DerivativeTraitsT;\n+120};\n+121\n 122\n-_\b1_\b3_\b0 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-131 {\n-132 return t.asInterface().derivative();\n-133 }\n-134};\n-135\n-136\n-137\n-138}} // namespace Dune::Functions\n+123\n+132template class DerivativeTraits>\n+_\b1_\b3_\b3auto _\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+134{\n+135 using DerivativeRange = typename DerivativeTraits::Range;\n+136 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+137}\n+138\n 139\n 140\n-141\n-142#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n-_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\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-_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+154template class\n+DerivativeTraits>\n+_\b1_\b5_\b5auto _\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+156{\n+157 if constexpr (maxOrder==0) {\n+158 // If maxOrder== 0 we just need the given SignatureTag\n+159 return std::make_tuple(tag);\n+160 } else {\n+161 // else we first construct the tail tuple with SignatureTags for\n+derivatives\n+162 // of order 1 to maxOrder\n+163 auto tailTagsTuple = _\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+164 // and prepend this with the given SignatureTag.\n+165 // This is done by unpacking the tail tuple with apply().\n+166 return std::apply([&](auto&&... tailTags){\n+167 return std::make_tuple(tag, tailTags...);\n+168 }, tailTagsTuple);\n+169 }\n+170}\n+171\n+172\n+173\n+174} // namespace Functions\n+175} // namespace Dune\n+176\n+177#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n _\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_\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:130\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:133\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:155\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:29\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:106\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:20\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:56\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:165\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:102\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:119\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:116\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: signature.hh File Reference\n+dune-functions: staticforloop.hh File Reference\n \n \n \n \n \n \n \n@@ -70,52 +70,38 @@\n \n
    \n
    \n \n-
    signature.hh File Reference
    \n+
    staticforloop.hh File Reference
    \n
    \n
    \n-
    #include <type_traits>
    \n-#include <tuple>
    \n-#include <dune/functions/common/defaultderivativetraits.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-Classes

    struct  Dune::Functions::SignatureTraits< Signature, isCallable >
     Helper class to deduce the signature of a callable. 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+\n+\n+\n

    \n Functions

    template<class Range , class Domain , template< class > class DerivativeTraits>
    auto Dune::Functions::derivativeSignatureTag (SignatureTag< Range(Domain), DerivativeTraits > tag)
     Construct SignatureTag for derivative.
     
    template<std::size_t maxOrder, class Signature , template< class > class DerivativeTraits>
    auto Dune::Functions::derivativeSignatureTags (Dune::Functions::SignatureTag< Signature, DerivativeTraits > tag)
     Construct SignatureTags for derivatives.
     
    template<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,40 +1,25 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-signature.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+staticforloop.hh File Reference\n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\b _\b>\n-\u00a0 Helper class to deduce the signature of a callable. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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+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/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: signature.hh Source File\n+dune-functions: staticforloop.hh Source File\n \n \n \n \n \n \n \n@@ -74,164 +74,77 @@\n \n \n
    \n
    \n-
    signature.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#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n
    5
    \n-
    6#include <type_traits>
    \n-
    7#include <tuple>
    \n+
    6
    \n+
    7#include <dune/common/concept.hh>
    \n
    8
    \n-\n-
    10
    \n-
    11namespace Dune {
    \n-
    12namespace Functions {
    \n-
    13
    \n-
    19template<typename F>
    \n-\n-
    21
    \n-
    22#ifndef DOXYGEN
    \n-
    23template<typename F>
    \n-
    24struct IsCallable
    \n-
    25{
    \n-
    26 struct yes { std::size_t dummy[2]; };
    \n-
    27 struct no { std::size_t dummy[1]; };
    \n-
    28
    \n-
    29 template<typename C>
    \n-
    30 static yes test(const decltype(&C::operator()) *);
    \n-
    31 template<typename C>
    \n-
    32 static no test(...);
    \n-
    33
    \n-
    34 enum { value = (sizeof(test<F>(0)) == sizeof(yes)) };
    \n-
    35};
    \n-
    36
    \n-
    37template<typename R, typename D>
    \n-
    38struct IsCallable<R(D)>
    \n-
    39{
    \n-
    40 enum { value = true };
    \n-
    41};
    \n-
    42
    \n-
    43template<typename R, typename D>
    \n-
    44struct IsCallable<R(*)(D)>
    \n-
    45{
    \n-
    46 enum { value = true };
    \n-
    47};
    \n-
    48#endif
    \n-
    49
    \n-
    55template<class Signature, bool isCallable = IsCallable<Signature>::value >
    \n-\n-
    57
    \n-
    58#ifndef DOXYGEN
    \n-
    60template<class T>
    \n-
    61struct SignatureTraits<T, true>
    \n-
    62 : public SignatureTraits<decltype(&T::operator()), true>
    \n-
    63{};
    \n+\n+\n+
    11
    \n+
    12
    \n+
    13namespace Dune {
    \n+
    14namespace Functions {
    \n+
    15
    \n+
    16namespace Imp {
    \n+
    17
    \n+
    18template<class ST, ST begin, ST end>
    \n+
    19struct StaticFindInRange
    \n+
    20{
    \n+
    21 template<class F, class...Args>
    \n+
    22 static void apply(F&& f, Args&&... args)
    \n+
    23 {
    \n+
    24 if (f(std::integral_constant<ST, begin>(), std::forward<Args>(args)...))
    \n+
    25 return;
    \n+
    26 StaticFindInRange<ST, begin+1, end>::apply(std::forward<F>(f), std::forward<Args>(args)...);
    \n+
    27 }
    \n+
    28};
    \n+
    29
    \n+
    30template<class ST, ST end>
    \n+
    31struct StaticFindInRange<ST, end, end>
    \n+
    32{
    \n+
    33 template<class F, class...Args>
    \n+
    34 static void apply(F&& f, Args&&...)
    \n+
    35 {}
    \n+
    36};
    \n+
    37
    \n+
    38} //end namespace Imp
    \n+
    39
    \n+
    40
    \n+
    41
    \n+
    55template<std::size_t begin_t, std::size_t end_t, class F, class... Args>
    \n+
    \n+
    56void staticFindInRange(F&& f, Args&&... args)
    \n+
    57{
    \n+
    58 Imp::StaticFindInRange<std::size_t, begin_t, end_t>::apply(std::forward<F>(f), std::forward<Args>(args)...);
    \n+
    59}
    \n+
    \n+
    60
    \n+
    61
    \n+
    62} // namespace Dune::Functions
    \n+
    63} // namespace Dune
    \n
    64
    \n-
    66template <typename C, typename R, typename D>
    \n-
    67struct SignatureTraits<R(C::*)(D) const, true>
    \n-
    68 : public SignatureTraits<R(D), true>
    \n-
    69{};
    \n-
    70
    \n-
    72template <typename C, typename R, typename D>
    \n-
    73struct SignatureTraits<R(C::*)(D), true>
    \n-
    74 : public SignatureTraits<R(D), true>
    \n-
    75{};
    \n-
    76
    \n-
    78template <typename R, typename D>
    \n-
    79struct SignatureTraits<R(*)(D), true>
    \n-
    80 : public SignatureTraits<R(D), true>
    \n-
    81{};
    \n-
    82
    \n-
    84template<class R, class D>
    \n-
    85struct SignatureTraits<R(D), true>
    \n-
    86{
    \n-
    87 using Range = R;
    \n-
    88 using Domain = D;
    \n-
    89
    \n-
    90 using RawRange = typename std::decay<Range>::type;
    \n-
    91 using RawDomain = typename std::decay<Domain>::type;
    \n-
    92
    \n-
    93 using RawSignature = RawRange(RawDomain);
    \n-
    94
    \n-
    95 template<template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-
    96 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n-
    97};
    \n-
    98#endif
    \n-
    99
    \n-
    100
    \n-
    101template<class Signature, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n-\n-
    103
    \n-
    113template<class Range, class Domain, template<class> class DerivativeTraitsT>
    \n-
    \n-
    114struct SignatureTag<Range(Domain), DerivativeTraitsT>
    \n-
    115{
    \n-
    116 using Signature = Range(Domain);
    \n-
    117
    \n-
    118 template<class T>
    \n-
    119 using DerivativeTraits = DerivativeTraitsT<T>;
    \n-
    120};
    \n-
    \n-
    121
    \n-
    122
    \n-
    123
    \n-
    132template<class Range, class Domain, template<class> class DerivativeTraits>
    \n-
    \n-
    133auto derivativeSignatureTag(SignatureTag<Range(Domain), DerivativeTraits> tag)
    \n-
    134{
    \n-
    135 using DerivativeRange = typename DerivativeTraits<Range(Domain)>::Range;
    \n-\n-
    137}
    \n-
    \n-
    138
    \n-
    139
    \n-
    140
    \n-
    154template<std::size_t maxOrder, class Signature, template<class> class DerivativeTraits>
    \n-
    \n-\n-
    156{
    \n-
    157 if constexpr (maxOrder==0) {
    \n-
    158 // If maxOrder== 0 we just need the given SignatureTag
    \n-
    159 return std::make_tuple(tag);
    \n-
    160 } else {
    \n-
    161 // else we first construct the tail tuple with SignatureTags for derivatives
    \n-
    162 // of order 1 to maxOrder
    \n-
    163 auto tailTagsTuple = derivativeSignatureTags<std::size_t(maxOrder-1)>(derivativeSignatureTag(tag));
    \n-
    164 // and prepend this with the given SignatureTag.
    \n-
    165 // This is done by unpacking the tail tuple with apply().
    \n-
    166 return std::apply([&](auto&&... tailTags){
    \n-
    167 return std::make_tuple(tag, tailTags...);
    \n-
    168 }, tailTagsTuple);
    \n-
    169 }
    \n-
    170}
    \n-
    \n-
    171
    \n-
    172
    \n-
    173
    \n-
    174} // namespace Functions
    \n-
    175} // namespace Dune
    \n-
    176
    \n-
    177#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH
    \n-\n-
    auto derivativeSignatureTag(SignatureTag< Range(Domain), DerivativeTraits > tag)
    Construct SignatureTag for derivative.
    Definition signature.hh:133
    \n-
    auto derivativeSignatureTags(Dune::Functions::SignatureTag< Signature, DerivativeTraits > tag)
    Construct SignatureTags for derivatives.
    Definition signature.hh:155
    \n+
    65
    \n+
    66
    \n+
    67#endif //DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n+\n+
    void staticFindInRange(F &&f, Args &&... args)
    Static find loop.
    Definition staticforloop.hh:56
    \n
    Definition polynomial.hh:10
    \n-
    Helper class to check that F is callable.
    Definition signature.hh:20
    \n-
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n-
    Definition signature.hh:102
    \n-
    DerivativeTraitsT< T > DerivativeTraits
    Definition signature.hh:119
    \n-\n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,178 +1,75 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n-4#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n+4#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n 5\n-6#include \n-7#include \n+6\n+7#include \n 8\n-9#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-10\n-11namespace _\bD_\bu_\bn_\be {\n-12namespace Functions {\n-13\n-19template\n-_\b2_\b0struct _\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be;\n-21\n-22#ifndef DOXYGEN\n-23template\n-24struct _\bI_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-25{\n-26 struct yes { std::size_t dummy[2]; };\n-27 struct no { std::size_t dummy[1]; };\n-28\n-29 template\n-30 static yes test(const decltype(&C::operator()) *);\n-31 template\n-32 static no test(...);\n-33\n-34 enum { value = (sizeof(test(0)) == sizeof(yes)) };\n-35};\n-36\n-37template\n-38struct IsCallable\n-39{\n-40 enum { value = true };\n-41};\n-42\n-43template\n-44struct IsCallable\n-45{\n-46 enum { value = true };\n-47};\n-48#endif\n-49\n-55template::value >\n-_\b5_\b6struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs {};\n-57\n-58#ifndef DOXYGEN\n-60template\n-61struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n-62 : public _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\br_\ba_\bi_\bt_\bs\n-63{};\n+9#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 <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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\n+12\n+13namespace _\bD_\bu_\bn_\be {\n+14namespace Functions {\n+15\n+16namespace Imp {\n+17\n+18template\n+19struct StaticFindInRange\n+20{\n+21 template\n+22 static void apply(F&& f, Args&&... args)\n+23 {\n+24 if (f(std::integral_constant(), std::forward(args)...))\n+25 return;\n+26 StaticFindInRange::apply(std::forward(f), std::\n+forward(args)...);\n+27 }\n+28};\n+29\n+30template\n+31struct StaticFindInRange\n+32{\n+33 template\n+34 static void apply(F&& f, Args&&...)\n+35 {}\n+36};\n+37\n+38} //end namespace Imp\n+39\n+40\n+41\n+55template\n+_\b5_\b6void _\bs_\bt_\ba_\bt_\bi_\bc_\bF_\bi_\bn_\bd_\bI_\bn_\bR_\ba_\bn_\bg_\be(F&& f, Args&&... args)\n+57{\n+58 Imp::StaticFindInRange::apply(std::forward\n+(f), std::forward(args)...);\n+59}\n+60\n+61\n+62} // namespace Dune::Functions\n+63} // namespace Dune\n 64\n-66template \n-67struct SignatureTraits\n-68 : public SignatureTraits\n-69{};\n-70\n-72template \n-73struct SignatureTraits\n-74 : public SignatureTraits\n-75{};\n-76\n-78template \n-79struct SignatureTraits\n-80 : public SignatureTraits\n-81{};\n-82\n-84template\n-85struct SignatureTraits\n-86{\n-87 using Range = R;\n-88 using Domain = D;\n-89\n-90 using RawRange = typename std::decay::type;\n-91 using RawDomain = typename std::decay::type;\n-92\n-93 using RawSignature = RawRange(RawDomain);\n-94\n-95 template class DerivativeTraits=DefaultDerivativeTraits>\n-96 using DerivativeSignature = typename DerivativeTraits::Range\n-(Domain);\n-97};\n-98#endif\n-99\n-100\n-101template class\n-DerivativeTraits=DefaultDerivativeTraits>\n-_\b1_\b0_\b2struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg;\n-103\n-113template class DerivativeTraitsT>\n-_\b1_\b1_\b4struct _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg\n-115{\n-_\b1_\b1_\b6 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n-117\n-118 template\n-_\b1_\b1_\b9 using _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs = DerivativeTraitsT;\n-120};\n-121\n-122\n-123\n-132template class DerivativeTraits>\n-_\b1_\b3_\b3auto _\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-134{\n-135 using DerivativeRange = typename DerivativeTraits::Range;\n-136 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-137}\n-138\n-139\n-140\n-154template class\n-DerivativeTraits>\n-_\b1_\b5_\b5auto _\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-156{\n-157 if constexpr (maxOrder==0) {\n-158 // If maxOrder== 0 we just need the given SignatureTag\n-159 return std::make_tuple(tag);\n-160 } else {\n-161 // else we first construct the tail tuple with SignatureTags for\n-derivatives\n-162 // of order 1 to maxOrder\n-163 auto tailTagsTuple = _\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-164 // and prepend this with the given SignatureTag.\n-165 // This is done by unpacking the tail tuple with apply().\n-166 return std::apply([&](auto&&... tailTags){\n-167 return std::make_tuple(tag, tailTags...);\n-168 }, tailTagsTuple);\n-169 }\n-170}\n-171\n-172\n-173\n-174} // namespace Functions\n-175} // namespace Dune\n-176\n-177#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n-_\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:133\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:155\n+65\n+66\n+67#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:56\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:20\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:56\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:102\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:119\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:116\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00140.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00140.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: differentiablefunctionfromcallables.hh File Reference\n+dune-functions: interfaces.hh File Reference\n \n \n \n \n \n \n \n@@ -71,49 +71,34 @@\n \n \n \n
    \n \n-
    differentiablefunctionfromcallables.hh File Reference
    \n+Namespaces
    \n+
    interfaces.hh File Reference
    \n \n
    \n-
    #include <dune/common/typeutilities.hh>
    \n-#include <dune/common/hybridutilities.hh>
    \n-#include <dune/functions/common/signature.hh>
    \n-#include <dune/functions/common/differentiablefunction.hh>
    \n-#include <dune/functions/common/functionconcepts.hh>
    \n+
    #include <type_traits>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >
     Wrap a list of callable objects as derivative sequence modelling Concept::DifferentiableFunction<Range(Domain), DerivativeTraits> More...
     
    class  Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >
     Wrap a list of callable objects as derivative sequence modelling Concept::DifferentiableFunction<Range(Domain), DerivativeTraits> More...
    class  Dune::Functions::PolymorphicType< Interface >
     Base class with polymorphic type boiler plate code. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

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

    \n-Functions

    template<class Signature , template< class > class DerivativeTraits, class... F>
    DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > Dune::Functions::makeDifferentiableFunctionFromCallables (const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)
     Create a DifferentiableFunction from callables.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +1,22 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-differentiablefunctionfromcallables.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+interfaces.hh File Reference\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n- _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b _\b>\n- Wrap a list of callable objects as derivative sequence modelling\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,\n- _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bF_\b,_\b _\bD_\bF_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs_\b._\b._\b._\b _\b>\n- Wrap a list of callable objects as derivative sequence modelling\n-\u00a0 _\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b>\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template class DerivativeTraits, class...\n-F>\n-_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs< _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n-Signature, DerivativeTraits, F... >\u00a0 _\bm_\ba_\bk_\be_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bF_\br_\bo_\bm_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bs\n- (const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\bT_\ba_\bg< Signature,\n- DerivativeTraits > &signatureTag, F &&...\n- f)\n-\u00a0 Create a _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from\n- callables.\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/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: differentiablefunctionfromcallables.hh Source File\n+dune-functions: interfaces.hh Source File\n \n \n \n \n \n \n \n@@ -74,159 +74,60 @@\n \n \n
    \n
    \n-
    differentiablefunctionfromcallables.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#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n
    5
    \n-
    6
    \n-
    7#include <dune/common/typeutilities.hh>
    \n-
    8#include <dune/common/hybridutilities.hh>
    \n-
    9
    \n-\n+
    6#include <type_traits>
    \n+
    7
    \n+
    8
    \n+
    9namespace Dune {
    \n+
    10namespace Functions {
    \n
    11
    \n-\n-\n-
    14
    \n-
    15
    \n-
    16
    \n-
    17namespace Dune {
    \n-
    18namespace Functions {
    \n-
    19
    \n-
    20
    \n-
    21
    \n-
    22template<class Signature, template<class> class DerivativeTraits, class... Callables>
    \n-\n-
    24
    \n-
    25
    \n-
    26
    \n-
    43template<class Range, class Domain, template<class> class DerivativeTraits, class F>
    \n-
    \n-
    44class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F>
    \n-
    45{
    \n-
    46public:
    \n-
    47
    \n-
    49 using Signature = Range(Domain);
    \n-
    50
    \n-\n+
    12
    \n+
    13
    \n+
    23template<class Interface>
    \n+
    \n+\n+
    25{
    \n+
    26public:
    \n+
    27
    \n+
    \n+\n+
    30 {}
    \n+
    \n+
    31
    \n+
    40 virtual Interface* clone() const = 0;
    \n+
    41
    \n+
    51 virtual Interface* clone(void* buffer) const = 0;
    \n
    52
    \n-
    54 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n-
    55
    \n-\n-
    58
    \n-
    60 template<class FF, disableCopyMove<DifferentiableFunctionFromCallables, FF> = 0>
    \n-
    \n-\n-
    62 f_(std::forward<FF>(f))
    \n-
    63 {}
    \n+
    62 virtual Interface* move(void* buffer) = 0;
    \n+
    63};
    \n
    \n
    64
    \n-
    \n-
    66 Range operator() (const Domain& x) const
    \n-
    67 {
    \n-
    68 return f_(x);
    \n-
    69 }
    \n-
    \n-
    70
    \n-
    \n-\n-
    77 {
    \n-
    78 DUNE_THROW(Dune::NotImplemented, "Derivative not implemented");
    \n-
    79 }
    \n-
    \n-
    80
    \n-
    81private:
    \n-
    82 F f_;
    \n-
    83};
    \n-
    \n-
    84
    \n-
    85
    \n-
    86
    \n-
    103template<class Range, class Domain, template<class> class DerivativeTraits, class F, class DF, class... Derivatives>
    \n-
    \n-
    104class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F, DF, Derivatives...>
    \n-
    105{
    \n-
    106public:
    \n-
    107
    \n-
    108 using Signature = Range(Domain);
    \n-\n-
    110 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n-
    111
    \n-
    112 using Derivative = DifferentiableFunctionFromCallables<DerivativeSignature, DerivativeTraits, DF, Derivatives...>;
    \n-
    113
    \n-
    120 template<class FF, class DFF, class... DDFF>
    \n-
    \n-
    121 DifferentiableFunctionFromCallables(FF&& f, DFF&& df, DDFF&&... ddf) :
    \n-
    122 f_(std::forward<FF>(f)),
    \n-
    123 df_(std::forward<DFF>(df), std::forward<DDFF>(ddf)...)
    \n-
    124 {}
    \n-
    \n-
    125
    \n-
    \n-
    127 Range operator() (const Domain& x) const
    \n-
    128 {
    \n-
    129 return f_(x);
    \n-
    130 }
    \n-
    \n-
    131
    \n-
    \n-\n-
    138 {
    \n-
    139 return t.df_;
    \n-
    140 }
    \n-
    \n-
    141
    \n-
    142private:
    \n-
    143 F f_;
    \n-
    144 Derivative df_;
    \n-
    145};
    \n-
    \n-
    146
    \n-
    147
    \n-
    162template<class Signature, template<class> class DerivativeTraits, class... F>
    \n-
    163DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>
    \n-
    \n-\n-
    165{
    \n-
    166 return DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>(f...);
    \n-
    167}
    \n-
    \n-
    168
    \n-
    169
    \n-
    170
    \n-
    171} // namespace Functions
    \n-
    172} // namespace Dune
    \n-
    173
    \n-
    174#endif //DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH
    \n-\n-\n-\n-
    friend Derivative derivative(const DifferentiableFunctionFromCallables &t)
    Get derivative of DifferentiableFunctionFromCallables.
    Definition differentiablefunctionfromcallables.hh:76
    \n-
    DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > makeDifferentiableFunctionFromCallables(const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)
    Create a DifferentiableFunction from callables.
    Definition differentiablefunctionfromcallables.hh:164
    \n+
    65
    \n+
    66
    \n+
    67}} // namespace Dune::Functions
    \n+
    68
    \n+
    69#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH
    \n
    Definition polynomial.hh:10
    \n-
    Definition differentiablefunction.hh:29
    \n-
    Definition differentiablefunctionfromcallables.hh:23
    \n-
    DifferentiableFunctionFromCallables(FF &&f)
    Constructor copying the given function.
    Definition differentiablefunctionfromcallables.hh:61
    \n-
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition differentiablefunctionfromcallables.hh:51
    \n-
    Range(Domain) Signature
    Signature of function.
    Definition differentiablefunctionfromcallables.hh:49
    \n-
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Signature of derivative.
    Definition differentiablefunctionfromcallables.hh:54
    \n-
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Definition differentiablefunctionfromcallables.hh:110
    \n-\n-
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition differentiablefunctionfromcallables.hh:109
    \n-
    DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)
    Constructor copying the given functions.
    Definition differentiablefunctionfromcallables.hh:121
    \n-
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n-
    Definition signature.hh:102
    \n+
    Base class with polymorphic type boiler plate code.
    Definition interfaces.hh:25
    \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:29
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,190 +1,62 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n-4#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n+4#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n 5\n-6\n-7#include \n-8#include \n-9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+6#include \n+7\n+8\n+9namespace _\bD_\bu_\bn_\be {\n+10namespace Functions {\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/_\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-13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-14\n-15\n-16\n-17namespace _\bD_\bu_\bn_\be {\n-18namespace Functions {\n-19\n-20\n-21\n-22template class DerivativeTraits, class...\n-Callables>\n-_\b2_\b3class _\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-24\n-25\n-26\n-43template class DerivativeTraits,\n-class F>\n-_\b4_\b4class _\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-45{\n-46public:\n-47\n-_\b4_\b9 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n-50\n-_\b5_\b1 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+12\n+13\n+23template\n+_\b2_\b4class _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be\n+25{\n+26public:\n+27\n+_\b2_\b9 virtual _\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be()\n+30 {}\n+31\n+_\b4_\b0 virtual Interface* _\bc_\bl_\bo_\bn_\be() const = 0;\n+41\n+_\b5_\b1 virtual Interface* _\bc_\bl_\bo_\bn_\be(void* buffer) const = 0;\n 52\n-_\b5_\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-55\n-_\b5_\b7 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-58\n-60 template\n-= 0>\n-_\b6_\b1 _\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-62 f_(std::forward(f))\n-63 {}\n+_\b6_\b2 virtual Interface* _\bm_\bo_\bv_\be(void* buffer) = 0;\n+63};\n 64\n-_\b6_\b6 Range operator() (const Domain& x) const\n-67 {\n-68 return f_(x);\n-69 }\n-70\n-_\b7_\b6 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-77 {\n-78 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n-79 }\n-80\n-81private:\n-82 F f_;\n-83};\n-84\n-85\n-86\n-103template class DerivativeTraits,\n-class F, class DF, class... Derivatives>\n-_\b1_\b0_\b4class _\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-105{\n-106public:\n-107\n-_\b1_\b0_\b8 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n-_\b1_\b0_\b9 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_\b0 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-111\n-_\b1_\b1_\b2 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-113\n-120 template\n-_\b1_\b2_\b1 _\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-122 f_(std::forward(f)),\n-123 df_(std::forward(df), std::forward(ddf)...)\n-124 {}\n-125\n-_\b1_\b2_\b7 Range operator() (const Domain& x) const\n-128 {\n-129 return f_(x);\n-130 }\n-131\n-_\b1_\b3_\b7 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-138 {\n-139 return t.df_;\n-140 }\n-141\n-142private:\n-143 F f_;\n-144 Derivative df_;\n-145};\n-146\n-147\n-162template class DerivativeTraits, class...\n-F>\n-163DifferentiableFunctionFromCallables\n-_\b1_\b6_\b4 _\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-165{\n-166 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-167}\n-168\n-169\n-170\n-171} // namespace Functions\n-172} // namespace Dune\n-173\n-174#endif //DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n-_\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:76\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:164\n+65\n+66\n+67}} // namespace Dune::Functions\n+68\n+69#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:10\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:29\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:23\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:61\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:51\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:49\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:54\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: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_\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:108\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:109\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:121\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:56\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:102\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:25\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:29\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: type_traits.hh File Reference\n+dune-functions: treedata.hh File Reference\n \n \n \n \n \n \n \n@@ -71,46 +71,47 @@\n \n
    \n \n
    \n \n-
    type_traits.hh File Reference
    \n+Namespaces
    \n+
    treedata.hh File Reference
    \n \n
    \n-
    #include <type_traits>
    \n-#include <dune/common/typeutilities.hh>
    \n+
    #include <memory>
    \n+#include <dune/common/shared_ptr.hh>
    \n+#include <dune/typetree/pairtraversal.hh>
    \n+#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n+#include <dune/functions/gridfunctions/gridfunction.hh>
    \n
    \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 Classes

    struct  Dune::Functions::HasStaticSize< T >
     Check if type is a statically sized container. More...
    struct  Dune::Functions::UniformNodeVisitor< SimpleNodeVisitorImp, leafOnly >
     Mixin for visitors that should apply the same action on all nodes. More...
     
    struct  Dune::Functions::StaticSize< T >
     Obtain size of statically sized container. More...
    class  Dune::Functions::TreeData< T, ND, LO >
     Container allowing to attach data to each node of a tree. More...
     
    struct  Dune::Functions::TreeData< T, ND, LO >::InitVisitor
     
    struct  Dune::Functions::TreeData< T, ND, LO >::DestroyVisitor
     
    struct  Dune::Functions::TreeData< T, ND, LO >::CopyVisitor
     
    \n \n \n \n \n \n-

    \n Namespaces

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

    \n-Typedefs

    template<class T , class... Args>
    using Dune::Functions::enableIfConstructible = typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type
     Helper to constrain forwarding constructors.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,36 @@\n dune-functions\u00a02.9.0\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\n-type_traits.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\n+treedata.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/_\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 _\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+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b<_\b _\bS_\bi_\bm_\bp_\bl_\be_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br_\bI_\bm_\bp_\b,_\b _\bl_\be_\ba_\bf_\bO_\bn_\bl_\by_\b _\b>\n+\u00a0 Mixin for visitors that should apply the same action on all nodes.\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:_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 Obtain size of statically sized container. _\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_\be_\be_\bD_\ba_\bt_\ba_\b<_\b _\bT_\b,_\b _\bN_\bD_\b,_\b _\bL_\bO_\b _\b>\n+\u00a0 Container allowing to attach data to each node of a tree. _\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:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b<_\b _\bT_\b,_\b _\bN_\bD_\b,_\b _\bL_\bO_\b _\b>_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b<_\b _\bT_\b,_\b _\bN_\bD_\b,_\b _\bL_\bO_\b _\b>_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b<_\b _\bT_\b,_\b _\bN_\bD_\b,_\b _\bL_\bO_\b _\b>_\b:_\b:_\bC_\bo_\bp_\by_\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-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 = typename std::enable_if< std::\n- is_constructible< T, Args... >::value, int >::type\n-\u00a0 Helper to constrain forwarding constructors.\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: type_traits.hh Source File\n+dune-functions: treedata.hh Source File\n \n \n \n \n \n \n \n@@ -74,104 +74,300 @@\n \n \n
    \n
    \n-
    type_traits.hh
    \n+
    treedata.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#ifndef DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_TREEDATA_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_TREEDATA_HH
    \n
    5
    \n-
    6#include <type_traits>
    \n-
    7
    \n-
    8#include <dune/common/typeutilities.hh>
    \n-
    9
    \n-
    10namespace Dune {
    \n-
    11namespace Functions {
    \n+
    6
    \n+
    7#warning This file is deprecated. Please use TreeContainer from dune-typetree instead.
    \n+
    8
    \n+
    9#include <memory>
    \n+
    10
    \n+
    11#include <dune/common/shared_ptr.hh>
    \n
    12
    \n-
    13
    \n-
    24template<class T, class... Args>
    \n-
    25using enableIfConstructible = typename std::enable_if<
    \n-
    26 std::is_constructible<T, Args...>::value, int>::type;
    \n-
    27
    \n-
    28
    \n-
    29
    \n-
    30namespace Imp {
    \n-
    31
    \n-
    32 // As a last resort try if there's a static constexpr size()
    \n-
    33 template<class T>
    \n-
    34 constexpr auto staticSize(const T*, const PriorityTag<0>&)
    \n-
    35 -> decltype(std::integral_constant<std::size_t,T::size()>())
    \n-
    36 {
    \n-
    37 return {};
    \n-
    38 }
    \n-
    39
    \n-
    40 // Try if class has constexpr default constructor and size method
    \n-
    41 template<class T>
    \n-
    42 constexpr auto staticSize(const T*, const PriorityTag<1>&)
    \n-
    43 -> decltype(std::integral_constant<std::size_t,T().size()>())
    \n-
    44 {
    \n-
    45 return {};
    \n-
    46 }
    \n-
    47
    \n-
    48 // Try if tuple_size is implemented for class
    \n-
    49 template<class T>
    \n-
    50 constexpr auto staticSize(const T*, const PriorityTag<2>&)
    \n-
    51 -> decltype(std::integral_constant<std::size_t,std::tuple_size<T>::value>())
    \n-
    52 {
    \n-
    53 return {};
    \n-
    54 }
    \n+
    13#include <dune/typetree/pairtraversal.hh>
    \n+
    14
    \n+\n+\n+
    17
    \n+
    18namespace Dune {
    \n+
    19namespace Functions {
    \n+
    20
    \n+
    34template<class SimpleNodeVisitorImp, bool leafOnly>
    \n+
    \n+
    35struct
    \n+
    36[[deprecated("This is an implementation detail of the deprecated class TreeDate and thus deprecated itself.")]]
    \n+\n+
    38 public TypeTree::TreeVisitor,
    \n+
    39 public TypeTree::DynamicTraversal
    \n+
    40{
    \n+
    41 // This is only enabled, if we want to incorporate inner nodes.
    \n+
    42 // Checking leafOnly would be sufficient, but for SFINAE the
    \n+
    43 // the enable_if condition must depend on the template parameter.
    \n+
    44 template<typename Node, typename TreePath,
    \n+
    45 typename std::enable_if<(not leafOnly) and (not Node::isLeaf), int>::type = 0>
    \n+
    \n+
    46 void pre(Node& node, TreePath treePath)
    \n+
    47 {
    \n+
    48 static_cast<SimpleNodeVisitorImp*>(this)->apply(node, treePath);
    \n+
    49 }
    \n+
    \n+
    50
    \n+
    51 template<typename Node, typename TreePath,
    \n+
    52 typename std::enable_if<(leafOnly) and (not Node::isLeaf), int>::type = 0>
    \n+
    \n+
    53 void pre(Node& node, TreePath treePath)
    \n+
    54 {}
    \n+
    \n
    55
    \n-
    56 template<class T>
    \n-
    57 constexpr std::false_type hasStaticSize(const T* t, const PriorityTag<0>& p)
    \n-
    58 {
    \n-
    59 return {};
    \n-
    60 }
    \n-
    61
    \n-
    62 template<class T>
    \n-
    63 constexpr auto hasStaticSize(const T* t, const PriorityTag<1>& p)
    \n-
    64 -> decltype(staticSize(t ,PriorityTag<42>()), std::true_type())
    \n-
    65 {
    \n-
    66 return {};
    \n-
    67 }
    \n-
    68
    \n-
    69}
    \n-
    70
    \n-
    71
    \n-
    72
    \n-
    80template<class T>
    \n-
    \n-\n-
    82 public decltype(Imp::hasStaticSize((typename std::decay<T>::type*)(nullptr), PriorityTag<42>()))
    \n-
    83{};
    \n-
    \n-
    84
    \n-
    85
    \n-
    86
    \n-
    94template<class T>
    \n-
    \n-
    95struct StaticSize :
    \n-
    96 public decltype(Imp::staticSize((typename std::decay<T>::type*)(nullptr), PriorityTag<42>()))
    \n-
    97{};
    \n+
    56 template<typename Node, typename TreePath>
    \n+
    \n+
    57 void leaf(Node& node, TreePath treePath)
    \n+
    58 {
    \n+
    59 static_cast<SimpleNodeVisitorImp*>(this)->apply(node, treePath);
    \n+
    60 }
    \n+
    \n+
    61};
    \n
    \n+
    62
    \n+
    63
    \n+
    64
    \n+
    91template<class T, template<class> class ND, bool LO>
    \n+
    \n+
    92class
    \n+
    93[[deprecated("This class is deprecated. Please use TreeContainer from dune-typetree instead.")]]
    \n+\n+
    95{
    \n+
    96
    \n+
    97public:
    \n
    98
    \n-
    99
    \n-
    100
    \n-
    101}} // namespace Dune::Functions
    \n-
    102
    \n-
    103#endif // DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH
    \n-
    typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible
    Helper to constrain forwarding constructors.
    Definition type_traits.hh:26
    \n+
    100 using Tree = T;
    \n+
    101
    \n+
    103 using size_type = typename Tree::size_type;
    \n+
    104
    \n+
    106 static const bool leafOnly = LO;
    \n+
    107
    \n+
    109 template<class Node>
    \n+
    110 using NodeData = ND<Node>;
    \n+
    111
    \n+
    112protected:
    \n+
    113 using RawContainer = std::vector<void*>;
    \n+
    114
    \n+
    115
    \n+
    116 // Since we can generate the node data type only if
    \n+
    117 // we know the type of the node, we have to do
    \n+
    118 // initialization, copy, and destruction via a
    \n+
    119 // tree traversal. Once we can use C++14 this can
    \n+
    120 // be written in a much easier and more selfcontained
    \n+
    121 // ways using generic lambda functions.
    \n+
    122 // Until then we need explicit visitor classes for
    \n+
    123 // each operation.
    \n+
    124
    \n+
    \n+
    125 struct InitVisitor :
    \n+
    126 public UniformNodeVisitor<InitVisitor, leafOnly>
    \n+
    127 {
    \n+
    \n+\n+
    129 data_(data)
    \n+
    130 {}
    \n+
    \n+
    131
    \n+
    132 template<typename Node, typename TreePath>
    \n+
    \n+
    133 void apply(Node& node, TreePath treePath)
    \n+
    134 {
    \n+
    135 auto&& index = node.treeIndex();
    \n+
    136 if (data_.size() < index+1)
    \n+
    137 data_.resize(index+1, nullptr);
    \n+
    138 data_[index] = new NodeData<Node>;
    \n+
    139 }
    \n+
    \n+
    140
    \n+
    141
    \n+\n+
    143 };
    \n+
    \n+
    144
    \n+
    \n+\n+
    146 public UniformNodeVisitor<DestroyVisitor, leafOnly>
    \n+
    147 {
    \n+
    \n+\n+
    149 data_(data)
    \n+
    150 {}
    \n+
    \n+
    151
    \n+
    152 template<typename Node, typename TreePath>
    \n+
    \n+
    153 void apply(Node& node, TreePath treePath)
    \n+
    154 {
    \n+
    155 auto&& index = node.treeIndex();
    \n+
    156 auto p = (NodeData<Node>*)(data_[index]);
    \n+
    157 delete p;
    \n+
    158 data_[index] = nullptr;
    \n+
    159 }
    \n+
    \n+
    160
    \n+\n+
    162 };
    \n+
    \n+
    163
    \n+
    \n+
    164 struct CopyVisitor :
    \n+
    165 public UniformNodeVisitor<CopyVisitor, leafOnly>
    \n+
    166 {
    \n+
    \n+
    167 CopyVisitor(TreeData& thisTD, const TreeData& otherTD) :
    \n+
    168 thisTD_(thisTD),
    \n+
    169 otherTD_(otherTD)
    \n+
    170 {}
    \n+
    \n+
    171
    \n+
    172 template<typename Node, typename TreePath>
    \n+
    \n+
    173 void apply(Node& node, TreePath treePath)
    \n+
    174 {
    \n+
    175 thisTD_[node] = otherTD_[node];
    \n+
    176 }
    \n+
    \n+
    177
    \n+\n+\n+
    180 };
    \n+
    \n+
    181
    \n+
    182public:
    \n+
    183
    \n+
    \n+\n+
    186 tree_(nullptr)
    \n+
    187 {}
    \n+
    \n+
    188
    \n+
    \n+
    196 void init(const Tree& tree)
    \n+
    197 {
    \n+
    198 if (tree_)
    \n+
    199 destroy();
    \n+
    200 tree_ = &tree;
    \n+
    201 TypeTree::applyToTree(*tree_, InitVisitor(data_));
    \n+
    202 }
    \n+
    \n+
    203
    \n+
    \n+
    205 TreeData(const TreeData& other) :
    \n+
    206 tree_(other.tree_)
    \n+
    207 {
    \n+
    208 TypeTree::applyToTree(*tree_, InitVisitor(data_));
    \n+
    209 TypeTree::applyToTree(*tree_, CopyVisitor(*this, other));
    \n+
    210 }
    \n+
    \n+
    211
    \n+
    \n+\n+
    214 {
    \n+
    215 if (tree_)
    \n+
    216 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));
    \n+
    217 tree_ = other.tree_;
    \n+
    218 TypeTree::applyToTree(*tree_, CopyVisitor(*this, other));
    \n+
    219 return *this;
    \n+
    220 }
    \n+
    \n+
    221
    \n+
    \n+
    223 void destroy()
    \n+
    224 {
    \n+
    225 if (tree_)
    \n+
    226 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));
    \n+
    227 tree_ = nullptr;
    \n+
    228 }
    \n+
    \n+
    229
    \n+
    \n+\n+
    232 {
    \n+
    233 if (tree_)
    \n+
    234 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));
    \n+
    235 }
    \n+
    \n+
    236
    \n+
    238 template<class Node>
    \n+
    \n+
    239 NodeData<Node>& operator[](const Node& node)
    \n+
    240 {
    \n+
    241 return *(NodeData<Node>*)(data_[node.treeIndex()]);
    \n+
    242 }
    \n+
    \n+
    243
    \n+
    245 template<class Node>
    \n+
    \n+
    246 const NodeData<Node>& operator[](const Node& node) const
    \n+
    247 {
    \n+
    248 return *(NodeData<Node>*)(data_[node.treeIndex()]);
    \n+
    249 }
    \n+
    \n+
    250
    \n+
    251protected:
    \n+
    252
    \n+
    253 const Tree* tree_;
    \n+\n+
    255};
    \n+
    \n+
    256
    \n+
    257
    \n+
    258
    \n+
    259} // namespace Functions
    \n+
    260} // namespace Dune
    \n+
    261
    \n+
    262#endif // DUNE_FUNCTIONS_COMMON_TREEDATA_HH
    \n+\n+\n
    Definition polynomial.hh:10
    \n-
    Check if type is a statically sized container.
    Definition type_traits.hh:83
    \n-
    Obtain size of statically sized container.
    Definition type_traits.hh:97
    \n+
    Mixin for visitors that should apply the same action on all nodes.
    Definition treedata.hh:40
    \n+
    void pre(Node &node, TreePath treePath)
    Definition treedata.hh:46
    \n+
    void leaf(Node &node, TreePath treePath)
    Definition treedata.hh:57
    \n+
    Container allowing to attach data to each node of a tree.
    Definition treedata.hh:95
    \n+
    TreeData(const TreeData &other)
    Copy constructor.
    Definition treedata.hh:205
    \n+
    void init(const Tree &tree)
    Initialize from tree.
    Definition treedata.hh:196
    \n+
    T Tree
    Type of tree the data is associated with.
    Definition treedata.hh:100
    \n+
    const Tree * tree_
    Definition treedata.hh:253
    \n+
    void destroy()
    Destroy data.
    Definition treedata.hh:223
    \n+
    const NodeData< Node > & operator[](const Node &node) const
    Get reference to data associated to given node.
    Definition treedata.hh:246
    \n+
    TreeData & operator=(const TreeData &other)
    Copy assignment.
    Definition treedata.hh:213
    \n+
    ~TreeData()
    Destructor.
    Definition treedata.hh:231
    \n+
    ND< Node > NodeData
    Template to determine the data type for given node type.
    Definition treedata.hh:110
    \n+
    TreeData()
    Default constructor.
    Definition treedata.hh:185
    \n+
    std::vector< void * > RawContainer
    Definition treedata.hh:113
    \n+
    NodeData< Node > & operator[](const Node &node)
    Get mutable reference to data associated to given node.
    Definition treedata.hh:239
    \n+
    typename Tree::size_type size_type
    Type used for indices and size information.
    Definition treedata.hh:103
    \n+
    RawContainer data_
    Definition treedata.hh:254
    \n+
    Definition treedata.hh:127
    \n+
    InitVisitor(RawContainer &data)
    Definition treedata.hh:128
    \n+
    void apply(Node &node, TreePath treePath)
    Definition treedata.hh:133
    \n+
    RawContainer & data_
    Definition treedata.hh:142
    \n+\n+
    RawContainer & data_
    Definition treedata.hh:161
    \n+
    DestroyVisitor(RawContainer &data)
    Definition treedata.hh:148
    \n+
    void apply(Node &node, TreePath treePath)
    Definition treedata.hh:153
    \n+
    Definition treedata.hh:166
    \n+
    CopyVisitor(TreeData &thisTD, const TreeData &otherTD)
    Definition treedata.hh:167
    \n+
    void apply(Node &node, TreePath treePath)
    Definition treedata.hh:173
    \n+
    TreeData & thisTD_
    Definition treedata.hh:178
    \n+
    const TreeData & otherTD_
    Definition treedata.hh:179
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,105 +1,325 @@\n dune-functions\u00a02.9.0\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+treedata.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#ifndef DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n-4#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n+4#define DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n 5\n-6#include \n-7\n-8#include \n-9\n-10namespace _\bD_\bu_\bn_\be {\n-11namespace Functions {\n+6\n+7#warning This file is deprecated. Please use TreeContainer from dune-typetree\n+instead.\n+8\n+9#include \n+10\n+11#include \n 12\n-13\n-24template\n-_\b2_\b5using _\be_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bi_\bb_\bl_\be = typename std::enable_if<\n-26 std::is_constructible::value, int>::type;\n-27\n-28\n-29\n-30namespace Imp {\n-31\n-32 // As a last resort try if there's a static constexpr size()\n-33 template\n-34 constexpr auto staticSize(const T*, const PriorityTag<0>&)\n-35 -> decltype(std::integral_constant())\n-36 {\n-37 return {};\n-38 }\n-39\n-40 // Try if class has constexpr default constructor and size method\n-41 template\n-42 constexpr auto staticSize(const T*, const PriorityTag<1>&)\n-43 -> decltype(std::integral_constant())\n-44 {\n-45 return {};\n-46 }\n-47\n-48 // Try if tuple_size is implemented for class\n-49 template\n-50 constexpr auto staticSize(const T*, const PriorityTag<2>&)\n-51 -> decltype(std::integral_constant::value>())\n-52 {\n-53 return {};\n-54 }\n+13#include \n+14\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/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+17\n+18namespace _\bD_\bu_\bn_\be {\n+19namespace Functions {\n+20\n+34template\n+_\b3_\b5struct\n+36[[deprecated(\"This is an implementation detail of the deprecated class\n+TreeDate and thus deprecated itself.\")]]\n+37_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br :\n+38 public TypeTree::TreeVisitor,\n+39 public TypeTree::DynamicTraversal\n+40{\n+41 // This is only enabled, if we want to incorporate inner nodes.\n+42 // Checking leafOnly would be sufficient, but for SFINAE the\n+43 // the enable_if condition must depend on the template parameter.\n+44 template::type =\n+0>\n+_\b4_\b6 void _\bp_\br_\be(Node& node, TreePath treePath)\n+47 {\n+48 static_cast(this)->apply(node, treePath);\n+49 }\n+50\n+51 template::type = 0>\n+_\b5_\b3 void _\bp_\br_\be(Node& node, TreePath treePath)\n+54 {}\n 55\n-56 template\n-57 constexpr std::false_type hasStaticSize(const T* t, const PriorityTag<0>& p)\n+56 template\n+_\b5_\b7 void _\bl_\be_\ba_\bf(Node& node, TreePath treePath)\n 58 {\n-59 return {};\n+59 static_cast(this)->apply(node, treePath);\n 60 }\n-61\n-62 template\n-63 constexpr auto hasStaticSize(const T* t, const PriorityTag<1>& p)\n-64 -> decltype(staticSize(t ,PriorityTag<42>()), std::true_type())\n-65 {\n-66 return {};\n-67 }\n-68\n-69}\n-70\n-71\n-72\n-80template\n-_\b8_\b1struct _\bH_\ba_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be :\n-82 public decltype(Imp::hasStaticSize((typename std::decay::type*)(nullptr),\n-PriorityTag<42>()))\n-83{};\n-84\n-85\n-86\n-94template\n-_\b9_\b5struct _\bS_\bt_\ba_\bt_\bi_\bc_\bS_\bi_\bz_\be :\n-96 public decltype(Imp::staticSize((typename std::decay::type*)(nullptr),\n-PriorityTag<42>()))\n-97{};\n+61};\n+62\n+63\n+64\n+91template class ND, bool LO>\n+_\b9_\b2class\n+93[[deprecated(\"This class is deprecated. Please use TreeContainer from dune-\n+typetree instead.\")]]\n+94_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n+95{\n+96\n+97public:\n 98\n-99\n-100\n-101}} // namespace Dune::Functions\n-102\n-103#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-typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n-type enableIfConstructible\n-Helper to constrain forwarding constructors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:26\n+_\b1_\b0_\b0 using _\bT_\br_\be_\be = T;\n+101\n+_\b1_\b0_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = typename Tree::size_type;\n+104\n+_\b1_\b0_\b6 static const bool leafOnly = LO;\n+107\n+109 template\n+_\b1_\b1_\b0 using _\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba = ND;\n+111\n+112protected:\n+_\b1_\b1_\b3 using _\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br = std::vector;\n+114\n+115\n+116 // Since we can generate the node data type only if\n+117 // we know the type of the node, we have to do\n+118 // initialization, copy, and destruction via a\n+119 // tree traversal. Once we can use C++14 this can\n+120 // be written in a much easier and more selfcontained\n+121 // ways using generic lambda functions.\n+122 // Until then we need explicit visitor classes for\n+123 // each operation.\n+124\n+_\b1_\b2_\b5 struct _\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br :\n+126 public _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+127 {\n+_\b1_\b2_\b8 _\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br(_\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br& data) :\n+129 data_(data)\n+130 {}\n+131\n+132 template\n+_\b1_\b3_\b3 void _\ba_\bp_\bp_\bl_\by(Node& node, TreePath treePath)\n+134 {\n+135 auto&& index = node.treeIndex();\n+136 if (data_.size() < index+1)\n+137 data_.resize(index+1, nullptr);\n+138 data_[index] = new _\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>;\n+139 }\n+140\n+141\n+_\b1_\b4_\b2 _\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br& _\bd_\ba_\bt_\ba_\b_;\n+143 };\n+144\n+_\b1_\b4_\b5 struct _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br :\n+146 public _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+147 {\n+_\b1_\b4_\b8 _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(_\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br& data) :\n+149 data_(data)\n+150 {}\n+151\n+152 template\n+_\b1_\b5_\b3 void _\ba_\bp_\bp_\bl_\by(Node& node, TreePath treePath)\n+154 {\n+155 auto&& index = node.treeIndex();\n+156 auto p = (_\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>*)(data_[index]);\n+157 delete p;\n+158 data_[index] = nullptr;\n+159 }\n+160\n+_\b1_\b6_\b1 _\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br& _\bd_\ba_\bt_\ba_\b_;\n+162 };\n+163\n+_\b1_\b6_\b4 struct _\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br :\n+165 public _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+166 {\n+_\b1_\b6_\b7 _\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(_\bT_\br_\be_\be_\bD_\ba_\bt_\ba& thisTD, const _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& otherTD) :\n+168 thisTD_(thisTD),\n+169 otherTD_(otherTD)\n+170 {}\n+171\n+172 template\n+_\b1_\b7_\b3 void _\ba_\bp_\bp_\bl_\by(Node& node, TreePath treePath)\n+174 {\n+175 thisTD_[node] = otherTD_[node];\n+176 }\n+177\n+_\b1_\b7_\b8 _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& _\bt_\bh_\bi_\bs_\bT_\bD_\b_;\n+_\b1_\b7_\b9 const _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& _\bo_\bt_\bh_\be_\br_\bT_\bD_\b_;\n+180 };\n+181\n+182public:\n+183\n+_\b1_\b8_\b5 _\bT_\br_\be_\be_\bD_\ba_\bt_\ba() :\n+186 tree_(nullptr)\n+187 {}\n+188\n+_\b1_\b9_\b6 void _\bi_\bn_\bi_\bt(const _\bT_\br_\be_\be& tree)\n+197 {\n+198 if (tree_)\n+199 destroy();\n+200 tree_ = &tree;\n+201 TypeTree::applyToTree(*tree_, _\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n+202 }\n+203\n+_\b2_\b0_\b5 _\bT_\br_\be_\be_\bD_\ba_\bt_\ba(const _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& other) :\n+206 tree_(other.tree_)\n+207 {\n+208 TypeTree::applyToTree(*tree_, _\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n+209 TypeTree::applyToTree(*tree_, _\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(*this, other));\n+210 }\n+211\n+_\b2_\b1_\b3 _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& other)\n+214 {\n+215 if (tree_)\n+216 TypeTree::applyToTree(*tree_, _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n+217 tree_ = other._\bt_\br_\be_\be_\b_;\n+218 TypeTree::applyToTree(*tree_, _\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(*this, other));\n+219 return *this;\n+220 }\n+221\n+_\b2_\b2_\b3 void _\bd_\be_\bs_\bt_\br_\bo_\by()\n+224 {\n+225 if (tree_)\n+226 TypeTree::applyToTree(*tree_, _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n+227 tree_ = nullptr;\n+228 }\n+229\n+_\b2_\b3_\b1 _\b~_\bT_\br_\be_\be_\bD_\ba_\bt_\ba()\n+232 {\n+233 if (tree_)\n+234 TypeTree::applyToTree(*tree_, _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n+235 }\n+236\n+238 template\n+_\b2_\b3_\b9 _\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](const Node& node)\n+240 {\n+241 return *(_\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>*)(data_[node.treeIndex()]);\n+242 }\n+243\n+245 template\n+_\b2_\b4_\b6 const _\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](const Node& node) const\n+247 {\n+248 return *(_\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>*)(data_[node.treeIndex()]);\n+249 }\n+250\n+251protected:\n+252\n+_\b2_\b5_\b3 const _\bT_\br_\be_\be* _\bt_\br_\be_\be_\b_;\n+_\b2_\b5_\b4 _\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br _\bd_\ba_\bt_\ba_\b_;\n+255};\n+256\n+257\n+258\n+259} // namespace Functions\n+260} // namespace Dune\n+261\n+262#endif // DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n+_\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\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:83\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-Obtain size of statically sized container.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:97\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+Mixin for visitors that should apply the same action on all nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:40\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bp_\br_\be\n+void pre(Node &node, TreePath treePath)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:46\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\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 treedata.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n+Container allowing to attach data to each node of a tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:95\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n+TreeData(const TreeData &other)\n+Copy constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:205\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bi_\bn_\bi_\bt\n+void init(const Tree &tree)\n+Initialize from tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:196\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bT_\br_\be_\be\n+T Tree\n+Type of tree the data is associated with.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:100\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bt_\br_\be_\be_\b_\n+const Tree * tree_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:253\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bd_\be_\bs_\bt_\br_\bo_\by\n+void destroy()\n+Destroy data.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:223\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const NodeData< Node > & operator[](const Node &node) const\n+Get reference to data associated to given node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:246\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+TreeData & operator=(const TreeData &other)\n+Copy assignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:213\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\b~_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n+~TreeData()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:231\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba\n+ND< Node > NodeData\n+Template to determine the data type for given node type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:110\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n+TreeData()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:185\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br\n+std::vector< void * > RawContainer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:113\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+NodeData< Node > & operator[](const Node &node)\n+Get mutable reference to data associated to given node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:239\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+typename Tree::size_type size_type\n+Type used for indices and size information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:103\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bd_\ba_\bt_\ba_\b_\n+RawContainer data_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:254\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:127\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+InitVisitor(RawContainer &data)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:128\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+void apply(Node &node, TreePath treePath)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:133\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bd_\ba_\bt_\ba_\b_\n+RawContainer & data_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:142\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:147\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bd_\ba_\bt_\ba_\b_\n+RawContainer & data_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:161\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+DestroyVisitor(RawContainer &data)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:148\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+void apply(Node &node, TreePath treePath)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:153\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:166\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+CopyVisitor(TreeData &thisTD, const TreeData &otherTD)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:167\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+void apply(Node &node, TreePath treePath)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:173\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bt_\bh_\bi_\bs_\bT_\bD_\b_\n+TreeData & thisTD_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:178\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bo_\bt_\bh_\be_\br_\bT_\bD_\b_\n+const TreeData & otherTD_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:179\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: reserveddeque.hh File Reference\n+dune-functions: differentiablefunction.hh File Reference\n \n \n \n \n \n \n \n@@ -71,69 +71,44 @@\n \n
    \n \n
    \n \n-
    reserveddeque.hh File Reference
    \n+Namespaces
    \n+
    differentiablefunction.hh File Reference
    \n \n
    \n-\n-

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

    \n-
    #include <algorithm>
    \n-#include <iostream>
    \n-#include <cstddef>
    \n-#include <initializer_list>
    \n-#include <dune/common/genericiterator.hh>
    \n+\n

    Go to the source code of this file.

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

    \n Classes

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

    \n Namespaces

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

    \n-Macros

    #define CHECKSIZE(X)   {}
     
    \n-

    Detailed Description

    \n-

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

    \n-

    Macro Definition Documentation

    \n-\n-

    ◆ CHECKSIZE

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

    template<class T >
    using Dune::Functions::ResolveRef_t = Dune::ResolveRef_t< T >
     This is an alias for Dune::ResolveRef_t.
     
    \n \n-\n-\n-\n-\n-\n-\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 , typename std::enable_if< Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 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 , typename std::enable_if< not Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 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 T >
    decltype(auto) Dune::Functions::resolveRef (T &&t)
     This is an alias for Dune::resolveRef.
     
    \n+\n+\n+\n+\n+\n

    \n+Variables

    template<class T >
    constexpr bool Dune::Functions::IsReferenceWrapper_v = Dune::IsReferenceWrapper_v<T>
     This is an alias for Dune::IsReferenceWrapper_v.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,56 +1,35 @@\n dune-functions\u00a02.9.0\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+_\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 | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+referencehelper.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/_\bu_\bt_\bi_\bl_\bi_\bt_\by_\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 N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template, C >(), int >::type = 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 >::type = 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+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_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf_\b__\bt = Dune::ResolveRef_t< T >\n+\u00a0 This is an alias for Dune::ResolveRef_t.\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+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+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_\bR_\be_\bf (T &&t)\n+\u00a0 This is an alias for Dune::resolveRef.\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:_\bI_\bs_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\b__\bv = Dune::\n+ IsReferenceWrapper_v\n+\u00a0 This is an alias for Dune::IsReferenceWrapper_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/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: indexaccess.hh Source File\n+dune-functions: referencehelper.hh Source File\n \n \n \n \n \n \n \n@@ -74,324 +74,67 @@\n \n \n
    \n
    \n-
    indexaccess.hh
    \n+
    referencehelper.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#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH
    \n
    5
    \n-
    6
    \n-
    7#include <utility>
    \n+
    6#warning The header dune/functions/common/referencehelper.hh is deprecated and will be removed after release 2.9. Include dune/common/referencehelper.hh instead.
    \n+
    7
    \n
    8#include <type_traits>
    \n
    9
    \n-
    10#include <dune/common/typetraits.hh>
    \n-
    11#include <dune/common/concept.hh>
    \n-
    12#include <dune/common/hybridutilities.hh>
    \n+
    10#include <dune/common/referencehelper.hh>
    \n+
    11
    \n+
    12
    \n
    13
    \n-\n-
    15
    \n-
    16
    \n+
    14
    \n+
    15namespace Dune {
    \n+
    16namespace Functions {
    \n
    17
    \n-
    18namespace Dune {
    \n-
    19namespace Functions {
    \n-
    20
    \n-
    21
    \n-
    22namespace Imp {
    \n-
    23
    \n-
    24namespace Concept {
    \n-
    25
    \n-
    26template<class size_type>
    \n-
    27struct HasDynamicIndexAccess
    \n-
    28{
    \n-
    29 template<class C>
    \n-
    30 auto require(C&& c) -> decltype(
    \n-
    31 c[std::declval<size_type>()]
    \n-
    32 );
    \n-
    33};
    \n-
    34
    \n-
    35struct HasStaticIndexAccess
    \n-
    36{
    \n-
    37 template<class C>
    \n-
    38 auto require(C&& c) -> decltype(
    \n-
    39 c[Dune::Indices::_0]
    \n-
    40 );
    \n-
    41};
    \n-
    42
    \n-
    43} // namespace Concept
    \n-
    44
    \n-
    45} // namespace Imp
    \n-
    46
    \n-
    47
    \n-
    48
    \n-
    61template<class C, class I, class F,
    \n-
    62 typename std::enable_if< Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), int>::type = 0>
    \n-
    \n-
    63auto hybridIndexAccess(C&& c, const I& i, F&& f)
    \n-
    64 -> decltype(f(c[i]))
    \n-
    65{
    \n-
    66 return f(c[i]);
    \n-
    67}
    \n-
    \n-
    68
    \n-
    86template<class C, class I, class F,
    \n-
    87 typename std::enable_if< not Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), int>::type = 0>
    \n-
    \n-
    88decltype(auto) hybridIndexAccess(C&& c, const I& i, F&& f)
    \n-
    89{
    \n-
    90 using Size = decltype(Hybrid::size(c));
    \n-
    91 return Hybrid::switchCases(std::make_index_sequence<Size::value>(), i,
    \n-
    92 [&](const auto& ii) -> decltype(auto){
    \n-
    93 return f(c[ii]);
    \n-
    94 }, [&]() -> decltype(auto){
    \n-
    95 return f(c[Dune::Indices::_0]);
    \n-
    96 });
    \n-
    97}
    \n-
    \n-
    98
    \n-
    99
    \n-
    100namespace Imp {
    \n-
    101
    \n-
    115 template<class Index, std::size_t offset=1>
    \n-
    116 class ShiftedDynamicMultiIndex
    \n-
    117 {
    \n-
    118 public:
    \n-
    119 ShiftedDynamicMultiIndex(const Index& index) :
    \n-
    120 index_(index)
    \n-
    121 {}
    \n-
    122
    \n-
    123 std::size_t operator[](std::size_t position) const
    \n-
    124 {
    \n-
    125 if (position<size())
    \n-
    126 return index_[position+offset];
    \n-
    127 else
    \n-
    128 return 0;
    \n-
    129 }
    \n-
    130
    \n-
    134 ShiftedDynamicMultiIndex<Index, offset+1> pop() const
    \n-
    135 {
    \n-
    136 return {index_};
    \n-
    137 }
    \n-
    138
    \n-
    139 std::size_t size() const
    \n-
    140 {
    \n-
    141 if (offset < index_.size())
    \n-
    142 return index_.size() - offset;
    \n-
    143 else
    \n-
    144 return 0;
    \n-
    145 }
    \n-
    146
    \n-
    147 private:
    \n-
    148 const Index& index_;
    \n-
    149 };
    \n-
    150
    \n-
    151 template<class Index, std::size_t offset=1>
    \n-
    152 class ShiftedStaticMultiIndex
    \n-
    153 {
    \n-
    154 public:
    \n-
    155 ShiftedStaticMultiIndex(const Index& index) :
    \n-
    156 index_(index)
    \n-
    157 {}
    \n-
    158
    \n-
    159 template<std::size_t i>
    \n-
    160 auto operator[](Dune::index_constant<i>) const
    \n-
    161 {
    \n-
    162 if constexpr (i<size()) {
    \n-
    163 return index_[Dune::index_constant<i+offset>{}];
    \n-
    164 } else {
    \n-
    165 return Dune::index_constant<0>{};
    \n-
    166 }
    \n-
    167 }
    \n-
    168
    \n-
    172 ShiftedStaticMultiIndex<Index, offset+1> pop() const
    \n-
    173 {
    \n-
    174 return {index_};
    \n-
    175 }
    \n-
    176
    \n-
    177 static constexpr std::size_t size()
    \n-
    178 {
    \n-
    179 auto fullSize = decltype(Hybrid::size(std::declval<Index>()))::value;
    \n-
    180 if (offset < fullSize)
    \n-
    181 return fullSize - offset;
    \n-
    182 else
    \n-
    183 return 0;
    \n-
    184 }
    \n-
    185
    \n-
    186 private:
    \n-
    187 const Index& index_;
    \n-
    188 };
    \n-
    189
    \n-
    195 template<std::size_t offset, class Index>
    \n-
    196 ShiftedDynamicMultiIndex<Index, offset> shiftedDynamicMultiIndex(const Index& index)
    \n-
    197 {
    \n-
    198 return {index};
    \n-
    199 }
    \n-
    200
    \n-
    201 template<std::size_t offset, class Index>
    \n-
    202 ShiftedStaticMultiIndex<Index, offset> shiftedStaticMultiIndex(const Index& index)
    \n-
    203 {
    \n-
    204 return {index};
    \n-
    205 }
    \n-
    206
    \n-
    207} // namespace Imp
    \n-
    208
    \n-
    209
    \n-
    210
    \n-
    211
    \n-
    212namespace Imp {
    \n-
    213
    \n-
    214template<class Result, class Index>
    \n-
    215struct MultiIndexResolver
    \n-
    216{
    \n-
    217 MultiIndexResolver(const Index& index) :
    \n-
    218 index_(index)
    \n-
    219 {}
    \n-
    220
    \n-
    221 template<class C,
    \n-
    222 typename std::enable_if<not std::is_convertible<C&, Result>::value, int>::type = 0>
    \n-
    223 Result operator()(C&& c)
    \n-
    224 {
    \n-
    225 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);
    \n-
    226 auto&& subIndexResolver = MultiIndexResolver<Result, decltype(subIndex)>(subIndex);
    \n-
    227 return (Result)(hybridIndexAccess(c, index_[Dune::Indices::_0], subIndexResolver));
    \n-
    228 }
    \n-
    229
    \n-
    230 template<class C,
    \n-
    231 typename std::enable_if<std::is_convertible<C&, Result>::value, int>::type = 0>
    \n-
    232 Result operator()(C&& c)
    \n-
    233 {
    \n-
    234 return (Result)(std::forward<C>(c));
    \n-
    235 }
    \n-
    236
    \n-
    237 const Index& index_;
    \n-
    238};
    \n-
    239
    \n-
    240} // namespace Imp
    \n-
    241
    \n-
    242
    \n-
    243
    \n-
    262template<class Result, class C, class MultiIndex>
    \n-
    \n-
    263Result hybridMultiIndexAccess(C&& c, const MultiIndex& index)
    \n-
    264{
    \n-
    265
    \n-
    266 Imp::MultiIndexResolver<Result, MultiIndex> multiIndexResolver(index);
    \n-
    267 return multiIndexResolver(c);
    \n-
    268}
    \n-
    \n-
    269
    \n-
    270
    \n-
    271
    \n-
    272
    \n-
    273
    \n-
    274
    \n-
    275namespace Imp {
    \n-
    276
    \n-
    277 template<class C, class MultiIndex, class IsFinal>
    \n-
    278 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex, const IsFinal& isFinal)
    \n-
    279 {
    \n-
    280 // If c is already considered final simply return it,
    \n-
    281 // else resolve the next multiIndex entry.
    \n-
    282 return Hybrid::ifElse(isFinal(c), [&, c = forwardCapture(std::forward<C>(c))](auto) -> decltype(auto) {
    \n-
    283 assert(multiIndex.size() == 0);
    \n-
    284 return c.forward();
    \n-
    285 }, [&](auto) -> decltype(auto) {
    \n-
    286 auto hasDynamicAccess = callableCheck([](auto&& cc) -> std::void_t<decltype(cc[0])> {});
    \n-
    287
    \n-
    288 // Split multiIndex into first entry and remaining ones.
    \n-
    289 auto i = multiIndex[0];
    \n-
    290 auto tail = multiIndex.pop();
    \n-
    291
    \n-
    292 // Resolve first multiIndex entry by c[multiIndex[0]] and
    \n-
    293 // continue resolving with the remaining remaining ones.
    \n-
    294 // If c has a dynamic operator[] this is straight forward.
    \n-
    295 // Else the dynamic multiIndex[0] has to be translated into
    \n-
    296 // a static one using hybridIndexAccess.
    \n-
    297 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto) {
    \n-
    298 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);
    \n-
    299 }, [&](auto id) -> decltype(auto) {
    \n-
    300 // auto indexRange = range(Hybrid::size(id(c)));
    \n-
    301 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::integer_sequence();
    \n-
    302 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype(auto){
    \n-
    303 // Do rescursion with static version of i
    \n-
    304 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);
    \n-
    305 }, [&]() -> decltype(auto){
    \n-
    306 // As fallback we use c[0] this is needed, because there must be one branch that matches.
    \n-
    307 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail, isFinal);
    \n-
    308 });
    \n-
    309 });
    \n-
    310 });
    \n-
    311 }
    \n-
    312
    \n-
    313 template<class C, class MultiIndex>
    \n-
    314 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n-
    315 {
    \n-
    316 auto isExhausted = Hybrid::equals(Hybrid::size(multiIndex), Dune::Indices::_0);
    \n-
    317 return Hybrid::ifElse(isExhausted, [&, c = forwardCapture(std::forward<C>(c))](auto) -> decltype(auto) {
    \n-
    318 return c.forward();
    \n-
    319 }, [&](auto id) -> decltype(auto) {
    \n-
    320 auto head = multiIndex[Dune::Indices::_0];
    \n-
    321 auto tail = multiIndex.pop();
    \n-
    322
    \n-
    323 return Imp::resolveStaticMultiIndex(id(c)[head], tail);
    \n-
    324 });
    \n-
    325 }
    \n-
    326
    \n-
    327} // namespace Imp
    \n-
    328
    \n-
    329
    \n-
    330
    \n-
    353template<class C, class MultiIndex, class IsFinal>
    \n-
    \n-
    354constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex, const IsFinal& isFinal)
    \n-
    355{
    \n-
    356 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), isFinal);
    \n-
    357}
    \n-
    \n-
    358
    \n-
    375template<class C, class MultiIndex>
    \n-
    \n-
    376constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n-
    377{
    \n-
    378 auto hasNoIndexAccess = negatePredicate(callableCheck([](auto&& cc) -> std::void_t<decltype(cc[Dune::Indices::_0])> {}));
    \n-
    379 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);
    \n-
    380}
    \n-
    \n-
    381
    \n-
    397template<class C, class MultiIndex>
    \n-
    \n-
    398constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex& multiIndex)
    \n-
    399{
    \n-
    400 return Imp::resolveStaticMultiIndex(std::forward<C>(c), Imp::shiftedStaticMultiIndex<0>(multiIndex));
    \n-
    401}
    \n-
    \n-
    402
    \n-
    403
    \n-
    404
    \n-
    405} // namespace Dune::Functions
    \n-
    406} // namespace Dune
    \n-
    407
    \n-
    408
    \n-
    409
    \n-
    410#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH
    \n-\n-
    auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))
    Provide operator[] index-access for containers.
    Definition indexaccess.hh:63
    \n-
    constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:398
    \n-
    auto callableCheck(Expression f)
    Create a predicate for checking validity of expressions.
    Definition utility.hh:279
    \n-
    constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:354
    \n-
    Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:263
    \n-
    auto negatePredicate(Check check)
    Negate given predicate.
    Definition utility.hh:304
    \n+
    18
    \n+
    23template<class T>
    \n+
    24[[deprecated("Use Dune::IsReferenceWrapper_v instead. Will be removed after release 2.9.")]]
    \n+
    25constexpr bool
    \n+
    26IsReferenceWrapper_v = Dune::IsReferenceWrapper_v<T>;
    \n+
    27
    \n+
    28
    \n+
    33template<class T>
    \n+
    34decltype(auto)
    \n+
    \n+\n+
    36[[deprecated("Use Dune::resolveRef instead. Will be removed after release 2.9.")]]
    \n+
    37(T&& t)
    \n+
    38{
    \n+
    39 return Dune::resolveRef(std::forward<T>(t));
    \n+
    40}
    \n+
    \n+
    41
    \n+
    46template<class T>
    \n+\n+
    48[[deprecated("Use Dune::ResolveRef_t instead. Will be removed after release 2.9.")]]
    \n+
    49 = Dune::ResolveRef_t<T>;
    \n+
    50
    \n+
    51
    \n+
    52}} // namespace Dune::Functions
    \n+
    53
    \n+
    54
    \n+
    55
    \n+
    56#endif // DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH
    \n
    Definition polynomial.hh:10
    \n-
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:372
    \n+
    constexpr bool IsReferenceWrapper_v
    This is an alias for Dune::IsReferenceWrapper_v.
    Definition referencehelper.hh:26
    \n+
    Dune::ResolveRef_t< T > ResolveRef_t
    This is an alias for Dune::ResolveRef_t.
    Definition referencehelper.hh:49
    \n+
    decltype(auto) resolveRef(T &&t)
    This is an alias for Dune::resolveRef.
    Definition referencehelper.hh:37
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,355 +1,74 @@\n dune-functions\u00a02.9.0\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+referencehelper.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#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n-4#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n+4#define DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n 5\n-6\n-7#include \n+6#warning The header dune/functions/common/referencehelper.hh is deprecated and\n+will be removed after release 2.9. Include dune/common/referencehelper.hh\n+instead.\n+7\n 8#include \n 9\n-10#include \n-11#include \n-12#include \n+10#include \n+11\n+12\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\n-16\n+14\n+15namespace _\bD_\bu_\bn_\be {\n+16namespace Functions {\n 17\n-18namespace _\bD_\bu_\bn_\be {\n-19namespace Functions {\n-20\n-21\n-22namespace Imp {\n-23\n-24namespace Concept {\n-25\n-26template\n-27struct HasDynamicIndexAccess\n-28{\n-29 template\n-30 auto require(C&& c) -> decltype(\n-31 c[std::declval()]\n-32 );\n-33};\n-34\n-35struct HasStaticIndexAccess\n-36{\n-37 template\n-38 auto require(C&& c) -> decltype(\n-39 c[Dune::Indices::_0]\n-40 );\n-41};\n-42\n-43} // namespace Concept\n-44\n-45} // namespace Imp\n-46\n-47\n-48\n-61template, C>(), int>::type = 0>\n-_\b6_\b3auto _\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-64 -> decltype(f(c[i]))\n-65{\n-66 return f(c[i]);\n-67}\n-68\n-86template, C>(), int>::type = 0>\n-_\b8_\b8decltype(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-89{\n-90 using Size = decltype(Hybrid::size(c));\n-91 return Hybrid::switchCases(std::make_index_sequence(), i,\n-92 [&](const auto& ii) -> decltype(auto){\n-93 return f(c[ii]);\n-94 }, [&]() -> decltype(auto){\n-95 return f(c[Dune::Indices::_0]);\n-96 });\n-97}\n-98\n-99\n-100namespace Imp {\n-101\n-115 template\n-116 class ShiftedDynamicMultiIndex\n-117 {\n-118 public:\n-119 ShiftedDynamicMultiIndex(const Index& index) :\n-120 index_(index)\n-121 {}\n-122\n-123 std::size_t operator[](std::size_t position) const\n-124 {\n-125 if (position pop() const\n-135 {\n-136 return {index_};\n-137 }\n-138\n-139 std::size_t size() const\n-140 {\n-141 if (offset < index_.size())\n-142 return index_.size() - offset;\n-143 else\n-144 return 0;\n-145 }\n-146\n-147 private:\n-148 const Index& index_;\n-149 };\n-150\n-151 template\n-152 class ShiftedStaticMultiIndex\n-153 {\n-154 public:\n-155 ShiftedStaticMultiIndex(const Index& index) :\n-156 index_(index)\n-157 {}\n-158\n-159 template\n-160 auto operator[](Dune::index_constant) const\n-161 {\n-162 if constexpr (i{}];\n-164 } else {\n-165 return Dune::index_constant<0>{};\n-166 }\n-167 }\n-168\n-172 ShiftedStaticMultiIndex pop() const\n-173 {\n-174 return {index_};\n-175 }\n-176\n-177 static constexpr std::size_t size()\n-178 {\n-179 auto fullSize = decltype(Hybrid::size(std::declval()))::value;\n-180 if (offset < fullSize)\n-181 return fullSize - offset;\n-182 else\n-183 return 0;\n-184 }\n-185\n-186 private:\n-187 const Index& index_;\n-188 };\n-189\n-195 template\n-196 ShiftedDynamicMultiIndex shiftedDynamicMultiIndex(const\n-Index& index)\n-197 {\n-198 return {index};\n-199 }\n-200\n-201 template\n-202 ShiftedStaticMultiIndex shiftedStaticMultiIndex(const Index&\n-index)\n-203 {\n-204 return {index};\n-205 }\n-206\n-207} // namespace Imp\n-208\n-209\n-210\n-211\n-212namespace Imp {\n-213\n-214template\n-215struct MultiIndexResolver\n-216{\n-217 MultiIndexResolver(const Index& index) :\n-218 index_(index)\n-219 {}\n-220\n-221 template::value, int>::\n-type = 0>\n-223 Result operator()(C&& c)\n-224 {\n-225 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);\n-226 auto&& subIndexResolver = MultiIndexResolver\n-(subIndex);\n-227 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-228 }\n-229\n-230 template::value, int>::type\n-= 0>\n-232 Result operator()(C&& c)\n-233 {\n-234 return (Result)(std::forward(c));\n-235 }\n-236\n-237 const Index& index_;\n-238};\n-239\n-240} // namespace Imp\n-241\n-242\n-243\n-262template\n-_\b2_\b6_\b3Result _\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-264{\n-265\n-266 Imp::MultiIndexResolver multiIndexResolver(index);\n-267 return multiIndexResolver(c);\n-268}\n-269\n-270\n-271\n-272\n-273\n-274\n-275namespace Imp {\n-276\n-277 template\n-278 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n-multiIndex, const IsFinal& isFinal)\n-279 {\n-280 // If c is already considered final simply return it,\n-281 // else resolve the next multiIndex entry.\n-282 return Hybrid::ifElse(isFinal(c), [&, c = _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(std::forward\n-(c))](auto) -> decltype(auto) {\n-283 assert(multiIndex.size() == 0);\n-284 return c.forward();\n-285 }, [&](auto) -> decltype(auto) {\n-286 auto hasDynamicAccess = _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk([](auto&& cc) -> std::void_t {});\n-287\n-288 // Split multiIndex into first entry and remaining ones.\n-289 auto i = multiIndex[0];\n-290 auto tail = multiIndex.pop();\n-291\n-292 // Resolve first multiIndex entry by c[multiIndex[0]] and\n-293 // continue resolving with the remaining remaining ones.\n-294 // If c has a dynamic operator[] this is straight forward.\n-295 // Else the dynamic multiIndex[0] has to be translated into\n-296 // a static one using hybridIndexAccess.\n-297 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto) {\n-298 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);\n-299 }, [&](auto id) -> decltype(auto) {\n-300 // auto indexRange = range(Hybrid::size(id(c)));\n-301 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::\n-integer_sequence();\n-302 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype\n-(auto){\n-303 // Do rescursion with static version of i\n-304 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);\n-305 }, [&]() -> decltype(auto){\n-306 // As fallback we use c[0] this is needed, because there must be one branch\n-that matches.\n-307 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail,\n-isFinal);\n-308 });\n-309 });\n-310 });\n-311 }\n-312\n-313 template\n-314 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex&\n-multiIndex)\n-315 {\n-316 auto isExhausted = Hybrid::equals(Hybrid::size(multiIndex), Dune::Indices::\n-_0);\n-317 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-318 return c.forward();\n-319 }, [&](auto id) -> decltype(auto) {\n-320 auto head = multiIndex[Dune::Indices::_0];\n-321 auto tail = multiIndex.pop();\n-322\n-323 return Imp::resolveStaticMultiIndex(id(c)[head], tail);\n-324 });\n-325 }\n-326\n-327} // namespace Imp\n-328\n-329\n-330\n-353template\n-_\b3_\b5_\b4constexpr 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-355{\n-356 return Imp::resolveDynamicMultiIndex(std::forward(c), Imp::\n-shiftedDynamicMultiIndex<0>(multiIndex), isFinal);\n-357}\n-358\n-375template\n-_\b3_\b7_\b6constexpr 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-377{\n-378 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-379 return Imp::resolveDynamicMultiIndex(std::forward(c), Imp::\n-shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);\n-380}\n-381\n-397template\n-_\b3_\b9_\b8constexpr 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-399{\n-400 return Imp::resolveStaticMultiIndex(std::forward(c), Imp::\n-shiftedStaticMultiIndex<0>(multiIndex));\n-401}\n-402\n-403\n-404\n-405} // namespace Dune::Functions\n-406} // namespace Dune\n-407\n-408\n-409\n-410#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n-_\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:63\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:398\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:279\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:354\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:263\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:304\n+18\n+23template\n+24[[deprecated(\"Use Dune::IsReferenceWrapper_v instead. Will be removed after\n+release 2.9.\")]]\n+25constexpr bool\n+_\b2_\b6_\bI_\bs_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\b__\bv = Dune::IsReferenceWrapper_v;\n+27\n+28\n+33template\n+34decltype(auto)\n+_\b3_\b5_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf\n+36[[deprecated(\"Use Dune::resolveRef instead. Will be removed after release\n+2.9.\")]]\n+37(T&& t)\n+38{\n+39 return Dune::resolveRef(std::forward(t));\n+40}\n+41\n+46template\n+_\b4_\b7using _\bR_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf_\b__\bt\n+48[[deprecated(\"Use Dune::ResolveRef_t instead. Will be removed after release\n+2.9.\")]]\n+49 = Dune::ResolveRef_t;\n+50\n+51\n+52}} // namespace Dune::Functions\n+53\n+54\n+55\n+56#endif // DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:372\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bs_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\b__\bv\n+constexpr bool IsReferenceWrapper_v\n+This is an alias for Dune::IsReferenceWrapper_v.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:26\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_\bR_\be_\bf_\b__\bt\n+Dune::ResolveRef_t< T > ResolveRef_t\n+This is an alias for Dune::ResolveRef_t.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:49\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_\bR_\be_\bf\n+decltype(auto) resolveRef(T &&t)\n+This is an alias for Dune::resolveRef.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:37\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: interfaces.hh File Reference\n+dune-functions: localfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -72,25 +72,33 @@\n
  • dune
  • functions
  • common
  • \n \n \n
    \n \n-
    interfaces.hh File Reference
    \n+
    localfunction.hh File Reference
    \n
    \n
    \n \n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::PolymorphicType< Interface >
     Base class with polymorphic type boiler plate code. More...
    class  Dune::Functions::LocalFunction< Signature, LocalContext, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >
     Class storing local functions using type erasure. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -2,20 +2,30 @@\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-interfaces.hh File Reference\n+localfunction.hh File Reference\n #include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be_\b<_\b _\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\b _\b>\n-\u00a0 Base class with polymorphic type boiler plate code. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0 Class storing local functions using type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n ===============================================================================\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/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: interfaces.hh Source File\n+dune-functions: localfunction.hh Source File\n \n \n \n \n \n \n \n@@ -74,60 +74,170 @@\n \n \n \n
    \n-
    interfaces.hh
    \n+
    localfunction.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n-
    3#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n
    5
    \n
    6#include <type_traits>
    \n
    7
    \n-
    8
    \n-
    9namespace Dune {
    \n-
    10namespace Functions {
    \n-
    11
    \n-
    12
    \n-
    13
    \n-
    23template<class Interface>
    \n-
    \n-\n-
    25{
    \n-
    26public:
    \n-
    27
    \n-
    \n-\n-
    30 {}
    \n+
    8#include <dune/common/typeutilities.hh>
    \n+
    9
    \n+\n+\n+\n+\n+\n+
    15
    \n+
    16
    \n+
    17
    \n+
    18namespace Dune {
    \n+
    19namespace Functions {
    \n+
    20
    \n+
    21
    \n+
    22
    \n+
    23/*
    \n+
    24 * Default implementation is empty
    \n+
    25 * The actual implementation is only given if Signature is an type
    \n+
    26 * describing a function signature as Range(Domain).
    \n+
    27 */
    \n+
    28template<class Signature, class LocalContext, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n+
    \n+\n+
    30{};
    \n
    \n
    31
    \n-
    40 virtual Interface* clone() const = 0;
    \n-
    41
    \n-
    51 virtual Interface* clone(void* buffer) const = 0;
    \n-
    52
    \n-
    62 virtual Interface* move(void* buffer) = 0;
    \n-
    63};
    \n-
    \n+
    32
    \n+
    33
    \n+
    34namespace Imp
    \n+
    35{
    \n+
    36
    \n+
    38 template<class S, class L, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    39 struct LocalFunctionTraits :
    \n+
    40 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>
    \n+
    41 {
    \n+
    42 protected:
    \n+
    43 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;
    \n+
    44
    \n+
    45 public:
    \n+
    47 using LocalContext = L;
    \n+
    48
    \n+
    50 using DerivativeSignature = typename Base::DerivativeSignature;
    \n+
    51
    \n+\n+
    54
    \n+
    56 using Concept = LocalFunctionWrapperInterface<S, DerivativeInterface, L>;
    \n+
    57
    \n+
    59 template<class B>
    \n+
    60 using Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L, B>;
    \n+
    61 };
    \n+
    62}
    \n+
    63
    \n
    64
    \n
    65
    \n-
    66
    \n-
    67}} // namespace Dune::Functions
    \n-
    68
    \n-
    69#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH
    \n+
    86template<class Range, class Domain, class LocalContext, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    \n+
    87class LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize> :
    \n+
    88 public TypeErasureBase<
    \n+
    89 typename Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::Concept,
    \n+
    90 Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::template Model>
    \n+
    91{
    \n+
    92 using Traits = Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>;
    \n+
    93
    \n+\n+
    95
    \n+
    96 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n+
    97
    \n+
    98public:
    \n+
    99
    \n+
    111 template<class F, disableCopyMove<LocalFunction, F> = 0 >
    \n+
    \n+\n+
    113 Base(std::forward<F>(f))
    \n+
    114 {
    \n+
    115 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+
    116 }
    \n+
    \n+
    117
    \n+
    118 LocalFunction() = default;
    \n+
    119
    \n+
    \n+
    123 Range operator() (const Domain& x) const
    \n+
    124 {
    \n+
    125 return this->asInterface().operator()(x);
    \n+
    126 }
    \n+
    \n+
    127
    \n+
    \n+
    135 friend DerivativeInterface derivative(const LocalFunction& t)
    \n+
    136 {
    \n+
    137 return t.asInterface().derivative();
    \n+
    138 }
    \n+
    \n+
    139
    \n+
    \n+
    146 void bind(const LocalContext& context)
    \n+
    147 {
    \n+
    148 this->asInterface().bind(context);
    \n+
    149 }
    \n+
    \n+
    150
    \n+
    \n+
    154 void unbind()
    \n+
    155 {
    \n+
    156 this->asInterface().unbind();
    \n+
    157 }
    \n+
    \n+
    158
    \n+
    \n+
    161 bool bound() const
    \n+
    162 {
    \n+
    163 return this->asInterface().bound();
    \n+
    164 }
    \n+
    \n+
    165
    \n+
    \n+
    169 const LocalContext& localContext() const
    \n+
    170 {
    \n+
    171 return this->asInterface().localContext();
    \n+
    172 }
    \n+
    \n+
    173};
    \n+
    \n+
    174
    \n+
    175
    \n+
    176
    \n+
    177}} // namespace Dune::Functions
    \n+
    178
    \n+
    179
    \n+
    180
    \n+
    181#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n+\n+\n+\n+\n+\n+
    friend DerivativeInterface derivative(const LocalFunction &t)
    Get derivative of wrapped function.
    Definition localfunction.hh:135
    \n
    Definition polynomial.hh:10
    \n-
    Base class with polymorphic type boiler plate code.
    Definition interfaces.hh:25
    \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:29
    \n+
    Definition localfunction.hh:30
    \n+
    const LocalContext & localContext() const
    Obtain local context this LocalFunction is bound to.
    Definition localfunction.hh:169
    \n+
    LocalFunction(F &&f)
    Construct from function.
    Definition localfunction.hh:112
    \n+
    void unbind()
    Unbind from local context.
    Definition localfunction.hh:154
    \n+
    bool bound() const
    Return if the local function is bound to a grid element.
    Definition localfunction.hh:161
    \n+
    void bind(const LocalContext &context)
    Bind function to a local context.
    Definition localfunction.hh:146
    \n+\n+
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:165
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,62 +1,188 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-interfaces.hh\n+localfunction.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n-3#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n-4#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+4#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n 5\n 6#include \n 7\n-8\n-9namespace _\bD_\bu_\bn_\be {\n-10namespace Functions {\n-11\n-12\n-13\n-23template\n-_\b2_\b4class _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be\n-25{\n-26public:\n-27\n-_\b2_\b9 virtual _\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bT_\by_\bp_\be()\n-30 {}\n+8#include \n+9\n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\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+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\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_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\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/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+15\n+16\n+17\n+18namespace _\bD_\bu_\bn_\be {\n+19namespace Functions {\n+20\n+21\n+22\n+23/*\n+24 * Default implementation is empty\n+25 * The actual implementation is only given if Signature is an type\n+26 * describing a function signature as Range(Domain).\n+27 */\n+28template class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+_\b2_\b9class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+30{};\n 31\n-_\b4_\b0 virtual Interface* _\bc_\bl_\bo_\bn_\be() const = 0;\n-41\n-_\b5_\b1 virtual Interface* _\bc_\bl_\bo_\bn_\be(void* buffer) const = 0;\n-52\n-_\b6_\b2 virtual Interface* _\bm_\bo_\bv_\be(void* buffer) = 0;\n-63};\n+32\n+33\n+34namespace Imp\n+35{\n+36\n+38 template class DerivativeTraits, size_t\n+bufferSize>\n+39 struct LocalFunctionTraits :\n+40 DifferentiableFunctionTraits\n+41 {\n+42 protected:\n+43 using Base=DifferentiableFunctionTraits;\n+44\n+45 public:\n+47 using LocalContext = L;\n+48\n+50 using DerivativeSignature = typename Base::DerivativeSignature;\n+51\n+53 using DerivativeInterface = _\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+54\n+56 using Concept = LocalFunctionWrapperInterface;\n+57\n+59 template\n+60 using Model = LocalFunctionWrapperImplementation;\n+61 };\n+62}\n+63\n 64\n 65\n-66\n-67}} // namespace Dune::Functions\n-68\n-69#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH\n+86template class\n+DerivativeTraits, size_t bufferSize>\n+_\b8_\b7class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< Range(Domain), LocalContext, DerivativeTraits,\n+bufferSize> :\n+88 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n+89 typename Imp::LocalFunctionTraits::Concept,\n+90 Imp::LocalFunctionTraits::template Model>\n+91{\n+92 using Traits = Imp::LocalFunctionTraits;\n+93\n+94 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+95\n+96 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+97\n+98public:\n+99\n+111 template = 0 >\n+_\b1_\b1_\b2 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n+113 _\bB_\ba_\bs_\be(std::forward(f))\n+114 {\n+115 static_assert(Dune::Functions::Concept::isLocalFunction(), \"Trying to construct a LocalFunction from type that does not\n+model the LocalFunction concept\");\n+116 }\n+117\n+_\b1_\b1_\b8 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n+119\n+_\b1_\b2_\b3 Range operator() (const Domain& x) const\n+124 {\n+125 return this->asInterface().operator()(x);\n+126 }\n+127\n+_\b1_\b3_\b5 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+136 {\n+137 return t.asInterface().derivative();\n+138 }\n+139\n+_\b1_\b4_\b6 void _\bb_\bi_\bn_\bd(const LocalContext& context)\n+147 {\n+148 this->asInterface().bind(context);\n+149 }\n+150\n+_\b1_\b5_\b4 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+155 {\n+156 this->asInterface().unbind();\n+157 }\n+158\n+_\b1_\b6_\b1 bool _\bb_\bo_\bu_\bn_\bd() const\n+162 {\n+163 return this->asInterface().bound();\n+164 }\n+165\n+_\b1_\b6_\b9 const LocalContext& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt() const\n+170 {\n+171 return this->asInterface().localContext();\n+172 }\n+173};\n+174\n+175\n+176\n+177}} // namespace Dune::Functions\n+178\n+179\n+180\n+181#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+_\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_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n+_\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:135\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:25\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:29\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:30\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:169\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:112\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:154\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:161\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:146\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:165\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: overflowarray.hh File Reference\n+dune-functions: functionconcepts.hh File Reference\n \n \n \n \n \n \n \n@@ -71,39 +71,123 @@\n \n
    \n \n
    \n \n-
    overflowarray.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    functionconcepts.hh File Reference
    \n \n
    \n-
    #include <algorithm>
    \n-#include <iostream>
    \n-#include <cstddef>
    \n-#include <array>
    \n-#include <initializer_list>
    \n-#include <dune/common/genericiterator.hh>
    \n+
    #include <dune/common/typelist.hh>
    \n+#include <dune/common/concept.hh>
    \n+#include <dune/functions/common/signature.hh>
    \n+#include <dune/functions/gridfunctions/localderivativetraits.hh>
    \n+#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n
    \n

    Go to the source code of this file.

    \n

    \n Namespaces

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

    \n Classes

    class  Dune::Functions::OverflowArray< BA, maxSize >
     A dynamically sized array-like class with overflow. More...
    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+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.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,136 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-overflowarray.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+functionconcepts.hh File Reference\n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n _\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+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+\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: overflowarray.hh Source File\n+dune-functions: functionconcepts.hh Source File\n \n \n \n \n \n \n \n@@ -74,278 +74,366 @@\n \n \n \n
    \n-
    overflowarray.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#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n+
    4#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n
    5
    \n-
    6#include <algorithm>
    \n-
    7#include <iostream>
    \n-
    8#include <cstddef>
    \n-
    9#include <array>
    \n-
    10#include <initializer_list>
    \n-
    11
    \n-
    12#include <dune/common/genericiterator.hh>
    \n-
    13
    \n-
    14
    \n-
    15
    \n-
    16namespace Dune::Functions {
    \n-
    17
    \n+
    6#include <dune/common/typelist.hh>
    \n+
    7#include <dune/common/concept.hh>
    \n+
    8
    \n+\n+\n+\n+
    12
    \n+
    13namespace Dune {
    \n+
    14namespace Functions {
    \n+
    15namespace Concept {
    \n+
    16
    \n+
    17using namespace Dune::Concept;
    \n
    18
    \n-
    42template<class BA, std::size_t maxSize = std::tuple_size_v<BA>>
    \n-
    \n-\n-
    44 public BA
    \n-
    45{
    \n-
    46 static constexpr std::size_t baseSize = std::tuple_size_v<BA>;
    \n-
    47
    \n-
    48public:
    \n-
    49 using BaseArray = BA;
    \n-
    50
    \n-
    51 using value_type = typename BaseArray::value_type;
    \n-\n-\n-\n-
    55 using difference_type = std::ptrdiff_t;
    \n-
    56 using size_type = std::size_t;
    \n-
    57 using iterator = Dune::GenericIterator<OverflowArray, value_type>;
    \n-
    58 using const_iterator = Dune::GenericIterator<const OverflowArray, const value_type>;
    \n-
    59
    \n-
    60private:
    \n-
    61 using OverflowBuffer = std::array<value_type, maxSize-baseSize>;
    \n+
    19
    \n+
    20
    \n+
    21// Callable concept ############################################################
    \n+
    22
    \n+
    23
    \n+
    31template<class... Args>
    \n+
    \n+\n+
    33{
    \n+
    34 template<class F>
    \n+
    35 auto require(F&& f) -> decltype(
    \n+
    36 f(std::declval<Args>()...)
    \n+
    37 );
    \n+
    38};
    \n+
    \n+
    39
    \n+
    46template<class F, class... Args>
    \n+
    \n+
    47static constexpr auto isCallable()
    \n+
    48{ return models<Concept::Callable<Args...>, F>(); }
    \n+
    \n+
    49
    \n+
    56template<class F, class... Args>
    \n+
    \n+
    57static constexpr auto isCallable(F&&, Args&&...)
    \n+
    58{
    \n+
    59 return models<Concept::Callable<Args&&...>, F>();
    \n+
    60}
    \n+
    \n+
    61
    \n
    62
    \n-
    63public:
    \n-
    64
    \n-
    65 OverflowArray() = default;
    \n-
    66
    \n-
    \n-
    67 OverflowArray(const std::initializer_list<value_type>& l) {
    \n-
    68 assert(l.size() <= capacity());
    \n-
    69 size_ = l.size();
    \n-
    70 std::copy_n(l.begin(), size_, begin());
    \n-
    71 }
    \n-
    \n-
    72
    \n-
    \n-
    73 bool operator == (const OverflowArray& other) const {
    \n-
    74 if (size() != other.size())
    \n-
    75 return false;
    \n-
    76 for (size_type i=0; i<size(); ++i)
    \n-
    77 if ((*this)[i] != other[i])
    \n-
    78 return false;
    \n-
    79 return true;
    \n-
    80 }
    \n-
    \n-
    81
    \n-
    \n-
    83 void clear() {
    \n-
    84 size_ = 0;
    \n-
    85 }
    \n+
    63
    \n+
    64// Function concept ############################################################
    \n+
    65template<class Signature>
    \n+
    66struct Function;
    \n+
    67
    \n+
    76template<class Range, class Domain>
    \n+
    \n+
    77struct Function<Range(Domain)> : Refines<Callable<Domain> >
    \n+
    78{
    \n+
    79 template<class F>
    \n+
    80 auto require(F&& f) -> decltype(
    \n+
    81 // F models Function<Range(Domain)> if the result of F(Domain) is implicitly convertible to Range
    \n+
    82 requireConvertible<Range>(f(std::declval<Domain>()))
    \n+
    83 );
    \n+
    84};
    \n+
    \n+
    85
    \n+
    87template<class F, class Signature>
    \n+
    \n+
    88static constexpr bool isFunction()
    \n+
    89{ return models<Concept::Function<Signature>, F>(); }
    \n
    \n-
    86
    \n+
    90
    \n+
    92template<class F, class Signature, template<class> class DerivativeTraits>
    \n
    \n-
    93 void resize(size_type n) {
    \n-
    94 assert(n <= capacity());
    \n-
    95 size_ = n;
    \n-
    96 }
    \n+\n+
    94{ return models<Concept::Function<Signature>, F>(); }
    \n
    \n+
    95
    \n+
    96
    \n
    97
    \n-
    \n-
    104 void push_back(const value_type& t) {
    \n-
    105 assert(size() < capacity());
    \n-
    106 (*this)[size_++] = t;
    \n-
    107 }
    \n-
    \n-
    108
    \n-
    \n-
    110 void pop_back() {
    \n-
    111 assert(size() > 0);
    \n-
    112 if (! empty())
    \n-
    113 size_--;
    \n-
    114 }
    \n-
    \n-
    115
    \n-
    \n-
    122 void push_front(const value_type& t) {
    \n-
    123 assert(size() < capacity());
    \n-
    124 for (size_type i=0; i<size(); i++)
    \n-
    125 (*this)[i+1] = (*this)[i];
    \n-
    126 (*this)[0] = t;
    \n-
    127 }
    \n-
    \n-
    128
    \n-
    \n-\n-
    131 return iterator(*this, 0);
    \n-
    132 }
    \n-
    \n-
    133
    \n-
    \n-\n-
    136 return const_iterator(*this, 0);
    \n-
    137 }
    \n-
    \n-
    138
    \n-
    \n-\n-
    141 return iterator(*this, size());
    \n-
    142 }
    \n-
    \n-
    143
    \n-
    \n-\n-
    146 return const_iterator(*this, size());
    \n-
    147 }
    \n-
    \n-
    148
    \n-
    \n-\n-
    151 assert(i < size());
    \n-
    152 // If there's no padding between the base class and the overflow_ member,
    \n-
    153 // the compiler should be able to optimize this to
    \n-
    154 // return *(&BaseArray::operator[](0) + i);
    \n-
    155 if (i<baseSize)
    \n-
    156 return BaseArray::operator[](i);
    \n-
    157 return overflow_[i-baseSize];
    \n-
    158 }
    \n-
    \n-
    159
    \n-
    \n-\n-
    162 assert(i < size());
    \n-
    163 // If there's no padding between the base class and the overflow_ member,
    \n-
    164 // the compiler should be able to optimize this to
    \n-
    165 // return *(&BaseArray::operator[](0) + i);
    \n-
    166 if (i<baseSize)
    \n-
    167 return BaseArray::operator[](i);
    \n-
    168 return overflow_[i-baseSize];
    \n-
    169 }
    \n-
    \n-
    170
    \n-
    \n-\n-
    173 assert(size() > 0);
    \n-
    174 return (*this)[0];
    \n-
    175 }
    \n-
    \n-
    176
    \n-
    \n-\n-
    179 assert(size() > 0);
    \n-
    180 return (*this)[0];
    \n-
    181 }
    \n-
    \n-
    182
    \n-
    \n-\n-
    185 assert(size() > 0);
    \n-
    186 return (*this)[size()-1];
    \n-
    187 }
    \n-
    \n-
    188
    \n-
    \n-\n-
    191 assert(size() > 0);
    \n-
    192 return (*this)[size()-1];
    \n-
    193 }
    \n-
    \n-
    194
    \n-
    \n-
    196 size_type size () const {
    \n-
    197 return size_;
    \n-
    198 }
    \n-
    \n-
    199
    \n-
    \n-
    201 bool empty() const {
    \n-
    202 return size() == 0;
    \n-
    203 }
    \n-
    \n-
    204
    \n-
    \n-
    206 static constexpr size_type capacity() {
    \n-
    207 return maxSize;
    \n-
    208 }
    \n-
    \n+
    98// DifferentiableFunction concept ##############################################
    \n+
    99template<class Signature, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+\n+
    101
    \n+
    113template<class Range, class Domain, template<class> class DerivativeTraits>
    \n+
    \n+
    114struct DifferentiableFunction<Range(Domain), DerivativeTraits> : Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n+
    115{
    \n+\n+
    117
    \n+
    118 template<class F>
    \n+
    119 auto require(F&& f) -> decltype(
    \n+
    120 derivative(f),
    \n+
    121 requireConcept<Function<DerivativeSignature>>(derivative(f))
    \n+
    122 );
    \n+
    123};
    \n+
    \n+
    124
    \n+
    126template<class F, class Signature, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+
    \n+
    127static constexpr bool isDifferentiableFunction()
    \n+
    128{ return models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }
    \n+
    \n+
    129
    \n+
    131template<class F, class Signature, template<class> class DerivativeTraits>
    \n+
    \n+\n+
    133{ return models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }
    \n+
    \n+
    134
    \n+
    135
    \n+
    136
    \n+
    137// LocalFunction concept ##############################################
    \n+
    138template<class Signature, class LocalContext>
    \n+\n+
    140
    \n+
    150template<class Range, class Domain, class LocalContext>
    \n+
    \n+
    151struct LocalFunction<Range(Domain), LocalContext> :
    \n+
    152 Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n+
    153{
    \n+
    154 template<class F>
    \n+
    155 auto require(F&& f) -> decltype(
    \n+
    156 f.bind(std::declval<LocalContext>()),
    \n+
    157 f.unbind(),
    \n+
    158 requireConvertible<bool>(f.bound()),
    \n+
    159 f.localContext(),
    \n+
    160 requireConvertible<LocalContext>(f.localContext())
    \n+
    161 );
    \n+
    162};
    \n+
    \n+
    163
    \n+
    165template<class F, class Signature, class LocalContext>
    \n+
    \n+
    166static constexpr bool isLocalFunction()
    \n+
    167{ return models<Concept::LocalFunction<Signature, LocalContext>, F>(); }
    \n+
    \n+
    168
    \n+
    169
    \n+
    170// DifferentiableLocalFunction concept ##############################################
    \n+
    171template<class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+\n+
    173
    \n+
    186template<class Range, class Domain, class LocalContext, template<class> class DerivativeTraits>
    \n+
    \n+
    187struct DifferentiableLocalFunction<Range(Domain), LocalContext, DerivativeTraits> :
    \n+
    188 Refines<
    \n+
    189 Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,
    \n+
    190 Dune::Functions::Concept::LocalFunction<Range(Domain),LocalContext>
    \n+
    191 >
    \n+
    192{
    \n+
    193 template<class F>
    \n+
    194 auto require(F&& f) -> decltype(
    \n+
    195 f.bind(std::declval<LocalContext>()),
    \n+
    196 f.unbind(),
    \n+
    197 f.localContext(),
    \n+
    198 requireConvertible<LocalContext>(f.localContext())
    \n+
    199 );
    \n+
    200};
    \n+
    \n+
    201
    \n+
    203template<class F, class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+
    \n+
    204static constexpr bool isDifferentiableLocalFunction()
    \n+
    205{ return models<Concept::DifferentiableLocalFunction<Signature, LocalContext, DerivativeTraits>, F>(); }
    \n+
    \n+
    206
    \n+
    207
    \n+
    208// EntitySet concept ##############################################
    \n
    209
    \n-
    \n-
    211 static constexpr size_type max_size() {
    \n-
    212 return maxSize;
    \n-
    213 }
    \n-
    \n-
    214
    \n-
    \n-
    216 inline friend std::size_t hash_value(const OverflowArray& v) noexcept {
    \n-
    217 return hash_range(v.begin(), v.end());
    \n-
    218 }
    \n-
    \n-
    219
    \n-
    \n-
    221 friend std::ostream& operator<< (std::ostream& s, const OverflowArray& c) {
    \n-
    222 for (const auto& ci : c)
    \n-
    223 s << ci << " ";
    \n-
    224 return s;
    \n-
    225 }
    \n-
    \n-
    226
    \n-
    227private:
    \n-
    228 OverflowBuffer overflow_;
    \n-
    229 size_type size_ = 0;
    \n-
    230};
    \n+
    \n+\n+
    220{
    \n+
    221 template<class E>
    \n+
    222 auto require(E&& f) -> decltype(
    \n+
    223 requireType<typename E::Element>(),
    \n+
    224 requireType<typename E::LocalCoordinate>(),
    \n+
    225 requireType<typename E::GlobalCoordinate>()
    \n+
    226 );
    \n+
    227};
    \n+
    \n+
    228
    \n+
    230template<class E>
    \n+
    \n+
    231static constexpr bool isEntitySet()
    \n+
    232{ return models<Concept::EntitySet, E>(); }
    \n
    \n-
    231
    \n-
    232
    \n
    233
    \n-
    234} // namespace Dune::Functions
    \n+
    234
    \n
    235
    \n-
    236
    \n-
    237
    \n-
    238#endif // DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH
    \n-
    Definition polynomial.hh:11
    \n-
    A dynamically sized array-like class with overflow.
    Definition overflowarray.hh:45
    \n-
    const value_type & const_reference
    Definition overflowarray.hh:53
    \n-
    value_type & reference
    Definition overflowarray.hh:52
    \n-
    const_iterator end() const
    Returns a const_iterator pointing to the end of the OverflowArray.
    Definition overflowarray.hh:145
    \n-
    bool operator==(const OverflowArray &other) const
    Definition overflowarray.hh:73
    \n-
    friend std::size_t hash_value(const OverflowArray &v) noexcept
    Compute hash value.
    Definition overflowarray.hh:216
    \n-
    void push_back(const value_type &t)
    Appends an element to the end of the OverflowArray,.
    Definition overflowarray.hh:104
    \n-
    friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)
    Write container to an output stream.
    Definition overflowarray.hh:221
    \n-
    iterator begin()
    Returns a iterator pointing to the beginning of the OverflowArray.
    Definition overflowarray.hh:130
    \n-
    bool empty() const
    Returns true if OverflowArray has no elements.
    Definition overflowarray.hh:201
    \n-
    size_type size() const
    Returns number of elements in the OverflowArray.
    Definition overflowarray.hh:196
    \n-
    typename BaseArray::value_type value_type
    Definition overflowarray.hh:51
    \n-
    void pop_back()
    Erases the last element of the OverflowArray, O(1) time.
    Definition overflowarray.hh:110
    \n-
    Dune::GenericIterator< OverflowArray, value_type > iterator
    Definition overflowarray.hh:57
    \n-
    const_iterator begin() const
    Returns a const_iterator pointing to the beginning of the OverflowArray.
    Definition overflowarray.hh:135
    \n-
    std::ptrdiff_t difference_type
    Definition overflowarray.hh:55
    \n-\n-
    BA BaseArray
    Definition overflowarray.hh:49
    \n-
    static constexpr size_type capacity()
    Returns the capacity of the OverflowArray.
    Definition overflowarray.hh:206
    \n-
    static constexpr size_type max_size()
    Returns the maximum length of the OverflowArray.
    Definition overflowarray.hh:211
    \n-
    const_reference front() const
    Returns const reference to first element of OverflowArray.
    Definition overflowarray.hh:178
    \n-
    void clear()
    Erases all elements.
    Definition overflowarray.hh:83
    \n-
    iterator end()
    Returns an iterator pointing to the end of the OverflowArray.
    Definition overflowarray.hh:140
    \n-
    std::size_t size_type
    Definition overflowarray.hh:56
    \n-
    void resize(size_type n)
    Specifies a new size for the OverflowArray.
    Definition overflowarray.hh:93
    \n-
    value_type * pointer
    Definition overflowarray.hh:54
    \n-
    Dune::GenericIterator< const OverflowArray, const value_type > const_iterator
    Definition overflowarray.hh:58
    \n-
    const_reference back() const
    Returns const reference to last element of OverflowArray.
    Definition overflowarray.hh:190
    \n-
    OverflowArray(const std::initializer_list< value_type > &l)
    Definition overflowarray.hh:67
    \n-
    reference back()
    Returns reference to last element of OverflowArray.
    Definition overflowarray.hh:184
    \n-
    void push_front(const value_type &t)
    Inserts an element to the begin of the OverflowArray,.
    Definition overflowarray.hh:122
    \n-
    reference front()
    Returns reference to first element of OverflowArray.
    Definition overflowarray.hh:172
    \n-
    reference operator[](size_type i)
    Returns reference to the i'th element.
    Definition overflowarray.hh:150
    \n+
    236// GridFunction concept ##############################################
    \n+
    237template<class Signature, class EntitySet>
    \n+\n+
    239
    \n+
    249template<class Range, class Domain, class EntitySet>
    \n+
    \n+
    250struct GridFunction<Range(Domain), EntitySet> :
    \n+
    251 Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n+
    252{
    \n+
    253 using LocalSignature = Range(typename EntitySet::LocalCoordinate);
    \n+
    254 using LocalContext = typename EntitySet::Element;
    \n+
    255
    \n+
    256 template<class F>
    \n+
    257 auto require(F&& f) -> decltype(
    \n+
    258 localFunction(f),
    \n+
    259 f.entitySet(),
    \n+
    260 requireConcept<LocalFunction<LocalSignature, LocalContext>>(localFunction(f)),
    \n+
    261 requireConcept<Concept::EntitySet, EntitySet>(),
    \n+
    262 requireConvertible<EntitySet>(f.entitySet()),
    \n+
    263 requireConvertible<typename EntitySet::GlobalCoordinate, Domain>()
    \n+
    264 );
    \n+
    265};
    \n+
    \n+
    266
    \n+
    268template<class F, class Signature, class EntitySet>
    \n+
    \n+
    269static constexpr bool isGridFunction()
    \n+
    270{ return models<Concept::GridFunction<Signature, EntitySet>, F>(); }
    \n+
    \n+
    271
    \n+
    272
    \n+
    273// DifferentiableGridFunction concept ##############################################
    \n+
    274template<class Signature, class EntitySet, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+\n+
    276
    \n+
    289template<class Range, class Domain, class EntitySet, template<class> class DerivativeTraits>
    \n+
    \n+
    290struct DifferentiableGridFunction<Range(Domain), EntitySet, DerivativeTraits> :
    \n+
    291 Refines<
    \n+
    292 Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,
    \n+
    293 Dune::Functions::Concept::GridFunction<Range(Domain),EntitySet>
    \n+
    294 >
    \n+
    295{
    \n+
    296 using LocalSignature = Range(typename EntitySet::LocalCoordinate);
    \n+
    297 using LocalContext = typename EntitySet::Element;
    \n+
    298
    \n+
    299 template<class R>
    \n+\n+
    301
    \n+
    302 template<class F>
    \n+
    303 auto require(F&& f) -> decltype(
    \n+
    304 requireConcept<DifferentiableLocalFunction<LocalSignature, LocalContext, LocalDerivativeTraits>>(localFunction(f))
    \n+
    305 );
    \n+
    306};
    \n+
    \n+
    307
    \n+
    309template<class F, class Signature, class EntitySet, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+
    \n+
    310static constexpr bool isDifferentiableGridFunction()
    \n+
    311{ return models<Concept::DifferentiableGridFunction<Signature, EntitySet, DerivativeTraits>, F>(); }
    \n+
    \n+
    312
    \n+
    313
    \n+
    314
    \n+
    315// GridViewFunction concept ##############################################
    \n+
    316template<class Signature, class GridView>
    \n+\n+
    318
    \n+
    331template<class Range, class Domain, class GridView>
    \n+
    \n+
    332struct GridViewFunction<Range(Domain), GridView> :
    \n+
    333 Refines<Dune::Functions::Concept::GridFunction<Range(Domain), GridViewEntitySet<GridView,0>>>
    \n+
    334{
    \n+
    335 template<class F>
    \n+
    336 auto require(F&& f) -> decltype(
    \n+
    337 0 // We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet
    \n+
    338 );
    \n+
    339};
    \n+
    \n+
    340
    \n+
    342template<class F, class Signature, class GridView>
    \n+
    \n+
    343static constexpr bool isGridViewFunction()
    \n+
    344{ return models<Concept::GridViewFunction<Signature, GridView>, F>(); }
    \n+
    \n+
    345
    \n+
    346
    \n+
    347// DifferentiableGridViewFunction concept ##############################################
    \n+
    348template<class Signature, class GridView, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+\n+
    350
    \n+
    364template<class Range, class Domain, class GridView, template<class> class DerivativeTraits>
    \n+
    \n+
    365struct DifferentiableGridViewFunction<Range(Domain), GridView, DerivativeTraits> :
    \n+
    366 Refines<Dune::Functions::Concept::DifferentiableGridFunction<Range(Domain), GridViewEntitySet<GridView,0>, DerivativeTraits>>
    \n+
    367{
    \n+
    368 template<class F>
    \n+
    369 auto require(F&& f) -> decltype(
    \n+
    370 0 // We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet
    \n+
    371 );
    \n+
    372};
    \n+
    \n+
    373
    \n+
    375template<class F, class Signature, class GridView, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n+
    \n+
    376static constexpr bool isDifferentiableGridViewFunction()
    \n+
    377{ return models<Concept::DifferentiableGridViewFunction<Signature, GridView, DerivativeTraits>, F>(); }
    \n+
    \n+
    378
    \n+
    379
    \n+
    380
    \n+
    381}}} // namespace Dune::Functions::Concept
    \n+
    382
    \n+
    383#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:269
    \n+
    static constexpr bool isDifferentiableLocalFunction()
    Check if F models the DifferentiableLocalFunction concept with given signature and local context.
    Definition functionconcepts.hh:204
    \n+
    static constexpr bool isFunction()
    Check if F models the Function concept with given signature.
    Definition functionconcepts.hh:88
    \n+
    static constexpr bool isDifferentiableGridViewFunction()
    Check if F models the DifferentiableGridViewFunction concept with given signature.
    Definition functionconcepts.hh:376
    \n+
    static constexpr bool isDifferentiableFunction()
    Check if F models the DifferentiableFunction concept with given signature.
    Definition functionconcepts.hh:127
    \n+
    static constexpr bool isGridViewFunction()
    Check if F models the GridViewFunction concept with given signature.
    Definition functionconcepts.hh:343
    \n+
    static constexpr bool isEntitySet()
    Check if F models the GridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:231
    \n+
    static constexpr bool isDifferentiableGridFunction()
    Check if F models the DifferentiableGridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:310
    \n+
    static constexpr bool isLocalFunction()
    Check if F models the LocalFunction concept with given signature and local context.
    Definition functionconcepts.hh:166
    \n+
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:39
    \n+
    static constexpr auto isCallable()
    Check if f is callable with given argument list.
    Definition functionconcepts.hh:47
    \n+
    Definition polynomial.hh:10
    \n+
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:37
    \n+
    Concept objects that can be called with given argument list.
    Definition functionconcepts.hh:33
    \n+
    auto require(F &&f) -> decltype(f(std::declval< Args >()...))
    \n+
    Definition functionconcepts.hh:66
    \n+
    auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval< Domain >())))
    \n+
    Definition functionconcepts.hh:100
    \n+
    typename SignatureTraits< Range(Domain)>::template DerivativeSignature< DerivativeTraits > DerivativeSignature
    Definition functionconcepts.hh:116
    \n+
    auto require(F &&f) -> decltype(derivative(f), requireConcept< Function< DerivativeSignature > >(derivative(f)))
    \n+
    Definition functionconcepts.hh:139
    \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:220
    \n+
    auto require(E &&f) -> decltype(requireType< typename E::Element >(), requireType< typename E::LocalCoordinate >(), requireType< typename E::GlobalCoordinate >())
    \n+
    Definition functionconcepts.hh:238
    \n+
    typename EntitySet::Element LocalContext
    Definition functionconcepts.hh:254
    \n+
    Range(typename EntitySet::LocalCoordinate) LocalSignature
    Definition functionconcepts.hh:253
    \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:300
    \n+
    auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction< LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))
    \n+
    Range(typename EntitySet::LocalCoordinate) LocalSignature
    Definition functionconcepts.hh:296
    \n+\n+
    Definition functionconcepts.hh:317
    \n+\n+\n+\n+
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n+
    Definition signature.hh:102
    \n+
    Derivative traits for local functions.
    Definition localderivativetraits.hh:28
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,311 +1,459 @@\n dune-functions\u00a02.9.0\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+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#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n-4#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+3#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+4#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n 5\n-6#include \n-7#include \n-8#include \n-9#include \n-10#include \n-11\n-12#include \n-13\n-14\n-15\n-16namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n-17\n+6#include \n+7#include \n+8\n+9#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+11#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+12\n+13namespace _\bD_\bu_\bn_\be {\n+14namespace Functions {\n+15namespace Concept {\n+16\n+17using namespace Dune::Concept;\n 18\n-42template>\n-_\b4_\b3class _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by :\n-44 public BA\n-45{\n-46 static constexpr std::size_t baseSize = std::tuple_size_v;\n-47\n-48public:\n-_\b4_\b9 using _\bB_\ba_\bs_\be_\bA_\br_\br_\ba_\by = BA;\n-50\n-_\b5_\b1 using _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be = typename BaseArray::value_type;\n-_\b5_\b2 using _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be&;\n-_\b5_\b3 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_\b4 using _\bp_\bo_\bi_\bn_\bt_\be_\br = _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be*;\n-_\b5_\b5 using _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be = std::ptrdiff_t;\n-_\b5_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = std::size_t;\n-_\b5_\b7 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br = Dune::GenericIterator;\n-_\b5_\b8 using _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br = Dune::GenericIterator;\n-59\n-60private:\n-61 using OverflowBuffer = std::array<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be, maxSize-baseSize>;\n+19\n+20\n+21// Callable concept\n+############################################################\n+22\n+23\n+31template\n+_\b3_\b2struct _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n+33{\n+34 template\n+_\b3_\b5 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+36 f(std::declval()...)\n+37 );\n+38};\n+39\n+46template\n+_\b4_\b7static constexpr auto _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be()\n+48{ return models<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be, F>(); }\n+49\n+56template\n+_\b5_\b7static constexpr auto _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(F&&, Args&&...)\n+58{\n+59 return models<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be, F>();\n+60}\n+61\n 62\n-63public:\n-64\n-_\b6_\b5 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by() = default;\n-66\n-_\b6_\b7 _\bO_\bv_\be_\br_\bf_\bl_\bo_\bw_\bA_\br_\br_\ba_\by(const std::initializer_list& l) {\n-68 assert(l.size() <= _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n-69 size_ = l.size();\n-70 std::copy_n(l.begin(), size_, _\bb_\be_\bg_\bi_\bn());\n-71 }\n-72\n-_\b7_\b3 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-74 if (_\bs_\bi_\bz_\be() != other._\bs_\bi_\bz_\be())\n-75 return false;\n-76 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); ++i)\n-77 if ((*this)[i] != other[i])\n-78 return false;\n-79 return true;\n-80 }\n-81\n-_\b8_\b3 void _\bc_\bl_\be_\ba_\br() {\n-84 size_ = 0;\n-85 }\n-86\n-_\b9_\b3 void _\br_\be_\bs_\bi_\bz_\be(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n) {\n-94 assert(n <= _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n-95 size_ = n;\n-96 }\n+63\n+64// Function concept\n+############################################################\n+65template\n+_\b6_\b6struct _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+67\n+76template\n+_\b7_\b7struct _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn : Refines >\n+78{\n+79 template\n+_\b8_\b0 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+81 // F models Function if the result of F(Domain) is implicitly\n+convertible to Range\n+82 requireConvertible(f(std::declval()))\n+83 );\n+84};\n+85\n+87template\n+_\b8_\b8static constexpr bool _\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+89{ return models, F>(); }\n+90\n+92template class DerivativeTraits>\n+_\b9_\b3static 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+94{ return models, F>(); }\n+95\n+96\n 97\n-_\b1_\b0_\b4 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& t) {\n-105 assert(_\bs_\bi_\bz_\be() < _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n-106 (*this)[size_++] = t;\n-107 }\n-108\n-_\b1_\b1_\b0 void _\bp_\bo_\bp_\b__\bb_\ba_\bc_\bk() {\n-111 assert(_\bs_\bi_\bz_\be() > 0);\n-112 if (! _\be_\bm_\bp_\bt_\by())\n-113 size_--;\n-114 }\n-115\n-_\b1_\b2_\b2 void _\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt(const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& t) {\n-123 assert(_\bs_\bi_\bz_\be() < _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by());\n-124 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n-125 (*this)[i+1] = (*this)[i];\n-126 (*this)[0] = t;\n-127 }\n-128\n-_\b1_\b3_\b0 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() {\n-131 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n-132 }\n-133\n-_\b1_\b3_\b5 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const {\n-136 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n-137 }\n-138\n-_\b1_\b4_\b0 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() {\n-141 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n-142 }\n-143\n-_\b1_\b4_\b5 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const {\n-146 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n-147 }\n-148\n-_\b1_\b5_\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-151 assert(i < _\bs_\bi_\bz_\be());\n-152 // If there's no padding between the base class and the overflow_ member,\n-153 // the compiler should be able to optimize this to\n-154 // return *(&BaseArray::operator[](0) + i);\n-155 if (i 0);\n-174 return (*this)[0];\n-175 }\n-176\n-_\b1_\b7_\b8 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt() const {\n-179 assert(_\bs_\bi_\bz_\be() > 0);\n-180 return (*this)[0];\n-181 }\n-182\n-_\b1_\b8_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() {\n-185 assert(_\bs_\bi_\bz_\be() > 0);\n-186 return (*this)[_\bs_\bi_\bz_\be()-1];\n-187 }\n-188\n-_\b1_\b9_\b0 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() const {\n-191 assert(_\bs_\bi_\bz_\be() > 0);\n-192 return (*this)[_\bs_\bi_\bz_\be()-1];\n-193 }\n-194\n-_\b1_\b9_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be () const {\n-197 return size_;\n-198 }\n-199\n-_\b2_\b0_\b1 bool _\be_\bm_\bp_\bt_\by() const {\n-202 return _\bs_\bi_\bz_\be() == 0;\n-203 }\n-204\n-_\b2_\b0_\b6 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\ba_\bp_\ba_\bc_\bi_\bt_\by() {\n-207 return maxSize;\n-208 }\n+98// DifferentiableFunction concept\n+##############################################\n+99template 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_\b0struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+101\n+113template class DerivativeTraits>\n+_\b1_\b1_\b4struct _\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+115{\n+_\b1_\b1_\b6 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+117\n+118 template\n+_\b1_\b1_\b9 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+120 _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f),\n+121 requireConcept>(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f))\n+122 );\n+123};\n+124\n+126template 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_\b2_\b7static 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+128{ return models, F>(); }\n+129\n+131template class DerivativeTraits>\n+_\b1_\b3_\b2static 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+133{ return models, F>(); }\n+134\n+135\n+136\n+137// LocalFunction concept ##############################################\n+138template\n+_\b1_\b3_\b9struct _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+140\n+150template\n+_\b1_\b5_\b1struct _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+152 Refines >\n+153{\n+154 template\n+_\b1_\b5_\b5 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+156 f.bind(std::declval()),\n+157 f.unbind(),\n+158 requireConvertible(f.bound()),\n+159 f.localContext(),\n+160 requireConvertible(f.localContext())\n+161 );\n+162};\n+163\n+165template\n+_\b1_\b6_\b6static constexpr bool _\bi_\bs_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+167{ return models, F>(); }\n+168\n+169\n+170// DifferentiableLocalFunction concept\n+##############################################\n+171template 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_\b2struct _\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+173\n+186template\n+class DerivativeTraits>\n+_\b1_\b8_\b7struct _\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+188 Refines<\n+189 Dune::Functions::Concept::DifferentiableFunction,\n+190 Dune::Functions::Concept::LocalFunction\n+191 >\n+192{\n+193 template\n+_\b1_\b9_\b4 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+195 f.bind(std::declval()),\n+196 f.unbind(),\n+197 f.localContext(),\n+198 requireConvertible(f.localContext())\n+199 );\n+200};\n+201\n+203template 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_\b4static 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+205{ return models, F>(); }\n+206\n+207\n+208// EntitySet concept ##############################################\n 209\n-_\b2_\b1_\b1 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() {\n-212 return maxSize;\n-213 }\n-214\n-_\b2_\b1_\b6 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-217 return hash_range(v.begin(), v.end());\n-218 }\n-219\n-_\b2_\b2_\b1 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-222 for (const auto& ci : c)\n-223 s << ci << \" \";\n-224 return s;\n-225 }\n-226\n-227private:\n-228 OverflowBuffer overflow_;\n-229 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be size_ = 0;\n-230};\n-231\n-232\n+_\b2_\b1_\b9struct _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+220{\n+221 template\n+_\b2_\b2_\b2 auto _\br_\be_\bq_\bu_\bi_\br_\be(E&& f) -> decltype(\n+223 requireType(),\n+224 requireType(),\n+225 requireType()\n+226 );\n+227};\n+228\n+230template\n+_\b2_\b3_\b1static constexpr bool _\bi_\bs_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt()\n+232{ return models(); }\n 233\n-234} // namespace Dune::Functions\n+234\n 235\n-236\n-237\n-238#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:11\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:45\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: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:_\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:52\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:145\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:73\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:216\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:104\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:221\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:130\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:201\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:196\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:51\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:110\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: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:_\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:135\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: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:_\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: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_\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:206\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:211\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:178\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:83\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:140\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: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:_\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:93\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:54\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: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:_\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:190\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:67\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:184\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:122\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:172\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:150\n+236// GridFunction concept ##############################################\n+237template\n+_\b2_\b3_\b8struct _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+239\n+249template\n+_\b2_\b5_\b0struct _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+251 Refines >\n+252{\n+_\b2_\b5_\b3 using _\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(typename EntitySet::LocalCoordinate);\n+_\b2_\b5_\b4 using _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt = typename EntitySet::Element;\n+255\n+256 template\n+_\b2_\b5_\b7 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+258 localFunction(f),\n+259 f.entitySet(),\n+260 requireConcept>(localFunction\n+(f)),\n+261 requireConcept(),\n+262 requireConvertible(f.entitySet()),\n+263 requireConvertible()\n+264 );\n+265};\n+266\n+268template\n+_\b2_\b6_\b9static constexpr bool _\bi_\bs_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+270{ return models, F>(); }\n+271\n+272\n+273// DifferentiableGridFunction concept\n+##############################################\n+274template 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_\b5struct _\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+276\n+289template class\n+DerivativeTraits>\n+_\b2_\b9_\b0struct _\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+291 Refines<\n+292 Dune::Functions::Concept::DifferentiableFunction,\n+293 Dune::Functions::Concept::GridFunction\n+294 >\n+295{\n+_\b2_\b9_\b6 using _\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(typename EntitySet::LocalCoordinate);\n+_\b2_\b9_\b7 using _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt = typename EntitySet::Element;\n+298\n+299 template\n+_\b3_\b0_\b0 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+301\n+302 template\n+_\b3_\b0_\b3 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+304 requireConcept>(localFunction(f))\n+305 );\n+306};\n+307\n+309template 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_\b0static 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+311{ return models, F>(); }\n+312\n+313\n+314\n+315// GridViewFunction concept ##############################################\n+316template\n+_\b3_\b1_\b7struct _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n+318\n+331template\n+_\b3_\b3_\b2struct _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+333 Refines>>\n+334{\n+335 template\n+_\b3_\b3_\b6 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+337 0 // We don't need to check any further expressions, because a\n+GridViewFunction is just a GridFunction with a special EntitySet\n+338 );\n+339};\n+340\n+342template\n+_\b3_\b4_\b3static constexpr bool _\bi_\bs_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n+344{ return models, F>(); }\n+345\n+346\n+347// DifferentiableGridViewFunction concept\n+##############################################\n+348template 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_\b4_\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+350\n+364template class\n+DerivativeTraits>\n+_\b3_\b6_\b5struct _\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+366 Refines, DerivativeTraits>>\n+367{\n+368 template\n+_\b3_\b6_\b9 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n+370 0 // We don't need to check any further expressions, because a\n+GridViewFunction is just a GridFunction with a special EntitySet\n+371 );\n+372};\n+373\n+375template class\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_\b7_\b6static 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+377{ return models, F>(); }\n+378\n+379\n+380\n+381}}} // namespace Dune::Functions::Concept\n+382\n+383#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:269\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:204\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:88\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:376\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:127\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:343\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:231\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:310\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:166\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:39\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:47\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n+_\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: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\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:33\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:66\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:100\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:116\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:139\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:172\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:220\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:238\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:254\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:253\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:275\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: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:_\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:296\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:297\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:317\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:349\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:56\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:102\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:28\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: differentiablefunction_imp.hh File Reference\n+dune-functions: istlvectorbackend.hh File Reference\n \n \n \n \n \n \n \n@@ -65,35 +65,61 @@\n
    \n
    \n \n \n \n \n \n
    \n \n-
    differentiablefunction_imp.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    istlvectorbackend.hh File Reference
    \n \n
    \n-
    #include <dune/common/exceptions.hh>
    \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/type_traits.hh>
    \n+#include <dune/functions/common/indexaccess.hh>
    \n+#include <dune/functions/functionspacebases/concepts.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Namespaces

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

    \n+Functions

    template<class V >
    constexpr auto Dune::Functions::fieldTypes ()
     Generate list of field types in container.
     
    template<class V >
    constexpr bool Dune::Functions::hasUniqueFieldType ()
     Check if container has a unique field type.
     
    template<class Vector >
    auto Dune::Functions::istlVectorBackend (Vector &v)
     Return a vector backend wrapping non-const ISTL like containers.
     
    template<class Vector >
    auto Dune::Functions::istlVectorBackend (const Vector &v)
     Return a vector backend wrapping const ISTL like containers.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,44 @@\n dune-functions\u00a02.9.0\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+ * _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bs\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+istlvectorbackend.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n #include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\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_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\bp_\ba_\bc_\be_\bb_\ba_\bs_\be_\bs_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs ()\n+\u00a0 Generate list of field types in container.\n+\u00a0\n+template\n+constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bF_\bi_\be_\bl_\bd_\bT_\by_\bp_\be ()\n+\u00a0 Check if container has a unique field type.\n+\u00a0\n+template\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd (Vector &v)\n+\u00a0 Return a vector backend wrapping non-const ISTL like\n+ containers.\n+\u00a0\n+template\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd (const Vector &v)\n+\u00a0 Return a vector backend wrapping const ISTL like containers.\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/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: differentiablefunction_imp.hh Source File\n+dune-functions: istlvectorbackend.hh Source File\n \n \n \n \n \n \n \n@@ -70,120 +70,347 @@\n
    \n \n \n \n \n \n \n
    \n-
    differentiablefunction_imp.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#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n+
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n
    5
    \n-
    6#include <dune/common/exceptions.hh>
    \n-
    7#include <dune/common/concept.hh>
    \n-
    8
    \n-\n-
    10
    \n-
    11
    \n-
    12namespace Dune {
    \n-
    13namespace Functions {
    \n-
    14namespace Imp {
    \n-
    15
    \n-
    19struct HasFreeDerivative
    \n-
    20{
    \n-
    21 template<class F>
    \n-
    22 auto require(F&& f) -> decltype(
    \n-
    23 derivative(f)
    \n-
    24 );
    \n-
    25};
    \n-
    26
    \n-
    27
    \n-
    28
    \n-
    29template<class Dummy, class F,
    \n-
    30 typename std::enable_if<
    \n-
    31 models< HasFreeDerivative, F>() , int>::type = 0>
    \n-
    32auto derivativeIfImplemented(const F& f) -> decltype(derivative(f))
    \n-
    33{
    \n-
    34 return derivative(f);
    \n-
    35}
    \n-
    36
    \n-
    37
    \n-
    38
    \n-
    39template<class Dummy, class F,
    \n-
    40 typename std::enable_if<
    \n-
    41 not(models< HasFreeDerivative, F>()) , int>::type = 0>
    \n-
    42Dummy derivativeIfImplemented(const F& f)
    \n-
    43{
    \n-
    44 DUNE_THROW(Dune::NotImplemented, "Derivative not implemented");
    \n-
    45}
    \n-
    46
    \n+
    6#include <cstddef>
    \n+
    7#include <utility>
    \n+
    8#include <type_traits>
    \n+
    9
    \n+
    10#include <dune/common/std/type_traits.hh>
    \n+
    11#include <dune/common/indices.hh>
    \n+
    12#include <dune/common/hybridutilities.hh>
    \n+
    13#include <dune/common/concept.hh>
    \n+
    14
    \n+\n+\n+
    17
    \n+
    18
    \n+
    19namespace Dune {
    \n+
    20namespace Functions {
    \n+
    21
    \n+
    22namespace Impl {
    \n+
    23
    \n+
    24template<class V,
    \n+
    25 std::enable_if_t<not Dune::models<Imp::Concept::HasStaticIndexAccess, V>() , int> = 0>
    \n+
    26auto fieldTypes(V&& /*v*/)
    \n+
    27{
    \n+
    28 return TypeList<V>{};
    \n+
    29}
    \n+
    30
    \n+
    31template<class V,
    \n+
    32 std::enable_if_t<Dune::models<Imp::Concept::HasStaticIndexAccess, V>(), int> = 0>
    \n+
    33auto fieldTypes(V&& v)
    \n+
    34{
    \n+
    35 if constexpr (Dune::models<Imp::Concept::HasDynamicIndexAccess<std::size_t>, V>())
    \n+
    36 return fieldTypes(v[std::size_t{0}]);
    \n+
    37 else
    \n+
    38 {
    \n+
    39 auto indexRange = typename decltype(range(Hybrid::size(v)))::integer_sequence();
    \n+
    40 return unpackIntegerSequence([&](auto... i) {
    \n+
    41 return uniqueTypeList(std::tuple_cat(fieldTypes(v[i])...));
    \n+
    42 }, indexRange);
    \n+
    43 }
    \n+
    44}
    \n+
    45
    \n+
    46} // namespace Impl
    \n
    47
    \n
    48
    \n-
    49template<class Signature, class DerivativeInterface>
    \n-
    50class DifferentiableFunctionWrapperInterface
    \n-
    51{};
    \n-
    52
    \n-
    53// Interface of type erasure wrapper
    \n-
    54//
    \n-
    55// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n-
    56// will be added by the type erasure foundation classes.
    \n-
    57template<class Range, class Domain, class DerivativeInterface>
    \n-
    58class DifferentiableFunctionWrapperInterface<Range(Domain), DerivativeInterface>
    \n-
    59{
    \n-
    60public:
    \n-
    61 virtual Range operator() (const Domain& x) const = 0;
    \n-
    62
    \n-
    63 virtual DerivativeInterface derivative() const = 0;
    \n-
    64};
    \n-
    65
    \n-
    66
    \n+
    49
    \n+
    62template<class V>
    \n+
    \n+
    63constexpr auto fieldTypes()
    \n+
    64{
    \n+
    65 return decltype(Impl::fieldTypes(std::declval<V>())){};
    \n+
    66}
    \n+
    \n
    67
    \n-
    68template<class Signature, class DerivativeInterface, class B>
    \n-
    69class DifferentiableFunctionWrapperImplementation
    \n-
    70{};
    \n-
    71
    \n-
    72// Implementation of type erasure wrapper
    \n-
    73template<class Range, class Domain, class DerivativeInterface, class B>
    \n-
    74class DifferentiableFunctionWrapperImplementation< Range(Domain), DerivativeInterface, B> :
    \n-
    75 public B
    \n-
    76{
    \n-
    77public:
    \n+
    73template<class V>
    \n+
    \n+
    74constexpr bool hasUniqueFieldType()
    \n+
    75{
    \n+
    76 return std::tuple_size<std::decay_t<decltype(fieldTypes<V>())>>::value==1;
    \n+
    77}
    \n+
    \n
    78
    \n-
    79 using B::B;
    \n-
    80 using Wrapped = typename B::Wrapped;
    \n-
    81
    \n-
    82 virtual Range operator() (const Domain& x) const
    \n-
    83 {
    \n-
    84 return this->get()(x);
    \n-
    85 }
    \n-
    86
    \n-
    87 virtual DerivativeInterface derivative() const
    \n-
    88 {
    \n-
    89 return derivativeIfImplemented<DerivativeInterface, Wrapped>(this->get());
    \n-
    90 }
    \n-
    91};
    \n-
    92
    \n-
    93
    \n-
    94
    \n-
    95}}} // namespace Dune::Functions::Imp
    \n-
    96
    \n-
    97
    \n-
    98
    \n-
    99#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n-\n-
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:39
    \n+
    79
    \n+
    80
    \n+
    81namespace Impl {
    \n+
    82
    \n+
    83/*
    \n+
    84 * \\brief A wrapper providing multi-index access to vector entries
    \n+
    85 *
    \n+
    86 * The wrapped vector type should be an istl like random
    \n+
    87 * access container providing operator[] and size() methods.
    \n+
    88 * For classical containers this should support indices
    \n+
    89 * of type std::size_t. For multi-type containers indices
    \n+
    90 * of the form Dune::index_constant<i> should be supported
    \n+
    91 * while size() should be a static constexpr method.
    \n+
    92 *
    \n+
    93 * When resolving multi-indices the backend appends indices
    \n+
    94 * using operator[] as long as the result is not a scalar.
    \n+
    95 * If this exhausts the digits of the multi-index, additional
    \n+
    96 * zero`s are appended.
    \n+
    97 *
    \n+
    98 * \\tparam V Type of the raw wrapper vector
    \n+
    99 */
    \n+
    100template<class V>
    \n+
    101class ISTLVectorBackend
    \n+
    102{
    \n+
    103
    \n+
    104 // Template aliases for using detection idiom.
    \n+
    105 template<class C>
    \n+
    106 using dynamicIndexAccess_t = decltype(std::declval<C>()[0]);
    \n+
    107
    \n+
    108 template<class C>
    \n+
    109 using staticIndexAccess_t = decltype(std::declval<C>()[Dune::Indices::_0]);
    \n+
    110
    \n+
    111 template<class C>
    \n+
    112 using resizeMethod_t = decltype(std::declval<C>().resize(0));
    \n+
    113
    \n+
    114
    \n+
    115
    \n+
    116 // Short cuts for feature detection
    \n+
    117 template<class C>
    \n+
    118 using hasDynamicIndexAccess = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;
    \n+
    119
    \n+
    120 template<class C>
    \n+
    121 using hasStaticIndexAccess = Dune::Std::is_detected<staticIndexAccess_t, std::remove_reference_t<C>>;
    \n+
    122
    \n+
    123 template<class C>
    \n+
    124 using hasResizeMethod = Dune::Std::is_detected<resizeMethod_t, std::remove_reference_t<C>>;
    \n+
    125
    \n+
    126 template<class C>
    \n+
    127 using isDynamicVector = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;
    \n+
    128
    \n+
    129 template<class C>
    \n+
    130 using isStaticVector = Dune::Std::bool_constant<
    \n+
    131 Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>
    \n+
    132 and not Dune::Std::is_detected_v<dynamicIndexAccess_t, std::remove_reference_t<C>>>;
    \n+
    133
    \n+
    134 template<class C>
    \n+
    135 using isScalar = Dune::Std::bool_constant<not Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;
    \n+
    136
    \n+
    137 template<class C>
    \n+
    138 using isVector = Dune::Std::bool_constant<Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;
    \n+
    139
    \n+
    140
    \n+
    141
    \n+
    142 template<class... Args>
    \n+
    143 static void forwardToResize(Args&&... args)
    \n+
    144 {
    \n+
    145 resize(std::forward<Args>(args)...);
    \n+
    146 }
    \n+
    147
    \n+
    148
    \n+
    149 template<class C, class SizeProvider,
    \n+
    150 std::enable_if_t<hasResizeMethod<C>::value, int> = 0>
    \n+
    151 static void resize(C&& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    152 {
    \n+
    153 auto size = sizeProvider.size(prefix);
    \n+
    154 if (size==0)
    \n+
    155 {
    \n+
    156 // If size==0 this prefix refers to a single coefficient c.
    \n+
    157 // But being in this overload means that c is not a scalar
    \n+
    158 // because is has a resize() method. Since operator[] deliberately
    \n+
    159 // supports implicit padding of multi-indices by as many
    \n+
    160 // [0]'s as needed to resolve a scalar entry, we should also
    \n+
    161 // except a non-scalar c here. However, this requires that
    \n+
    162 // we silently believe that whatever size c already has is
    \n+
    163 // intended by the user. The only exception is c.size()==0
    \n+
    164 // which is not acceptable but we also cannot know the desired size.
    \n+
    165 if (c.size()==0)
    \n+
    166 DUNE_THROW(RangeError, "The vector entry v[" << prefix << "] should refer to a "
    \n+
    167 << "scalar coefficient, but is a dynamically sized vector of size==0");
    \n+
    168 else
    \n+
    169 // Accept non-zero sized coefficients to avoid that resize(basis)
    \n+
    170 // fails for a vector that works with operator[] and already
    \n+
    171 // has the appropriate size.
    \n+
    172 return;
    \n+
    173 }
    \n+
    174 c.resize(size);
    \n+
    175 prefix.push_back(0);
    \n+
    176 for(std::size_t i=0; i<size; ++i)
    \n+
    177 {
    \n+
    178 prefix.back() = i;
    \n+
    179 resize(c[i], sizeProvider, prefix);
    \n+
    180 }
    \n+
    181 }
    \n+
    182
    \n+
    183 template<class C, class SizeProvider,
    \n+
    184 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,
    \n+
    185 std::enable_if_t<isVector<C>::value, int> = 0>
    \n+
    186 static void resize(C&& c, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    187 {
    \n+
    188 auto size = sizeProvider.size(prefix);
    \n+
    189 // If size == 0 there's nothing to do:
    \n+
    190 // We can't resize c and it's already
    \n+
    191 // large enough anyway.
    \n+
    192 if (size == 0)
    \n+
    193 return;
    \n+
    194
    \n+
    195 // If size>0 but c does not have the appropriate
    \n+
    196 // size we throw an exception.
    \n+
    197 //
    \n+
    198 // We could perhaps also allow c.size()>size.
    \n+
    199 // But then looping the loop below gets complicated:
    \n+
    200 // We're not allowed to loop until c.size(). But
    \n+
    201 // we also cannot use size for termination,
    \n+
    202 // because this fails if c is a static vector.
    \n+
    203 if (c.size() != size)
    \n+
    204 DUNE_THROW(RangeError, "Can't resize non-resizable entry v[" << prefix << "] of size " << c.size() << " to size(" << prefix << ")=" << size);
    \n+
    205
    \n+
    206 // Recursively resize all entries of c now.
    \n+
    207 using namespace Dune::Hybrid;
    \n+
    208 prefix.push_back(0);
    \n+
    209 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {
    \n+
    210 prefix.back() = i;
    \n+
    211 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);
    \n+
    212 // but even gcc-7 does not except this bus reports
    \n+
    213 // "error: \u2018this\u2019 was not captured for this lambda function"
    \n+
    214 // although there's no 'this' because we're in a static method.
    \n+
    215 // Bypassing this by and additional method that does perfect
    \n+
    216 // forwarding allows to workaround this.
    \n+
    217 ISTLVectorBackend<V>::forwardToResize(c[i], sizeProvider, prefix);
    \n+
    218 });
    \n+
    219 }
    \n+
    220
    \n+
    221 template<class C, class SizeProvider,
    \n+
    222 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,
    \n+
    223 std::enable_if_t<isScalar<C>::value, int> = 0>
    \n+
    224 static void resize(C&&, const SizeProvider& sizeProvider, typename SizeProvider::SizePrefix prefix)
    \n+
    225 {
    \n+
    226 auto size = sizeProvider.size(prefix);
    \n+
    227 if (size != 0)
    \n+
    228 DUNE_THROW(RangeError, "Can't resize scalar vector entry v[" << prefix << "] to size(" << prefix << ")=" << size);
    \n+
    229 }
    \n+
    230
    \n+
    231 template<class C, class T,
    \n+
    232 std::enable_if_t<std::is_assignable<C&,T>::value, int> = 0>
    \n+
    233 void recursiveAssign(C& c, const T& t)
    \n+
    234 {
    \n+
    235 c = t;
    \n+
    236 }
    \n+
    237
    \n+
    238 template<class C, class T,
    \n+
    239 std::enable_if_t<not std::is_assignable<C&,T>::value, int> = 0>
    \n+
    240 void recursiveAssign(C& c, const T& t)
    \n+
    241 {
    \n+
    242 Dune::Hybrid::forEach(c, [&](auto&& ci) {
    \n+
    243 recursiveAssign(ci, t);
    \n+
    244 });
    \n+
    245 }
    \n+
    246
    \n+
    247public:
    \n+
    248
    \n+
    249 using Vector = V;
    \n+
    250
    \n+
    251 ISTLVectorBackend(Vector& vector) :
    \n+
    252 vector_(&vector)
    \n+
    253 {}
    \n+
    254
    \n+
    255 template<class SizeProvider>
    \n+
    256 void resize(const SizeProvider& sizeProvider)
    \n+
    257 {
    \n+
    258 auto prefix = typename SizeProvider::SizePrefix();
    \n+
    259 prefix.resize(0);
    \n+
    260 resize(*vector_, sizeProvider, prefix);
    \n+
    261 }
    \n+
    262
    \n+
    263 template<class MultiIndex>
    \n+
    264 decltype(auto) operator[](const MultiIndex& index) const
    \n+
    265 {
    \n+
    266 return resolveDynamicMultiIndex(*vector_, index);
    \n+
    267 }
    \n+
    268
    \n+
    269 template<class MultiIndex>
    \n+
    270 decltype(auto) operator[](const MultiIndex& index)
    \n+
    271 {
    \n+
    272 return resolveDynamicMultiIndex(*vector_, index);
    \n+
    273 }
    \n+
    274
    \n+
    283 template<typename T>
    \n+
    284 void operator= (const T& other)
    \n+
    285 {
    \n+
    286 recursiveAssign(vector(), other);
    \n+
    287 }
    \n+
    288
    \n+
    289 template<typename T>
    \n+
    290 void operator= (const ISTLVectorBackend<T>& other)
    \n+
    291 {
    \n+
    292 vector() = other.vector();
    \n+
    293 }
    \n+
    294
    \n+
    295 const Vector& vector() const
    \n+
    296 {
    \n+
    297 return *vector_;
    \n+
    298 }
    \n+
    299
    \n+
    300 Vector& vector()
    \n+
    301 {
    \n+
    302 return *vector_;
    \n+
    303 }
    \n+
    304
    \n+
    305private:
    \n+
    306
    \n+
    307 Vector* vector_;
    \n+
    308};
    \n+
    309
    \n+
    310} // end namespace Impl
    \n+
    311
    \n+
    312
    \n+
    313
    \n+
    345template<class Vector>
    \n+
    \n+
    346auto istlVectorBackend(Vector& v)
    \n+
    347{
    \n+
    348 static_assert(hasUniqueFieldType<Vector&>(), "Vector type passed to istlVectorBackend() does not have a unique field type.");
    \n+
    349 return Impl::ISTLVectorBackend<Vector>(v);
    \n+
    350}
    \n+
    \n+
    351
    \n+
    352
    \n+
    353
    \n+
    383template<class Vector>
    \n+
    \n+
    384auto istlVectorBackend(const Vector& v)
    \n+
    385{
    \n+
    386 static_assert(hasUniqueFieldType<const Vector&>(), "Vector type passed to istlVectorBackend() does not have a unique field type.");
    \n+
    387 return Impl::ISTLVectorBackend<const Vector>(v);
    \n+
    388}
    \n+
    \n+
    389
    \n+
    390
    \n+
    391
    \n+
    392} // namespace Functions
    \n+
    393} // namespace Dune
    \n+
    394
    \n+
    395
    \n+
    396#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH
    \n+\n+
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:346
    \n+
    constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)
    Provide multi-index access by chaining operator[].
    Definition indexaccess.hh:354
    \n
    Definition polynomial.hh:10
    \n+
    constexpr auto fieldTypes()
    Generate list of field types in container.
    Definition istlvectorbackend.hh:63
    \n+
    constexpr bool hasUniqueFieldType()
    Check if container has a unique field type.
    Definition istlvectorbackend.hh:74
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,118 +1,362 @@\n dune-functions\u00a02.9.0\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+ * _\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#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n-4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n+4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n 5\n-6#include \n-7#include \n-8\n-9#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\n-11\n-12namespace _\bD_\bu_\bn_\be {\n-13namespace Functions {\n-14namespace Imp {\n-15\n-19struct HasFreeDerivative\n-20{\n-21 template\n-22 auto require(F&& f) -> decltype(\n-23 _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f)\n-24 );\n-25};\n-26\n-27\n-28\n-29template() , int>::type = 0>\n-32auto derivativeIfImplemented(const F& f) -> decltype(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f))\n-33{\n-34 return _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f);\n-35}\n-36\n-37\n-38\n-39template()) , int>::type = 0>\n-42Dummy derivativeIfImplemented(const F& f)\n-43{\n-44 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n-45}\n-46\n+6#include \n+7#include \n+8#include \n+9\n+10#include \n+11#include \n+12#include \n+13#include \n+14\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_\bd_\be_\bx_\ba_\bc_\bc_\be_\bs_\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/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n+17\n+18\n+19namespace _\bD_\bu_\bn_\be {\n+20namespace Functions {\n+21\n+22namespace Impl {\n+23\n+24template() ,\n+int> = 0>\n+26auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(V&& /*v*/)\n+27{\n+28 return TypeList{};\n+29}\n+30\n+31template(), int>\n+= 0>\n+33auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(V&& v)\n+34{\n+35 if constexpr (Dune::models,\n+V>())\n+36 return _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(v[std::size_t{0}]);\n+37 else\n+38 {\n+39 auto indexRange = typename decltype(range(Hybrid::size(v)))::\n+integer_sequence();\n+40 return unpackIntegerSequence([&](auto... i) {\n+41 return uniqueTypeList(std::tuple_cat(_\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs(v[i])...));\n+42 }, indexRange);\n+43 }\n+44}\n+45\n+46} // namespace Impl\n 47\n 48\n-49template\n-50class DifferentiableFunctionWrapperInterface\n-51{};\n-52\n-53// Interface of type erasure wrapper\n-54//\n-55// Notice that the basic interface of polymorphic classes (destructor, clone,\n-...)\n-56// will be added by the type erasure foundation classes.\n-57template\n-58class DifferentiableFunctionWrapperInterface\n-59{\n-60public:\n-61 virtual Range operator() (const Domain& x) const = 0;\n-62\n-63 virtual DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be() const = 0;\n-64};\n-65\n-66\n+49\n+62template\n+_\b6_\b3constexpr auto _\bf_\bi_\be_\bl_\bd_\bT_\by_\bp_\be_\bs()\n+64{\n+65 return decltype(Impl::fieldTypes(std::declval())){};\n+66}\n 67\n-68template\n-69class DifferentiableFunctionWrapperImplementation\n-70{};\n-71\n-72// Implementation of type erasure wrapper\n-73template\n-74class DifferentiableFunctionWrapperImplementation< Range(Domain),\n-DerivativeInterface, B> :\n-75 public B\n-76{\n-77public:\n+73template\n+_\b7_\b4constexpr bool _\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bF_\bi_\be_\bl_\bd_\bT_\by_\bp_\be()\n+75{\n+76 return std::tuple_size())>>::value==1;\n+77}\n 78\n-79 using B::B;\n-80 using Wrapped = typename B::Wrapped;\n-81\n-82 virtual Range operator() (const Domain& x) const\n-83 {\n-84 return this->get()(x);\n-85 }\n-86\n-87 virtual DerivativeInterface _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be() const\n-88 {\n-89 return derivativeIfImplemented(this->get());\n-90 }\n-91};\n-92\n-93\n-94\n-95}}} // namespace Dune::Functions::Imp\n-96\n-97\n-98\n-99#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n-_\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:39\n+79\n+80\n+81namespace Impl {\n+82\n+83/*\n+84 * \\brief A wrapper providing multi-index access to vector entries\n+85 *\n+86 * The wrapped vector type should be an istl like random\n+87 * access container providing operator[] and size() methods.\n+88 * For classical containers this should support indices\n+89 * of type std::size_t. For multi-type containers indices\n+90 * of the form Dune::index_constant should be supported\n+91 * while size() should be a static constexpr method.\n+92 *\n+93 * When resolving multi-indices the backend appends indices\n+94 * using operator[] as long as the result is not a scalar.\n+95 * If this exhausts the digits of the multi-index, additional\n+96 * zero`s are appended.\n+97 *\n+98 * \\tparam V Type of the raw wrapper vector\n+99 */\n+100template\n+101class ISTLVectorBackend\n+102{\n+103\n+104 // Template aliases for using detection idiom.\n+105 template\n+106 using dynamicIndexAccess_t = decltype(std::declval()[0]);\n+107\n+108 template\n+109 using staticIndexAccess_t = decltype(std::declval()[Dune::Indices::_0]);\n+110\n+111 template\n+112 using resizeMethod_t = decltype(std::declval().resize(0));\n+113\n+114\n+115\n+116 // Short cuts for feature detection\n+117 template\n+118 using hasDynamicIndexAccess = Dune::Std::is_detected>;\n+119\n+120 template\n+121 using hasStaticIndexAccess = Dune::Std::is_detected>;\n+122\n+123 template\n+124 using hasResizeMethod = Dune::Std::is_detected>;\n+125\n+126 template\n+127 using isDynamicVector = Dune::Std::is_detected>;\n+128\n+129 template\n+130 using isStaticVector = Dune::Std::bool_constant<\n+131 Dune::Std::is_detected_v>\n+132 and not Dune::Std::is_detected_v>>;\n+133\n+134 template\n+135 using isScalar = Dune::Std::bool_constant>>;\n+136\n+137 template\n+138 using isVector = Dune::Std::bool_constant>>;\n+139\n+140\n+141\n+142 template\n+143 static void forwardToResize(Args&&... args)\n+144 {\n+145 resize(std::forward(args)...);\n+146 }\n+147\n+148\n+149 template::value, int> = 0>\n+151 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+152 {\n+153 auto size = sizeProvider.size(prefix);\n+154 if (size==0)\n+155 {\n+156 // If size==0 this prefix refers to a single coefficient c.\n+157 // But being in this overload means that c is not a scalar\n+158 // because is has a resize() method. Since operator[] deliberately\n+159 // supports implicit padding of multi-indices by as many\n+160 // [0]'s as needed to resolve a scalar entry, we should also\n+161 // except a non-scalar c here. However, this requires that\n+162 // we silently believe that whatever size c already has is\n+163 // intended by the user. The only exception is c.size()==0\n+164 // which is not acceptable but we also cannot know the desired size.\n+165 if (c.size()==0)\n+166 DUNE_THROW(RangeError, \"The vector entry v[\" << prefix << \"] should refer\n+to a \"\n+167 << \"scalar coefficient, but is a dynamically sized vector of size==0\");\n+168 else\n+169 // Accept non-zero sized coefficients to avoid that resize(basis)\n+170 // fails for a vector that works with operator[] and already\n+171 // has the appropriate size.\n+172 return;\n+173 }\n+174 c.resize(size);\n+175 prefix.push_back(0);\n+176 for(std::size_t i=0; i::value, int> = 0,\n+185 std::enable_if_t::value, int> = 0>\n+186 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+187 {\n+188 auto size = sizeProvider.size(prefix);\n+189 // If size == 0 there's nothing to do:\n+190 // We can't resize c and it's already\n+191 // large enough anyway.\n+192 if (size == 0)\n+193 return;\n+194\n+195 // If size>0 but c does not have the appropriate\n+196 // size we throw an exception.\n+197 //\n+198 // We could perhaps also allow c.size()>size.\n+199 // But then looping the loop below gets complicated:\n+200 // We're not allowed to loop until c.size(). But\n+201 // we also cannot use size for termination,\n+202 // because this fails if c is a static vector.\n+203 if (c.size() != size)\n+204 DUNE_THROW(RangeError, \"Can't resize non-resizable entry v[\" << prefix <<\n+\"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n+205\n+206 // Recursively resize all entries of c now.\n+207 using namespace Dune::Hybrid;\n+208 prefix.push_back(0);\n+209 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n+210 prefix.back() = i;\n+211 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);\n+212 // but even gcc-7 does not except this bus reports\n+213 // \"error: \u00e2\u0080\u0098this\u00e2\u0080\u0099 was not captured for this lambda function\"\n+214 // although there's no 'this' because we're in a static method.\n+215 // Bypassing this by and additional method that does perfect\n+216 // forwarding allows to workaround this.\n+217 ISTLVectorBackend::forwardToResize(c[i], sizeProvider, prefix);\n+218 });\n+219 }\n+220\n+221 template::value, int> = 0,\n+223 std::enable_if_t::value, int> = 0>\n+224 static void resize(C&&, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+225 {\n+226 auto size = sizeProvider.size(prefix);\n+227 if (size != 0)\n+228 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n+\"] to size(\" << prefix << \")=\" << size);\n+229 }\n+230\n+231 template::value, int> = 0>\n+233 void recursiveAssign(C& c, const T& t)\n+234 {\n+235 c = t;\n+236 }\n+237\n+238 template::value, int> = 0>\n+240 void recursiveAssign(C& c, const T& t)\n+241 {\n+242 Dune::Hybrid::forEach(c, [&](auto&& ci) {\n+243 recursiveAssign(ci, t);\n+244 });\n+245 }\n+246\n+247public:\n+248\n+249 using Vector = V;\n+250\n+251 ISTLVectorBackend(Vector& vector) :\n+252 vector_(&vector)\n+253 {}\n+254\n+255 template\n+256 void resize(const SizeProvider& sizeProvider)\n+257 {\n+258 auto prefix = typename SizeProvider::SizePrefix();\n+259 prefix.resize(0);\n+260 resize(*vector_, sizeProvider, prefix);\n+261 }\n+262\n+263 template\n+264 decltype(auto) operator[](const MultiIndex& index) const\n+265 {\n+266 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+267 }\n+268\n+269 template\n+270 decltype(auto) operator[](const MultiIndex& index)\n+271 {\n+272 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+273 }\n+274\n+283 template\n+284 void operator= (const T& other)\n+285 {\n+286 recursiveAssign(vector(), other);\n+287 }\n+288\n+289 template\n+290 void operator= (const ISTLVectorBackend& other)\n+291 {\n+292 vector() = other.vector();\n+293 }\n+294\n+295 const Vector& vector() const\n+296 {\n+297 return *vector_;\n+298 }\n+299\n+300 Vector& vector()\n+301 {\n+302 return *vector_;\n+303 }\n+304\n+305private:\n+306\n+307 Vector* vector_;\n+308};\n+309\n+310} // end namespace Impl\n+311\n+312\n+313\n+345template\n+_\b3_\b4_\b6auto _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(Vector& v)\n+347{\n+348 static_assert(hasUniqueFieldType(), \"Vector type passed to\n+istlVectorBackend() does not have a unique field type.\");\n+349 return Impl::ISTLVectorBackend(v);\n+350}\n+351\n+352\n+353\n+383template\n+_\b3_\b8_\b4auto _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(const Vector& v)\n+385{\n+386 static_assert(hasUniqueFieldType(), \"Vector type passed to\n+istlVectorBackend() does not have a unique field type.\");\n+387 return Impl::ISTLVectorBackend(v);\n+388}\n+389\n+390\n+391\n+392} // namespace Functions\n+393} // namespace Dune\n+394\n+395\n+396#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n+_\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:346\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:354\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:63\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:74\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00161.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00161.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: polymorphicsmallobject.hh File Reference\n+dune-functions: polynomial.hh File Reference\n \n \n \n \n \n \n \n@@ -65,33 +65,34 @@\n \n \n \n \n \n \n \n
    \n \n-
    polymorphicsmallobject.hh File Reference
    \n+
    polynomial.hh File Reference
    \n
    \n
    \n-
    #include <utility>
    \n-#include <type_traits>
    \n+
    #include <cmath>
    \n+#include <initializer_list>
    \n+#include <vector>
    \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::Polynomial< K >
     A scalar polynomial implementation. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,23 @@\n dune-functions\u00a02.9.0\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+ * _\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\n-polymorphicsmallobject.hh File Reference\n-#include \n-#include \n+polynomial.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:_\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:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\b<_\b _\bK_\b _\b>\n+\u00a0 A scalar 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 ===============================================================================\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: polymorphicsmallobject.hh Source File\n+dune-functions: polynomial.hh Source File\n \n \n \n \n \n \n \n@@ -70,192 +70,124 @@\n \n \n \n \n \n \n \n
    \n-
    polymorphicsmallobject.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#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n+
    4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n
    5
    \n-
    6#include <utility>
    \n-
    7#include <type_traits>
    \n-
    8
    \n-
    9namespace Dune {
    \n-
    10namespace Functions {
    \n-
    11
    \n+
    6#include <cmath>
    \n+
    7#include <initializer_list>
    \n+
    8#include <vector>
    \n+
    9
    \n+
    \n+
    10namespace Dune {
    \n+
    \n+
    11namespace Functions {
    \n
    12
    \n-
    43template<class Base, size_t bufferSize>
    \n-
    \n-\n-
    45{
    \n-
    46public:
    \n-
    47
    \n-
    \n-\n-
    50 p_(nullptr)
    \n-
    51 {}
    \n-
    \n-
    52
    \n-
    59 template<class Derived,
    \n-
    60 typename std::enable_if<std::is_base_of<Base, std::remove_cv_t<
    \n-
    61 std::remove_reference_t<Derived>>>::value, int>::type = 0>
    \n-
    \n-
    62 PolymorphicSmallObject(Derived&& derived)
    \n-
    63 {
    \n-
    64 constexpr bool useBuffer = sizeof(Derived) <= bufferSize;
    \n-
    65 if constexpr (useBuffer) {
    \n-
    66 p_ = new (&buffer_) Derived(std::forward<Derived>(derived));
    \n-
    67 } else {
    \n-
    68 p_ = new Derived(std::forward<Derived>(derived));
    \n-
    69 }
    \n-
    70 }
    \n-
    \n-
    71
    \n-
    \n-\n-
    74 {
    \n-
    75 moveToWrappedObject(std::move(other));
    \n-
    76 }
    \n-
    \n-
    77
    \n-
    \n-\n-
    80 {
    \n-
    81 copyToWrappedObject(other);
    \n-
    82 }
    \n-
    \n-
    83
    \n-
    \n-\n-
    86 {
    \n-
    87 destroyWrappedObject();
    \n-
    88 }
    \n-
    \n-
    89
    \n-
    \n-\n-
    92 {
    \n-
    93 if (&other!=this)
    \n-
    94 {
    \n-
    95 destroyWrappedObject();
    \n-
    96 copyToWrappedObject(other);
    \n-
    97 }
    \n-
    98 return *this;
    \n-
    99 }
    \n-
    \n-
    100
    \n-
    \n-\n-
    103 {
    \n-
    104 destroyWrappedObject();
    \n-
    105 moveToWrappedObject(std::move(other));
    \n-
    106 return *this;
    \n-
    107 }
    \n-
    \n-
    108
    \n-
    \n-
    110 explicit operator bool() const
    \n-
    111 {
    \n-
    112 return p_;
    \n-
    113 }
    \n-
    \n-
    114
    \n-
    \n-
    116 bool bufferUsed() const
    \n-
    117 {
    \n-
    118 return ((void*) (p_) == (void*)(&buffer_));
    \n-
    119 }
    \n-
    \n-
    120
    \n-
    \n-
    122 const Base& get() const
    \n-
    123 {
    \n-
    124 return *p_;
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    \n-
    128 Base& get()
    \n-
    129 {
    \n-
    130 return *p_;
    \n-
    131 }
    \n-
    \n-
    132
    \n-
    133private:
    \n-
    134
    \n-
    135 void destroyWrappedObject() noexcept
    \n-
    136 {
    \n-
    137 if (operator bool())
    \n-
    138 {
    \n-
    139 if (bufferUsed())
    \n-
    140 p_->~Base();
    \n-
    141 else
    \n-
    142 delete p_;
    \n-
    143 }
    \n-
    144 }
    \n-
    145
    \n-
    146 void moveToWrappedObject(PolymorphicSmallObject&& other) noexcept
    \n-
    147 {
    \n-
    148 if (other.bufferUsed())
    \n-
    149 p_ = other.p_->move(&buffer_);
    \n-
    150 else
    \n-
    151 {
    \n-
    152 // We don't need to check for &other_!=this, because you can't
    \n-
    153 // have an rvalue to *this and call it's assignment/constructor
    \n-
    154 // at the same time. (Despite trying to shoot yourself in the foot
    \n-
    155 // with std::move explicitly.)
    \n-
    156
    \n-
    157 // Take ownership of allocated object
    \n-
    158 p_ = other.p_;
    \n-
    159
    \n-
    160 // Leave pointer in a clean state to avoid double freeing it.
    \n-
    161 other.p_ = 0;
    \n-
    162 }
    \n-
    163 }
    \n-
    164
    \n-
    165 void copyToWrappedObject(const PolymorphicSmallObject& other)
    \n-
    166 {
    \n-
    167 if (other.bufferUsed())
    \n-
    168 p_ = other.p_->clone(&buffer_);
    \n-
    169 else
    \n-
    170 p_ = other.p_->clone();
    \n-
    171 }
    \n-
    172
    \n-
    173 std::aligned_storage_t<bufferSize> buffer_;
    \n-
    174 Base* p_;
    \n-
    175};
    \n-
    \n-
    176
    \n-
    177
    \n-
    178} // namespace Functions
    \n-
    179} // namespace Dune
    \n-
    180
    \n-
    181#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH
    \n+
    13
    \n+
    24template<class K>
    \n+
    \n+\n+
    26{
    \n+
    27public:
    \n+
    28
    \n+
    30 Polynomial() = default;
    \n+
    31
    \n+
    33 Polynomial(const Polynomial& other) = default;
    \n+
    34
    \n+
    36 Polynomial(Polynomial&& other) = default;
    \n+
    37
    \n+
    39 Polynomial& operator=(const Polynomial& other) = default;
    \n+
    40
    \n+
    42 Polynomial& operator=(Polynomial&& other) = default;
    \n+
    43
    \n+
    \n+
    50 Polynomial(std::initializer_list<K> coefficients) :
    \n+
    51 coefficients_(coefficients)
    \n+
    52 {}
    \n+
    \n+
    53
    \n+
    \n+
    61 Polynomial(std::vector<K>&& coefficients) :
    \n+
    62 coefficients_(std::move(coefficients))
    \n+
    63 {}
    \n+
    \n+
    64
    \n+
    \n+
    72 Polynomial(const std::vector<K>& coefficients) :
    \n+
    73 coefficients_(coefficients)
    \n+
    74 {}
    \n+
    \n+
    75
    \n+
    \n+
    77 K operator() (const K& x) const
    \n+
    78 {
    \n+
    79 auto y = K(0);
    \n+
    80 for (size_t i=0; i<coefficients_.size(); ++i)
    \n+
    81 y += coefficients_[i] * std::pow(x, i);
    \n+
    82 return y;
    \n+
    83 }
    \n+
    \n+
    84
    \n+
    \n+\n+
    95 {
    \n+
    96 std::vector<K> dpCoefficients(p.coefficients().size()-1);
    \n+
    97 for (size_t i=1; i<p.coefficients_.size(); ++i)
    \n+
    98 dpCoefficients[i-1] = p.coefficients()[i]*i;
    \n+
    99 return Polynomial(std::move(dpCoefficients));
    \n+
    100 }
    \n+
    \n+
    101
    \n+
    \n+
    103 const std::vector<K>& coefficients() const
    \n+
    104 {
    \n+
    105 return coefficients_;
    \n+
    106 }
    \n+
    \n+
    107
    \n+
    108private:
    \n+
    109 std::vector<K> coefficients_;
    \n+
    110};
    \n+
    \n+
    111
    \n+
    112
    \n+
    113
    \n+
    114}} // namespace Dune::Functions
    \n+
    \n+
    \n+
    115
    \n+
    116
    \n+
    117
    \n+
    118#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH
    \n+
    friend Polynomial derivative(const Polynomial &p)
    Obtain derivative of Polynomial function.
    Definition polynomial.hh:94
    \n
    Definition polynomial.hh:10
    \n-
    A wrapper providing small object optimization with polymorphic types.
    Definition polymorphicsmallobject.hh:45
    \n-
    const Base & get() const
    Obtain reference to stored object.
    Definition polymorphicsmallobject.hh:122
    \n-
    bool bufferUsed() const
    Check if object is stored in internal stack buffer.
    Definition polymorphicsmallobject.hh:116
    \n-
    PolymorphicSmallObject(Derived &&derived)
    Construct from object.
    Definition polymorphicsmallobject.hh:62
    \n-
    PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept
    Move constructor from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:73
    \n-
    PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)
    Copy assignment from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:91
    \n-
    PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept
    Move assignment from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:102
    \n-
    PolymorphicSmallObject(const PolymorphicSmallObject &other)
    Copy constructor from other PolymorphicSmallObject.
    Definition polymorphicsmallobject.hh:79
    \n-
    ~PolymorphicSmallObject()
    Destructor.
    Definition polymorphicsmallobject.hh:85
    \n-
    PolymorphicSmallObject()
    Default constructor.
    Definition polymorphicsmallobject.hh:49
    \n-
    Base & get()
    Obtain mutable reference to stored object.
    Definition polymorphicsmallobject.hh:128
    \n+
    A scalar polynomial implementation.
    Definition polynomial.hh:26
    \n+
    Polynomial()=default
    Default constructor.
    \n+
    const std::vector< K > & coefficients() const
    Obtain reference to coefficient vector.
    Definition polynomial.hh:103
    \n+
    Polynomial & operator=(const Polynomial &other)=default
    Copy-assignment operator.
    \n+
    Polynomial & operator=(Polynomial &&other)=default
    Move-assignment operator.
    \n+
    Polynomial(std::initializer_list< K > coefficients)
    Create from list of coefficients.
    Definition polynomial.hh:50
    \n+
    K operator()(const K &x) const
    Evaluate polynomial.
    Definition polynomial.hh:77
    \n+
    Polynomial(const Polynomial &other)=default
    Copy constructor.
    \n+
    Polynomial(Polynomial &&other)=default
    Move constructor.
    \n+
    Polynomial(const std::vector< K > &coefficients)
    Create from list of coefficients.
    Definition polynomial.hh:72
    \n+
    Polynomial(std::vector< K > &&coefficients)
    Create from list of coefficients.
    Definition polynomial.hh:61
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,191 +1,127 @@\n dune-functions\u00a02.9.0\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+ * _\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#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n-4#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+3#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n 5\n-6#include \n-7#include \n-8\n-9namespace _\bD_\bu_\bn_\be {\n-10namespace Functions {\n-11\n+6#include \n+7#include \n+8#include \n+9\n+_\b1_\b0namespace _\bD_\bu_\bn_\be {\n+_\b1_\b1namespace Functions {\n 12\n-43template\n-_\b4_\b4class _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt\n-45{\n-46public:\n-47\n-_\b4_\b9 _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt() :\n-50 p_(nullptr)\n-51 {}\n-52\n-59 template>>::value, int>::type = 0>\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(Derived&& derived)\n-63 {\n-64 constexpr bool useBuffer = sizeof(Derived) <= bufferSize;\n-65 if constexpr (useBuffer) {\n-66 p_ = new (&buffer_) Derived(std::forward(derived));\n-67 } else {\n-68 p_ = new Derived(std::forward(derived));\n-69 }\n-70 }\n-71\n-_\b7_\b3 _\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-74 {\n-75 moveToWrappedObject(std::move(other));\n-76 }\n-77\n-_\b7_\b9 _\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-80 {\n-81 copyToWrappedObject(other);\n-82 }\n-83\n-_\b8_\b5 _\b~_\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt()\n-86 {\n-87 destroyWrappedObject();\n-88 }\n-89\n-_\b9_\b1 _\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-92 {\n-93 if (&other!=this)\n-94 {\n-95 destroyWrappedObject();\n-96 copyToWrappedObject(other);\n-97 }\n-98 return *this;\n-99 }\n-100\n-_\b1_\b0_\b2 _\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-103 {\n-104 destroyWrappedObject();\n-105 moveToWrappedObject(std::move(other));\n-106 return *this;\n-107 }\n-108\n-_\b1_\b1_\b0 explicit operator bool() const\n-111 {\n-112 return p_;\n-113 }\n-114\n-_\b1_\b1_\b6 bool _\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd() const\n-117 {\n-118 return ((void*) (p_) == (void*)(&buffer_));\n-119 }\n-120\n-_\b1_\b2_\b2 const Base& _\bg_\be_\bt() const\n-123 {\n-124 return *p_;\n-125 }\n-126\n-_\b1_\b2_\b8 Base& _\bg_\be_\bt()\n-129 {\n-130 return *p_;\n-131 }\n-132\n-133private:\n-134\n-135 void destroyWrappedObject() noexcept\n-136 {\n-137 if (operator bool())\n-138 {\n-139 if (_\bb_\bu_\bf_\bf_\be_\br_\bU_\bs_\be_\bd())\n-140 p_->~Base();\n-141 else\n-142 delete p_;\n-143 }\n-144 }\n-145\n-146 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-147 {\n-148 if (other.bufferUsed())\n-149 p_ = other.p_->move(&buffer_);\n-150 else\n-151 {\n-152 // We don't need to check for &other_!=this, because you can't\n-153 // have an rvalue to *this and call it's assignment/constructor\n-154 // at the same time. (Despite trying to shoot yourself in the foot\n-155 // with std::move explicitly.)\n-156\n-157 // Take ownership of allocated object\n-158 p_ = other.p_;\n-159\n-160 // Leave pointer in a clean state to avoid double freeing it.\n-161 other.p_ = 0;\n-162 }\n-163 }\n-164\n-165 void copyToWrappedObject(const _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bS_\bm_\ba_\bl_\bl_\bO_\bb_\bj_\be_\bc_\bt& other)\n-166 {\n-167 if (other.bufferUsed())\n-168 p_ = other.p_->clone(&buffer_);\n-169 else\n-170 p_ = other.p_->clone();\n-171 }\n-172\n-173 std::aligned_storage_t buffer_;\n-174 Base* p_;\n-175};\n-176\n-177\n-178} // namespace Functions\n-179} // namespace Dune\n-180\n-181#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+13\n+24template\n+_\b2_\b5class _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n+26{\n+27public:\n+28\n+_\b3_\b0 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl() = default;\n+31\n+_\b3_\b3 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(const _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& other) = default;\n+34\n+_\b3_\b6 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl&& other) = default;\n+37\n+_\b3_\b9 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& other) = default;\n+40\n+_\b4_\b2 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl&& other) = default;\n+43\n+_\b5_\b0 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::initializer_list _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs) :\n+51 coefficients_(_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs)\n+52 {}\n+53\n+_\b6_\b1 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(std::vector&& _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs) :\n+62 coefficients_(std::move(_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs))\n+63 {}\n+64\n+_\b7_\b2 _\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl(const std::vector& _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs) :\n+73 coefficients_(_\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs)\n+74 {}\n+75\n+_\b7_\b7 K _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)_\b (const K& x) const\n+78 {\n+79 auto y = K(0);\n+80 for (size_t i=0; i dpCoefficients(p._\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs().size()-1);\n+97 for (size_t i=1; i& _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs() const\n+104 {\n+105 return coefficients_;\n+106 }\n+107\n+108private:\n+109 std::vector coefficients_;\n+110};\n+111\n+112\n+113\n+114}} // namespace Dune::Functions\n+115\n+116\n+117\n+118#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+_\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 Polynomial derivative(const Polynomial &p)\n+Obtain derivative of Polynomial function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:94\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:45\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:122\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:116\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: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:_\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:73\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:91\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:102\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:79\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:85\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+_\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 scalar polynomial implementation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:26\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polymorphicsmallobject.hh:49\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:128\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 std::vector< K > & coefficients() const\n+Obtain reference to coefficient vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:103\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=\n+Polynomial & operator=(const Polynomial &other)=default\n+Copy-assignment operator.\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=\n+Polynomial & operator=(Polynomial &&other)=default\n+Move-assignment operator.\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(std::initializer_list< K > coefficients)\n+Create from list of coefficients.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:50\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:77\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(const Polynomial &other)=default\n+Copy 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:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n+Polynomial(Polynomial &&other)=default\n+Move 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:_\bP_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl\n+Polynomial(const std::vector< K > &coefficients)\n+Create from list of coefficients.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:72\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(std::vector< K > &&coefficients)\n+Create from list of coefficients.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:61\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: localfunction_imp.hh File Reference\n+dune-functions: trigonometricfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,34 +65,48 @@\n \n \n \n \n \n \n \n
    \n \n-
    localfunction_imp.hh File Reference
    \n+Classes |\n+Namespaces |\n+Functions
    \n+
    trigonometricfunction.hh File Reference
    \n \n

    \n Namespaces

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

    \n+Classes

    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+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,19 +1,30 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-localfunction_imp.hh File Reference\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+ * _\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+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bK_\b,_\b _\bs_\bi_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bc_\bo_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0 A linear combination of trigonomic functions. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+_\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/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: localfunction_imp.hh Source File\n+dune-functions: trigonometricfunction.hh Source File\n \n \n \n \n \n \n \n@@ -70,92 +70,67 @@\n
    \n \n \n \n \n \n \n
    \n-
    localfunction_imp.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#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n+
    4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH
    \n
    5
    \n-\n-\n-
    8
    \n-
    9
    \n+
    6#include <cmath>
    \n+
    7
    \n+
    8namespace Dune {
    \n+
    9namespace Functions {
    \n
    10
    \n-
    11namespace Dune {
    \n-
    12namespace Functions {
    \n-
    13namespace Imp {
    \n-
    14
    \n-
    15// Interface of type erasure wrapper
    \n-
    16//
    \n-
    17// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n-
    18// will be added by the type erasure foundation classes.
    \n-
    19template<class Signature, class DerivativeInterface, class LocalContext>
    \n-
    20class LocalFunctionWrapperInterface :
    \n-
    21 public DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>
    \n-
    22{
    \n-
    23public:
    \n-
    24 virtual void bind(const LocalContext&) = 0;
    \n-
    25
    \n-
    26 virtual void unbind() = 0;
    \n-
    27
    \n-
    28 virtual bool bound() const = 0;
    \n-
    29
    \n-
    30 virtual const LocalContext& localContext() const = 0;
    \n-
    31};
    \n-
    32
    \n-
    33
    \n-
    34// Implementation of type erasure wrapper
    \n-
    35template<class Signature, class DerivativeInterface, class LocalContext, class B>
    \n-
    36class LocalFunctionWrapperImplementation :
    \n-
    37 public DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>
    \n-
    38{
    \n-
    39 using Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n-
    40public:
    \n-
    41 using Base::Base;
    \n-
    42
    \n-
    43 virtual void bind(const LocalContext& context)
    \n-
    44 {
    \n-
    45 this->get().bind(context);
    \n-
    46 }
    \n+
    11
    \n+
    12
    \n+
    25template<class K, int sinFactor, int cosFactor>
    \n+
    \n+\n+
    27{
    \n+
    28public:
    \n+
    \n+
    30 K operator () (const K& x) const
    \n+
    31 {
    \n+
    32 return sinFactor * std::sin(x) + cosFactor * std::cos(x);
    \n+
    33 }
    \n+
    \n+
    34};
    \n+
    \n+
    35
    \n+
    36
    \n+
    38template<class K, int sinFactor, int cosFactor>
    \n+
    \n+\n+
    40{
    \n+
    41 return TrigonometricFunction<K, -cosFactor, sinFactor>();
    \n+
    42}
    \n+
    \n+
    43
    \n+
    44
    \n+
    45
    \n+
    46}} // namespace Dune::Functions
    \n
    47
    \n-
    48 virtual void unbind()
    \n-
    49 {
    \n-
    50 this->get().unbind();
    \n-
    51 }
    \n-
    52
    \n-
    53 virtual bool bound() const
    \n-
    54 {
    \n-
    55 return this->get().bound();
    \n-
    56 }
    \n-
    57
    \n-
    58 virtual const LocalContext& localContext() const
    \n-
    59 {
    \n-
    60 return this->get().localContext();
    \n-
    61 }
    \n-
    62};
    \n-
    63
    \n-
    64}}} // namespace Dune::Functions::Imp
    \n-
    65
    \n-
    66
    \n-
    67
    \n-
    68#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH
    \n-\n-\n+
    48
    \n+
    49
    \n+
    50#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:39
    \n
    Definition polynomial.hh:10
    \n+
    A linear combination of trigonomic functions.
    Definition trigonometricfunction.hh:27
    \n+
    K operator()(const K &x) const
    Evaluate function.
    Definition trigonometricfunction.hh:30
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,88 +1,62 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bc_\bo_\bm_\bm_\bo_\bn\n-localfunction_imp.hh\n+ * _\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#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n-4#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n+3#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n+4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n 5\n-6#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-7#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-8\n-9\n+6#include \n+7\n+8namespace _\bD_\bu_\bn_\be {\n+9namespace Functions {\n 10\n-11namespace _\bD_\bu_\bn_\be {\n-12namespace Functions {\n-13namespace Imp {\n-14\n-15// Interface of type erasure wrapper\n-16//\n-17// Notice that the basic interface of polymorphic classes (destructor, clone,\n-...)\n-18// will be added by the type erasure foundation classes.\n-19template\n-20class LocalFunctionWrapperInterface :\n-21 public DifferentiableFunctionWrapperInterface\n-22{\n-23public:\n-24 virtual void bind(const LocalContext&) = 0;\n-25\n-26 virtual void unbind() = 0;\n-27\n-28 virtual bool bound() const = 0;\n-29\n-30 virtual const LocalContext& localContext() const = 0;\n-31};\n-32\n-33\n-34// Implementation of type erasure wrapper\n-35template\n-36class LocalFunctionWrapperImplementation :\n-37 public DifferentiableFunctionWrapperImplementation\n-38{\n-39 using Base = DifferentiableFunctionWrapperImplementation;\n-40public:\n-41 using Base::Base;\n-42\n-43 virtual void bind(const LocalContext& context)\n-44 {\n-45 this->get().bind(context);\n-46 }\n+11\n+12\n+25template\n+_\b2_\b6class _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+27{\n+28public:\n+_\b3_\b0 K _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b(_\b)_\b (const K& x) const\n+31 {\n+32 return sinFactor * std::sin(x) + cosFactor * std::cos(x);\n+33 }\n+34};\n+35\n+36\n+38template\n+_\b3_\b9_\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+40{\n+41 return _\bT_\br_\bi_\bg_\bo_\bn_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn();\n+42}\n+43\n+44\n+45\n+46}} // namespace Dune::Functions\n 47\n-48 virtual void unbind()\n-49 {\n-50 this->get().unbind();\n-51 }\n-52\n-53 virtual bool bound() const\n-54 {\n-55 return this->get().bound();\n-56 }\n-57\n-58 virtual const LocalContext& localContext() const\n-59 {\n-60 return this->get().localContext();\n-61 }\n-62};\n-63\n-64}}} // namespace Dune::Functions::Imp\n-65\n-66\n-67\n-68#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n-_\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+48\n+49\n+50#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:39\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:27\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:30\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: typeerasure.hh File Reference\n+dune-functions: analyticgridviewfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,44 +65,56 @@\n \n \n \n \n \n \n \n
    \n \n-
    typeerasure.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    analyticgridviewfunction.hh File Reference
    \n \n
    \n-
    #include <typeinfo>
    \n+\n

    Go to the source code of this file.

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

    \n Classes

    class  Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize >
     Base class for type-erased interface wrapper. More...
    class  Dune::Functions::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+Functions

    template<class F , class GridView >
    AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > 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,27 +1,44 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-typeerasure.hh File Reference\n-#include \n+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+analyticgridviewfunction.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/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\bs_\bm_\ba_\bl_\bl_\bo_\bb_\bj_\be_\bc_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\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:_\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:_\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\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< typename\n+ std::invoke_result< F, typename\n+ GridView::template Codim< 0 >::\n+ Geometry::GlobalCoordinate >::type\n+(typename GridView::template Codim< 0\n+ >::Geometry::GlobalCoordinate), _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:\n+ GridView, typename std::decay< F >:: _\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,\n+ type >\u00a0 const GridView &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\n+ 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/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: typeerasure.hh Source File\n+dune-functions: analyticgridviewfunction.hh Source File\n \n \n \n \n \n \n \n@@ -70,173 +70,253 @@\n
    \n \n \n \n \n \n \n
    \n-
    typeerasure.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#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n+
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n
    5
    \n-
    6#include <typeinfo>
    \n-
    7
    \n-
    8#include <dune/common/typeutilities.hh>
    \n-
    9
    \n-\n-\n-\n-
    13
    \n-
    14namespace Dune {
    \n-
    15namespace Functions {
    \n-
    16namespace Imp {
    \n+
    6#include <type_traits>
    \n+
    7#include <optional>
    \n+
    8
    \n+
    9#include <dune/common/typeutilities.hh>
    \n+
    10
    \n+\n+\n+\n+\n+\n+\n
    17
    \n
    18
    \n-
    19
    \n-
    33template<class Interface>
    \n-
    34class TypeErasureWrapperInterface :
    \n-
    35 public Interface,
    \n-
    36 public PolymorphicType<TypeErasureWrapperInterface<Interface>>
    \n-
    37{
    \n-
    38public:
    \n-
    39 virtual const std::type_info& target_type() const = 0;
    \n-
    40};
    \n-
    41
    \n-
    42
    \n-
    43
    \n-
    60template<class Interface, class T>
    \n-
    61class TypeErasureWrapperBase :
    \n-
    62 public TypeErasureWrapperInterface<Interface>
    \n-
    63{
    \n-
    64public:
    \n-
    65 template<class TT, disableCopyMove<TypeErasureWrapperBase, TT> = 0>
    \n-
    66 TypeErasureWrapperBase(TT&& t) :
    \n-
    67 wrapped_(std::forward<TT>(t))
    \n-
    68 {}
    \n-
    69
    \n-
    71 T& get()
    \n-
    72 {
    \n-
    73 return wrapped_;
    \n-
    74 }
    \n-
    75
    \n-
    77 const T& get() const
    \n-
    78 {
    \n-
    79 return wrapped_;
    \n-
    80 }
    \n-
    81
    \n-
    82protected:
    \n-
    83 using Wrapped = T;
    \n-
    84 Wrapped wrapped_;
    \n-
    85};
    \n-
    86
    \n-
    87
    \n-
    88
    \n-
    112template<class Interface, template<class> class Implementation, class T>
    \n-
    113class TypeErasureWrapperImplementation :
    \n-
    114 public Implementation<TypeErasureWrapperBase<Interface, T> >
    \n-
    115{
    \n-
    116public:
    \n-
    117
    \n-
    119 template<class TT, disableCopyMove<TypeErasureWrapperImplementation, T> = 0>
    \n-
    120 TypeErasureWrapperImplementation(TT&& t) :
    \n-
    121 Implementation<TypeErasureWrapperBase<Interface, T> >(std::forward<TT>(t))
    \n-
    122 {}
    \n-
    123
    \n-
    125 virtual TypeErasureWrapperImplementation* clone() const
    \n-
    126 {
    \n-
    127 return new TypeErasureWrapperImplementation(*this);
    \n-
    128 }
    \n-
    129
    \n-
    131 virtual TypeErasureWrapperImplementation* clone(void* buffer) const
    \n-
    132 {
    \n-
    133 return new (buffer) TypeErasureWrapperImplementation(*this);
    \n-
    134 }
    \n+
    19namespace Dune {
    \n+
    20namespace Functions {
    \n+
    21
    \n+
    22namespace Imp {
    \n+
    23
    \n+
    24template<class Signature, class GV, class FLocal, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+
    25class LocalAnalyticGridViewFunction;
    \n+
    26
    \n+
    27template<class Range, class LocalDomain, class GV, class F, template<class> class DerivativeTraits>
    \n+
    28class LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F, DerivativeTraits>
    \n+
    29{
    \n+
    30public:
    \n+
    31 using Signature = Range(LocalDomain);
    \n+
    32 using RawSignature = typename SignatureTraits<Signature>::RawSignature;
    \n+
    33 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(LocalDomain);
    \n+
    34
    \n+
    35 using GridView = GV;
    \n+
    36 using EntitySet = GridViewEntitySet<GridView, 0>;
    \n+
    37 using Element = typename EntitySet::Element;
    \n+
    38// using Geometry = typename Element::Geometry;
    \n+
    39 using Geometry = typename std::decay<typename Element::Geometry>::type;
    \n+
    40
    \n+
    41 // Use the indirection via derivativeIfImplemented to also support
    \n+
    42 // function types F that do not implement derivative. In this case
    \n+
    43 // the interface type DifferentiableFunction is using a dummy for
    \n+
    44 // the derivative type
    \n+
    45 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;
    \n+
    46 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
    \n+
    47 using LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits>;
    \n+
    48
    \n+
    50 template<class FT, disableCopyMove<LocalAnalyticGridViewFunction, FT> = 0>
    \n+
    51 LocalAnalyticGridViewFunction(FT&& f) :
    \n+
    52 f_(std::forward<FT>(f))
    \n+
    53 {}
    \n+
    54
    \n+
    56 template<class FT>
    \n+
    57 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::optional<Geometry>& geometry) :
    \n+
    58 f_(std::forward<FT>(f)),
    \n+
    59 element_(element),
    \n+
    60 geometry_(geometry)
    \n+
    61 {}
    \n+
    62
    \n+
    63
    \n+
    72 void bind(const Element& element)
    \n+
    73 {
    \n+
    74 element_ = element;
    \n+
    75 geometry_.emplace(element_.geometry());
    \n+
    76 }
    \n+
    77
    \n+
    79 void unbind()
    \n+
    80 {
    \n+
    81 geometry_.reset();
    \n+
    82 }
    \n+
    83
    \n+
    86 bool bound() const
    \n+
    87 {
    \n+
    88 return static_cast<bool>(geometry_);
    \n+
    89 }
    \n+
    90
    \n+
    100 Range operator()(const LocalDomain& x) const
    \n+
    101 {
    \n+
    102 assert(!!geometry_);
    \n+
    103 return f_(geometry_->global(x));
    \n+
    104 }
    \n+
    105
    \n+
    107 const Element& localContext() const
    \n+
    108 {
    \n+
    109 assert(!!geometry_);
    \n+
    110 return element_;
    \n+
    111 }
    \n+
    112
    \n+
    121 friend LocalDerivative derivative(const LocalAnalyticGridViewFunction& t)
    \n+
    122 {
    \n+
    123 return LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.element_, t.geometry_);
    \n+
    124 }
    \n+
    125
    \n+
    126private:
    \n+
    127 F f_;
    \n+
    128 Element element_;
    \n+
    129 std::optional<Geometry> geometry_ = std::nullopt;
    \n+
    130};
    \n+
    131
    \n+
    132} // end namespace Imp
    \n+
    133
    \n+
    134
    \n
    135
    \n-
    137 virtual TypeErasureWrapperImplementation* move(void* buffer)
    \n-
    138 {
    \n-
    139 return new (buffer) TypeErasureWrapperImplementation(std::move(*this));
    \n-
    140 }
    \n-
    141
    \n-
    143 virtual const std::type_info& target_type() const
    \n-
    144 {
    \n-
    145 return typeid(T);
    \n-
    146 }
    \n-
    147};
    \n-
    148
    \n-
    149} // namespace Dune::Functions::Imp
    \n-
    150
    \n-
    151
    \n-
    152
    \n-
    163template<class Interface, template<class> class Implementation, size_t bufferSize = 56>
    \n-
    \n-\n-
    165{
    \n-
    166public:
    \n-
    167
    \n-
    169 template<class T, disableCopyMove<TypeErasureBase, T> = 0 >
    \n-
    \n-\n-
    171 wrapped_(Imp::TypeErasureWrapperImplementation<Interface, Implementation, typename std::decay<T>::type>(std::forward<T>(t)))
    \n-
    172 {}
    \n+
    136
    \n+
    137template<class Signature, class GV, class F, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+\n+
    139
    \n+
    140
    \n+
    146template<class Range, class Domain, class GV, class F, template<class> class DerivativeTraits>
    \n+
    \n+
    147class AnalyticGridViewFunction<Range(Domain), GV, F, DerivativeTraits>
    \n+
    148{
    \n+
    149public:
    \n+
    150 using Signature = Range(Domain);
    \n+\n+
    152 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range(Domain);
    \n+
    153
    \n+
    154 using GridView = GV;
    \n+\n+
    156 using Element = typename EntitySet::Element;
    \n+
    157 using Geometry = typename Element::Geometry;
    \n+
    158
    \n+
    159 // Use the indirection via derivativeIfImplemented to also support
    \n+
    160 // function types F that do not implement derivative. In this case
    \n+
    161 // the interface type DifferentiableFunction is used a dummy for
    \n+
    162 // the derivative type
    \n+\n+
    164 using GlobalRawDerivative = decltype(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));
    \n+\n+
    166
    \n+\n+
    168 using LocalFunction = typename Imp::LocalAnalyticGridViewFunction<Range(LocalDomain), GridView, F, LocalDerivativeTraits<EntitySet, DerivativeTraits>::template Traits>;
    \n+
    169
    \n+
    171 template<class FT>
    \n+
    \n+
    172 AnalyticGridViewFunction(FT&& f, const GridView& gridView) :
    \n+
    173 f_(std::forward<FT>(f)),
    \n+
    174 entitySet_(gridView)
    \n+
    175 {}
    \n
    \n-
    173
    \n-
    175 TypeErasureBase() = default;
    \n
    176
    \n
    \n-
    178 Interface& asInterface()
    \n-
    179 {
    \n-
    180 return wrapped_.get();
    \n+
    178 Range operator()(const Domain& x) const
    \n+
    179 {
    \n+
    180 return f_(x);
    \n
    181 }
    \n
    \n
    182
    \n-
    \n-
    184 const Interface& asInterface() const
    \n-
    185 {
    \n-
    186 return wrapped_.get();
    \n+
    \n+\n+
    185 {
    \n+
    186 return Derivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.entitySet_.gridView());
    \n
    187 }
    \n
    \n
    188
    \n-
    \n-
    190 const std::type_info& target_type() const
    \n-
    191 {
    \n-
    192 return wrapped_.get().target_type();
    \n+
    \n+\n+
    191 {
    \n+
    192 return LocalFunction(t.f_);
    \n
    193 }
    \n
    \n
    194
    \n-
    195protected:
    \n-\n-
    197};
    \n-
    \n-
    198
    \n-
    199
    \n-
    200}} // namespace Dune::Functions
    \n-
    201
    \n-
    202
    \n-
    203
    \n-
    204#endif // DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH
    \n-\n-\n-\n+
    \n+
    196 const EntitySet& entitySet() const
    \n+
    197 {
    \n+
    198 return entitySet_;
    \n+
    199 }
    \n+
    \n+
    200
    \n+
    201private:
    \n+
    202 F f_;
    \n+
    203 EntitySet entitySet_;
    \n+
    204};
    \n+
    \n+
    205
    \n+
    206
    \n+
    207
    \n+
    224template<class F, class GridView>
    \n+
    225AnalyticGridViewFunction<
    \n+
    226 typename std::invoke_result<F, typename GridView::template Codim<0>::Geometry::GlobalCoordinate>::type // Range
    \n+
    227 (typename GridView::template Codim<0>::Geometry::GlobalCoordinate), // Domain
    \n+
    228 GridView,
    \n+
    229 typename std::decay<F>::type > // Raw type of F (without & or &&)
    \n+
    \n+
    230 makeAnalyticGridViewFunction(F&& f, const GridView& gridView)
    \n+
    231{
    \n+
    232 using Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate;
    \n+
    233 using Range = typename std::invoke_result<F, Domain>::type;
    \n+
    234 using FRaw = typename std::decay<F>::type;
    \n+
    235
    \n+
    236 return AnalyticGridViewFunction<Range(Domain), GridView, FRaw>(std::forward<F>(f), gridView);
    \n+
    237}
    \n+
    \n+
    238
    \n+
    239
    \n+
    240
    \n+
    241}} // namespace Dune::Functions
    \n+
    242
    \n+
    243
    \n+
    244
    \n+
    245#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH
    \n+\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:39
    \n+
    AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
    Create an AnalyticGridViewFunction from a function and a grid view.
    Definition analyticgridviewfunction.hh:230
    \n
    Definition polynomial.hh:10
    \n-
    A wrapper providing small object optimization with polymorphic types.
    Definition polymorphicsmallobject.hh:45
    \n-
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:165
    \n-
    const std::type_info & target_type() const
    Get type of stored object.
    Definition typeerasure.hh:190
    \n-
    TypeErasureBase(T &&t)
    Construct wrapper from object.
    Definition typeerasure.hh:170
    \n-
    PolymorphicSmallObject< Imp::TypeErasureWrapperInterface< Interface >, bufferSize > wrapped_
    Definition typeerasure.hh:196
    \n-
    TypeErasureBase()=default
    Default constructor.
    \n-
    Interface & asInterface()
    Get mutable reference to wrapped object.
    Definition typeerasure.hh:178
    \n-
    const Interface & asInterface() const
    Get reference to wrapped object.
    Definition typeerasure.hh:184
    \n+
    Definition differentiablefunction.hh:29
    \n+
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n+
    Definition analyticgridviewfunction.hh:138
    \n+
    Range operator()(const Domain &x) const
    Evaluate the wrapped function f directly in global coordinates x.
    Definition analyticgridviewfunction.hh:178
    \n+
    typename EntitySet::LocalCoordinate LocalDomain
    Definition analyticgridviewfunction.hh:167
    \n+
    friend Derivative derivative(const AnalyticGridViewFunction &t)
    Create a derivative grid-function by wrapping the derivative of f.
    Definition analyticgridviewfunction.hh:184
    \n+
    typename Element::Geometry Geometry
    Definition analyticgridviewfunction.hh:157
    \n+
    typename EntitySet::Element Element
    Definition analyticgridviewfunction.hh:156
    \n+\n+
    decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >())) GlobalRawDerivative
    Definition analyticgridviewfunction.hh:164
    \n+
    Range(Domain) Signature
    Definition analyticgridviewfunction.hh:150
    \n+
    AnalyticGridViewFunction(FT &&f, const GridView &gridView)
    Create the grid-function by wrapping a function f and create a GridViewEntitySet.
    Definition analyticgridviewfunction.hh:172
    \n+
    friend LocalFunction localFunction(const AnalyticGridViewFunction &t)
    Construct the associated local-function.
    Definition analyticgridviewfunction.hh:190
    \n+
    typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F, LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits > LocalFunction
    Definition analyticgridviewfunction.hh:168
    \n+
    typename SignatureTraits< Signature >::RawSignature RawSignature
    Definition analyticgridviewfunction.hh:151
    \n+
    const EntitySet & entitySet() const
    Return the set of entities this local-function can be bound to.
    Definition analyticgridviewfunction.hh:196
    \n+
    typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature
    Definition analyticgridviewfunction.hh:152
    \n+\n+
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:32
    \n+
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:35
    \n+
    Derivative traits for local functions.
    Definition localderivativetraits.hh:28
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,179 +1,324 @@\n dune-functions\u00a02.9.0\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+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\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#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n-4#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n 5\n-6#include \n-7\n-8#include \n-9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n-12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\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-13\n-14namespace _\bD_\bu_\bn_\be {\n-15namespace Functions {\n-16namespace Imp {\n+6#include \n+7#include \n+8\n+9#include \n+10\n+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\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+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_\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+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_\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+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/_\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 17\n 18\n-19\n-33template\n-34class TypeErasureWrapperInterface :\n-35 public Interface,\n-36 public PolymorphicType>\n-37{\n-38public:\n-39 virtual const std::type_info& target_type() const = 0;\n-40};\n-41\n-42\n-43\n-60template\n-61class TypeErasureWrapperBase :\n-62 public TypeErasureWrapperInterface\n-63{\n-64public:\n-65 template = 0>\n-66 TypeErasureWrapperBase(TT&& t) :\n-67 wrapped_(std::forward(t))\n-68 {}\n-69\n-71 T& get()\n-72 {\n-73 return wrapped_;\n-74 }\n-75\n-77 const T& get() const\n-78 {\n-79 return wrapped_;\n-80 }\n-81\n-82protected:\n-83 using Wrapped = T;\n-84 Wrapped wrapped_;\n-85};\n-86\n-87\n-88\n-112template class Implementation, class T>\n-113class TypeErasureWrapperImplementation :\n-114 public Implementation >\n-115{\n-116public:\n-117\n-119 template =\n-0>\n-120 TypeErasureWrapperImplementation(TT&& t) :\n-121 Implementation >(std::forward(t))\n-122 {}\n-123\n-125 virtual TypeErasureWrapperImplementation* clone() const\n-126 {\n-127 return new TypeErasureWrapperImplementation(*this);\n-128 }\n-129\n-131 virtual TypeErasureWrapperImplementation* clone(void* buffer) const\n-132 {\n-133 return new (buffer) TypeErasureWrapperImplementation(*this);\n-134 }\n+19namespace _\bD_\bu_\bn_\be {\n+20namespace Functions {\n+21\n+22namespace Imp {\n+23\n+24template class\n+DerivativeTraits=DefaultDerivativeTraits>\n+25class LocalAnalyticGridViewFunction;\n+26\n+27template\n+class DerivativeTraits>\n+28class LocalAnalyticGridViewFunction\n+29{\n+30public:\n+31 using Signature = Range(LocalDomain);\n+32 using RawSignature = typename SignatureTraits::RawSignature;\n+33 using DerivativeSignature = typename DerivativeTraits::Range\n+(LocalDomain);\n+34\n+35 using GridView = GV;\n+36 using EntitySet = GridViewEntitySet;\n+37 using Element = typename EntitySet::Element;\n+38// using Geometry = typename Element::Geometry;\n+39 using Geometry = typename std::decay::type;\n+40\n+41 // Use the indirection via derivativeIfImplemented to also support\n+42 // function types F that do not implement derivative. In this case\n+43 // the interface type DifferentiableFunction is using a dummy for\n+44 // the derivative type\n+45 using DerivativeDummy = DifferentiableFunction;\n+46 using GlobalRawDerivative = decltype(Imp::\n+derivativeIfImplemented(std::declval()));\n+47 using LocalDerivative = LocalAnalyticGridViewFunction;\n+48\n+50 template = 0>\n+51 LocalAnalyticGridViewFunction(FT&& f) :\n+52 f_(std::forward(f))\n+53 {}\n+54\n+56 template\n+57 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::\n+optional& geometry) :\n+58 f_(std::forward(f)),\n+59 element_(element),\n+60 geometry_(geometry)\n+61 {}\n+62\n+63\n+72 void bind(const Element& element)\n+73 {\n+74 element_ = element;\n+75 geometry_.emplace(element_.geometry());\n+76 }\n+77\n+79 void unbind()\n+80 {\n+81 geometry_.reset();\n+82 }\n+83\n+86 bool bound() const\n+87 {\n+88 return static_cast(geometry_);\n+89 }\n+90\n+100 Range operator()(const LocalDomain& x) const\n+101 {\n+102 assert(!!geometry_);\n+103 return f_(geometry_->global(x));\n+104 }\n+105\n+107 const Element& localContext() const\n+108 {\n+109 assert(!!geometry_);\n+110 return element_;\n+111 }\n+112\n+121 friend LocalDerivative _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const LocalAnalyticGridViewFunction& t)\n+122 {\n+123 return LocalDerivative(Imp::derivativeIfImplemented\n+(t.f_), t.element_, t.geometry_);\n+124 }\n+125\n+126private:\n+127 F f_;\n+128 Element element_;\n+129 std::optional geometry_ = std::nullopt;\n+130};\n+131\n+132} // end namespace Imp\n+133\n+134\n 135\n-137 virtual TypeErasureWrapperImplementation* move(void* buffer)\n-138 {\n-139 return new (buffer) TypeErasureWrapperImplementation(std::move(*this));\n-140 }\n-141\n-143 virtual const std::type_info& target_type() const\n-144 {\n-145 return typeid(T);\n-146 }\n-147};\n-148\n-149} // namespace Dune::Functions::Imp\n-150\n-151\n-152\n-163template class Implementation, size_t\n-bufferSize = 56>\n-_\b1_\b6_\b4class _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be\n-165{\n-166public:\n-167\n-169 template = 0 >\n-_\b1_\b7_\b0 _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be(T&& t) :\n-171 _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_(Imp::TypeErasureWrapperImplementation::type>(std::forward(t)))\n-172 {}\n-173\n-_\b1_\b7_\b5 _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be() = default;\n+136\n+137template class\n+DerivativeTraits=DefaultDerivativeTraits>\n+_\b1_\b3_\b8class _\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+139\n+140\n+146template class\n+DerivativeTraits>\n+_\b1_\b4_\b7class _\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+148{\n+149public:\n+_\b1_\b5_\b0 using _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(Domain);\n+_\b1_\b5_\b1 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_\b2 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+153\n+_\b1_\b5_\b4 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b1_\b5_\b5 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_\b5_\b6 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_\b5_\b7 using _\bG_\be_\bo_\bm_\be_\bt_\br_\by = typename Element::Geometry;\n+158\n+159 // Use the indirection via derivativeIfImplemented to also support\n+160 // function types F that do not implement derivative. In this case\n+161 // the interface type DifferentiableFunction is used a dummy for\n+162 // the derivative type\n+_\b1_\b6_\b3 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_\b6_\b4 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_\b6_\b5 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+166\n+_\b1_\b6_\b7 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_\b6_\b8 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+169\n+171 template\n+_\b1_\b7_\b2 _\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+173 f_(std::forward(f)),\n+174 entitySet_(gridView)\n+175 {}\n 176\n-_\b1_\b7_\b8 Interface& _\ba_\bs_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be()\n+_\b1_\b7_\b8 Range _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Domain& x) const\n 179 {\n-180 return _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_.get();\n+180 return f_(x);\n 181 }\n 182\n-_\b1_\b8_\b4 const Interface& _\ba_\bs_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be() const\n+_\b1_\b8_\b4 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 185 {\n-186 return _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_.get();\n+186 return _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(Imp::derivativeIfImplemented(t.f_),\n+t.entitySet_.gridView());\n 187 }\n 188\n-_\b1_\b9_\b0 const std::type_info& _\bt_\ba_\br_\bg_\be_\bt_\b__\bt_\by_\bp_\be() const\n+_\b1_\b9_\b0 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 191 {\n-192 return _\bw_\br_\ba_\bp_\bp_\be_\bd_\b_.get().target_type();\n+192 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(t.f_);\n 193 }\n 194\n-195protected:\n-_\b1_\b9_\b6 _\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-197};\n-198\n-199\n-200}} // namespace Dune::Functions\n-201\n-202\n-203\n-204#endif // DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n-_\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+_\b1_\b9_\b6 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n+197 {\n+198 return entitySet_;\n+199 }\n+200\n+201private:\n+202 F f_;\n+203 EntitySet entitySet_;\n+204};\n+205\n+206\n+207\n+224template\n+225AnalyticGridViewFunction<\n+226 typename std::invoke_result::\n+Geometry::GlobalCoordinate>::type // Range\n+227 (typename GridView::template Codim<0>::Geometry::GlobalCoordinate), /\n+/ Domain\n+228 GridView,\n+229 typename std::decay::type > // Raw type of F (without & or &&)\n+_\b2_\b3_\b0 _\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+231{\n+232 using Domain = typename GridView::template Codim<0>::Geometry::\n+GlobalCoordinate;\n+233 using Range = typename std::invoke_result::type;\n+234 using FRaw = typename std::decay::type;\n+235\n+236 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+237}\n+238\n+239\n+240\n+241}} // namespace Dune::Functions\n+242\n+243\n+244\n+245#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+_\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_\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+_\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+_\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:39\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+AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::\n+template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::\n+template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::\n+decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView\n+&gridView)\n+Create an AnalyticGridViewFunction from a function and a grid view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:230\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:45\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:165\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:190\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:170\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:196\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:178\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:184\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:29\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:56\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:138\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: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_\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:167\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: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:_\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: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_\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: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:_\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:154\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:164\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:150\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:172\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: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:_\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:168\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:151\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: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:_\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:152\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: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:_\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:35\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:28\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: utility.hh File Reference\n+dune-functions: gridviewentityset.hh File Reference\n \n \n \n \n \n \n \n@@ -65,97 +65,40 @@\n
    \n
    \n
    \n \n \n \n \n
    \n \n-
    utility.hh File Reference
    \n+Namespaces
    \n+
    gridviewentityset.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 <memory>
    \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::GridViewEntitySet< GV, cd >
     An entity set for all entities of given codim in a grid view. More...
     
    \n \n \n \n \n \n-

    \n Namespaces

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

    \n-Typedefs

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

    \n-Functions

    template<class F , class size_type , size_type firstValue, class... Args>
    auto Dune::Functions::forwardAsStaticInteger (std::integer_sequence< size_type, firstValue > values, const size_type &i, F &&f, Args &&... args) -> decltype(f(std::integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))
     
    template<class F , class size_type , size_type firstValue, size_type secondValue, size_type... otherValues, class... Args>
    auto Dune::Functions::forwardAsStaticInteger (std::integer_sequence< size_type, firstValue, secondValue, otherValues... > values, const size_type i, F &&f, Args &&... args) -> decltype(f(std::integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))
     
    template<std::size_t end, class F , class size_type , class... Args>
    auto Dune::Functions::forwardAsStaticIndex (const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))
     Transform dynamic index to static index_constant.
     
    template<class F , class... T>
    auto Dune::Functions::transformTuple (F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >{}))
     Transform tuple value using a functor.
     
    template<class F , class... T1, class... T2>
    auto Dune::Functions::transformTuple (F &&f, const std::tuple< T1... > &tuple1, const std::tuple< T2... > &tuple2) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple1, tuple2, std::index_sequence_for< T1... >{}))
     Transform tuple value using a binary functor.
     
    template<class Expression >
    auto Dune::Functions::callableCheck (Expression f)
     Create a predicate for checking validity of expressions.
     
    template<class Check >
    auto Dune::Functions::negatePredicate (Check check)
     Negate given predicate.
     
    template<class T >
    auto Dune::Functions::forwardCapture (T &&t)
     Create a capture object for perfect forwarding.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,92 +1,22 @@\n dune-functions\u00a02.9.0\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+ * _\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 _\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:_\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-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template class T, class ArgTuple >\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bE_\bx_\bp_\ba_\bn_\bd_\bT_\bu_\bp_\bl_\be = typename Imp::ExpandTupleHelper< T,\n- ArgTuple >::Type\n-\u00a0 Expand tuple arguments as template arguments.\n-\u00a0\n-template class F, class... Tuples>\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be = typename Imp::TransformTupleHelper< F,\n- Tuples... >::Type\n-\u00a0 Transform tuple types argument using type-functor.\n-\u00a0\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be_\bT_\bu_\bp_\bl_\be = typename Imp::\n- IntegerSequenceTupleHelper< IntegerSequence >::Type\n-\u00a0 Transform integer_sequence to tuple...>\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br (std::integer_sequence<\n- size_type, firstValue > values, const size_type &i, F &&f, Args &&...\n- args) -> decltype(f(std::integral_constant< size_type, firstValue >(),\n- std::forward< Args >(args)...))\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bt_\be_\bg_\be_\br (std::integer_sequence<\n- size_type, firstValue, secondValue, otherValues... > values, const\n- size_type i, F &&f, Args &&... args) -> decltype(f(std::\n- integral_constant< size_type, firstValue >(), std::forward< Args >\n- (args)...))\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bA_\bs_\bS_\bt_\ba_\bt_\bi_\bc_\bI_\bn_\bd_\be_\bx (const size_type &i, F &&f, Args\n- &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >\n- (args)...))\n-\u00a0 Transform dynamic index to static index_constant.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be (F &&f, const std::tuple< T... > &tuple)\n- -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::\n- index_sequence_for< T... >{}))\n-\u00a0 Transform tuple value using a functor.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be (F &&f, const std::tuple< T1... >\n- &tuple1, const std::tuple< T2... > &tuple2) -> decltype(Imp::\n- transformTupleHelper(std::forward< F >(f), tuple1, tuple2, std::\n- index_sequence_for< T1... >{}))\n-\u00a0 Transform tuple value using a binary functor.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk (Expression f)\n-\u00a0 Create a predicate for checking validity of expressions.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be (Check check)\n-\u00a0 Negate given predicate.\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be (T &&t)\n-\u00a0 Create a capture object for perfect forwarding.\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/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: utility.hh Source File\n+dune-functions: gridviewentityset.hh Source File\n \n \n \n \n \n \n \n@@ -70,308 +70,123 @@\n
    \n \n \n \n \n \n \n
    \n-
    utility.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#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n+
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n
    5
    \n-
    6
    \n-
    7#include <utility>
    \n-
    8#include <type_traits>
    \n-
    9
    \n-
    10#include <dune/common/overloadset.hh>
    \n-
    11#include <dune/common/indices.hh>
    \n+
    6#include <memory>
    \n+
    7
    \n+
    8
    \n+
    9namespace Dune {
    \n+
    10
    \n+
    11namespace Functions {
    \n
    12
    \n-\n-
    14
    \n-
    15namespace Dune {
    \n-
    16namespace Functions {
    \n-
    17
    \n-
    18
    \n-
    19
    \n-
    20template<class F, class size_type, size_type firstValue, class... Args>
    \n-
    \n-
    21auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue> values, const size_type& i, F&& f, Args&&... args)
    \n-
    22 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
    \n+
    13
    \n+
    21template<class GV, int cd>
    \n+
    \n+\n
    23{
    \n-
    24 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
    \n-
    25}
    \n-
    \n-
    26
    \n-
    27template<class F, class size_type, size_type firstValue, size_type secondValue, size_type... otherValues, class... Args>
    \n-
    \n-
    28auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue, secondValue, otherValues...> values, const size_type i, F&& f, Args&&... args)
    \n-
    29 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
    \n-
    30{
    \n-
    31 if (i==firstValue)
    \n-
    32 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
    \n-
    33 return forwardAsStaticInteger(std::integer_sequence<size_type, secondValue, otherValues...>(), i, std::forward<F>(f), std::forward<Args>(args)...);
    \n-
    34}
    \n-
    \n-
    35
    \n-
    36
    \n+
    24public:
    \n+
    25
    \n+
    26 typedef GV GridView;
    \n+
    27 enum {
    \n+
    28 codim = cd
    \n+
    29 };
    \n+
    30
    \n+
    32 typedef typename GridView::template Codim<codim>::Entity Element;
    \n+
    33
    \n+
    35 typedef typename Element::Geometry::LocalCoordinate LocalCoordinate;
    \n+
    36 typedef typename Element::Geometry::GlobalCoordinate GlobalCoordinate;
    \n
    37
    \n-
    59template<std::size_t end, class F, class size_type, class... Args>
    \n-
    \n-
    60auto forwardAsStaticIndex(const size_type& i, F&& f, Args&&... args)
    \n-
    61 ->decltype(f(Dune::Indices::_0, std::forward<Args>(args)...))
    \n-
    62{
    \n-
    63 return forwardAsStaticInteger(std::make_index_sequence<end>{}, i, std::forward<F>(f), std::forward<Args>(args)...);
    \n-
    64}
    \n-
    \n-
    65
    \n-
    66
    \n-
    67
    \n-
    68namespace Imp {
    \n-
    69
    \n-
    70 template<template<class...> class T, class List>
    \n-
    71 struct ExpandTupleHelper
    \n-
    72 {};
    \n-
    73
    \n-
    74 template<template<class...> class T, template<class...> class ListType, class... Args>
    \n-
    75 struct ExpandTupleHelper<T, ListType<Args...>>
    \n-
    76 {
    \n-
    77 using Type = T<Args...>;
    \n-
    78 };
    \n-
    79
    \n-
    80} // end namespace Imp
    \n-
    81
    \n-
    93template<template<class...> class T, class ArgTuple>
    \n-
    94using ExpandTuple = typename Imp::ExpandTupleHelper<T, ArgTuple>::Type;
    \n-
    95
    \n-
    96
    \n-
    97
    \n-
    98namespace Imp {
    \n-
    99
    \n-
    100 template<template<class...> class T, class... Tuple>
    \n-
    101 struct TransformTupleHelper
    \n-
    102 {};
    \n-
    103
    \n-
    104 template<template<class...> class T, class... Args1>
    \n-
    105 struct TransformTupleHelper<T, typename std::tuple<Args1...>>
    \n-
    106 {
    \n-
    107 using Type = std::tuple<T<Args1>...>;
    \n-
    108 };
    \n-
    109
    \n-
    110 template<template<class...> class T, class... Args1, class... Args2>
    \n-
    111 struct TransformTupleHelper<T, typename std::tuple<Args1...>, typename std::tuple<Args2...>>
    \n-
    112 {
    \n-
    113 using Type = std::tuple<T<Args1, Args2>...>;
    \n-
    114 };
    \n-
    115
    \n-
    116} // end namespace Imp
    \n-
    117
    \n-
    130template<template<class...> class F, class... Tuples>
    \n-
    131using TransformTuple = typename Imp::TransformTupleHelper<F, Tuples...>::Type;
    \n-
    132
    \n-
    133
    \n-
    134
    \n-
    135namespace Imp {
    \n-
    136
    \n-
    137 template<class F, class... T, std::size_t... k>
    \n-
    138 auto transformTupleHelper(F&& f, const std::tuple<T...>& tuple, std::index_sequence<k...>)
    \n-
    139 -> decltype(std::make_tuple(f(std::get<k>(tuple))...))
    \n-
    140 {
    \n-
    141 return std::make_tuple(f(std::get<k>(tuple))...);
    \n-
    142 }
    \n-
    143
    \n-
    144 template<class F, class... T1, class...T2, std::size_t... k>
    \n-
    145 auto transformTupleHelper(F&& f, const std::tuple<T1...>& tuple1, const std::tuple<T2...>& tuple2, std::index_sequence<k...>)
    \n-
    146 -> decltype(std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...))
    \n-
    147 {
    \n-
    148 return std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...);
    \n-
    149 }
    \n-
    150
    \n-
    151} // end namespace Imp
    \n-
    152
    \n-
    164template<class F, class... T>
    \n-
    \n-
    165auto transformTuple(F&& f, const std::tuple<T...>& tuple)
    \n-
    166 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{}))
    \n-
    167{
    \n-
    168 return Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{});
    \n-
    169}
    \n-
    \n-
    170
    \n-
    184template<class F, class... T1, class... T2>
    \n-
    \n-
    185auto transformTuple(F&& f, const std::tuple<T1...>& tuple1, const std::tuple<T2...>& tuple2)
    \n-
    186 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{}))
    \n-
    187{
    \n-
    188 return Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{});
    \n-
    189}
    \n-
    \n-
    190
    \n-
    191
    \n-
    192
    \n-
    193namespace Imp {
    \n-
    194
    \n-
    195 template<class IntegerSequence>
    \n-
    196 struct IntegerSequenceTupleHelper
    \n-
    197 {};
    \n-
    198
    \n-
    199 template<class I, I... k>
    \n-
    200 struct IntegerSequenceTupleHelper<std::integer_sequence<I, k...>>
    \n-
    201 {
    \n-
    202 using Type = std::tuple<std::integral_constant<I, k>...>;
    \n-
    203 };
    \n-
    204
    \n-
    205} // end namespace Imp
    \n-
    206
    \n-
    210template<class IntegerSequence>
    \n-
    211using IntegerSequenceTuple= typename Imp::IntegerSequenceTupleHelper<IntegerSequence>::Type;
    \n-
    212
    \n-
    213
    \n-
    214
    \n-
    220template<class... T>
    \n-
    \n-\n-
    222{
    \n-
    223 using type = typename std::tuple_element<sizeof...(T)-1, std::tuple<T...>>::type;
    \n-
    224};
    \n-
    \n-
    225
    \n-
    226
    \n-
    227
    \n-
    228namespace Imp {
    \n-
    229
    \n-
    230template<class T, class I>
    \n-
    231struct RotateHelper;
    \n-
    232
    \n-
    233template<class... T, std::size_t... I>
    \n-
    234struct RotateHelper<std::tuple<T...>, std::index_sequence<I...> >
    \n-
    235{
    \n-
    236 using type = typename std::tuple<typename LastType<T...>::type, typename std::tuple_element<I,std::tuple<T...>>::type...>;
    \n-
    237};
    \n-
    238
    \n-
    239} // end namespace Imp
    \n-
    240
    \n-
    241
    \n-
    249template<class... T>
    \n-
    \n-\n-
    251{
    \n-
    252 using type = typename Imp::RotateHelper<std::tuple<T...>, std::make_index_sequence<sizeof...(T)-1>>::type;
    \n-
    253};
    \n-
    \n-
    254
    \n-
    255
    \n-
    256
    \n-
    278template<class Expression>
    \n-
    \n-
    279auto callableCheck(Expression f)
    \n-
    280{
    \n-
    281 return [f](auto&&... args){
    \n-
    282 return Functions::Concept::isCallable(f, std::forward<decltype(args)>(args)...);
    \n-
    283 };
    \n-
    284}
    \n-
    \n-
    285
    \n-
    286
    \n-
    287
    \n-
    303template<class Check>
    \n-
    \n-
    304auto negatePredicate(Check check)
    \n-
    305{
    \n-
    306 return [check](auto&&... args){
    \n-
    307 auto negate = overload(
    \n-
    308 [](std::true_type) { return std::false_type{};},
    \n-
    309 [](std::false_type) { return std::true_type{};},
    \n-
    310 [](bool v) { return not v;});
    \n-
    311 return negate(check(std::forward<decltype(args)>(args)...));
    \n-
    312 };
    \n-
    313}
    \n-
    \n-
    314
    \n-
    315
    \n-
    316namespace Impl {
    \n-
    317
    \n-
    318 // Wrapper to capture values in a lambda for perfect forwarding.
    \n-
    319 // This captures value types by value and reference types by reference.
    \n-
    320 template <typename T>
    \n-
    321 struct ForwardCaptureWrapper;
    \n-
    322
    \n-
    323 template <typename T>
    \n-
    324 struct ForwardCaptureWrapper
    \n-
    325 {
    \n-
    326 template <typename TT>
    \n-
    327 ForwardCaptureWrapper(TT&& t) : t_{std::forward<TT>(t)} {}
    \n-
    328
    \n-
    329 auto forward() const { return std::move(t_); }
    \n-
    330
    \n-
    331 T t_;
    \n-
    332 };
    \n-
    333
    \n-
    334 template <typename T>
    \n-
    335 struct ForwardCaptureWrapper<T&>
    \n-
    336 {
    \n-
    337 ForwardCaptureWrapper(T& t) : t_{t} {}
    \n-
    338
    \n-
    339 T& forward() const { return t_; };
    \n-
    340
    \n-
    341 T& t_;
    \n-
    342 };
    \n-
    343
    \n-
    344 template <typename T>
    \n-
    345 struct ForwardCaptureWrapper<const T&>
    \n-
    346 {
    \n-
    347 ForwardCaptureWrapper(const T& t) : t_{t} {}
    \n-
    348
    \n-
    349 const T& forward() const { return t_; };
    \n-
    350
    \n-
    351 const T& t_;
    \n-
    352 };
    \n-
    353
    \n-
    354} // end namespace Dune::Functions::Impl
    \n-
    355
    \n-
    356
    \n-
    357
    \n-
    371template <class T>
    \n-
    \n-
    372auto forwardCapture(T&& t)
    \n-
    373{
    \n-
    374 return Impl::ForwardCaptureWrapper<T>(std::forward<T>(t));
    \n-
    375}
    \n-
    \n-
    376
    \n-
    377
    \n-
    378
    \n-
    379} // namespace Dune::Functions
    \n-
    380} // namespace Dune
    \n-
    381
    \n-
    382
    \n-
    383#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH
    \n-\n-
    typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple
    Expand tuple arguments as template arguments.
    Definition utility.hh:94
    \n-
    typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple
    Transform tuple types argument using type-functor.
    Definition utility.hh:131
    \n-
    static constexpr auto isCallable()
    Check if f is callable with given argument list.
    Definition functionconcepts.hh:47
    \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:165
    \n-
    auto callableCheck(Expression f)
    Create a predicate for checking validity of expressions.
    Definition utility.hh:279
    \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:60
    \n-
    auto negatePredicate(Check check)
    Negate given predicate.
    Definition utility.hh:304
    \n+\n+
    39
    \n+
    41 typedef typename GridView::template Codim<codim>::Iterator const_iterator;
    \n+
    42
    \n+\n+
    45
    \n+
    \n+\n+
    48 gv_(gv)
    \n+
    49 {}
    \n+
    \n+
    50
    \n+
    \n+
    52 bool contains(const Element& e) const
    \n+
    53 {
    \n+
    54 return gv_.contains(e);
    \n+
    55 }
    \n+
    \n+
    56
    \n+
    \n+
    58 size_t size() const
    \n+
    59 {
    \n+
    60 return gv_.size(codim);
    \n+
    61 }
    \n+
    \n+
    62
    \n+
    \n+\n+
    65 {
    \n+
    66 return gv_.template begin<codim>();
    \n+
    67 }
    \n+
    \n+
    68
    \n+
    \n+\n+
    71 {
    \n+
    72 return gv_.template end<codim>();
    \n+
    73 }
    \n+
    \n+
    74
    \n+
    \n+
    76 const GridView& gridView() const
    \n+
    77 {
    \n+
    78 return gv_;
    \n+
    79 }
    \n+
    \n+
    80
    \n+
    81private:
    \n+
    82 GridView gv_;
    \n+
    83};
    \n+
    \n+
    84
    \n+
    85
    \n+
    86} // end of namespace Dune::Functions
    \n+
    87} // end of namespace Dune
    \n+
    88
    \n+
    89#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH
    \n
    Definition polynomial.hh:10
    \n-
    auto forwardCapture(T &&t)
    Create a capture object for perfect forwarding.
    Definition utility.hh:372
    \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:21
    \n-
    typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type IntegerSequenceTuple
    Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>
    Definition utility.hh:211
    \n-
    Get last entry of type list.
    Definition utility.hh:222
    \n-
    typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type
    Definition utility.hh:223
    \n-
    Rotate type list by one, such that last entry is moved to first position.
    Definition utility.hh:251
    \n-
    typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence< sizeof...(T) -1 > >::type type
    Definition utility.hh:252
    \n+
    An entity set for all entities of given codim in a grid view.
    Definition gridviewentityset.hh:23
    \n+
    GridViewEntitySet(const GridView &gv)
    Construct GridViewEntitySet for a GridView.
    Definition gridviewentityset.hh:47
    \n+
    GV GridView
    Definition gridviewentityset.hh:26
    \n+
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:32
    \n+
    const_iterator end() const
    Create an end iterator.
    Definition gridviewentityset.hh:70
    \n+
    const GridView & gridView() const
    Return the associated GridView.
    Definition gridviewentityset.hh:76
    \n+
    Element value_type
    Definition gridviewentityset.hh:38
    \n+
    const_iterator begin() const
    Create a begin iterator.
    Definition gridviewentityset.hh:64
    \n+
    GridView::template Codim< codim >::Iterator const_iterator
    A forward iterator.
    Definition gridviewentityset.hh:41
    \n+
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:35
    \n+
    size_t size() const
    Return number of Elements visited by an iterator.
    Definition gridviewentityset.hh:58
    \n+
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:36
    \n+
    @ codim
    Definition gridviewentityset.hh:28
    \n+
    bool contains(const Element &e) const
    Return true if e is contained in the EntitySet.
    Definition gridviewentityset.hh:52
    \n+
    const_iterator iterator
    Same as const_iterator.
    Definition gridviewentityset.hh:44
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,348 +1,140 @@\n dune-functions\u00a02.9.0\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+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\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#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH\n-4#define DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n 5\n-6\n-7#include \n-8#include \n-9\n-10#include \n-11#include \n+6#include \n+7\n+8\n+9namespace _\bD_\bu_\bn_\be {\n+10\n+11namespace Functions {\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/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-14\n-15namespace _\bD_\bu_\bn_\be {\n-16namespace Functions {\n-17\n-18\n-19\n-20template\n-_\b2_\b1auto _\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-22 ->decltype(f(std::integral_constant(), std::\n-forward(args)...))\n+13\n+21template\n+_\b2_\b2class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n 23{\n-24 return f(std::integral_constant(), std::forward\n-(args)...);\n-25}\n-26\n-27template\n-_\b2_\b8auto _\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-29 ->decltype(f(std::integral_constant(), std::\n-forward(args)...))\n-30{\n-31 if (i==firstValue)\n-32 return f(std::integral_constant(), std::forward\n-(args)...);\n-33 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-34}\n-35\n-36\n+24public:\n+25\n+_\b2_\b6 typedef GV _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw;\n+27 enum {\n+28 _\bc_\bo_\bd_\bi_\bm = cd\n+_\b2_\b9 };\n+30\n+_\b3_\b2 typedef typename GridView::template Codim::Entity _\bE_\bl_\be_\bm_\be_\bn_\bt;\n+33\n+_\b3_\b5 typedef typename Element::Geometry::LocalCoordinate _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+_\b3_\b6 typedef typename Element::Geometry::GlobalCoordinate _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n 37\n-59template\n-_\b6_\b0auto _\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-61 ->decltype(f(Dune::Indices::_0, std::forward(args)...))\n-62{\n-63 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-64}\n-65\n-66\n-67\n-68namespace Imp {\n-69\n-70 template class T, class List>\n-71 struct ExpandTupleHelper\n-72 {};\n-73\n-74 template class T, template class ListType,\n-class... Args>\n-75 struct ExpandTupleHelper>\n-76 {\n-77 using Type = T;\n-78 };\n-79\n-80} // end namespace Imp\n-81\n-93template class T, class ArgTuple>\n-_\b9_\b4using _\bE_\bx_\bp_\ba_\bn_\bd_\bT_\bu_\bp_\bl_\be = typename Imp::ExpandTupleHelper::Type;\n-95\n-96\n-97\n-98namespace Imp {\n-99\n-100 template class T, class... Tuple>\n-101 struct TransformTupleHelper\n-102 {};\n-103\n-104 template class T, class... Args1>\n-105 struct TransformTupleHelper>\n-106 {\n-107 using Type = std::tuple...>;\n-108 };\n-109\n-110 template class T, class... Args1, class... Args2>\n-111 struct TransformTupleHelper, typename\n-std::tuple>\n-112 {\n-113 using Type = std::tuple...>;\n-114 };\n-115\n-116} // end namespace Imp\n-117\n-130template class F, class... Tuples>\n-_\b1_\b3_\b1using _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be = typename Imp::TransformTupleHelper::\n-Type;\n-132\n-133\n-134\n-135namespace Imp {\n-136\n-137 template\n-138 auto transformTupleHelper(F&& f, const std::tuple& tuple, std::\n-index_sequence)\n-139 -> decltype(std::make_tuple(f(std::get(tuple))...))\n-140 {\n-141 return std::make_tuple(f(std::get(tuple))...);\n-142 }\n-143\n-144 template\n-145 auto transformTupleHelper(F&& f, const std::tuple& tuple1, const\n-std::tuple& tuple2, std::index_sequence)\n-146 -> decltype(std::make_tuple(f(std::get(tuple1), std::get\n-(tuple2))...))\n-147 {\n-148 return std::make_tuple(f(std::get(tuple1), std::get(tuple2))...);\n-149 }\n-150\n-151} // end namespace Imp\n-152\n-164template\n-_\b1_\b6_\b5auto _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be(F&& f, const std::tuple& tuple)\n-166 -> decltype(Imp::transformTupleHelper(std::forward(f), tuple, std::\n-index_sequence_for{}))\n-167{\n-168 return Imp::transformTupleHelper(std::forward(f), tuple, std::\n-index_sequence_for{});\n-169}\n-170\n-184template\n-_\b1_\b8_\b5auto _\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-186 -> decltype(Imp::transformTupleHelper(std::forward(f), tuple1, tuple2,\n-std::index_sequence_for{}))\n-187{\n-188 return Imp::transformTupleHelper(std::forward(f), tuple1, tuple2, std::\n-index_sequence_for{});\n-189}\n-190\n-191\n-192\n-193namespace Imp {\n-194\n-195 template\n-196 struct IntegerSequenceTupleHelper\n-197 {};\n-198\n-199 template\n-200 struct IntegerSequenceTupleHelper>\n-201 {\n-202 using Type = std::tuple...>;\n-203 };\n-204\n-205} // end namespace Imp\n-206\n-210template\n-_\b2_\b1_\b1using _\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-212\n-213\n-214\n-220template\n-_\b2_\b2_\b1struct _\bL_\ba_\bs_\bt_\bT_\by_\bp_\be\n-222{\n-_\b2_\b2_\b3 using _\bt_\by_\bp_\be = typename std::tuple_element>_\b:_\b:_\bt_\by_\bp_\be;\n-224};\n-225\n-226\n-227\n-228namespace Imp {\n-229\n-230template\n-231struct RotateHelper;\n-232\n-233template\n-234struct RotateHelper, std::index_sequence >\n-235{\n-236 using type = typename std::tuple::type, typename\n-std::tuple_element>::type...>;\n-237};\n-238\n-239} // end namespace Imp\n-240\n-241\n-249template\n-_\b2_\b5_\b0struct _\bR_\bo_\bt_\ba_\bt_\be_\bT_\bu_\bp_\bl_\be\n-251{\n-_\b2_\b5_\b2 using _\bt_\by_\bp_\be = typename Imp::RotateHelper, std::\n-make_index_sequence>_\b:_\b:_\bt_\by_\bp_\be;\n-253};\n-254\n-255\n-256\n-278template\n-_\b2_\b7_\b9auto _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bC_\bh_\be_\bc_\bk(Expression f)\n-280{\n-281 return [f](auto&&... args){\n-282 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-283 };\n-284}\n-285\n-286\n-287\n-303template\n-_\b3_\b0_\b4auto _\bn_\be_\bg_\ba_\bt_\be_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be(Check check)\n-305{\n-306 return [check](auto&&... args){\n-307 auto negate = overload(\n-308 [](std::true_type) { return std::false_type{};},\n-309 [](std::false_type) { return std::true_type{};},\n-310 [](bool v) { return not v;});\n-311 return negate(check(std::forward(args)...));\n-312 };\n-313}\n-314\n-315\n-316namespace Impl {\n-317\n-318 // Wrapper to capture values in a lambda for perfect forwarding.\n-319 // This captures value types by value and reference types by reference.\n-320 template \n-321 struct ForwardCaptureWrapper;\n-322\n-323 template \n-324 struct ForwardCaptureWrapper\n-325 {\n-326 template \n-327 ForwardCaptureWrapper(TT&& t) : t_{std::forward(t)} {}\n-328\n-329 auto forward() const { return std::move(t_); }\n-330\n-331 T t_;\n-332 };\n-333\n-334 template \n-335 struct ForwardCaptureWrapper\n-336 {\n-337 ForwardCaptureWrapper(T& t) : t_{t} {}\n-338\n-339 T& forward() const { return t_; };\n-340\n-341 T& t_;\n-342 };\n-343\n-344 template \n-345 struct ForwardCaptureWrapper\n-346 {\n-347 ForwardCaptureWrapper(const T& t) : t_{t} {}\n-348\n-349 const T& forward() const { return t_; };\n-350\n-351 const T& t_;\n-352 };\n-353\n-354} // end namespace Dune::Functions::Impl\n-355\n-356\n-357\n-371template \n-_\b3_\b7_\b2auto _\bf_\bo_\br_\bw_\ba_\br_\bd_\bC_\ba_\bp_\bt_\bu_\br_\be(T&& t)\n-373{\n-374 return Impl::ForwardCaptureWrapper(std::forward(t));\n-375}\n-376\n-377\n-378\n-379} // namespace Dune::Functions\n-380} // namespace Dune\n-381\n-382\n-383#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH\n-_\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:94\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: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_\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:47\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:165\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:279\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:60\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:304\n+_\b3_\b8 typedef _\bE_\bl_\be_\bm_\be_\bn_\bt _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+39\n+_\b4_\b1 typedef typename GridView::template Codim::Iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+42\n+_\b4_\b4 typedef _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+45\n+_\b4_\b7 _\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+48 gv_(gv)\n+49 {}\n+50\n+_\b5_\b2 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(const _\bE_\bl_\be_\bm_\be_\bn_\bt& e) const\n+53 {\n+54 return gv_.contains(e);\n+55 }\n+56\n+_\b5_\b8 size_t _\bs_\bi_\bz_\be() const\n+59 {\n+60 return gv_.size(_\bc_\bo_\bd_\bi_\bm);\n+61 }\n+62\n+_\b6_\b4 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const\n+65 {\n+66 return gv_.template begin();\n+67 }\n+68\n+_\b7_\b0 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const\n+71 {\n+72 return gv_.template end();\n+73 }\n+74\n+_\b7_\b6 const _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw& _\bg_\br_\bi_\bd_\bV_\bi_\be_\bw() const\n+77 {\n+78 return gv_;\n+79 }\n+80\n+81private:\n+82 _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw gv_;\n+83};\n+84\n+85\n+86} // end of namespace Dune::Functions\n+87} // end of namespace Dune\n+88\n+89#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:372\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:21\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:211\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:222\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-typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn utility.hh:223\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:251\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:252\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:23\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:47\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: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_\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: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:_\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:70\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:76\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:38\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:64\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:41\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:35\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:58\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: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:_\bc_\bo_\bd_\bi_\bm\n+@ codim\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn gridviewentityset.hh:28\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:52\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:44\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: functionconcepts.hh File Reference\n+dune-functions: gridfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,129 +65,50 @@\n \n \n \n \n \n \n \n
    \n \n-
    functionconcepts.hh File Reference
    \n+Namespaces
    \n+
    gridfunction.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+\n

    Go to the source code of this file.

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

    \n Classes

    struct  Dune::Functions::Concept::Callable< Args >
     Concept objects that can be called with given argument list. More...
    class  Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize >
     
    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...
    class  Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >
     Wrapper class for functions defined on a Grid. More...
     
    \n \n \n \n \n \n-\n-\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-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.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,136 +1,34 @@\n dune-functions\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n- * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-functionconcepts.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n+ * _\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_\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__\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:_\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+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:_\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+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-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-\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: functionconcepts.hh Source File\n+dune-functions: gridfunction.hh Source File\n \n \n \n \n \n \n \n@@ -70,369 +70,178 @@\n
    \n \n \n \n \n \n \n
    \n-
    functionconcepts.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#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n+
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n
    5
    \n-
    6#include <dune/common/typelist.hh>
    \n-
    7#include <dune/common/concept.hh>
    \n-
    8
    \n-\n-\n-\n-
    12
    \n-
    13namespace Dune {
    \n-
    14namespace Functions {
    \n-
    15namespace Concept {
    \n-
    16
    \n-
    17using namespace Dune::Concept;
    \n+
    6#include <type_traits>
    \n+
    7
    \n+
    8#include <dune/common/typeutilities.hh>
    \n+
    9
    \n+\n+\n+\n+\n+\n+\n+\n+
    17
    \n
    18
    \n
    19
    \n-
    20
    \n-
    21// Callable concept ############################################################
    \n+
    20namespace Dune {
    \n+
    21namespace Functions {
    \n
    22
    \n
    23
    \n-
    31template<class... Args>
    \n-
    \n-\n-
    33{
    \n-
    34 template<class F>
    \n-
    35 auto require(F&& f) -> decltype(
    \n-
    36 f(std::declval<Args>()...)
    \n-
    37 );
    \n-
    38};
    \n-
    \n-
    39
    \n-
    46template<class F, class... Args>
    \n-
    \n-
    47static constexpr auto isCallable()
    \n-
    48{ return models<Concept::Callable<Args...>, F>(); }
    \n-
    \n-
    49
    \n-
    56template<class F, class... Args>
    \n-
    \n-
    57static constexpr auto isCallable(F&&, Args&&...)
    \n-
    58{
    \n-
    59 return models<Concept::Callable<Args&&...>, F>();
    \n-
    60}
    \n-
    \n-
    61
    \n+
    24
    \n+
    25/*
    \n+
    26 * Default implementation is empty
    \n+
    27 * The actual implementation is only given if Signature is an type
    \n+
    28 * describing a function signature as Range(Domain).
    \n+
    29 */
    \n+
    30template<class Signature, class EntitySet, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n+
    \n+\n+
    32{};
    \n+
    \n+
    33
    \n+
    34
    \n+
    35
    \n+
    36namespace Imp
    \n+
    37{
    \n+
    38
    \n+
    40 template<class S, class ES, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    41 struct GridFunctionTraits :
    \n+
    42 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>
    \n+
    43 {
    \n+
    44 protected:
    \n+
    45 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;
    \n+
    46
    \n+
    47 public:
    \n+
    49 using EntitySet = ES;
    \n+
    50
    \n+
    52 using Element = typename EntitySet::Element;
    \n+
    53
    \n+
    55 using DerivativeSignature = typename Base::DerivativeSignature;
    \n+
    56
    \n+\n+
    59
    \n+
    61 using LocalSignature = typename Base::Range(typename EntitySet::LocalCoordinate);
    \n
    62
    \n-
    63
    \n-
    64// Function concept ############################################################
    \n-
    65template<class Signature>
    \n-
    66struct Function;
    \n-
    67
    \n-
    76template<class Range, class Domain>
    \n-
    \n-
    77struct Function<Range(Domain)> : Refines<Callable<Domain> >
    \n-
    78{
    \n-
    79 template<class F>
    \n-
    80 auto require(F&& f) -> decltype(
    \n-
    81 // F models Function<Range(Domain)> if the result of F(Domain) is implicitly convertible to Range
    \n-
    82 requireConvertible<Range>(f(std::declval<Domain>()))
    \n-
    83 );
    \n-
    84};
    \n-
    \n-
    85
    \n-
    87template<class F, class Signature>
    \n-
    \n-
    88static constexpr bool isFunction()
    \n-
    89{ return models<Concept::Function<Signature>, F>(); }
    \n-
    \n-
    90
    \n-
    92template<class F, class Signature, template<class> class DerivativeTraits>
    \n-
    \n-\n-
    94{ return models<Concept::Function<Signature>, F>(); }
    \n-
    \n-
    95
    \n-
    96
    \n-
    97
    \n-
    98// DifferentiableFunction concept ##############################################
    \n-
    99template<class Signature, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-\n-
    101
    \n-
    113template<class Range, class Domain, template<class> class DerivativeTraits>
    \n-
    \n-
    114struct DifferentiableFunction<Range(Domain), DerivativeTraits> : Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n-
    115{
    \n-\n-
    117
    \n-
    118 template<class F>
    \n-
    119 auto require(F&& f) -> decltype(
    \n-
    120 derivative(f),
    \n-
    121 requireConcept<Function<DerivativeSignature>>(derivative(f))
    \n-
    122 );
    \n-
    123};
    \n-
    \n-
    124
    \n-
    126template<class F, class Signature, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-
    \n-
    127static constexpr bool isDifferentiableFunction()
    \n-
    128{ return models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }
    \n-
    \n-
    129
    \n-
    131template<class F, class Signature, template<class> class DerivativeTraits>
    \n-
    \n-\n-
    133{ return models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }
    \n-
    \n-
    134
    \n-
    135
    \n-
    136
    \n-
    137// LocalFunction concept ##############################################
    \n-
    138template<class Signature, class LocalContext>
    \n-\n-
    140
    \n-
    150template<class Range, class Domain, class LocalContext>
    \n+
    64 template<class R>
    \n+\n+
    66
    \n+
    68 using LocalFunctionTraits = typename Dune::Functions::Imp::LocalFunctionTraits<LocalSignature, Element, LocalDerivativeTraits, bufferSize>;
    \n+
    69
    \n+\n+
    72
    \n+
    74 using Concept = GridFunctionWrapperInterface<S, DerivativeInterface, LocalFunctionInterface, ES>;
    \n+
    75
    \n+
    77 template<class B>
    \n+
    78 using Model = GridFunctionWrapperImplementation<S, DerivativeInterface, LocalFunctionInterface, ES, B>;
    \n+
    79 };
    \n+
    80}
    \n+
    81
    \n+
    82
    \n+
    83
    \n+
    95template<class Range, class Domain, class ES, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    \n+
    96class GridFunction<Range(Domain), ES, DerivativeTraits, bufferSize> :
    \n+
    97 public TypeErasureBase<
    \n+
    98 typename Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::Concept,
    \n+
    99 Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::template Model>
    \n+
    100{
    \n+
    101 using Traits = Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>;
    \n+
    102
    \n+\n+
    104
    \n+
    105 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n+
    106
    \n+
    107 using LocalFunctionInterface = typename Traits::LocalFunctionInterface;
    \n+
    108
    \n+
    109 using EntitySet = typename Traits::EntitySet;
    \n+
    110
    \n+
    111public:
    \n+
    112
    \n+
    124 template<class F, disableCopyMove<GridFunction, F> = 0 >
    \n+
    \n+\n+
    126 Base(std::forward<F>(f))
    \n+
    127 {
    \n+
    128 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+
    129 }
    \n+
    \n+
    130
    \n+
    131 GridFunction() = default;
    \n+
    132
    \n+
    \n+
    138 Range operator() (const Domain& x) const
    \n+
    139 {
    \n+
    140 return this->asInterface().operator()(x);
    \n+
    141 }
    \n+
    \n+
    142
    \n
    \n-
    151struct LocalFunction<Range(Domain), LocalContext> :
    \n-
    152 Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n-
    153{
    \n-
    154 template<class F>
    \n-
    155 auto require(F&& f) -> decltype(
    \n-
    156 f.bind(std::declval<LocalContext>()),
    \n-
    157 f.unbind(),
    \n-
    158 requireConvertible<bool>(f.bound()),
    \n-
    159 f.localContext(),
    \n-
    160 requireConvertible<LocalContext>(f.localContext())
    \n-
    161 );
    \n-
    162};
    \n-
    \n-
    163
    \n-
    165template<class F, class Signature, class LocalContext>
    \n-
    \n-
    166static constexpr bool isLocalFunction()
    \n-
    167{ return models<Concept::LocalFunction<Signature, LocalContext>, F>(); }
    \n+
    151 friend DerivativeInterface derivative(const GridFunction& t)
    \n+
    152 {
    \n+
    153 return t.asInterface().derivative();
    \n+
    154 }
    \n+
    \n+
    155
    \n+
    \n+
    165 friend LocalFunctionInterface localFunction(const GridFunction& t)
    \n+
    166 {
    \n+
    167 return t.asInterface().wrappedLocalFunction();
    \n+
    168 }
    \n
    \n-
    168
    \n
    169
    \n-
    170// DifferentiableLocalFunction concept ##############################################
    \n-
    171template<class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-\n-
    173
    \n-
    186template<class Range, class Domain, class LocalContext, template<class> class DerivativeTraits>
    \n-
    \n-
    187struct DifferentiableLocalFunction<Range(Domain), LocalContext, DerivativeTraits> :
    \n-
    188 Refines<
    \n-
    189 Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,
    \n-
    190 Dune::Functions::Concept::LocalFunction<Range(Domain),LocalContext>
    \n-
    191 >
    \n-
    192{
    \n-
    193 template<class F>
    \n-
    194 auto require(F&& f) -> decltype(
    \n-
    195 f.bind(std::declval<LocalContext>()),
    \n-
    196 f.unbind(),
    \n-
    197 f.localContext(),
    \n-
    198 requireConvertible<LocalContext>(f.localContext())
    \n-
    199 );
    \n-
    200};
    \n-
    \n-
    201
    \n-
    203template<class F, class Signature, class LocalContext, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-
    \n-
    204static constexpr bool isDifferentiableLocalFunction()
    \n-
    205{ return models<Concept::DifferentiableLocalFunction<Signature, LocalContext, DerivativeTraits>, F>(); }
    \n-
    \n-
    206
    \n-
    207
    \n-
    208// EntitySet concept ##############################################
    \n-
    209
    \n-
    \n-\n-
    220{
    \n-
    221 template<class E>
    \n-
    222 auto require(E&& f) -> decltype(
    \n-
    223 requireType<typename E::Element>(),
    \n-
    224 requireType<typename E::LocalCoordinate>(),
    \n-
    225 requireType<typename E::GlobalCoordinate>()
    \n-
    226 );
    \n-
    227};
    \n-
    \n-
    228
    \n-
    230template<class E>
    \n-
    \n-
    231static constexpr bool isEntitySet()
    \n-
    232{ return models<Concept::EntitySet, E>(); }
    \n-
    \n-
    233
    \n-
    234
    \n-
    235
    \n-
    236// GridFunction concept ##############################################
    \n-
    237template<class Signature, class EntitySet>
    \n-\n-
    239
    \n-
    249template<class Range, class Domain, class EntitySet>
    \n-
    \n-
    250struct GridFunction<Range(Domain), EntitySet> :
    \n-
    251 Refines<Dune::Functions::Concept::Function<Range(Domain)> >
    \n-
    252{
    \n-
    253 using LocalSignature = Range(typename EntitySet::LocalCoordinate);
    \n-
    254 using LocalContext = typename EntitySet::Element;
    \n-
    255
    \n-
    256 template<class F>
    \n-
    257 auto require(F&& f) -> decltype(
    \n-
    258 localFunction(f),
    \n-
    259 f.entitySet(),
    \n-
    260 requireConcept<LocalFunction<LocalSignature, LocalContext>>(localFunction(f)),
    \n-
    261 requireConcept<Concept::EntitySet, EntitySet>(),
    \n-
    262 requireConvertible<EntitySet>(f.entitySet()),
    \n-
    263 requireConvertible<typename EntitySet::GlobalCoordinate, Domain>()
    \n-
    264 );
    \n-
    265};
    \n-
    \n-
    266
    \n-
    268template<class F, class Signature, class EntitySet>
    \n-
    \n-
    269static constexpr bool isGridFunction()
    \n-
    270{ return models<Concept::GridFunction<Signature, EntitySet>, F>(); }
    \n-
    \n-
    271
    \n-
    272
    \n-
    273// DifferentiableGridFunction concept ##############################################
    \n-
    274template<class Signature, class EntitySet, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-\n-
    276
    \n-
    289template<class Range, class Domain, class EntitySet, template<class> class DerivativeTraits>
    \n-
    \n-
    290struct DifferentiableGridFunction<Range(Domain), EntitySet, DerivativeTraits> :
    \n-
    291 Refines<
    \n-
    292 Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,
    \n-
    293 Dune::Functions::Concept::GridFunction<Range(Domain),EntitySet>
    \n-
    294 >
    \n-
    295{
    \n-
    296 using LocalSignature = Range(typename EntitySet::LocalCoordinate);
    \n-
    297 using LocalContext = typename EntitySet::Element;
    \n-
    298
    \n-
    299 template<class R>
    \n-\n-
    301
    \n-
    302 template<class F>
    \n-
    303 auto require(F&& f) -> decltype(
    \n-
    304 requireConcept<DifferentiableLocalFunction<LocalSignature, LocalContext, LocalDerivativeTraits>>(localFunction(f))
    \n-
    305 );
    \n-
    306};
    \n-
    \n-
    307
    \n-
    309template<class F, class Signature, class EntitySet, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-
    \n-
    310static constexpr bool isDifferentiableGridFunction()
    \n-
    311{ return models<Concept::DifferentiableGridFunction<Signature, EntitySet, DerivativeTraits>, F>(); }
    \n-
    \n-
    312
    \n-
    313
    \n-
    314
    \n-
    315// GridViewFunction concept ##############################################
    \n-
    316template<class Signature, class GridView>
    \n-\n-
    318
    \n-
    331template<class Range, class Domain, class GridView>
    \n-
    \n-
    332struct GridViewFunction<Range(Domain), GridView> :
    \n-
    333 Refines<Dune::Functions::Concept::GridFunction<Range(Domain), GridViewEntitySet<GridView,0>>>
    \n-
    334{
    \n-
    335 template<class F>
    \n-
    336 auto require(F&& f) -> decltype(
    \n-
    337 0 // We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet
    \n-
    338 );
    \n-
    339};
    \n-
    \n-
    340
    \n-
    342template<class F, class Signature, class GridView>
    \n-
    \n-
    343static constexpr bool isGridViewFunction()
    \n-
    344{ return models<Concept::GridViewFunction<Signature, GridView>, F>(); }
    \n-
    \n-
    345
    \n-
    346
    \n-
    347// DifferentiableGridViewFunction concept ##############################################
    \n-
    348template<class Signature, class GridView, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-\n-
    350
    \n-
    364template<class Range, class Domain, class GridView, template<class> class DerivativeTraits>
    \n-
    \n-
    365struct DifferentiableGridViewFunction<Range(Domain), GridView, DerivativeTraits> :
    \n-
    366 Refines<Dune::Functions::Concept::DifferentiableGridFunction<Range(Domain), GridViewEntitySet<GridView,0>, DerivativeTraits>>
    \n-
    367{
    \n-
    368 template<class F>
    \n-
    369 auto require(F&& f) -> decltype(
    \n-
    370 0 // We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet
    \n-
    371 );
    \n-
    372};
    \n-
    \n-
    373
    \n-
    375template<class F, class Signature, class GridView, template<class> class DerivativeTraits = DefaultDerivativeTraits>
    \n-
    \n-
    376static constexpr bool isDifferentiableGridViewFunction()
    \n-
    377{ return models<Concept::DifferentiableGridViewFunction<Signature, GridView, DerivativeTraits>, F>(); }
    \n-
    \n-
    378
    \n-
    379
    \n-
    380
    \n-
    381}}} // namespace Dune::Functions::Concept
    \n-
    382
    \n-
    383#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:269
    \n-
    static constexpr bool isDifferentiableLocalFunction()
    Check if F models the DifferentiableLocalFunction concept with given signature and local context.
    Definition functionconcepts.hh:204
    \n-
    static constexpr bool isFunction()
    Check if F models the Function concept with given signature.
    Definition functionconcepts.hh:88
    \n-
    static constexpr bool isDifferentiableGridViewFunction()
    Check if F models the DifferentiableGridViewFunction concept with given signature.
    Definition functionconcepts.hh:376
    \n-
    static constexpr bool isDifferentiableFunction()
    Check if F models the DifferentiableFunction concept with given signature.
    Definition functionconcepts.hh:127
    \n-
    static constexpr bool isGridViewFunction()
    Check if F models the GridViewFunction concept with given signature.
    Definition functionconcepts.hh:343
    \n-
    static constexpr bool isEntitySet()
    Check if F models the GridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:231
    \n-
    static constexpr bool isDifferentiableGridFunction()
    Check if F models the DifferentiableGridFunction concept with given signature and entity set.
    Definition functionconcepts.hh:310
    \n-
    static constexpr bool isLocalFunction()
    Check if F models the LocalFunction concept with given signature and local context.
    Definition functionconcepts.hh:166
    \n-
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:39
    \n-
    static constexpr auto isCallable()
    Check if f is callable with given argument list.
    Definition functionconcepts.hh:47
    \n+
    \n+
    176 const EntitySet& entitySet() const
    \n+
    177 {
    \n+
    178 return this->asInterface().wrappedEntitySet();
    \n+
    179 }
    \n+
    \n+
    180};
    \n+
    \n+
    181
    \n+
    182
    \n+
    183
    \n+
    184}} // namespace Dune::Functions
    \n+
    185
    \n+
    186
    \n+
    187
    \n+
    188#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH
    \n+\n+\n+\n+\n+\n+\n+\n
    Definition polynomial.hh:10
    \n-
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:37
    \n-
    Concept objects that can be called with given argument list.
    Definition functionconcepts.hh:33
    \n-
    auto require(F &&f) -> decltype(f(std::declval< Args >()...))
    \n-
    Definition functionconcepts.hh:66
    \n-
    auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval< Domain >())))
    \n-
    Definition functionconcepts.hh:100
    \n-
    typename SignatureTraits< Range(Domain)>::template DerivativeSignature< DerivativeTraits > DerivativeSignature
    Definition functionconcepts.hh:116
    \n-
    auto require(F &&f) -> decltype(derivative(f), requireConcept< Function< DerivativeSignature > >(derivative(f)))
    \n-
    Definition functionconcepts.hh:139
    \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:220
    \n-
    auto require(E &&f) -> decltype(requireType< typename E::Element >(), requireType< typename E::LocalCoordinate >(), requireType< typename E::GlobalCoordinate >())
    \n-
    Definition functionconcepts.hh:238
    \n-
    typename EntitySet::Element LocalContext
    Definition functionconcepts.hh:254
    \n-
    Range(typename EntitySet::LocalCoordinate) LocalSignature
    Definition functionconcepts.hh:253
    \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:300
    \n-
    auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction< LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))
    \n-
    Range(typename EntitySet::LocalCoordinate) LocalSignature
    Definition functionconcepts.hh:296
    \n-\n-
    Definition functionconcepts.hh:317
    \n-\n-\n-\n-
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n-
    Definition signature.hh:102
    \n+
    Definition localfunction.hh:30
    \n+
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:165
    \n+
    Definition gridfunction.hh:32
    \n+
    friend DerivativeInterface derivative(const GridFunction &t)
    Get derivative of wrapped function.
    Definition gridfunction.hh:151
    \n+\n+
    const EntitySet & entitySet() const
    Get associated EntitySet.
    Definition gridfunction.hh:176
    \n+
    GridFunction(F &&f)
    Construct from function.
    Definition gridfunction.hh:125
    \n+
    friend LocalFunctionInterface localFunction(const GridFunction &t)
    Get local function of wrapped function.
    Definition gridfunction.hh:165
    \n
    Derivative traits for local functions.
    Definition localderivativetraits.hh:28
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,459 +1,197 @@\n dune-functions\u00a02.9.0\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+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\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#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n-4#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n 5\n-6#include \n-7#include \n-8\n-9#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh>\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bl_\bo_\bc_\ba_\bl_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-11#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-12\n-13namespace _\bD_\bu_\bn_\be {\n-14namespace Functions {\n-15namespace Concept {\n-16\n-17using namespace Dune::Concept;\n+6#include \n+7\n+8#include \n+9\n+10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n+11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\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#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+13#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+14#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+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/_\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+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/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n+17\n 18\n 19\n-20\n-21// Callable concept\n-############################################################\n+20namespace _\bD_\bu_\bn_\be {\n+21namespace Functions {\n 22\n 23\n-31template\n-_\b3_\b2struct _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be\n-33{\n-34 template\n-_\b3_\b5 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-36 f(std::declval()...)\n-37 );\n-38};\n-39\n-46template\n-_\b4_\b7static constexpr auto _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be()\n-48{ return models<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be, F>(); }\n-49\n-56template\n-_\b5_\b7static constexpr auto _\bi_\bs_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be(F&&, Args&&...)\n-58{\n-59 return models<_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be, F>();\n-60}\n-61\n+24\n+25/*\n+26 * Default implementation is empty\n+27 * The actual implementation is only given if Signature is an type\n+28 * describing a function signature as Range(Domain).\n+29 */\n+30template class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+_\b3_\b1class _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+32{};\n+33\n+34\n+35\n+36namespace Imp\n+37{\n+38\n+40 template class DerivativeTraits, size_t\n+bufferSize>\n+41 struct GridFunctionTraits :\n+42 DifferentiableFunctionTraits\n+43 {\n+44 protected:\n+45 using Base=DifferentiableFunctionTraits;\n+46\n+47 public:\n+49 using EntitySet = ES;\n+50\n+52 using Element = typename EntitySet::Element;\n+53\n+55 using DerivativeSignature = typename Base::DerivativeSignature;\n+56\n+58 using DerivativeInterface = _\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+59\n+61 using LocalSignature = typename Base::Range(typename EntitySet::\n+LocalCoordinate);\n 62\n-63\n-64// Function concept\n-############################################################\n-65template\n-_\b6_\b6struct _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-67\n-76template\n-_\b7_\b7struct _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn : Refines >\n-78{\n-79 template\n-_\b8_\b0 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-81 // F models Function if the result of F(Domain) is implicitly\n-convertible to Range\n-82 requireConvertible(f(std::declval()))\n-83 );\n-84};\n-85\n-87template\n-_\b8_\b8static constexpr bool _\bi_\bs_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-89{ return models, F>(); }\n-90\n-92template class DerivativeTraits>\n-_\b9_\b3static 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-94{ return models, F>(); }\n-95\n-96\n-97\n-98// DifferentiableFunction concept\n-##############################################\n-99template 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_\b0struct _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-101\n-113template class DerivativeTraits>\n-_\b1_\b1_\b4struct _\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-115{\n-_\b1_\b1_\b6 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-117\n-118 template\n-_\b1_\b1_\b9 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-120 _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f),\n-121 requireConcept>(_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(f))\n-122 );\n-123};\n-124\n-126template 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_\b2_\b7static 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-128{ return models, F>(); }\n-129\n-131template class DerivativeTraits>\n-_\b1_\b3_\b2static 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-133{ return models, F>(); }\n-134\n-135\n-136\n-137// LocalFunction concept ##############################################\n-138template\n-_\b1_\b3_\b9struct _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-140\n-150template\n-_\b1_\b5_\b1struct _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-152 Refines >\n-153{\n-154 template\n-_\b1_\b5_\b5 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-156 f.bind(std::declval()),\n-157 f.unbind(),\n-158 requireConvertible(f.bound()),\n-159 f.localContext(),\n-160 requireConvertible(f.localContext())\n-161 );\n-162};\n-163\n-165template\n-_\b1_\b6_\b6static constexpr bool _\bi_\bs_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-167{ return models, F>(); }\n-168\n-169\n-170// DifferentiableLocalFunction concept\n-##############################################\n-171template 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_\b2struct _\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-173\n-186template\n-class DerivativeTraits>\n-_\b1_\b8_\b7struct _\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-188 Refines<\n-189 Dune::Functions::Concept::DifferentiableFunction,\n-190 Dune::Functions::Concept::LocalFunction\n-191 >\n-192{\n-193 template\n-_\b1_\b9_\b4 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-195 f.bind(std::declval()),\n-196 f.unbind(),\n-197 f.localContext(),\n-198 requireConvertible(f.localContext())\n-199 );\n-200};\n-201\n-203template 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_\b4static 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-205{ return models, F>(); }\n-206\n-207\n-208// EntitySet concept ##############################################\n-209\n-_\b2_\b1_\b9struct _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n-220{\n-221 template\n-_\b2_\b2_\b2 auto _\br_\be_\bq_\bu_\bi_\br_\be(E&& f) -> decltype(\n-223 requireType(),\n-224 requireType(),\n-225 requireType()\n-226 );\n-227};\n-228\n-230template\n-_\b2_\b3_\b1static constexpr bool _\bi_\bs_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt()\n-232{ return models(); }\n-233\n-234\n-235\n-236// GridFunction concept ##############################################\n-237template\n-_\b2_\b3_\b8struct _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-239\n-249template\n-_\b2_\b5_\b0struct _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-251 Refines >\n-252{\n-_\b2_\b5_\b3 using _\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(typename EntitySet::LocalCoordinate);\n-_\b2_\b5_\b4 using _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt = typename EntitySet::Element;\n-255\n-256 template\n-_\b2_\b5_\b7 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-258 localFunction(f),\n-259 f.entitySet(),\n-260 requireConcept>(localFunction\n-(f)),\n-261 requireConcept(),\n-262 requireConvertible(f.entitySet()),\n-263 requireConvertible()\n-264 );\n-265};\n-266\n-268template\n-_\b2_\b6_\b9static constexpr bool _\bi_\bs_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-270{ return models, F>(); }\n-271\n-272\n-273// DifferentiableGridFunction concept\n-##############################################\n-274template 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_\b5struct _\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-276\n-289template class\n-DerivativeTraits>\n-_\b2_\b9_\b0struct _\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-291 Refines<\n-292 Dune::Functions::Concept::DifferentiableFunction,\n-293 Dune::Functions::Concept::GridFunction\n-294 >\n-295{\n-_\b2_\b9_\b6 using _\bL_\bo_\bc_\ba_\bl_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be = Range(typename EntitySet::LocalCoordinate);\n-_\b2_\b9_\b7 using _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt = typename EntitySet::Element;\n-298\n-299 template\n-_\b3_\b0_\b0 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+64 template\n+65 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-301\n-302 template\n-_\b3_\b0_\b3 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-304 requireConcept>(localFunction(f))\n-305 );\n-306};\n-307\n-309template 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_\b0static 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-311{ return models, F>(); }\n-312\n-313\n-314\n-315// GridViewFunction concept ##############################################\n-316template\n-_\b3_\b1_\b7struct _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn;\n-318\n-331template\n-_\b3_\b3_\b2struct _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n-333 Refines>>\n-334{\n-335 template\n-_\b3_\b3_\b6 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-337 0 // We don't need to check any further expressions, because a\n-GridViewFunction is just a GridFunction with a special EntitySet\n-338 );\n-339};\n-340\n-342template\n-_\b3_\b4_\b3static constexpr bool _\bi_\bs_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn()\n-344{ return models, F>(); }\n-345\n-346\n-347// DifferentiableGridViewFunction concept\n-##############################################\n-348template 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_\b4_\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-350\n-364template class\n-DerivativeTraits>\n-_\b3_\b6_\b5struct _\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-366 Refines, DerivativeTraits>>\n-367{\n-368 template\n-_\b3_\b6_\b9 auto _\br_\be_\bq_\bu_\bi_\br_\be(F&& f) -> decltype(\n-370 0 // We don't need to check any further expressions, because a\n-GridViewFunction is just a GridFunction with a special EntitySet\n-371 );\n-372};\n-373\n-375template class\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_\b7_\b6static 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-377{ return models, F>(); }\n-378\n-379\n-380\n-381}}} // namespace Dune::Functions::Concept\n-382\n-383#endif // DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n-_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh\n+66\n+68 using LocalFunctionTraits = typename Dune::Functions::Imp::\n+LocalFunctionTraits;\n+69\n+71 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+72\n+74 using Concept = GridFunctionWrapperInterface;\n+75\n+77 template\n+78 using Model = GridFunctionWrapperImplementation;\n+79 };\n+80}\n+81\n+82\n+83\n+95template class\n+DerivativeTraits, size_t bufferSize>\n+_\b9_\b6class _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+97 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n+98 typename Imp::GridFunctionTraits::Concept,\n+99 Imp::GridFunctionTraits::\n+template Model>\n+100{\n+101 using Traits = Imp::GridFunctionTraits;\n+102\n+103 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+104\n+105 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+106\n+107 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+108\n+109 using EntitySet = typename Traits::EntitySet;\n+110\n+111public:\n+112\n+124 template = 0 >\n+_\b1_\b2_\b5 _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n+126 _\bB_\ba_\bs_\be(std::forward(f))\n+127 {\n+128 static_assert(Dune::Functions::Concept::isGridFunction(), \"Trying to construct a GridFunction from type that does not model\n+the GridFunction concept\");\n+129 }\n+130\n+_\b1_\b3_\b1 _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n+132\n+_\b1_\b3_\b8 Range operator() (const Domain& x) const\n+139 {\n+140 return this->asInterface().operator()(x);\n+141 }\n+142\n+_\b1_\b5_\b1 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+152 {\n+153 return t.asInterface().derivative();\n+154 }\n+155\n+_\b1_\b6_\b5 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+166 {\n+167 return t.asInterface().wrappedLocalFunction();\n+168 }\n+169\n+_\b1_\b7_\b6 const EntitySet& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n+177 {\n+178 return this->asInterface().wrappedEntitySet();\n+179 }\n+180};\n+181\n+182\n+183\n+184}} // namespace Dune::Functions\n+185\n+186\n+187\n+188#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n _\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-_\bs_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\bi_\bs_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-static constexpr bool isGridFunction()\n-Check if F models the GridFunction concept with given signature and entity set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn functionconcepts.hh:269\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:204\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:88\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:376\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:127\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:343\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:231\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:310\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:166\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:39\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:47\n+_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n-_\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: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\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:33\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:66\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:100\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:116\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:139\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:172\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:220\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:238\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:254\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:253\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:275\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: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:_\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:296\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:297\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:317\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:349\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:56\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:102\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:30\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:165\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:32\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:151\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:176\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:125\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:165\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:28\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: staticforloop.hh File Reference\n+dune-functions: composedgridfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,43 +65,54 @@\n \n \n \n \n \n \n \n
    \n \n-
    staticforloop.hh File Reference
    \n+
    composedgridfunction.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 <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
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\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 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 OF , class... IF>
    auto Dune::Functions::makeComposedGridFunction (OF &&outerFunction, IF &&... innerFunction)
     Create a ComposedGridFunction that composes grid-functions with another function.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,35 @@\n dune-functions\u00a02.9.0\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+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+composedgridfunction.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bO_\bF_\b,_\b _\bI_\bF_\b _\b>\n+\u00a0 Composition of grid functions with another function. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bs_\bt_\ba_\bt_\bi_\bc_\bF_\bi_\bn_\bd_\bI_\bn_\bR_\ba_\bn_\bg_\be (F &&f, Args &&... args)\n-\u00a0 Static find loop.\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn (OF &&outerFunction, IF &&...\n+ innerFunction)\n+\u00a0 Create a _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn that composes grid-functions with another\n+ function.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"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: staticforloop.hh Source File\n+dune-functions: composedgridfunction.hh Source File\n \n \n \n \n \n \n \n@@ -70,81 +70,216 @@\n
    \n \n \n \n \n \n \n
    \n-
    staticforloop.hh
    \n+
    composedgridfunction.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#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH
    \n+
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH
    \n
    5
    \n-
    6
    \n-
    7#include <dune/common/concept.hh>
    \n+
    6#include <type_traits>
    \n+
    7#include <tuple>
    \n
    8
    \n-\n-\n+
    9#include <dune/common/referencehelper.hh>
    \n+
    10#include <dune/common/typeutilities.hh>
    \n
    11
    \n-
    12
    \n-
    13namespace Dune {
    \n-
    14namespace Functions {
    \n+\n+\n+\n
    15
    \n-
    16namespace Imp {
    \n-
    17
    \n-
    18template<class ST, ST begin, ST end>
    \n-
    19struct StaticFindInRange
    \n-
    20{
    \n-
    21 template<class F, class...Args>
    \n-
    22 static void apply(F&& f, Args&&... args)
    \n-
    23 {
    \n-
    24 if (f(std::integral_constant<ST, begin>(), std::forward<Args>(args)...))
    \n-
    25 return;
    \n-
    26 StaticFindInRange<ST, begin+1, end>::apply(std::forward<F>(f), std::forward<Args>(args)...);
    \n-
    27 }
    \n-
    28};
    \n-
    29
    \n-
    30template<class ST, ST end>
    \n-
    31struct StaticFindInRange<ST, end, end>
    \n-
    32{
    \n-
    33 template<class F, class...Args>
    \n-
    34 static void apply(F&& f, Args&&...)
    \n-
    35 {}
    \n-
    36};
    \n-
    37
    \n-
    38} //end namespace Imp
    \n-
    39
    \n-
    40
    \n-
    41
    \n-
    55template<std::size_t begin_t, std::size_t end_t, class F, class... Args>
    \n-
    \n-
    56void staticFindInRange(F&& f, Args&&... args)
    \n-
    57{
    \n-
    58 Imp::StaticFindInRange<std::size_t, begin_t, end_t>::apply(std::forward<F>(f), std::forward<Args>(args)...);
    \n-
    59}
    \n-
    \n+
    16
    \n+
    17namespace Dune {
    \n+
    18namespace Functions {
    \n+
    19
    \n+
    20
    \n+
    21
    \n+
    40template<class OF, class... IF>
    \n+
    \n+\n+
    42{
    \n+
    43 using InnerFunctions = std::tuple<IF...>;
    \n+
    44 using InnerLocalFunctions = std::tuple<decltype(localFunction(resolveRef(std::declval<const IF&>())))...>;
    \n+
    45
    \n+
    46 template<std::size_t i>
    \n+
    47 using InnerFunction = std::decay_t<ResolveRef_t<std::tuple_element_t<i, InnerFunctions>>>;
    \n+
    48
    \n+
    49 using OuterFunction = OF;
    \n+
    50
    \n+
    51public:
    \n+
    52
    \n+
    53 using EntitySet = typename InnerFunction<0>::EntitySet;
    \n+
    54 using Element = typename EntitySet::Element;
    \n+
    55
    \n+
    56 using Domain = typename EntitySet::GlobalCoordinate;
    \n+
    57 using LocalDomain = typename EntitySet::LocalCoordinate;
    \n+
    58
    \n+
    59 using Range = decltype(std::declval<OF>()(std::declval<IF>()(std::declval<Domain>())...));
    \n
    60
    \n-
    61
    \n-
    62} // namespace Dune::Functions
    \n-
    63} // namespace Dune
    \n+
    61private:
    \n+
    62
    \n+
    63 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet, DefaultDerivativeTraits, 16>;
    \n
    64
    \n-
    65
    \n-
    66
    \n-
    67#endif //DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
    \n-\n-
    void staticFindInRange(F &&f, Args &&... args)
    Static find loop.
    Definition staticforloop.hh:56
    \n+
    65 class LocalFunction
    \n+
    66 {
    \n+
    67 public:
    \n+
    74 LocalFunction(const ComposedGridFunction& globalFunction) :
    \n+
    75 globalFunction_(globalFunction),
    \n+
    76 innerLocalFunctions_(globalFunction.innerLocalFunctions())
    \n+
    77 {}
    \n+
    78
    \n+
    88 void bind(const Element& element)
    \n+
    89 {
    \n+
    90 std::apply([&](auto&... innerFunction) {
    \n+
    91 (innerFunction.bind(element),...);
    \n+
    92 }, innerLocalFunctions_);
    \n+
    93 }
    \n+
    94
    \n+
    96 void unbind()
    \n+
    97 {
    \n+
    98 std::apply([&](auto&... innerFunction) {
    \n+
    99 (innerFunction.unbind(),...);
    \n+
    100 }, innerLocalFunctions_);
    \n+
    101 }
    \n+
    102
    \n+
    105 bool bound() const
    \n+
    106 {
    \n+
    107 return std::apply([](const auto&... innerFunction) {
    \n+
    108 return (innerFunction.bound() && ...);
    \n+
    109 }, innerLocalFunctions_);
    \n+
    110 }
    \n+
    111
    \n+
    121 Range operator()(const LocalDomain& x) const
    \n+
    122 {
    \n+
    123 return std::apply([&](const auto&... innerFunction) {
    \n+
    124 return globalFunction_.outerFunction_(innerFunction(x)...);
    \n+
    125 }, innerLocalFunctions_);
    \n+
    126 }
    \n+
    127
    \n+
    137 const Element& localContext() const
    \n+
    138 {
    \n+
    139 return std::get<0>(innerLocalFunctions_).localContext();
    \n+
    140 }
    \n+
    141
    \n+
    143 friend typename Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction& t)
    \n+
    144 {
    \n+
    145 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    146 }
    \n+
    147
    \n+
    148 private:
    \n+
    149 const ComposedGridFunction& globalFunction_;
    \n+
    150 InnerLocalFunctions innerLocalFunctions_;
    \n+
    151 };
    \n+
    152
    \n+
    153public:
    \n+
    154
    \n+
    164 template<class OFT, class... IFT,
    \n+
    165 disableCopyMove<ComposedGridFunction, OFT> = 0,
    \n+
    166 std::enable_if_t<(sizeof...(IFT) > 0), int> = 0>
    \n+
    \n+
    167 ComposedGridFunction(OFT&& outerFunction, IFT&&... innerFunctions) :
    \n+
    168 outerFunction_(std::forward<OFT>(outerFunction)),
    \n+
    169 innerFunctions_(std::forward<IFT>(innerFunctions)...)
    \n+
    170 {}
    \n+
    \n+
    171
    \n+
    \n+
    173 Range operator()(const Domain& x) const
    \n+
    174 {
    \n+
    175 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    176 }
    \n+
    \n+
    177
    \n+
    \n+\n+
    180 {
    \n+
    181 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    182 }
    \n+
    \n+
    183
    \n+
    \n+
    190 friend LocalFunction localFunction(const ComposedGridFunction& cgf)
    \n+
    191 {
    \n+
    192 return LocalFunction(cgf);
    \n+
    193 }
    \n+
    \n+
    194
    \n+
    \n+
    205 const EntitySet& entitySet() const
    \n+
    206 {
    \n+
    207 return resolveRef(std::get<0>(innerFunctions_)).entitySet();
    \n+
    208 }
    \n+
    \n+
    209
    \n+
    210protected:
    \n+
    211
    \n+
    \n+
    212 InnerLocalFunctions innerLocalFunctions() const
    \n+
    213 {
    \n+
    214 return std::apply([&](const auto&... innerFunction) {
    \n+
    215 return std::make_tuple(localFunction(resolveRef(innerFunction))...);
    \n+
    216 }, innerFunctions_);
    \n+
    217 }
    \n+
    \n+
    218
    \n+
    219 OuterFunction outerFunction_;
    \n+
    220 InnerFunctions innerFunctions_;
    \n+
    221};
    \n+
    \n+
    222
    \n+
    223
    \n+
    224
    \n+
    247template<class OF, class... IF>
    \n+
    \n+
    248auto makeComposedGridFunction(OF&& outerFunction, IF&&... innerFunction)
    \n+
    249{
    \n+
    250 using ComposedGridFunctionType = ComposedGridFunction<std::decay_t<OF>, std::decay_t<IF>...>;
    \n+
    251 return ComposedGridFunctionType(std::forward<OF>(outerFunction), std::forward<IF>(innerFunction)...);
    \n+
    252}
    \n+
    \n+
    253
    \n+
    254
    \n+
    255
    \n+
    256}} // namespace Dune::Functions
    \n+
    257
    \n+
    258
    \n+
    259
    \n+
    260#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH
    \n+\n+\n+\n+
    TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)
    Obtain derivative of TrigonometricFunction function.
    Definition trigonometricfunction.hh:39
    \n+
    auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)
    Create a ComposedGridFunction that composes grid-functions with another function.
    Definition composedgridfunction.hh:248
    \n
    Definition polynomial.hh:10
    \n-\n+
    decltype(auto) resolveRef(T &&t)
    This is an alias for Dune::resolveRef.
    Definition referencehelper.hh:37
    \n+
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:37
    \n+
    Composition of grid functions with another function.
    Definition composedgridfunction.hh:42
    \n+
    OuterFunction outerFunction_
    Definition composedgridfunction.hh:219
    \n+
    InnerFunctions innerFunctions_
    Definition composedgridfunction.hh:220
    \n+
    ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)
    Create ComposedGridFunction.
    Definition composedgridfunction.hh:167
    \n+
    const EntitySet & entitySet() const
    Return the EntitySet associated to this composed grid-function.
    Definition composedgridfunction.hh:205
    \n+
    typename InnerFunction< 0 >::EntitySet EntitySet
    Definition composedgridfunction.hh:53
    \n+
    typename EntitySet::LocalCoordinate LocalDomain
    Definition composedgridfunction.hh:57
    \n+
    typename EntitySet::Element Element
    Definition composedgridfunction.hh:54
    \n+
    InnerLocalFunctions innerLocalFunctions() const
    Definition composedgridfunction.hh:212
    \n+
    friend LocalFunction localFunction(const ComposedGridFunction &cgf)
    Create a local-function of this composed grid-function.
    Definition composedgridfunction.hh:190
    \n+
    decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >())...)) Range
    Definition composedgridfunction.hh:59
    \n+
    typename EntitySet::GlobalCoordinate Domain
    Definition composedgridfunction.hh:56
    \n+
    Range operator()(const Domain &x) const
    Evaluation of the composed grid function in coordinates x
    Definition composedgridfunction.hh:173
    \n+
    friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)
    Not implemented.
    Definition composedgridfunction.hh:179
    \n+
    Definition gridfunction.hh:32
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,75 +1,247 @@\n dune-functions\u00a02.9.0\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+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+composedgridfunction.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#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n-4#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH\n+3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n+4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n 5\n-6\n-7#include \n+6#include \n+7#include \n 8\n-9#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 <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+9#include \n+10#include \n 11\n-12\n-13namespace _\bD_\bu_\bn_\be {\n-14namespace Functions {\n+12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\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+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_\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+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\n-16namespace Imp {\n-17\n-18template\n-19struct StaticFindInRange\n-20{\n-21 template\n-22 static void apply(F&& f, Args&&... args)\n-23 {\n-24 if (f(std::integral_constant(), std::forward(args)...))\n-25 return;\n-26 StaticFindInRange::apply(std::forward(f), std::\n-forward(args)...);\n-27 }\n-28};\n-29\n-30template\n-31struct StaticFindInRange\n-32{\n-33 template\n-34 static void apply(F&& f, Args&&...)\n-35 {}\n-36};\n-37\n-38} //end namespace Imp\n-39\n-40\n-41\n-55template\n-_\b5_\b6void _\bs_\bt_\ba_\bt_\bi_\bc_\bF_\bi_\bn_\bd_\bI_\bn_\bR_\ba_\bn_\bg_\be(F&& f, Args&&... args)\n-57{\n-58 Imp::StaticFindInRange::apply(std::forward\n-(f), std::forward(args)...);\n-59}\n+16\n+17namespace _\bD_\bu_\bn_\be {\n+18namespace Functions {\n+19\n+20\n+21\n+40template\n+_\b4_\b1class _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+42{\n+43 using InnerFunctions = std::tuple;\n+44 using InnerLocalFunctions = std::tuple())))...>;\n+45\n+46 template\n+47 using InnerFunction = std::decay_t>>;\n+48\n+49 using OuterFunction = OF;\n+50\n+51public:\n+52\n+_\b5_\b3 using _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt = typename InnerFunction<0>::EntitySet;\n+_\b5_\b4 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename EntitySet::Element;\n+55\n+_\b5_\b6 using _\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::GlobalCoordinate;\n+_\b5_\b7 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::LocalCoordinate;\n+58\n+_\b5_\b9 using _\bR_\ba_\bn_\bg_\be = decltype(std::declval()(std::declval()(std::\n+declval())...));\n 60\n-61\n-62} // namespace Dune::Functions\n-63} // namespace Dune\n+61private:\n+62\n+63 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 64\n-65\n-66\n-67#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:56\n+65 class LocalFunction\n+66 {\n+67 public:\n+74 LocalFunction(const _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& globalFunction) :\n+75 globalFunction_(globalFunction),\n+76 innerLocalFunctions_(globalFunction._\bi_\bn_\bn_\be_\br_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs())\n+77 {}\n+78\n+88 void bind(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n+89 {\n+90 std::apply([&](auto&... innerFunction) {\n+91 (innerFunction.bind(element),...);\n+92 }, innerLocalFunctions_);\n+93 }\n+94\n+96 void unbind()\n+97 {\n+98 std::apply([&](auto&... innerFunction) {\n+99 (innerFunction.unbind(),...);\n+100 }, innerLocalFunctions_);\n+101 }\n+102\n+105 bool bound() const\n+106 {\n+107 return std::apply([](const auto&... innerFunction) {\n+108 return (innerFunction.bound() && ...);\n+109 }, innerLocalFunctions_);\n+110 }\n+111\n+121 _\bR_\ba_\bn_\bg_\be operator()(const _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn& x) const\n+122 {\n+123 return std::apply([&](const auto&... innerFunction) {\n+124 return globalFunction_.outerFunction_(innerFunction(x)...);\n+125 }, innerLocalFunctions_);\n+126 }\n+127\n+137 const _\bE_\bl_\be_\bm_\be_\bn_\bt& localContext() const\n+138 {\n+139 return std::get<0>(innerLocalFunctions_).localContext();\n+140 }\n+141\n+143 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+144 {\n+145 DUNE_THROW(NotImplemented,\"not implemented\");\n+146 }\n+147\n+148 private:\n+149 const _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& globalFunction_;\n+150 InnerLocalFunctions innerLocalFunctions_;\n+151 };\n+152\n+153public:\n+154\n+164 template = 0,\n+166 std::enable_if_t<(sizeof...(IFT) > 0), int> = 0>\n+_\b1_\b6_\b7 _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(OFT&& outerFunction, IFT&&... innerFunctions) :\n+168 _\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_(std::forward(outerFunction)),\n+169 _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_(std::forward(innerFunctions)...)\n+170 {}\n+171\n+_\b1_\b7_\b3 _\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+174 {\n+175 DUNE_THROW(NotImplemented,\"not implemented\");\n+176 }\n+177\n+_\b1_\b7_\b9 friend typename _\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be _\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const\n+_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& t)\n+180 {\n+181 DUNE_THROW(NotImplemented,\"not implemented\");\n+182 }\n+183\n+_\b1_\b9_\b0 friend LocalFunction _\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn& cgf)\n+191 {\n+192 return LocalFunction(cgf);\n+193 }\n+194\n+_\b2_\b0_\b5 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n+206 {\n+207 return _\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf(std::get<0>(_\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_)).entitySet();\n+208 }\n+209\n+210protected:\n+211\n+_\b2_\b1_\b2 InnerLocalFunctions _\bi_\bn_\bn_\be_\br_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs() const\n+213 {\n+214 return std::apply([&](const auto&... innerFunction) {\n+215 return std::make_tuple(_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf(innerFunction))...);\n+216 }, _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_);\n+217 }\n+218\n+_\b2_\b1_\b9 OuterFunction _\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_;\n+_\b2_\b2_\b0 InnerFunctions _\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_;\n+221};\n+222\n+223\n+224\n+247template\n+_\b2_\b4_\b8auto _\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(OF&& outerFunction, IF&&... innerFunction)\n+249{\n+250 using ComposedGridFunctionType = _\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\bs_\bt_\bd_\b:_\b:_\bd_\be_\bc_\ba_\by_\b__\bt_\b<_\bO_\bF_\b>,\n+std::decay_t...>;\n+251 return ComposedGridFunctionType(std::forward(outerFunction), std::\n+forward(innerFunction)...);\n+252}\n+253\n+254\n+255\n+256}} // namespace Dune::Functions\n+257\n+258\n+259\n+260#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\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:39\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bm_\ba_\bk_\be_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)\n+Create a ComposedGridFunction that composes grid-functions with another\n+function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:248\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf\n+decltype(auto) resolveRef(T &&t)\n+This is an alias for Dune::resolveRef.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:37\n+_\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:37\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+Composition of grid functions with another function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:42\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bu_\bt_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_\n+OuterFunction outerFunction_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:219\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bi_\bn_\bn_\be_\br_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b_\n+InnerFunctions innerFunctions_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:220\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)\n+Create ComposedGridFunction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:167\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+const EntitySet & entitySet() const\n+Return the EntitySet associated to this composed grid-function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:205\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt\n+typename InnerFunction< 0 >::EntitySet EntitySet\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:53\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n+typename EntitySet::LocalCoordinate LocalDomain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:57\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename EntitySet::Element Element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:54\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bi_\bn_\bn_\be_\br_\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+InnerLocalFunctions innerLocalFunctions() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:212\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+friend LocalFunction localFunction(const ComposedGridFunction &cgf)\n+Create a local-function of this composed grid-function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:190\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >\n+())...)) Range\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:59\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn\n+typename EntitySet::GlobalCoordinate Domain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:56\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+Range operator()(const Domain &x) const\n+Evaluation of the composed grid function in coordinates x\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:173\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be_\bd_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)\n+Not implemented.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn composedgridfunction.hh:179\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: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/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: defaultderivativetraits.hh File Reference\n+dune-functions: facenormalgridfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,50 +65,39 @@\n \n \n \n \n \n \n \n
    \n \n-
    defaultderivativetraits.hh File Reference
    \n+
    facenormalgridfunction.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+#include <optional>
    \n+#include <dune/common/exceptions.hh>
    \n+#include <dune/common/typeutilities.hh>
    \n+#include <dune/common/rangeutilities.hh>
    \n+#include <dune/geometry/referenceelements.hh>
    \n+#include <dune/functions/gridfunctions/gridfunction.hh>
    \n+#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \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::FaceNormalGridFunction< GV >
     Grid function implementing the piecewise element face normal. More...
     
    \n \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,41 +1,28 @@\n dune-functions\u00a02.9.0\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+ * _\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-defaultderivativetraits.hh File Reference\n+facenormalgridfunction.hh File Reference\n #include \n-#include \n-#include \n-#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bG_\bV_\b _\b>\n+\u00a0 Grid function implementing the piecewise element face normal. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n ===============================================================================\n"}]}, {"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: defaultderivativetraits.hh Source File\n+dune-functions: facenormalgridfunction.hh Source File\n \n \n \n \n \n \n \n@@ -70,97 +70,209 @@\n \n \n \n \n \n \n \n
    \n-
    defaultderivativetraits.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#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n+
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH
    \n
    5
    \n
    6#include <type_traits>
    \n-
    7#include <utility>
    \n+
    7#include <optional>
    \n
    8
    \n-
    9#include <dune/common/fvector.hh>
    \n-
    10#include <dune/common/fmatrix.hh>
    \n-
    11
    \n-
    12namespace Dune {
    \n-
    13namespace Functions {
    \n-
    14
    \n-
    15
    \n+
    9#include <dune/common/exceptions.hh>
    \n+
    10#include <dune/common/typeutilities.hh>
    \n+
    11#include <dune/common/rangeutilities.hh>
    \n+
    12#include <dune/geometry/referenceelements.hh>
    \n+
    13
    \n+\n+\n
    16
    \n-
    \n-\n-
    23{};
    \n-
    \n-
    24
    \n-
    25
    \n-
    35template<class Signature>
    \n-
    \n-\n-
    37{
    \n-\n-
    40};
    \n-
    \n-
    41
    \n-
    42
    \n-
    50template<>
    \n-
    \n-
    51struct DefaultDerivativeTraits< double(double) >
    \n-
    52{
    \n-
    54 typedef double Range;
    \n-
    55};
    \n-
    \n-
    56
    \n-
    66template<typename K, int n>
    \n-
    \n-
    67struct DefaultDerivativeTraits<K(FieldVector<K,n>)>
    \n-
    68{
    \n-
    70 typedef FieldVector<K,n> Range;
    \n-
    71};
    \n-
    \n-
    72
    \n-
    82template<typename K, int n, int m>
    \n-
    \n-
    83struct DefaultDerivativeTraits<FieldVector<K,m>(FieldVector<K,n>)>
    \n-
    84{
    \n-
    86 typedef FieldMatrix<K,m,n> Range;
    \n-
    87};
    \n-
    \n-
    88
    \n-
    98template<typename K, int n, int m>
    \n-
    \n-
    99struct DefaultDerivativeTraits<FieldMatrix<K,1,m>(FieldVector<K,n>)>
    \n-
    100{
    \n-
    102 typedef FieldMatrix<K,m,n> Range;
    \n-
    103};
    \n-
    \n-
    104
    \n-
    105
    \n-
    106}} // namespace Dune::Functions
    \n+
    17
    \n+
    18namespace Dune::Functions {
    \n+
    19
    \n+
    20namespace Impl {
    \n+
    21
    \n+
    22// Compute closest face to point
    \n+
    23template<class ReferenceElement, class Coordinate>
    \n+
    24auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)
    \n+
    25{
    \n+
    26 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};
    \n+
    27 double closestFaceDistance = std::numeric_limits<double>::max();
    \n+
    28 for(auto&& faceIndex : Dune::range(re.size(1)))
    \n+
    29 {
    \n+
    30 // For a face unit outer normal consider the orthogonal projection
    \n+
    31 // Px = x + <c-x,n>*n into the face. Then the distance to the face
    \n+
    32 // is given by |x-Px| = |<c-x,n>||n| = <c-x,n>.
    \n+
    33 auto normal = re.integrationOuterNormal(faceIndex);
    \n+
    34 normal /= normal.two_norm();
    \n+
    35 auto c = re.position(faceIndex,1);
    \n+
    36 c -= x;
    \n+
    37 auto faceDistance = (c*normal);
    \n+
    38 if (faceDistance<closestFaceDistance)
    \n+
    39 {
    \n+
    40 closestFaceDistance = faceDistance;
    \n+
    41 closestFaceIndex = faceIndex;
    \n+
    42 }
    \n+
    43 }
    \n+
    44 return closestFaceIndex;
    \n+
    45}
    \n+
    46
    \n+
    47} // end namespace Impl
    \n+
    48
    \n+
    49
    \n+
    50
    \n+
    51
    \n+
    64template<class GV>
    \n+
    \n+\n+
    66{
    \n+
    67public:
    \n+
    68 using GridView = GV;
    \n+\n+
    70 using Element = typename EntitySet::Element;
    \n+
    71
    \n+\n+\n+\n+
    75
    \n+
    76private:
    \n+
    77
    \n+
    78 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet, DefaultDerivativeTraits, 16>;
    \n+
    79
    \n+
    80 class LocalFunction
    \n+
    81 {
    \n+
    82 using Geometry = typename Element::Geometry;
    \n+
    83 static const int dimension = GV::dimension;
    \n+
    84 public:
    \n+
    85
    \n+
    97 void bind(const Element& element)
    \n+
    98 {
    \n+
    99 element_ = element;
    \n+
    100 geometry_.emplace(element_.geometry());
    \n+
    101 }
    \n+
    102
    \n+
    103 void unbind()
    \n+
    104 {
    \n+
    105 geometry_.reset();
    \n+
    106 }
    \n
    107
    \n-
    108
    \n-
    109#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH
    \n+
    110 bool bound() const
    \n+
    111 {
    \n+
    112 return static_cast<bool>(geometry_);
    \n+
    113 }
    \n+
    114
    \n+
    124 Range operator()(const LocalDomain& x) const
    \n+
    125 {
    \n+
    126 auto&& re = Dune::referenceElement(*geometry_);
    \n+
    127 // Compute reference normal of closest face to given point
    \n+
    128 auto face = Impl::closestFaceIndex(re, x);
    \n+
    129 auto localNormal = re.integrationOuterNormal(face);
    \n+
    130
    \n+
    131 // Transform reference normal into global unit outer normal using
    \n+
    132 // covariant Piola transformation
    \n+
    133 auto normal = Range{};
    \n+
    134 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);
    \n+
    135 normal /= normal.two_norm();
    \n+
    136 return normal;
    \n+
    137 }
    \n+
    138
    \n+
    140 const Element& localContext() const
    \n+
    141 {
    \n+
    142 return element_;
    \n+
    143 }
    \n+
    144
    \n+
    146 friend typename Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction& t)
    \n+
    147 {
    \n+
    148 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    149 }
    \n+
    150
    \n+
    151 private:
    \n+
    152 std::optional<Geometry> geometry_;
    \n+
    153 Element element_;
    \n+
    154 };
    \n+
    155
    \n+
    156public:
    \n+
    \n+\n+
    159 entitySet_(gridView)
    \n+
    160 {}
    \n+
    \n+
    161
    \n+
    \n+
    163 Range operator()(const Domain& x) const
    \n+
    164 {
    \n+
    165 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    166 }
    \n+
    \n+
    167
    \n+
    \n+\n+
    170 {
    \n+
    171 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    172 }
    \n+
    \n+
    173
    \n+
    \n+
    175 friend LocalFunction localFunction(const FaceNormalGridFunction& t)
    \n+
    176 {
    \n+
    177 return LocalFunction{};
    \n+
    178 }
    \n+
    \n+
    179
    \n+
    \n+
    181 const EntitySet& entitySet() const
    \n+
    182 {
    \n+
    183 return entitySet_;
    \n+
    184 }
    \n+
    \n+
    185
    \n+
    186private:
    \n+
    187 EntitySet entitySet_;
    \n+
    188};
    \n+
    \n+
    189
    \n+
    190
    \n+
    191
    \n+
    192} // namespace Dune::Functions
    \n+
    193
    \n+
    194#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:39
    \n
    Definition polynomial.hh:10
    \n-
    Dummy range class to be used if no proper type is available.
    Definition defaultderivativetraits.hh:23
    \n+
    Definition polynomial.hh:11
    \n
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:37
    \n-
    InvalidRange Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:39
    \n-
    double Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:54
    \n-
    FieldVector< K, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:70
    \n-
    FieldMatrix< K, m, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:86
    \n-
    FieldMatrix< K, m, n > Range
    Range of derivative for function with given signature.
    Definition defaultderivativetraits.hh:102
    \n+
    Grid function implementing the piecewise element face normal.
    Definition facenormalgridfunction.hh:66
    \n+
    GridViewEntitySet< GridView, 0 > EntitySet
    Definition facenormalgridfunction.hh:69
    \n+
    typename EntitySet::LocalCoordinate LocalDomain
    Definition facenormalgridfunction.hh:72
    \n+
    typename EntitySet::GlobalCoordinate Domain
    Definition facenormalgridfunction.hh:73
    \n+
    typename EntitySet::GlobalCoordinate Range
    Definition facenormalgridfunction.hh:74
    \n+
    const EntitySet & entitySet() const
    Return the stored GridViewEntitySet.
    Definition facenormalgridfunction.hh:181
    \n+
    friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)
    Not implemented.
    Definition facenormalgridfunction.hh:169
    \n+
    GV GridView
    Definition facenormalgridfunction.hh:68
    \n+
    friend LocalFunction localFunction(const FaceNormalGridFunction &t)
    Return a local-function associated to FaceNormalGridFunction.
    Definition facenormalgridfunction.hh:175
    \n+
    FaceNormalGridFunction(const GridView &gridView)
    Construct the FaceNormalGridFunction.
    Definition facenormalgridfunction.hh:158
    \n+
    typename EntitySet::Element Element
    Definition facenormalgridfunction.hh:70
    \n+
    Range operator()(const Domain &x) const
    Not implemented.
    Definition facenormalgridfunction.hh:163
    \n+
    Definition gridfunction.hh:32
    \n+\n+
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:32
    \n+
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:35
    \n+
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:36
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,97 +1,236 @@\n dune-functions\u00a02.9.0\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+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\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#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n-4#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n 5\n 6#include \n-7#include \n+7#include \n 8\n-9#include \n-10#include \n-11\n-12namespace _\bD_\bu_\bn_\be {\n-13namespace Functions {\n-14\n-15\n+9#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/_\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\n-_\b2_\b2class _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be\n-23{};\n-24\n-25\n-35template\n-_\b3_\b6struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n-37{\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\n-50template<>\n-_\b5_\b1struct _\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-52{\n-_\b5_\b4 typedef double _\bR_\ba_\bn_\bg_\be;\n-55};\n-56\n-66template\n-_\b6_\b7struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs)>\n-68{\n-_\b7_\b0 typedef FieldVector _\bR_\ba_\bn_\bg_\be;\n-71};\n-72\n-82template\n-_\b8_\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-84{\n-_\b8_\b6 typedef FieldMatrix _\bR_\ba_\bn_\bg_\be;\n-87};\n-88\n-98template\n-_\b9_\b9struct _\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-100{\n-_\b1_\b0_\b2 typedef FieldMatrix _\bR_\ba_\bn_\bg_\be;\n-103};\n-104\n-105\n-106}} // namespace Dune::Functions\n+17\n+18namespace _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs {\n+19\n+20namespace Impl {\n+21\n+22// Compute closest face to point\n+23template\n+24auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)\n+25{\n+26 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};\n+27 double closestFaceDistance = std::numeric_limits::max();\n+28 for(auto&& faceIndex : _\bD_\bu_\bn_\be::range(re.size(1)))\n+29 {\n+30 // For a face unit outer normal consider the orthogonal projection\n+31 // Px = x + *n into the face. Then the distance to the face\n+32 // is given by |x-Px| = |||n| = .\n+33 auto normal = re.integrationOuterNormal(faceIndex);\n+34 normal /= normal.two_norm();\n+35 auto c = re.position(faceIndex,1);\n+36 c -= x;\n+37 auto faceDistance = (c*normal);\n+38 if (faceDistance\n+_\b6_\b5class _\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+66{\n+67public:\n+_\b6_\b8 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+_\b6_\b9 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_\b0 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+71\n+_\b7_\b2 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_\b3 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_\b4 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+75\n+76private:\n+77\n+78 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+79\n+80 class LocalFunction\n+81 {\n+82 using Geometry = typename Element::Geometry;\n+83 static const int dimension = GV::dimension;\n+84 public:\n+85\n+97 void bind(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n+98 {\n+99 element_ = element;\n+100 geometry_.emplace(element_.geometry());\n+101 }\n+102\n+103 void unbind()\n+104 {\n+105 geometry_.reset();\n+106 }\n 107\n-108\n-109#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+110 bool bound() const\n+111 {\n+112 return static_cast(geometry_);\n+113 }\n+114\n+124 _\bR_\ba_\bn_\bg_\be operator()(const _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn& x) const\n+125 {\n+126 auto&& re = Dune::referenceElement(*geometry_);\n+127 // Compute reference normal of closest face to given point\n+128 auto face = Impl::closestFaceIndex(re, x);\n+129 auto localNormal = re.integrationOuterNormal(face);\n+130\n+131 // Transform reference normal into global unit outer normal using\n+132 // covariant Piola transformation\n+133 auto normal = _\bR_\ba_\bn_\bg_\be{};\n+134 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);\n+135 normal /= normal.two_norm();\n+136 return normal;\n+137 }\n+138\n+140 const _\bE_\bl_\be_\bm_\be_\bn_\bt& localContext() const\n+141 {\n+142 return element_;\n+143 }\n+144\n+146 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+147 {\n+148 DUNE_THROW(NotImplemented,\"not implemented\");\n+149 }\n+150\n+151 private:\n+152 std::optional geometry_;\n+153 _\bE_\bl_\be_\bm_\be_\bn_\bt element_;\n+154 };\n+155\n+156public:\n+_\b1_\b5_\b8 _\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+159 entitySet_(gridView)\n+160 {}\n+161\n+_\b1_\b6_\b3 _\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+164 {\n+165 DUNE_THROW(NotImplemented,\"not implemented\");\n+166 }\n+167\n+_\b1_\b6_\b9 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+170 {\n+171 DUNE_THROW(NotImplemented,\"not implemented\");\n+172 }\n+173\n+_\b1_\b7_\b5 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+176 {\n+177 return LocalFunction{};\n+178 }\n+179\n+_\b1_\b8_\b1 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n+182 {\n+183 return entitySet_;\n+184 }\n+185\n+186private:\n+187 _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt entitySet_;\n+188};\n+189\n+190\n+191\n+192} // namespace Dune::Functions\n+193\n+194#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+_\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:_\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:39\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:23\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:11\n _\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:37\n-_\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: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_\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:54\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\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: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_\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: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_\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:102\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:66\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:69\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bF_\ba_\bc_\be_\bN_\bo_\br_\bm_\ba_\bl_\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn\n+typename EntitySet::LocalCoordinate LocalDomain\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn facenormalgridfunction.hh: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:_\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: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:_\bR_\ba_\bn_\bg_\be\n+typename EntitySet::GlobalCoordinate Range\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:_\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:181\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:169\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:68\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:175\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:158\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: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:_\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:163\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: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>\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: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:_\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:35\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:36\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: callable.hh File Reference\n+dune-functions: discreteglobalbasisfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,55 +65,73 @@\n \n \n \n \n \n \n \n
    \n \n-
    callable.hh File Reference
    \n+
    discreteglobalbasisfunction.hh File Reference
    \n
    \n
    \n
    #include <memory>
    \n-#include <functional>
    \n-#include <dune/common/function.hh>
    \n-#include <dune/common/shared_ptr.hh>
    \n+#include <optional>
    \n+#include <dune/common/typetraits.hh>
    \n+#include <dune/typetree/treecontainer.hh>
    \n+#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>
    \n+#include <dune/functions/functionspacebases/flatvectorview.hh>
    \n+#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n+#include <dune/functions/gridfunctions/gridfunction.hh>
    \n+#include <dune/functions/backends/concepts.hh>
    \n+#include <dune/functions/backends/istlvectorbackend.hh>
    \n
    \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 Classes

    class  Dune::Functions::CallableFunctionWrapper< F >
     Wrap a Dune::VirtualFunction into a callable object. More...
    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...
     
    \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 >
    CallableFunctionWrapper< F > Dune::Functions::callable (const F &f)
     Create a callable object from some Dune::VirtualFunction.
     
    template<class F >
    CallableFunctionWrapper< F > Dune::Functions::callable (const std::shared_ptr< F > &fp)
     Create a callable object from std::shared_ptr<F>
     
    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,36 +1,59 @@\n dune-functions\u00a02.9.0\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+ * _\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-callable.hh File Reference\n+discreteglobalbasisfunction.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/_\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:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bF_\b _\b>\n-\u00a0 Wrap a Dune::VirtualFunction into a callable object. _\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_\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 \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-_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br< F >\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 (const F &f)\n-\u00a0 Create a callable object from some Dune::\n- VirtualFunction.\n-\u00a0\n-template\n-_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br< F >\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 (const std::shared_ptr<\n- F > &fp)\n-\u00a0 Create a callable object from std::shared_ptr\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/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: callable.hh Source File\n+dune-functions: discreteglobalbasisfunction.hh Source File\n \n \n \n \n \n \n \n@@ -70,106 +70,681 @@\n \n \n \n \n \n \n \n
    \n-
    callable.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#ifndef DUNE_FUNCTIONS_COMMON_CALLABLE_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_CALLABLE_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n+
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n
    5
    \n
    6#include <memory>
    \n-
    7#include <functional>
    \n+
    7#include <optional>
    \n
    8
    \n-
    9#include <dune/common/function.hh>
    \n-
    10#include <dune/common/shared_ptr.hh>
    \n-
    11
    \n+
    9#include <dune/common/typetraits.hh>
    \n+
    10
    \n+
    11#include <dune/typetree/treecontainer.hh>
    \n
    12
    \n-
    13namespace Dune {
    \n-
    14namespace Functions {
    \n-
    15
    \n-
    16
    \n-
    17
    \n-
    18
    \n-
    36template<class F>
    \n-
    \n-\n-
    38{
    \n-
    39 using Range = typename F::RangeType;
    \n-
    40 using Domain = typename F::DomainType;
    \n+\n+\n+\n+\n+\n+\n+
    19
    \n+
    20namespace Dune {
    \n+
    21namespace Functions {
    \n+
    22
    \n+
    23
    \n+
    \n+
    24namespace ImplDoc {
    \n+
    25
    \n+
    26template<typename B, typename V, typename NTRE>
    \n+
    \n+\n+
    28{
    \n+
    29public:
    \n+
    30 using Basis = B;
    \n+
    31 using Vector = V;
    \n+
    32
    \n+
    33 // In order to make the cache work for proxy-references
    \n+
    34 // we have to use AutonomousValue<T> instead of std::decay_t<T>
    \n+
    35 using Coefficient = Dune::AutonomousValue<decltype(std::declval<Vector>()[std::declval<typename Basis::MultiIndex>()])>;
    \n+
    36
    \n+
    37 using GridView = typename Basis::GridView;
    \n+\n+
    39 using Tree = typename Basis::LocalView::Tree;
    \n+
    40 using NodeToRangeEntry = NTRE;
    \n
    41
    \n-
    42 public:
    \n+\n
    43
    \n-
    \n-\n-
    51 {
    \n-
    52 f_ = Dune::stackobject_to_shared_ptr(f);
    \n-
    53 }
    \n-
    \n-
    54
    \n-
    \n-
    61 CallableFunctionWrapper(const std::shared_ptr<const F>& f) :
    \n-
    62 f_(f)
    \n-
    63 {}
    \n-
    \n-
    64
    \n-
    \n-
    70 Range operator()(const Domain& x) const
    \n-
    71 {
    \n-
    72 Range y;
    \n-
    73 f_->evaluate(x, y);
    \n-
    74 return y;
    \n-
    75 }
    \n-
    \n-
    76
    \n-
    77 private:
    \n-
    78 std::shared_ptr<const F> f_;
    \n-
    79};
    \n-
    \n-
    80
    \n-
    81
    \n-
    82
    \n-
    104template<class F>
    \n-
    \n-\n-
    106{
    \n-\n-
    108}
    \n-
    \n-
    109
    \n-
    110
    \n-
    136template<class F>
    \n-
    \n-
    137CallableFunctionWrapper<F> callable(const std::shared_ptr<F>& fp)
    \n-
    138{
    \n-\n-
    140}
    \n+\n+
    45 using Element = typename EntitySet::Element;
    \n+
    46
    \n+
    47protected:
    \n+
    48
    \n+
    49 // This collects all data that is shared by all related
    \n+
    50 // global and local functions. This way we don't need to
    \n+
    51 // keep track of it individually.
    \n+
    \n+
    52 struct Data
    \n+
    53 {
    \n+\n+
    55 std::shared_ptr<const Basis> basis;
    \n+
    56 std::shared_ptr<const Vector> coefficients;
    \n+
    57 std::shared_ptr<const NodeToRangeEntry> nodeToRangeEntry;
    \n+
    58 };
    \n+
    \n+
    59
    \n+
    60public:
    \n+
    \n+\n+
    62 {
    \n+
    63 using LocalView = typename Basis::LocalView;
    \n+
    64 using size_type = typename Tree::size_type;
    \n+
    65
    \n+
    66 public:
    \n+\n+
    68 using Element = typename EntitySet::Element;
    \n+
    69
    \n+
    70 protected:
    \n+
    \n+
    71 LocalFunctionBase(const std::shared_ptr<const Data>& data)
    \n+
    72 : data_(data)
    \n+
    73 , localView_(data_->basis->localView())
    \n+
    74 {
    \n+
    75 localDoFs_.reserve(localView_.maxSize());
    \n+
    76 }
    \n+
    \n+
    77
    \n+
    \n+\n+
    85 : data_(other.data_)
    \n+
    86 , localView_(other.localView_)
    \n+
    87 {
    \n+
    88 localDoFs_.reserve(localView_.maxSize());
    \n+
    89 if (bound())
    \n+
    90 localDoFs_ = other.localDoFs_;
    \n+
    91 }
    \n+
    \n+
    92
    \n+
    \n+\n+
    101 {
    \n+
    102 data_ = other.data_;
    \n+
    103 localView_ = other.localView_;
    \n+
    104 if (bound())
    \n+
    105 localDoFs_ = other.localDoFs_;
    \n+
    106 return *this;
    \n+
    107 }
    \n+
    \n+
    108
    \n+
    109 public:
    \n+
    \n+
    116 void bind(const Element& element)
    \n+
    117 {
    \n+
    118 localView_.bind(element);
    \n+
    119 // Use cache of full local view size. For a subspace basis,
    \n+
    120 // this may be larger than the number of local DOFs in the
    \n+
    121 // tree. In this case only cache entries associated to local
    \n+
    122 // DOFs in the subspace are filled. Cache entries associated
    \n+
    123 // to local DOFs which are not contained in the subspace will
    \n+
    124 // not be touched.
    \n+
    125 //
    \n+
    126 // Alternatively one could use a cache that exactly fits
    \n+
    127 // the size of the tree. However, this would require to
    \n+
    128 // subtract an offset from localIndex(i) on each cache
    \n+
    129 // access in operator().
    \n+
    130 localDoFs_.resize(localView_.size());
    \n+
    131 const auto& dofs = *data_->coefficients;
    \n+
    132 for (size_type i = 0; i < localView_.tree().size(); ++i)
    \n+
    133 {
    \n+
    134 // For a subspace basis the index-within-tree i
    \n+
    135 // is not the same as the localIndex within the
    \n+
    136 // full local view.
    \n+
    137 size_t localIndex = localView_.tree().localIndex(i);
    \n+
    138 localDoFs_[localIndex] = dofs[localView_.index(localIndex)];
    \n+
    139 }
    \n+
    140 }
    \n
    \n
    141
    \n-
    142
    \n-
    143
    \n-
    144} // namespace Functions
    \n-
    145} // namespace Dune
    \n-
    146
    \n-
    147#endif //DUNE_FUNCTIONS_COMMON_CALLABLE_HH
    \n-
    CallableFunctionWrapper< F > callable(const F &f)
    Create a callable object from some Dune::VirtualFunction.
    Definition callable.hh:105
    \n+
    \n+
    143 void unbind()
    \n+
    144 {
    \n+
    145 localView_.unbind();
    \n+
    146 }
    \n+
    \n+
    147
    \n+
    \n+
    149 bool bound() const
    \n+
    150 {
    \n+
    151 return localView_.bound();
    \n+
    152 }
    \n+
    \n+
    153
    \n+
    \n+
    155 const Element& localContext() const
    \n+
    156 {
    \n+
    157 return localView_.element();
    \n+
    158 }
    \n+
    \n+
    159
    \n+
    160 protected:
    \n+
    161
    \n+
    162 template<class To, class From>
    \n+
    \n+
    163 void assignWith(To& to, const From& from) const
    \n+
    164 {
    \n+
    165 auto from_flat = flatVectorView(from);
    \n+
    166 auto to_flat = flatVectorView(to);
    \n+
    167 assert(from_flat.size() == to_flat.size());
    \n+
    168 for (size_type i = 0; i < to_flat.size(); ++i)
    \n+
    169 to_flat[i] = from_flat[i];
    \n+
    170 }
    \n+
    \n+
    171
    \n+
    172 template<class Node, class TreePath, class Range>
    \n+
    \n+
    173 decltype(auto) nodeToRangeEntry(const Node& node, const TreePath& treePath, Range& y) const
    \n+
    174 {
    \n+
    175 return (*data_->nodeToRangeEntry)(node, treePath, y);
    \n+
    176 }
    \n+
    \n+
    177
    \n+
    178 std::shared_ptr<const Data> data_;
    \n+
    179 LocalView localView_;
    \n+
    180 std::vector<Coefficient> localDoFs_;
    \n+
    181 };
    \n+
    \n+
    182
    \n+
    183protected:
    \n+
    \n+
    184 DiscreteGlobalBasisFunctionBase(const std::shared_ptr<const Data>& data)
    \n+
    185 : data_(data)
    \n+
    186 {
    \n+
    187 /* Nothing. */
    \n+
    188 }
    \n+
    \n+
    189
    \n+
    190public:
    \n+
    191
    \n+
    \n+
    193 const Basis& basis() const
    \n+
    194 {
    \n+
    195 return *data_->basis;
    \n+
    196 }
    \n+
    \n+
    197
    \n+
    \n+
    199 const Vector& dofs() const
    \n+
    200 {
    \n+
    201 return *data_->coefficients;
    \n+
    202 }
    \n+
    \n+
    203
    \n+
    \n+\n+
    206 {
    \n+
    207 return *data_->nodeToRangeEntry;
    \n+
    208 }
    \n+
    \n+
    209
    \n+
    \n+
    211 const EntitySet& entitySet() const
    \n+
    212 {
    \n+
    213 return data_->entitySet;
    \n+
    214 }
    \n+
    \n+
    215
    \n+
    216protected:
    \n+
    217 std::shared_ptr<const Data> data_;
    \n+
    218};
    \n+
    \n+
    219
    \n+
    220} // namespace ImplDoc
    \n+
    \n+
    221
    \n+
    222
    \n+
    223
    \n+
    224template<typename DGBF>
    \n+\n+
    226
    \n+
    264template<typename B, typename V,
    \n+
    265 typename NTRE = HierarchicNodeToRangeMap,
    \n+
    266 typename R = typename V::value_type>
    \n+
    \n+\n+\n+
    269{
    \n+\n+
    271 using Data = typename Base::Data;
    \n+
    272
    \n+
    273public:
    \n+
    274 using Basis = typename Base::Basis;
    \n+
    275 using Vector = typename Base::Vector;
    \n+
    276
    \n+
    277 using Domain = typename Base::Domain;
    \n+
    278 using Range = R;
    \n+
    279
    \n+
    280 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16>;
    \n+
    281
    \n+
    282private:
    \n+
    283
    \n+
    284 template<class Node>
    \n+
    285 using LocalBasisRange = typename Node::FiniteElement::Traits::LocalBasisType::Traits::RangeType;
    \n+
    286 template<class Node>
    \n+
    287 using NodeData = typename std::vector<LocalBasisRange<Node>>;
    \n+
    288 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData, typename Base::Tree>;
    \n+
    289
    \n+
    290public:
    \n+
    \n+\n+\n+
    293 {
    \n+
    294 using LocalBase = typename Base::LocalFunctionBase;
    \n+
    295 using size_type = typename Base::Tree::size_type;
    \n+
    296 using LocalBase::nodeToRangeEntry;
    \n+
    297
    \n+
    298 public:
    \n+
    299
    \n+\n+
    301 using Domain = typename LocalBase::Domain;
    \n+\n+
    303 using Element = typename LocalBase::Element;
    \n+
    304
    \n+
    \n+\n+
    307 : LocalBase(globalFunction.data_)
    \n+
    308 , evaluationBuffer_(this->localView_.tree())
    \n+
    309 {
    \n+
    310 /* Nothing. */
    \n+
    311 }
    \n+
    \n+
    312
    \n+
    \n+
    322 Range operator()(const Domain& x) const
    \n+
    323 {
    \n+
    324 Range y;
    \n+
    325 istlVectorBackend(y) = 0;
    \n+
    326
    \n+
    327 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&& treePath) {
    \n+
    328 const auto& fe = node.finiteElement();
    \n+
    329 const auto& localBasis = fe.localBasis();
    \n+
    330 auto& shapeFunctionValues = evaluationBuffer_[treePath];
    \n+
    331
    \n+
    332 localBasis.evaluateFunction(x, shapeFunctionValues);
    \n+
    333
    \n+
    334 // Compute linear combinations of basis function jacobian.
    \n+
    335 // Non-scalar coefficients of dimension coeffDim are handled by
    \n+
    336 // processing the coeffDim linear combinations independently
    \n+
    337 // and storing them as entries of an array.
    \n+
    338 using Value = LocalBasisRange< std::decay_t<decltype(node)> >;
    \n+
    339 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;
    \n+
    340 auto values = std::array<Value, coeffDim>{};
    \n+
    341 istlVectorBackend(values) = 0;
    \n+
    342 for (size_type i = 0; i < localBasis.size(); ++i)
    \n+
    343 {
    \n+
    344 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);
    \n+
    345 for (std::size_t j = 0; j < coeffDim; ++j)
    \n+
    346 values[j].axpy(c[j], shapeFunctionValues[i]);
    \n+
    347 }
    \n+
    348
    \n+
    349 // Assign computed values to node entry of range.
    \n+
    350 // Types are matched using the lexicographic ordering provided by flatVectorView.
    \n+
    351 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), values);
    \n+
    352 });
    \n+
    353
    \n+
    354 return y;
    \n+
    355 }
    \n+
    \n+
    356
    \n+
    \n+\n+
    359 {
    \n+\n+
    361 if (lf.bound())
    \n+
    362 dlf.bind(lf.localContext());
    \n+
    363 return dlf;
    \n+
    364 }
    \n+
    \n+
    365
    \n+
    366 private:
    \n+
    367 mutable PerNodeEvaluationBuffer evaluationBuffer_;
    \n+
    368 };
    \n+
    \n+
    369
    \n+
    371 template<class B_T, class V_T, class NTRE_T>
    \n+
    \n+
    372 DiscreteGlobalBasisFunction(B_T && basis, V_T && coefficients, NTRE_T&& nodeToRangeEntry)
    \n+
    373 : 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+
    374 {}
    \n+
    \n+
    375
    \n+
    \n+
    377 DiscreteGlobalBasisFunction(std::shared_ptr<const Basis> basis, std::shared_ptr<const V> coefficients, std::shared_ptr<const typename Base::NodeToRangeEntry> nodeToRangeEntry)
    \n+
    378 : Base(std::make_shared<Data>(Data{{basis->gridView()}, basis, coefficients, nodeToRangeEntry}))
    \n+
    379 {}
    \n+
    \n+
    380
    \n+
    \n+
    382 Range operator() (const Domain& x) const
    \n+
    383 {
    \n+
    384 // TODO: Implement this using hierarchic search
    \n+
    385 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    386 }
    \n+
    \n+
    387
    \n+\n+
    393
    \n+
    \n+\n+
    403 {
    \n+
    404 return LocalFunction(t);
    \n+
    405 }
    \n+
    \n+
    406};
    \n+
    \n+
    407
    \n+
    408
    \n+
    431template<typename R, typename B, typename V>
    \n+
    \n+
    432auto makeDiscreteGlobalBasisFunction(B&& basis, V&& vector)
    \n+
    433{
    \n+
    434 using Basis = std::decay_t<B>;
    \n+
    435 using NTREM = HierarchicNodeToRangeMap;
    \n+
    436
    \n+
    437 // Small helper functions to wrap vectors using istlVectorBackend
    \n+
    438 // if they do not already satisfy the VectorBackend interface.
    \n+
    439 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {
    \n+
    440 if constexpr (models<Concept::ConstVectorBackend<Basis>, decltype(v)>()) {
    \n+
    441 return std::forward<decltype(v)>(v);
    \n+
    442 } else {
    \n+
    443 return istlVectorBackend(v);
    \n+
    444 }
    \n+
    445 };
    \n+
    446
    \n+
    447 using Vector = std::decay_t<decltype(toConstVectorBackend(std::forward<V>(vector)))>;
    \n+\n+
    449 std::forward<B>(basis),
    \n+
    450 toConstVectorBackend(std::forward<V>(vector)),
    \n+\n+
    452}
    \n+
    \n+
    453
    \n+
    454
    \n+
    469template<typename DGBF>
    \n+
    \n+\n+
    471 : public ImplDoc::DiscreteGlobalBasisFunctionBase<typename DGBF::Basis, typename DGBF::Vector, typename DGBF::NodeToRangeEntry>
    \n+
    472{
    \n+\n+
    474 using Data = typename Base::Data;
    \n+
    475
    \n+
    476public:
    \n+\n+
    478
    \n+
    479 using Basis = typename Base::Basis;
    \n+
    480 using Vector = typename Base::Vector;
    \n+
    481
    \n+
    482 using Domain = typename Base::Domain;
    \n+\n+
    484
    \n+
    485 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16>;
    \n+
    486
    \n+
    487private:
    \n+
    488
    \n+
    489 template<class Node>
    \n+
    490 using LocalBasisRange = typename Node::FiniteElement::Traits::LocalBasisType::Traits::JacobianType;
    \n+
    491 template<class Node>
    \n+
    492 using NodeData = typename std::vector< LocalBasisRange<Node> >;
    \n+
    493 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData, typename Base::Tree>;
    \n+
    494
    \n+
    495public:
    \n+
    496
    \n+
    \n+\n+\n+
    506 {
    \n+
    507 using LocalBase = typename Base::LocalFunctionBase;
    \n+
    508 using size_type = typename Base::Tree::size_type;
    \n+
    509 using LocalBase::nodeToRangeEntry;
    \n+
    510
    \n+
    511 public:
    \n+\n+
    513 using Domain = typename LocalBase::Domain;
    \n+\n+
    515 using Element = typename LocalBase::Element;
    \n+
    516
    \n+
    \n+
    518 LocalFunction(const GlobalFunction& globalFunction)
    \n+
    519 : LocalBase(globalFunction.data_)
    \n+
    520 , evaluationBuffer_(this->localView_.tree())
    \n+
    521 {
    \n+
    522 /* Nothing. */
    \n+
    523 }
    \n+
    \n+
    524
    \n+
    \n+
    531 void bind(const Element& element)
    \n+
    532 {
    \n+
    533 LocalBase::bind(element);
    \n+
    534 geometry_.emplace(element.geometry());
    \n+
    535 }
    \n+
    \n+
    536
    \n+
    \n+
    538 void unbind()
    \n+
    539 {
    \n+
    540 geometry_.reset();
    \n+
    541 LocalBase::unbind();
    \n+
    542 }
    \n+
    \n+
    543
    \n+
    \n+
    557 Range operator()(const Domain& x) const
    \n+
    558 {
    \n+
    559 Range y;
    \n+
    560 istlVectorBackend(y) = 0;
    \n+
    561
    \n+
    562 const auto& jacobianInverse = geometry_->jacobianInverse(x);
    \n+
    563
    \n+
    564 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&& treePath) {
    \n+
    565 const auto& fe = node.finiteElement();
    \n+
    566 const auto& localBasis = fe.localBasis();
    \n+
    567 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];
    \n+
    568
    \n+
    569 localBasis.evaluateJacobian(x, shapeFunctionJacobians);
    \n+
    570
    \n+
    571 // Compute linear combinations of basis function jacobian.
    \n+
    572 // Non-scalar coefficients of dimension coeffDim are handled by
    \n+
    573 // processing the coeffDim linear combinations independently
    \n+
    574 // and storing them as entries of an array.
    \n+
    575 using RefJacobian = LocalBasisRange< std::decay_t<decltype(node)> >;
    \n+
    576 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;
    \n+
    577 auto refJacobians = std::array<RefJacobian, coeffDim>{};
    \n+
    578 istlVectorBackend(refJacobians) = 0;
    \n+
    579 for (size_type i = 0; i < localBasis.size(); ++i)
    \n+
    580 {
    \n+
    581 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);
    \n+
    582 for (std::size_t j = 0; j < coeffDim; ++j)
    \n+
    583 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);
    \n+
    584 }
    \n+
    585
    \n+
    586 // Transform Jacobians form local to global coordinates.
    \n+
    587 using Jacobian = decltype(refJacobians[0] * jacobianInverse);
    \n+
    588 auto jacobians = std::array<Jacobian, coeffDim>{};
    \n+
    589 std::transform(
    \n+
    590 refJacobians.begin(), refJacobians.end(), jacobians.begin(),
    \n+
    591 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });
    \n+
    592
    \n+
    593 // Assign computed Jacobians to node entry of range.
    \n+
    594 // Types are matched using the lexicographic ordering provided by flatVectorView.
    \n+
    595 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);
    \n+
    596 });
    \n+
    597
    \n+
    598 return y;
    \n+
    599 }
    \n+
    \n+
    600
    \n+
    \n+\n+
    603 {
    \n+
    604 DUNE_THROW(NotImplemented, "derivative of derivative is not implemented");
    \n+
    605 }
    \n+
    \n+
    606
    \n+
    607 private:
    \n+
    608 mutable PerNodeEvaluationBuffer evaluationBuffer_;
    \n+
    609 std::optional<typename Element::Geometry> geometry_;
    \n+
    610 };
    \n+
    \n+
    611
    \n+
    \n+
    618 DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr<const Data>& data)
    \n+
    619 : Base(data)
    \n+
    620 {
    \n+
    621 /* Nothing. */
    \n+
    622 }
    \n+
    \n+
    623
    \n+
    \n+
    625 Range operator()(const Domain& x) const
    \n+
    626 {
    \n+
    627 // TODO: Implement this using hierarchic search
    \n+
    628 DUNE_THROW(NotImplemented,"not implemented");
    \n+
    629 }
    \n+
    \n+
    630
    \n+
    \n+\n+
    632 {
    \n+
    633 DUNE_THROW(NotImplemented, "derivative of derivative is not implemented");
    \n+
    634 }
    \n+
    \n+
    635
    \n+
    \n+\n+
    638 {
    \n+
    639 return LocalFunction(f);
    \n+
    640 }
    \n+
    \n+
    641};
    \n+
    \n+
    642
    \n+
    643
    \n+
    644} // namespace Functions
    \n+
    645} // namespace Dune
    \n+
    646
    \n+
    647#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH
    \n+\n+\n+\n+\n+\n+
    auto makeDiscreteGlobalBasisFunction(B &&basis, V &&vector)
    Generate a DiscreteGlobalBasisFunction.
    Definition discreteglobalbasisfunction.hh:432
    \n+
    auto istlVectorBackend(Vector &v)
    Return a vector backend wrapping non-const ISTL like containers.
    Definition istlvectorbackend.hh:346
    \n
    Definition polynomial.hh:10
    \n-
    Wrap a Dune::VirtualFunction into a callable object.
    Definition callable.hh:38
    \n-
    Range operator()(const Domain &x) const
    Forward operator() to F::evaluate()
    Definition callable.hh:70
    \n-
    CallableFunctionWrapper(const F &f)
    Instantiate from reference to f.
    Definition callable.hh:50
    \n-
    CallableFunctionWrapper(const std::shared_ptr< const F > &f)
    Instantiate from std::shared_ptr to f.
    Definition callable.hh:61
    \n+
    auto flatVectorView(T &t)
    Create flat vector view of passed mutable container.
    Definition flatvectorview.hh:179
    \n+
    Default implementation for derivative traits.
    Definition defaultderivativetraits.hh:37
    \n+
    Helper class to deduce the signature of a callable.
    Definition signature.hh:56
    \n+
    A simple node to range map using the nested tree indices.
    Definition hierarchicnodetorangemap.hh:30
    \n+
    Definition discreteglobalbasisfunction.hh:28
    \n+
    std::shared_ptr< const Data > data_
    Definition discreteglobalbasisfunction.hh:217
    \n+
    const Vector & dofs() const
    Return the coefficients of this discrete function by reference.
    Definition discreteglobalbasisfunction.hh:199
    \n+
    B Basis
    Definition discreteglobalbasisfunction.hh:30
    \n+
    typename Basis::LocalView::Tree Tree
    Definition discreteglobalbasisfunction.hh:39
    \n+
    V Vector
    Definition discreteglobalbasisfunction.hh:31
    \n+
    typename EntitySet::Element Element
    Definition discreteglobalbasisfunction.hh:45
    \n+
    typename EntitySet::LocalCoordinate LocalDomain
    Definition discreteglobalbasisfunction.hh:44
    \n+
    const NodeToRangeEntry & nodeToRangeEntry() const
    Return the stored node-to-range map.
    Definition discreteglobalbasisfunction.hh:205
    \n+
    NTRE NodeToRangeEntry
    Definition discreteglobalbasisfunction.hh:40
    \n+
    DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)
    Definition discreteglobalbasisfunction.hh:184
    \n+
    typename Basis::GridView GridView
    Definition discreteglobalbasisfunction.hh:37
    \n+
    const Basis & basis() const
    Return a const reference to the stored basis.
    Definition discreteglobalbasisfunction.hh:193
    \n+
    GridViewEntitySet< GridView, 0 > EntitySet
    Definition discreteglobalbasisfunction.hh:38
    \n+
    const EntitySet & entitySet() const
    Get associated set of entities the local-function can be bound to.
    Definition discreteglobalbasisfunction.hh:211
    \n+
    typename EntitySet::GlobalCoordinate Domain
    Definition discreteglobalbasisfunction.hh:42
    \n+
    Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename Basis::MultiIndex >()])> Coefficient
    Definition discreteglobalbasisfunction.hh:35
    \n+
    Definition discreteglobalbasisfunction.hh:53
    \n+
    EntitySet entitySet
    Definition discreteglobalbasisfunction.hh:54
    \n+
    std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry
    Definition discreteglobalbasisfunction.hh:57
    \n+
    std::shared_ptr< const Basis > basis
    Definition discreteglobalbasisfunction.hh:55
    \n+
    std::shared_ptr< const Vector > coefficients
    Definition discreteglobalbasisfunction.hh:56
    \n+\n+
    LocalFunctionBase & operator=(const LocalFunctionBase &other)
    Copy-assignment of the local-function.
    Definition discreteglobalbasisfunction.hh:100
    \n+
    bool bound() const
    Check if LocalFunction is already bound to an element.
    Definition discreteglobalbasisfunction.hh:149
    \n+
    void bind(const Element &element)
    Bind LocalFunction to grid element.
    Definition discreteglobalbasisfunction.hh:116
    \n+
    typename EntitySet::Element Element
    Definition discreteglobalbasisfunction.hh:68
    \n+
    const Element & localContext() const
    Return the element the local-function is bound to.
    Definition discreteglobalbasisfunction.hh:155
    \n+
    LocalFunctionBase(const LocalFunctionBase &other)
    Copy-construct the local-function.
    Definition discreteglobalbasisfunction.hh:84
    \n+
    std::vector< Coefficient > localDoFs_
    Definition discreteglobalbasisfunction.hh:180
    \n+
    void assignWith(To &to, const From &from) const
    Definition discreteglobalbasisfunction.hh:163
    \n+
    std::shared_ptr< const Data > data_
    Definition discreteglobalbasisfunction.hh:178
    \n+
    decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath, Range &y) const
    Definition discreteglobalbasisfunction.hh:173
    \n+
    LocalView localView_
    Definition discreteglobalbasisfunction.hh:179
    \n+
    void unbind()
    Unbind the local-function.
    Definition discreteglobalbasisfunction.hh:143
    \n+
    LocalDomain Domain
    Definition discreteglobalbasisfunction.hh:67
    \n+
    LocalFunctionBase(const std::shared_ptr< const Data > &data)
    Definition discreteglobalbasisfunction.hh:71
    \n+
    Derivative of a DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:472
    \n+
    typename Base::Basis Basis
    Definition discreteglobalbasisfunction.hh:479
    \n+
    friend Traits::DerivativeInterface derivative(const DiscreteGlobalBasisFunctionDerivative &f)
    Definition discreteglobalbasisfunction.hh:631
    \n+
    Range operator()(const Domain &x) const
    Not implemented.
    Definition discreteglobalbasisfunction.hh:625
    \n+
    typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::DerivativeInterface >::Range Range
    Definition discreteglobalbasisfunction.hh:483
    \n+
    friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative &f)
    Construct local function from a DiscreteGlobalBasisFunctionDerivative
    Definition discreteglobalbasisfunction.hh:637
    \n+
    DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data > &data)
    create object from DiscreateGlobalBasisFunction data
    Definition discreteglobalbasisfunction.hh:618
    \n+
    DGBF DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:477
    \n+
    typename Base::Vector Vector
    Definition discreteglobalbasisfunction.hh:480
    \n+
    Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits
    Definition discreteglobalbasisfunction.hh:485
    \n+
    typename Base::Domain Domain
    Definition discreteglobalbasisfunction.hh:482
    \n+
    A grid function induced by a global basis and a coefficient vector.
    Definition discreteglobalbasisfunction.hh:269
    \n+
    friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction > derivative(const DiscreteGlobalBasisFunction &f)
    Derivative of the DiscreteGlobalBasisFunction
    Definition discreteglobalbasisfunction.hh:389
    \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:372
    \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:377
    \n+
    friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)
    Construct local function from a DiscreteGlobalBasisFunction.
    Definition discreteglobalbasisfunction.hh:402
    \n+
    typename Base::Basis Basis
    Definition discreteglobalbasisfunction.hh:274
    \n+
    Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits
    Definition discreteglobalbasisfunction.hh:280
    \n+
    R Range
    Definition discreteglobalbasisfunction.hh:278
    \n+
    typename Base::Vector Vector
    Definition discreteglobalbasisfunction.hh:275
    \n+
    typename Base::Domain Domain
    Definition discreteglobalbasisfunction.hh:277
    \n+
    Definition discreteglobalbasisfunction.hh:293
    \n+
    GlobalFunction::Range Range
    Definition discreteglobalbasisfunction.hh:302
    \n+
    typename LocalBase::Domain Domain
    Definition discreteglobalbasisfunction.hh:301
    \n+
    LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)
    Create a local-function from the associated grid-function.
    Definition discreteglobalbasisfunction.hh:306
    \n+
    friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::LocalFunction derivative(const LocalFunction &lf)
    Local function of the derivative.
    Definition discreteglobalbasisfunction.hh:358
    \n+
    Range operator()(const Domain &x) const
    Evaluate this local-function in coordinates x in the bound element.
    Definition discreteglobalbasisfunction.hh:322
    \n+
    typename LocalBase::Element Element
    Definition discreteglobalbasisfunction.hh:303
    \n+
    local function evaluating the derivative in reference coordinates
    Definition discreteglobalbasisfunction.hh:506
    \n+
    Range operator()(const Domain &x) const
    Evaluate this local-function in coordinates x in the bound element.
    Definition discreteglobalbasisfunction.hh:557
    \n+
    typename LocalBase::Domain Domain
    Definition discreteglobalbasisfunction.hh:513
    \n+
    typename LocalBase::Element Element
    Definition discreteglobalbasisfunction.hh:515
    \n+
    friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction &)
    Not implemented.
    Definition discreteglobalbasisfunction.hh:602
    \n+
    GlobalFunction::Range Range
    Definition discreteglobalbasisfunction.hh:514
    \n+
    void unbind()
    Unbind the local-function.
    Definition discreteglobalbasisfunction.hh:538
    \n+
    LocalFunction(const GlobalFunction &globalFunction)
    Create a local function from the associated grid function.
    Definition discreteglobalbasisfunction.hh:518
    \n+
    void bind(const Element &element)
    Bind LocalFunction to grid element.
    Definition discreteglobalbasisfunction.hh:531
    \n+
    Definition gridfunction.hh:32
    \n+\n+
    GridView::template Codim< codim >::Entity Element
    Type of Elements contained in this EntitySet.
    Definition gridviewentityset.hh:32
    \n+
    Element::Geometry::LocalCoordinate LocalCoordinate
    Type of local coordinates with respect to the Element.
    Definition gridviewentityset.hh:35
    \n+
    Element::Geometry::GlobalCoordinate GlobalCoordinate
    Definition gridviewentityset.hh:36
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,99 +1,853 @@\n dune-functions\u00a02.9.0\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-callable.hh\n+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\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#ifndef DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n-4#define DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n+3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n+4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n 5\n 6#include \n-7#include \n+7#include \n 8\n-9#include \n-10#include \n-11\n+9#include \n+10\n+11#include \n 12\n-13namespace _\bD_\bu_\bn_\be {\n-14namespace Functions {\n-15\n-16\n-17\n-18\n-36template\n-_\b3_\b7class _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n-38{\n-39 using Range = typename F::RangeType;\n-40 using Domain = typename F::DomainType;\n+13#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\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+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/_\bf_\bl_\ba_\bt_\bv_\be_\bc_\bt_\bo_\br_\bv_\bi_\be_\bw_\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/_\bg_\br_\bi_\bd_\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/_\bb_\ba_\bc_\bk_\be_\bn_\bd_\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/_\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+19\n+20namespace _\bD_\bu_\bn_\be {\n+21namespace Functions {\n+22\n+23\n+_\b2_\b4namespace ImplDoc {\n+25\n+26template\n+_\b2_\b7class _\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+28{\n+29public:\n+_\b3_\b0 using _\bB_\ba_\bs_\bi_\bs = B;\n+_\b3_\b1 using _\bV_\be_\bc_\bt_\bo_\br = V;\n+32\n+33 // In order to make the cache work for proxy-references\n+34 // we have to use AutonomousValue instead of std::decay_t\n+_\b3_\b5 using _\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt = Dune::AutonomousValue()\n+[std::declval()])>;\n+36\n+_\b3_\b7 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = typename Basis::GridView;\n+_\b3_\b8 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+_\b3_\b9 using _\bT_\br_\be_\be = typename Basis::LocalView::Tree;\n+_\b4_\b0 using _\bN_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by = NTRE;\n 41\n-42 public:\n+_\b4_\b2 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 43\n-_\b5_\b0 _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br(const F& f)\n-51 {\n-52 f_ = Dune::stackobject_to_shared_ptr(f);\n-53 }\n-54\n-_\b6_\b1 _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br(const std::shared_ptr& f) :\n-62 f_(f)\n-63 {}\n-64\n-_\b7_\b0 Range _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const Domain& x) const\n-71 {\n-72 Range y;\n-73 f_->evaluate(x, y);\n-74 return y;\n-75 }\n-76\n-77 private:\n-78 std::shared_ptr f_;\n-79};\n-80\n-81\n-82\n-104template\n-_\b1_\b0_\b5_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bF_\b> _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be(const F& f)\n-106{\n-107 return _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bF_\b>(f);\n-108}\n-109\n-110\n-136template\n-_\b1_\b3_\b7_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bF_\b> _\bc_\ba_\bl_\bl_\ba_\bb_\bl_\be(const std::shared_ptr& fp)\n-138{\n-139 return _\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bF_\b>(fp);\n-140}\n+_\b4_\b4 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+_\b4_\b5 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+46\n+47protected:\n+48\n+49 // This collects all data that is shared by all related\n+50 // global and local functions. This way we don't need to\n+51 // keep track of it individually.\n+_\b5_\b2 struct _\bD_\ba_\bt_\ba\n+53 {\n+_\b5_\b4 _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt;\n+_\b5_\b5 std::shared_ptr _\bb_\ba_\bs_\bi_\bs;\n+_\b5_\b6 std::shared_ptr _\bc_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs;\n+_\b5_\b7 std::shared_ptr _\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by;\n+58 };\n+59\n+60public:\n+_\b6_\b1 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+62 {\n+63 using LocalView = typename Basis::LocalView;\n+64 using size_type = typename Tree::size_type;\n+65\n+66 public:\n+_\b6_\b7 using _\bD_\bo_\bm_\ba_\bi_\bn = _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn;\n+_\b6_\b8 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+69\n+70 protected:\n+_\b7_\b1 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be(const std::shared_ptr& data)\n+72 : _\bd_\ba_\bt_\ba_\b_(data)\n+73 , _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(_\bd_\ba_\bt_\ba_\b_->_\bb_\ba_\bs_\bi_\bs->localView())\n+74 {\n+75 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.reserve(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize());\n+76 }\n+77\n+_\b8_\b4 _\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+85 : _\bd_\ba_\bt_\ba_\b_(other._\bd_\ba_\bt_\ba_\b_)\n+86 , _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_(other._\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_)\n+87 {\n+88 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.reserve(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.maxSize());\n+89 if (_\bb_\bo_\bu_\bn_\bd())\n+90 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n+91 }\n+92\n+_\b1_\b0_\b0 _\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+101 {\n+102 _\bd_\ba_\bt_\ba_\b_ = other._\bd_\ba_\bt_\ba_\b_;\n+103 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n+104 if (_\bb_\bo_\bu_\bn_\bd())\n+105 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_ = other._\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n+106 return *this;\n+107 }\n+108\n+109 public:\n+_\b1_\b1_\b6 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n+117 {\n+118 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bind(element);\n+119 // Use cache of full local view size. For a subspace basis,\n+120 // this may be larger than the number of local DOFs in the\n+121 // tree. In this case only cache entries associated to local\n+122 // DOFs in the subspace are filled. Cache entries associated\n+123 // to local DOFs which are not contained in the subspace will\n+124 // not be touched.\n+125 //\n+126 // Alternatively one could use a cache that exactly fits\n+127 // the size of the tree. However, this would require to\n+128 // subtract an offset from localIndex(i) on each cache\n+129 // access in operator().\n+130 _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_.resize(_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.size());\n+131 const auto& _\bd_\bo_\bf_\bs = *_\bd_\ba_\bt_\ba_\b_->coefficients;\n+132 for (size_type i = 0; i < _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree().size(); ++i)\n+133 {\n+134 // For a subspace basis the index-within-tree i\n+135 // is not the same as the localIndex within the\n+136 // full local view.\n+137 size_t localIndex = _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree().localIndex(i);\n+138 _\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+139 }\n+140 }\n 141\n-142\n-143\n-144} // namespace Functions\n-145} // namespace Dune\n-146\n-147#endif //DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n-_\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\n-CallableFunctionWrapper< F > callable(const F &f)\n-Create a callable object from some Dune::VirtualFunction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:105\n+_\b1_\b4_\b3 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+144 {\n+145 _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.unbind();\n+146 }\n+147\n+_\b1_\b4_\b9 bool _\bb_\bo_\bu_\bn_\bd() const\n+150 {\n+151 return _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.bound();\n+152 }\n+153\n+_\b1_\b5_\b5 const _\bE_\bl_\be_\bm_\be_\bn_\bt& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt() const\n+156 {\n+157 return _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.element();\n+158 }\n+159\n+160 protected:\n+161\n+162 template\n+_\b1_\b6_\b3 void _\ba_\bs_\bs_\bi_\bg_\bn_\bW_\bi_\bt_\bh(To& to, const From& from) const\n+164 {\n+165 auto from_flat = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(from);\n+166 auto to_flat = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(to);\n+167 assert(from_flat.size() == to_flat.size());\n+168 for (size_type i = 0; i < to_flat.size(); ++i)\n+169 to_flat[i] = from_flat[i];\n+170 }\n+171\n+172 template\n+_\b1_\b7_\b3 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+174 {\n+175 return (*_\bd_\ba_\bt_\ba_\b_->nodeToRangeEntry)(node, treePath, y);\n+176 }\n+177\n+_\b1_\b7_\b8 std::shared_ptr _\bd_\ba_\bt_\ba_\b_;\n+_\b1_\b7_\b9 LocalView _\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_;\n+_\b1_\b8_\b0 std::vector _\bl_\bo_\bc_\ba_\bl_\bD_\bo_\bF_\bs_\b_;\n+181 };\n+182\n+183protected:\n+_\b1_\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_\bB_\ba_\bs_\be(const std::shared_ptr& data)\n+185 : _\bd_\ba_\bt_\ba_\b_(data)\n+186 {\n+187 /* Nothing. */\n+188 }\n+189\n+190public:\n+191\n+_\b1_\b9_\b3 const _\bB_\ba_\bs_\bi_\bs& _\bb_\ba_\bs_\bi_\bs() const\n+194 {\n+195 return *_\bd_\ba_\bt_\ba_\b_->basis;\n+196 }\n+197\n+_\b1_\b9_\b9 const _\bV_\be_\bc_\bt_\bo_\br& _\bd_\bo_\bf_\bs() const\n+200 {\n+201 return *_\bd_\ba_\bt_\ba_\b_->coefficients;\n+202 }\n+203\n+_\b2_\b0_\b5 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+206 {\n+207 return *_\bd_\ba_\bt_\ba_\b_->nodeToRangeEntry;\n+208 }\n+209\n+_\b2_\b1_\b1 const _\bE_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt& _\be_\bn_\bt_\bi_\bt_\by_\bS_\be_\bt() const\n+212 {\n+213 return _\bd_\ba_\bt_\ba_\b_->entitySet;\n+214 }\n+215\n+216protected:\n+_\b2_\b1_\b7 std::shared_ptr _\bd_\ba_\bt_\ba_\b_;\n+218};\n+219\n+220} // namespace ImplDoc\n+221\n+222\n+223\n+224template\n+225class _\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+226\n+264template\n+_\b2_\b6_\b7class _\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+268 : 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+269{\n+270 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+271 using Data = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba;\n+272\n+273public:\n+_\b2_\b7_\b4 using _\bB_\ba_\bs_\bi_\bs = typename _\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs;\n+_\b2_\b7_\b5 using _\bV_\be_\bc_\bt_\bo_\br = typename _\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br;\n+276\n+_\b2_\b7_\b7 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n+_\b2_\b7_\b8 using _\bR_\ba_\bn_\bg_\be = R;\n+279\n+_\b2_\b8_\b0 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+281\n+282private:\n+283\n+284 template\n+285 using LocalBasisRange = typename Node::FiniteElement::Traits::\n+LocalBasisType::Traits::RangeType;\n+286 template\n+287 using NodeData = typename std::vector>;\n+288 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer;\n+289\n+290public:\n+_\b2_\b9_\b1 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+292 : 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+293 {\n+294 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+295 using size_type = typename Base::Tree::size_type;\n+296 using LocalBase::nodeToRangeEntry;\n+297\n+298 public:\n+299\n+_\b3_\b0_\b0 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_\b0_\b1 using _\bD_\bo_\bm_\ba_\bi_\bn = typename LocalBase::Domain;\n+_\b3_\b0_\b2 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_\b0_\b3 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename LocalBase::Element;\n+304\n+_\b3_\b0_\b6 _\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+307 : LocalBase(globalFunction._\bd_\ba_\bt_\ba_\b_)\n+308 , evaluationBuffer_(this->_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree())\n+309 {\n+310 /* Nothing. */\n+311 }\n+312\n+_\b3_\b2_\b2 _\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+323 {\n+324 _\bR_\ba_\bn_\bg_\be y;\n+325 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(y) = 0;\n+326\n+327 TypeTree::forEachLeafNode(this->_\bl_\bo_\bc_\ba_\bl_\bV_\bi_\be_\bw_\b_.tree(), [&](auto&& node, auto&&\n+treePath) {\n+328 const auto& fe = node.finiteElement();\n+329 const auto& localBasis = fe.localBasis();\n+330 auto& shapeFunctionValues = evaluationBuffer_[treePath];\n+331\n+332 localBasis.evaluateFunction(x, shapeFunctionValues);\n+333\n+334 // Compute linear combinations of basis function jacobian.\n+335 // Non-scalar coefficients of dimension coeffDim are handled by\n+336 // processing the coeffDim linear combinations independently\n+337 // and storing them as entries of an array.\n+338 using Value = LocalBasisRange< std::decay_t >;\n+339 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n+[node.localIndex(0)]).size())::value;\n+340 auto values = std::array{};\n+341 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(values) = 0;\n+342 for (size_type i = 0; i < localBasis.size(); ++i)\n+343 {\n+344 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+345 for (std::size_t j = 0; j < coeffDim; ++j)\n+346 values[j].axpy(c[j], shapeFunctionValues[i]);\n+347 }\n+348\n+349 // Assign computed values to node entry of range.\n+350 // Types are matched using the lexicographic ordering provided by\n+flatVectorView.\n+351 LocalBase::assignWith(_\bn_\bo_\bd_\be_\bT_\bo_\bR_\ba_\bn_\bg_\be_\bE_\bn_\bt_\br_\by(node, treePath, y), values);\n+352 });\n+353\n+354 return y;\n+355 }\n+356\n+_\b3_\b5_\b8 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+359 {\n+360 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+361 if (lf._\bb_\bo_\bu_\bn_\bd())\n+362 dlf.bind(lf._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt());\n+363 return dlf;\n+364 }\n+365\n+366 private:\n+367 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n+368 };\n+369\n+371 template\n+_\b3_\b7_\b2 _\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+373 : _\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+374 {}\n+375\n+_\b3_\b7_\b7 _\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+378 : _\bB_\ba_\bs_\be(std::make_shared(Data{{basis->gridView()}, basis,\n+coefficients, nodeToRangeEntry}))\n+379 {}\n+380\n+_\b3_\b8_\b2 _\bR_\ba_\bn_\bg_\be operator() (const _\bD_\bo_\bm_\ba_\bi_\bn& x) const\n+383 {\n+384 // TODO: Implement this using hierarchic search\n+385 DUNE_THROW(NotImplemented,\"not implemented\");\n+386 }\n+387\n+_\b3_\b8_\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+390 {\n+391 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+392 }\n+393\n+_\b4_\b0_\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+403 {\n+404 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(t);\n+405 }\n+406};\n+407\n+408\n+431template\n+_\b4_\b3_\b2auto _\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+433{\n+434 using _\bB_\ba_\bs_\bi_\bs = std::decay_t;\n+435 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+436\n+437 // Small helper functions to wrap vectors using istlVectorBackend\n+438 // if they do not already satisfy the VectorBackend interface.\n+439 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {\n+440 if constexpr (models, decltype(v)>()) {\n+441 return std::forward(v);\n+442 } else {\n+443 return _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(v);\n+444 }\n+445 };\n+446\n+447 using _\bV_\be_\bc_\bt_\bo_\br = std::decay_t\n+(vector)))>;\n+448 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+449 std::forward(basis),\n+450 toConstVectorBackend(std::forward(vector)),\n+451 _\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+452}\n+453\n+454\n+469template\n+_\b4_\b7_\b0class _\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+471 : 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+472{\n+473 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+474 using Data = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\ba_\bt_\ba;\n+475\n+476public:\n+_\b4_\b7_\b7 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+478\n+_\b4_\b7_\b9 using _\bB_\ba_\bs_\bi_\bs = typename _\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bs;\n+_\b4_\b8_\b0 using _\bV_\be_\bc_\bt_\bo_\br = typename _\bB_\ba_\bs_\be_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br;\n+481\n+_\b4_\b8_\b2 using _\bD_\bo_\bm_\ba_\bi_\bn = typename _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bo_\bm_\ba_\bi_\bn;\n+_\b4_\b8_\b3 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+484\n+_\b4_\b8_\b5 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+486\n+487private:\n+488\n+489 template\n+490 using LocalBasisRange = typename Node::FiniteElement::Traits::\n+LocalBasisType::Traits::JacobianType;\n+491 template\n+492 using NodeData = typename std::vector< LocalBasisRange >;\n+493 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer;\n+494\n+495public:\n+496\n+_\b5_\b0_\b4 class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+505 : 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+506 {\n+507 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+508 using size_type = typename Base::Tree::size_type;\n+509 using LocalBase::nodeToRangeEntry;\n+510\n+511 public:\n+_\b5_\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_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be;\n+_\b5_\b1_\b3 using _\bD_\bo_\bm_\ba_\bi_\bn = typename LocalBase::Domain;\n+_\b5_\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+_\b5_\b1_\b5 using _\bE_\bl_\be_\bm_\be_\bn_\bt = typename LocalBase::Element;\n+516\n+_\b5_\b1_\b8 _\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+519 : LocalBase(globalFunction.data_)\n+520 , evaluationBuffer_(this->localView_.tree())\n+521 {\n+522 /* Nothing. */\n+523 }\n+524\n+_\b5_\b3_\b1 void _\bb_\bi_\bn_\bd(const _\bE_\bl_\be_\bm_\be_\bn_\bt& element)\n+532 {\n+533 LocalBase::bind(element);\n+534 geometry_.emplace(element.geometry());\n+535 }\n+536\n+_\b5_\b3_\b8 void _\bu_\bn_\bb_\bi_\bn_\bd()\n+539 {\n+540 geometry_.reset();\n+541 LocalBase::unbind();\n+542 }\n+543\n+_\b5_\b5_\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+558 {\n+559 _\bR_\ba_\bn_\bg_\be y;\n+560 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(y) = 0;\n+561\n+562 const auto& jacobianInverse = geometry_->jacobianInverse(x);\n+563\n+564 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&&\n+treePath) {\n+565 const auto& fe = node.finiteElement();\n+566 const auto& localBasis = fe.localBasis();\n+567 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];\n+568\n+569 localBasis.evaluateJacobian(x, shapeFunctionJacobians);\n+570\n+571 // Compute linear combinations of basis function jacobian.\n+572 // Non-scalar coefficients of dimension coeffDim are handled by\n+573 // processing the coeffDim linear combinations independently\n+574 // and storing them as entries of an array.\n+575 using RefJacobian = LocalBasisRange< std::decay_t >;\n+576 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n+[node.localIndex(0)]).size())::value;\n+577 auto refJacobians = std::array{};\n+578 _\bi_\bs_\bt_\bl_\bV_\be_\bc_\bt_\bo_\br_\bB_\ba_\bc_\bk_\be_\bn_\bd(refJacobians) = 0;\n+579 for (size_type i = 0; i < localBasis.size(); ++i)\n+580 {\n+581 auto c = _\bf_\bl_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bV_\bi_\be_\bw(this->localDoFs_[node.localIndex(i)]);\n+582 for (std::size_t j = 0; j < coeffDim; ++j)\n+583 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);\n+584 }\n+585\n+586 // Transform Jacobians form local to global coordinates.\n+587 using Jacobian = decltype(refJacobians[0] * jacobianInverse);\n+588 auto jacobians = std::array{};\n+589 std::transform(\n+590 refJacobians.begin(), refJacobians.end(), jacobians.begin(),\n+591 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });\n+592\n+593 // Assign computed Jacobians to node entry of range.\n+594 // Types are matched using the lexicographic ordering provided by\n+flatVectorView.\n+595 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);\n+596 });\n+597\n+598 return y;\n+599 }\n+600\n+_\b6_\b0_\b2 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+603 {\n+604 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n+605 }\n+606\n+607 private:\n+608 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n+609 std::optional geometry_;\n+610 };\n+611\n+_\b6_\b1_\b8 _\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+619 : _\bB_\ba_\bs_\be(data)\n+620 {\n+621 /* Nothing. */\n+622 }\n+623\n+_\b6_\b2_\b5 _\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+626 {\n+627 // TODO: Implement this using hierarchic search\n+628 DUNE_THROW(NotImplemented,\"not implemented\");\n+629 }\n+630\n+_\b6_\b3_\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+632 {\n+633 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n+634 }\n+635\n+_\b6_\b3_\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+638 {\n+639 return _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(f);\n+640 }\n+641};\n+642\n+643\n+644} // namespace Functions\n+645} // namespace Dune\n+646\n+647#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n+_\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+_\bi_\bs_\bt_\bl_\bv_\be_\bc_\bt_\bo_\br_\bb_\ba_\bc_\bk_\be_\bn_\bd_\b._\bh_\bh\n+_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\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:_\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:432\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:346\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n-Wrap a Dune::VirtualFunction into a callable object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:38\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_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\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:179\n+_\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:37\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:56\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:30\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:28\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: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_\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: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:_\bB_\ba_\bs_\bi_\bs\n+B Basis\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:30\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:39\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:31\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: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:_\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: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:_\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: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:_\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:40\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: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:_\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: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:_\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:193\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:38\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: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:_\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:42\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:35\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:53\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:54\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:57\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:55\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:56\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: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_\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:100\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: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+_\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:116\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: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+_\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: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+_\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:84\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:180\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:163\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:178\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:173\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: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+_\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:143\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:67\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:71\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:472\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:479\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:631\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-Forward operator() to F::evaluate()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:70\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_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n-CallableFunctionWrapper(const F &f)\n-Instantiate from reference to f.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:50\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_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bC_\ba_\bl_\bl_\ba_\bb_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n-CallableFunctionWrapper(const std::shared_ptr< const F > &f)\n-Instantiate from std::shared_ptr to f.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn callable.hh:61\n+Not implemented.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn discreteglobalbasisfunction.hh:625\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:483\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:637\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:618\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:477\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:480\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:485\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:482\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:269\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: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:_\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:372\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:377\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:402\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:274\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:280\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:278\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:275\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:277\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:293\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:302\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:301\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:306\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:358\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:322\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:303\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:506\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:557\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:513\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:515\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:602\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:514\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:538\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:518\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:531\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: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>\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: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:_\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:35\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:36\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00185.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00185.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: treedata.hh File Reference\n+dune-functions: gridviewfunction.hh File Reference\n \n \n \n \n \n \n \n@@ -65,53 +65,58 @@\n
    \n \n \n \n \n \n \n
    \n \n-
    treedata.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    gridviewfunction.hh File Reference
    \n \n
    \n
    #include <memory>
    \n-#include <dune/common/shared_ptr.hh>
    \n-#include <dune/typetree/pairtraversal.hh>
    \n-#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n-#include <dune/functions/gridfunctions/gridfunction.hh>
    \n+#include <dune/common/concept.hh>
    \n+#include <dune/functions/gridfunctions/gridfunction.hh>
    \n+#include <dune/functions/gridfunctions/gridviewentityset.hh>
    \n+#include <dune/functions/gridfunctions/analyticgridviewfunction.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    struct  Dune::Functions::UniformNodeVisitor< SimpleNodeVisitorImp, leafOnly >
     Mixin for visitors that should apply the same action on all nodes. More...
    class  Dune::Functions::GridViewFunction< Signature, GridView, DerivativeTraits, bufferSize >
     
    class  Dune::Functions::TreeData< T, ND, LO >
     Container allowing to attach data to each node of a tree. More...
     
    struct  Dune::Functions::TreeData< T, ND, LO >::InitVisitor
     
    struct  Dune::Functions::TreeData< T, ND, LO >::DestroyVisitor
     
    struct  Dune::Functions::TreeData< T, ND, LO >::CopyVisitor
    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 , typename std::enable_if< models< Imp::HasFreeLocalFunction, F >(), int >::type = 0>
    std::decay< F >::type Dune::Functions::makeGridViewFunction (F &&f, const GridView &gridView)
     Construct a function modeling GridViewFunction from function and grid view.
     
    template<class F , class GridView , typename std::enable_if< not(models< Imp::HasFreeLocalFunction, F >()), int >::type = 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,36 +1,47 @@\n dune-functions\u00a02.9.0\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-treedata.hh File Reference\n+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+gridviewfunction.hh File Reference\n #include \n-#include \n-#include \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 \n #include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\be_\bn_\bt_\bi_\bt_\by_\bs_\be_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\ba_\bn_\ba_\bl_\by_\bt_\bi_\bc_\bg_\br_\bi_\bd_\bv_\bi_\be_\bw_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b<_\b _\bS_\bi_\bm_\bp_\bl_\be_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br_\bI_\bm_\bp_\b,_\b _\bl_\be_\ba_\bf_\bO_\bn_\bl_\by_\b _\b>\n-\u00a0 Mixin for visitors that should apply the same action on all nodes.\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:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b<_\b _\bT_\b,_\b _\bN_\bD_\b,_\b _\bL_\bO_\b _\b>\n-\u00a0 Container allowing to attach data to each node of a tree. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b,_\b _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\b,\n+ _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,_\b _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b<_\b _\bT_\b,_\b _\bN_\bD_\b,_\b _\bL_\bO_\b _\b>_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b<_\b _\bT_\b,_\b _\bN_\bD_\b,_\b _\bL_\bO_\b _\b>_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b<_\b _\bT_\b,_\b _\bN_\bD_\b,_\b _\bL_\bO_\b _\b>_\b:_\b:_\bC_\bo_\bp_\by_\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:_\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bR_\ba_\bn_\bg_\be_\b(_\bD_\bo_\bm_\ba_\bi_\bn_\b)_\b,_\b _\bG_\bV_\b,_\b _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs_\b,\n+ _\bb_\bu_\bf_\bf_\be_\br_\bS_\bi_\bz_\be_\b _\b>\n+\u00a0 Wrapper class for functions defined on a GridView. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0\n namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template(), int >::type = 0>\n+std::decay< F >::type\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\n+ GridView &gridView)\n+\u00a0 Construct a function modeling _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn from\n+ function and grid view.\n+\u00a0\n+template()), int >::type = 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\n+ GridView &gridView) -> decltype\n+ (_\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 >(f),\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\n+ function 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/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: treedata.hh Source File\n+dune-functions: gridviewfunction.hh Source File\n \n \n \n \n \n \n \n@@ -70,304 +70,103 @@\n \n \n \n \n \n \n \n
    \n-
    treedata.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#ifndef DUNE_FUNCTIONS_COMMON_TREEDATA_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_TREEDATA_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n+
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n
    5
    \n-
    6
    \n-
    7#warning This file is deprecated. Please use TreeContainer from dune-typetree instead.
    \n-
    8
    \n-
    9#include <memory>
    \n-
    10
    \n-
    11#include <dune/common/shared_ptr.hh>
    \n-
    12
    \n-
    13#include <dune/typetree/pairtraversal.hh>
    \n+
    6#include <memory>
    \n+
    7
    \n+
    8#include <dune/common/concept.hh>
    \n+
    9
    \n+\n+\n+\n+
    13
    \n
    14
    \n-\n-\n+
    15namespace Dune {
    \n+
    16namespace Functions {
    \n
    17
    \n-
    18namespace Dune {
    \n-
    19namespace Functions {
    \n-
    20
    \n-
    34template<class SimpleNodeVisitorImp, bool leafOnly>
    \n-
    \n-
    35struct
    \n-
    36[[deprecated("This is an implementation detail of the deprecated class TreeDate and thus deprecated itself.")]]
    \n-\n-
    38 public TypeTree::TreeVisitor,
    \n-
    39 public TypeTree::DynamicTraversal
    \n-
    40{
    \n-
    41 // This is only enabled, if we want to incorporate inner nodes.
    \n-
    42 // Checking leafOnly would be sufficient, but for SFINAE the
    \n-
    43 // the enable_if condition must depend on the template parameter.
    \n-
    44 template<typename Node, typename TreePath,
    \n-
    45 typename std::enable_if<(not leafOnly) and (not Node::isLeaf), int>::type = 0>
    \n-
    \n-
    46 void pre(Node& node, TreePath treePath)
    \n-
    47 {
    \n-
    48 static_cast<SimpleNodeVisitorImp*>(this)->apply(node, treePath);
    \n-
    49 }
    \n+
    18
    \n+
    19
    \n+
    20template<class Signature, class GridView, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n+
    \n+\n+
    22{};
    \n+
    \n+
    23
    \n+
    24
    \n+
    25
    \n+
    40template<class Range, class Domain, class GV, template<class> class DerivativeTraits, size_t bufferSize>
    \n+
    \n+
    41class GridViewFunction<Range(Domain), GV, DerivativeTraits, bufferSize> :
    \n+
    42 public GridFunction<Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize>
    \n+
    43{
    \n+
    44 using Base = GridFunction<Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize>;
    \n+
    45public:
    \n+
    46 using GridView = GV;
    \n+
    47
    \n+
    48 using Base::Base;
    \n+
    49};
    \n
    \n
    50
    \n-
    51 template<typename Node, typename TreePath,
    \n-
    52 typename std::enable_if<(leafOnly) and (not Node::isLeaf), int>::type = 0>
    \n-
    \n-
    53 void pre(Node& node, TreePath treePath)
    \n-
    54 {}
    \n-
    \n-
    55
    \n-
    56 template<typename Node, typename TreePath>
    \n-
    \n-
    57 void leaf(Node& node, TreePath treePath)
    \n-
    58 {
    \n-
    59 static_cast<SimpleNodeVisitorImp*>(this)->apply(node, treePath);
    \n-
    60 }
    \n-
    \n-
    61};
    \n-
    \n-
    62
    \n-
    63
    \n-
    64
    \n-
    91template<class T, template<class> class ND, bool LO>
    \n-
    \n-
    92class
    \n-
    93[[deprecated("This class is deprecated. Please use TreeContainer from dune-typetree instead.")]]
    \n-\n+
    51
    \n+
    52
    \n+
    64template<class F, class GridView,
    \n+
    65 typename std::enable_if<
    \n+
    66 models< Imp::HasFreeLocalFunction, F>() , int>::type = 0>
    \n+
    67typename std::decay<F>::type
    \n+
    \n+
    68 makeGridViewFunction(F&& f, const GridView& gridView)
    \n+
    69{
    \n+
    70 return std::forward<F>(f);
    \n+
    71}
    \n+
    \n+
    72
    \n+
    73
    \n+
    74
    \n+
    90template<class F, class GridView,
    \n+
    91 typename std::enable_if<
    \n+
    92 not(models< Imp::HasFreeLocalFunction, F>()) , int>::type = 0>
    \n+
    \n+
    93auto makeGridViewFunction(F&& f, const GridView& gridView)
    \n+
    94 -> decltype(makeAnalyticGridViewFunction(std::forward<F>(f), gridView))
    \n
    95{
    \n-
    96
    \n-
    97public:
    \n+
    96 return makeAnalyticGridViewFunction(std::forward<F>(f), gridView);
    \n+
    97}
    \n+
    \n
    98
    \n-
    100 using Tree = T;
    \n-
    101
    \n-
    103 using size_type = typename Tree::size_type;
    \n-
    104
    \n-
    106 static const bool leafOnly = LO;
    \n-
    107
    \n-
    109 template<class Node>
    \n-
    110 using NodeData = ND<Node>;
    \n-
    111
    \n-
    112protected:
    \n-
    113 using RawContainer = std::vector<void*>;
    \n-
    114
    \n-
    115
    \n-
    116 // Since we can generate the node data type only if
    \n-
    117 // we know the type of the node, we have to do
    \n-
    118 // initialization, copy, and destruction via a
    \n-
    119 // tree traversal. Once we can use C++14 this can
    \n-
    120 // be written in a much easier and more selfcontained
    \n-
    121 // ways using generic lambda functions.
    \n-
    122 // Until then we need explicit visitor classes for
    \n-
    123 // each operation.
    \n-
    124
    \n-
    \n-
    125 struct InitVisitor :
    \n-
    126 public UniformNodeVisitor<InitVisitor, leafOnly>
    \n-
    127 {
    \n-
    \n-\n-
    129 data_(data)
    \n-
    130 {}
    \n-
    \n-
    131
    \n-
    132 template<typename Node, typename TreePath>
    \n-
    \n-
    133 void apply(Node& node, TreePath treePath)
    \n-
    134 {
    \n-
    135 auto&& index = node.treeIndex();
    \n-
    136 if (data_.size() < index+1)
    \n-
    137 data_.resize(index+1, nullptr);
    \n-
    138 data_[index] = new NodeData<Node>;
    \n-
    139 }
    \n-
    \n-
    140
    \n-
    141
    \n-\n-
    143 };
    \n-
    \n-
    144
    \n-
    \n-\n-
    146 public UniformNodeVisitor<DestroyVisitor, leafOnly>
    \n-
    147 {
    \n-
    \n-\n-
    149 data_(data)
    \n-
    150 {}
    \n-
    \n-
    151
    \n-
    152 template<typename Node, typename TreePath>
    \n-
    \n-
    153 void apply(Node& node, TreePath treePath)
    \n-
    154 {
    \n-
    155 auto&& index = node.treeIndex();
    \n-
    156 auto p = (NodeData<Node>*)(data_[index]);
    \n-
    157 delete p;
    \n-
    158 data_[index] = nullptr;
    \n-
    159 }
    \n-
    \n-
    160
    \n-\n-
    162 };
    \n-
    \n-
    163
    \n-
    \n-
    164 struct CopyVisitor :
    \n-
    165 public UniformNodeVisitor<CopyVisitor, leafOnly>
    \n-
    166 {
    \n-
    \n-
    167 CopyVisitor(TreeData& thisTD, const TreeData& otherTD) :
    \n-
    168 thisTD_(thisTD),
    \n-
    169 otherTD_(otherTD)
    \n-
    170 {}
    \n-
    \n-
    171
    \n-
    172 template<typename Node, typename TreePath>
    \n-
    \n-
    173 void apply(Node& node, TreePath treePath)
    \n-
    174 {
    \n-
    175 thisTD_[node] = otherTD_[node];
    \n-
    176 }
    \n-
    \n-
    177
    \n-\n-\n-
    180 };
    \n-
    \n-
    181
    \n-
    182public:
    \n-
    183
    \n-
    \n-\n-
    186 tree_(nullptr)
    \n-
    187 {}
    \n-
    \n-
    188
    \n-
    \n-
    196 void init(const Tree& tree)
    \n-
    197 {
    \n-
    198 if (tree_)
    \n-
    199 destroy();
    \n-
    200 tree_ = &tree;
    \n-
    201 TypeTree::applyToTree(*tree_, InitVisitor(data_));
    \n-
    202 }
    \n-
    \n-
    203
    \n-
    \n-
    205 TreeData(const TreeData& other) :
    \n-
    206 tree_(other.tree_)
    \n-
    207 {
    \n-
    208 TypeTree::applyToTree(*tree_, InitVisitor(data_));
    \n-
    209 TypeTree::applyToTree(*tree_, CopyVisitor(*this, other));
    \n-
    210 }
    \n-
    \n-
    211
    \n-
    \n-\n-
    214 {
    \n-
    215 if (tree_)
    \n-
    216 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));
    \n-
    217 tree_ = other.tree_;
    \n-
    218 TypeTree::applyToTree(*tree_, CopyVisitor(*this, other));
    \n-
    219 return *this;
    \n-
    220 }
    \n-
    \n-
    221
    \n-
    \n-
    223 void destroy()
    \n-
    224 {
    \n-
    225 if (tree_)
    \n-
    226 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));
    \n-
    227 tree_ = nullptr;
    \n-
    228 }
    \n-
    \n-
    229
    \n-
    \n-\n-
    232 {
    \n-
    233 if (tree_)
    \n-
    234 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));
    \n-
    235 }
    \n-
    \n-
    236
    \n-
    238 template<class Node>
    \n-
    \n-
    239 NodeData<Node>& operator[](const Node& node)
    \n-
    240 {
    \n-
    241 return *(NodeData<Node>*)(data_[node.treeIndex()]);
    \n-
    242 }
    \n-
    \n-
    243
    \n-
    245 template<class Node>
    \n-
    \n-
    246 const NodeData<Node>& operator[](const Node& node) const
    \n-
    247 {
    \n-
    248 return *(NodeData<Node>*)(data_[node.treeIndex()]);
    \n-
    249 }
    \n-
    \n-
    250
    \n-
    251protected:
    \n-
    252
    \n-
    253 const Tree* tree_;
    \n-\n-
    255};
    \n-
    \n-
    256
    \n-
    257
    \n-
    258
    \n-
    259} // namespace Functions
    \n-
    260} // namespace Dune
    \n-
    261
    \n-
    262#endif // DUNE_FUNCTIONS_COMMON_TREEDATA_HH
    \n-\n-\n+
    99
    \n+
    100
    \n+
    101} // end of namespace Dune::Functions
    \n+
    102} // end of namespace Dune
    \n+
    103
    \n+
    104#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH
    \n+\n+\n+\n+
    AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView &gridView)
    Create an AnalyticGridViewFunction from a function and a grid view.
    Definition analyticgridviewfunction.hh:230
    \n
    Definition polynomial.hh:10
    \n-
    Mixin for visitors that should apply the same action on all nodes.
    Definition treedata.hh:40
    \n-
    void pre(Node &node, TreePath treePath)
    Definition treedata.hh:46
    \n-
    void leaf(Node &node, TreePath treePath)
    Definition treedata.hh:57
    \n-
    Container allowing to attach data to each node of a tree.
    Definition treedata.hh:95
    \n-
    TreeData(const TreeData &other)
    Copy constructor.
    Definition treedata.hh:205
    \n-
    void init(const Tree &tree)
    Initialize from tree.
    Definition treedata.hh:196
    \n-
    T Tree
    Type of tree the data is associated with.
    Definition treedata.hh:100
    \n-
    const Tree * tree_
    Definition treedata.hh:253
    \n-
    void destroy()
    Destroy data.
    Definition treedata.hh:223
    \n-
    const NodeData< Node > & operator[](const Node &node) const
    Get reference to data associated to given node.
    Definition treedata.hh:246
    \n-
    TreeData & operator=(const TreeData &other)
    Copy assignment.
    Definition treedata.hh:213
    \n-
    ~TreeData()
    Destructor.
    Definition treedata.hh:231
    \n-
    ND< Node > NodeData
    Template to determine the data type for given node type.
    Definition treedata.hh:110
    \n-
    TreeData()
    Default constructor.
    Definition treedata.hh:185
    \n-
    std::vector< void * > RawContainer
    Definition treedata.hh:113
    \n-
    NodeData< Node > & operator[](const Node &node)
    Get mutable reference to data associated to given node.
    Definition treedata.hh:239
    \n-
    typename Tree::size_type size_type
    Type used for indices and size information.
    Definition treedata.hh:103
    \n-
    RawContainer data_
    Definition treedata.hh:254
    \n-
    Definition treedata.hh:127
    \n-
    InitVisitor(RawContainer &data)
    Definition treedata.hh:128
    \n-
    void apply(Node &node, TreePath treePath)
    Definition treedata.hh:133
    \n-
    RawContainer & data_
    Definition treedata.hh:142
    \n-\n-
    RawContainer & data_
    Definition treedata.hh:161
    \n-
    DestroyVisitor(RawContainer &data)
    Definition treedata.hh:148
    \n-
    void apply(Node &node, TreePath treePath)
    Definition treedata.hh:153
    \n-
    Definition treedata.hh:166
    \n-
    CopyVisitor(TreeData &thisTD, const TreeData &otherTD)
    Definition treedata.hh:167
    \n-
    void apply(Node &node, TreePath treePath)
    Definition treedata.hh:173
    \n-
    TreeData & thisTD_
    Definition treedata.hh:178
    \n-
    const TreeData & otherTD_
    Definition treedata.hh:179
    \n+
    std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)
    Construct a function modeling GridViewFunction from function and grid view.
    Definition gridviewfunction.hh:68
    \n+
    Definition gridfunction.hh:32
    \n+
    An entity set for all entities of given codim in a grid view.
    Definition gridviewentityset.hh:23
    \n+
    Definition gridviewfunction.hh:22
    \n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,325 +1,107 @@\n dune-functions\u00a02.9.0\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-treedata.hh\n+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\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#ifndef DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n-4#define DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n+3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n 5\n-6\n-7#warning This file is deprecated. Please use TreeContainer from dune-typetree\n-instead.\n-8\n-9#include \n-10\n-11#include \n-12\n-13#include \n+6#include \n+7\n+8#include \n+9\n+10#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+11#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+12#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+13\n 14\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/_\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+15namespace _\bD_\bu_\bn_\be {\n+16namespace Functions {\n 17\n-18namespace _\bD_\bu_\bn_\be {\n-19namespace Functions {\n-20\n-34template\n-_\b3_\b5struct\n-36[[deprecated(\"This is an implementation detail of the deprecated class\n-TreeDate and thus deprecated itself.\")]]\n-37_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br :\n-38 public TypeTree::TreeVisitor,\n-39 public TypeTree::DynamicTraversal\n-40{\n-41 // This is only enabled, if we want to incorporate inner nodes.\n-42 // Checking leafOnly would be sufficient, but for SFINAE the\n-43 // the enable_if condition must depend on the template parameter.\n-44 template::type =\n-0>\n-_\b4_\b6 void _\bp_\br_\be(Node& node, TreePath treePath)\n-47 {\n-48 static_cast(this)->apply(node, treePath);\n-49 }\n+18\n+19\n+20template class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+_\b2_\b1class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+22{};\n+23\n+24\n+25\n+40template class\n+DerivativeTraits, size_t bufferSize>\n+_\b4_\b1class _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn :\n+42 public _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn,\n+DerivativeTraits, bufferSize>\n+43{\n+44 using _\bB_\ba_\bs_\be = _\bG_\br_\bi_\bd_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn,\n+DerivativeTraits, bufferSize>;\n+45public:\n+_\b4_\b6 using _\bG_\br_\bi_\bd_\bV_\bi_\be_\bw = GV;\n+47\n+48 using Base::Base;\n+49};\n 50\n-51 template::type = 0>\n-_\b5_\b3 void _\bp_\br_\be(Node& node, TreePath treePath)\n-54 {}\n-55\n-56 template\n-_\b5_\b7 void _\bl_\be_\ba_\bf(Node& node, TreePath treePath)\n-58 {\n-59 static_cast(this)->apply(node, treePath);\n-60 }\n-61};\n-62\n-63\n-64\n-91template class ND, bool LO>\n-_\b9_\b2class\n-93[[deprecated(\"This class is deprecated. Please use TreeContainer from dune-\n-typetree instead.\")]]\n-94_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n+51\n+52\n+64template() , int>::type = 0>\n+67typename std::decay::type\n+_\b6_\b8 _\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+69{\n+70 return std::forward(f);\n+71}\n+72\n+73\n+74\n+90template()) , int>::type = 0>\n+_\b9_\b3auto _\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+94 -> 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 95{\n-96\n-97public:\n+96 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+97}\n 98\n-_\b1_\b0_\b0 using _\bT_\br_\be_\be = T;\n-101\n-_\b1_\b0_\b3 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = typename Tree::size_type;\n-104\n-_\b1_\b0_\b6 static const bool leafOnly = LO;\n-107\n-109 template\n-_\b1_\b1_\b0 using _\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba = ND;\n-111\n-112protected:\n-_\b1_\b1_\b3 using _\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br = std::vector;\n-114\n-115\n-116 // Since we can generate the node data type only if\n-117 // we know the type of the node, we have to do\n-118 // initialization, copy, and destruction via a\n-119 // tree traversal. Once we can use C++14 this can\n-120 // be written in a much easier and more selfcontained\n-121 // ways using generic lambda functions.\n-122 // Until then we need explicit visitor classes for\n-123 // each operation.\n-124\n-_\b1_\b2_\b5 struct _\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br :\n-126 public _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-127 {\n-_\b1_\b2_\b8 _\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br(_\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br& data) :\n-129 data_(data)\n-130 {}\n-131\n-132 template\n-_\b1_\b3_\b3 void _\ba_\bp_\bp_\bl_\by(Node& node, TreePath treePath)\n-134 {\n-135 auto&& index = node.treeIndex();\n-136 if (data_.size() < index+1)\n-137 data_.resize(index+1, nullptr);\n-138 data_[index] = new _\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>;\n-139 }\n-140\n-141\n-_\b1_\b4_\b2 _\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br& _\bd_\ba_\bt_\ba_\b_;\n-143 };\n-144\n-_\b1_\b4_\b5 struct _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br :\n-146 public _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-147 {\n-_\b1_\b4_\b8 _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(_\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br& data) :\n-149 data_(data)\n-150 {}\n-151\n-152 template\n-_\b1_\b5_\b3 void _\ba_\bp_\bp_\bl_\by(Node& node, TreePath treePath)\n-154 {\n-155 auto&& index = node.treeIndex();\n-156 auto p = (_\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>*)(data_[index]);\n-157 delete p;\n-158 data_[index] = nullptr;\n-159 }\n-160\n-_\b1_\b6_\b1 _\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br& _\bd_\ba_\bt_\ba_\b_;\n-162 };\n-163\n-_\b1_\b6_\b4 struct _\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br :\n-165 public _\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-166 {\n-_\b1_\b6_\b7 _\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(_\bT_\br_\be_\be_\bD_\ba_\bt_\ba& thisTD, const _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& otherTD) :\n-168 thisTD_(thisTD),\n-169 otherTD_(otherTD)\n-170 {}\n-171\n-172 template\n-_\b1_\b7_\b3 void _\ba_\bp_\bp_\bl_\by(Node& node, TreePath treePath)\n-174 {\n-175 thisTD_[node] = otherTD_[node];\n-176 }\n-177\n-_\b1_\b7_\b8 _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& _\bt_\bh_\bi_\bs_\bT_\bD_\b_;\n-_\b1_\b7_\b9 const _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& _\bo_\bt_\bh_\be_\br_\bT_\bD_\b_;\n-180 };\n-181\n-182public:\n-183\n-_\b1_\b8_\b5 _\bT_\br_\be_\be_\bD_\ba_\bt_\ba() :\n-186 tree_(nullptr)\n-187 {}\n-188\n-_\b1_\b9_\b6 void _\bi_\bn_\bi_\bt(const _\bT_\br_\be_\be& tree)\n-197 {\n-198 if (tree_)\n-199 destroy();\n-200 tree_ = &tree;\n-201 TypeTree::applyToTree(*tree_, _\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n-202 }\n-203\n-_\b2_\b0_\b5 _\bT_\br_\be_\be_\bD_\ba_\bt_\ba(const _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& other) :\n-206 tree_(other.tree_)\n-207 {\n-208 TypeTree::applyToTree(*tree_, _\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n-209 TypeTree::applyToTree(*tree_, _\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(*this, other));\n-210 }\n-211\n-_\b2_\b1_\b3 _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\br_\be_\be_\bD_\ba_\bt_\ba& other)\n-214 {\n-215 if (tree_)\n-216 TypeTree::applyToTree(*tree_, _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n-217 tree_ = other._\bt_\br_\be_\be_\b_;\n-218 TypeTree::applyToTree(*tree_, _\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(*this, other));\n-219 return *this;\n-220 }\n-221\n-_\b2_\b2_\b3 void _\bd_\be_\bs_\bt_\br_\bo_\by()\n-224 {\n-225 if (tree_)\n-226 TypeTree::applyToTree(*tree_, _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n-227 tree_ = nullptr;\n-228 }\n-229\n-_\b2_\b3_\b1 _\b~_\bT_\br_\be_\be_\bD_\ba_\bt_\ba()\n-232 {\n-233 if (tree_)\n-234 TypeTree::applyToTree(*tree_, _\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br(data_));\n-235 }\n-236\n-238 template\n-_\b2_\b3_\b9 _\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](const Node& node)\n-240 {\n-241 return *(_\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>*)(data_[node.treeIndex()]);\n-242 }\n-243\n-245 template\n-_\b2_\b4_\b6 const _\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](const Node& node) const\n-247 {\n-248 return *(_\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba_\b<_\bN_\bo_\bd_\be_\b>*)(data_[node.treeIndex()]);\n-249 }\n-250\n-251protected:\n-252\n-_\b2_\b5_\b3 const _\bT_\br_\be_\be* _\bt_\br_\be_\be_\b_;\n-_\b2_\b5_\b4 _\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br _\bd_\ba_\bt_\ba_\b_;\n-255};\n-256\n-257\n-258\n-259} // namespace Functions\n-260} // namespace Dune\n-261\n-262#endif // DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n+99\n+100\n+101} // end of namespace Dune::Functions\n+102} // end of namespace Dune\n+103\n+104#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+_\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+AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::\n+template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::\n+template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::\n+decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView\n+&gridView)\n+Create an AnalyticGridViewFunction from a function and a grid view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn analyticgridviewfunction.hh:230\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-Mixin for visitors that should apply the same action on all nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:40\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bp_\br_\be\n-void pre(Node &node, TreePath treePath)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:46\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bU_\bn_\bi_\bf_\bo_\br_\bm_\bN_\bo_\bd_\be_\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 treedata.hh:57\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n-Container allowing to attach data to each node of a tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:95\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n-TreeData(const TreeData &other)\n-Copy constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:205\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bi_\bn_\bi_\bt\n-void init(const Tree &tree)\n-Initialize from tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:196\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bT_\br_\be_\be\n-T Tree\n-Type of tree the data is associated with.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bt_\br_\be_\be_\b_\n-const Tree * tree_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:253\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bd_\be_\bs_\bt_\br_\bo_\by\n-void destroy()\n-Destroy data.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:223\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const NodeData< Node > & operator[](const Node &node) const\n-Get reference to data associated to given node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:246\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-TreeData & operator=(const TreeData &other)\n-Copy assignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:213\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\b~_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n-~TreeData()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:231\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bN_\bo_\bd_\be_\bD_\ba_\bt_\ba\n-ND< Node > NodeData\n-Template to determine the data type for given node type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:110\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba\n-TreeData()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:185\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bR_\ba_\bw_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br\n-std::vector< void * > RawContainer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:113\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-NodeData< Node > & operator[](const Node &node)\n-Get mutable reference to data associated to given node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:239\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-typename Tree::size_type size_type\n-Type used for indices and size information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:103\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bd_\ba_\bt_\ba_\b_\n-RawContainer data_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:254\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:127\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-InitVisitor(RawContainer &data)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-void apply(Node &node, TreePath treePath)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:133\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bI_\bn_\bi_\bt_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bd_\ba_\bt_\ba_\b_\n-RawContainer & data_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:142\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bd_\ba_\bt_\ba_\b_\n-RawContainer & data_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:161\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-DestroyVisitor(RawContainer &data)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:148\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bD_\be_\bs_\bt_\br_\bo_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-void apply(Node &node, TreePath treePath)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:153\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:166\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-CopyVisitor(TreeData &thisTD, const TreeData &otherTD)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:167\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-void apply(Node &node, TreePath treePath)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:173\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bt_\bh_\bi_\bs_\bT_\bD_\b_\n-TreeData & thisTD_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:178\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bT_\br_\be_\be_\bD_\ba_\bt_\ba_\b:_\b:_\bC_\bo_\bp_\by_\bV_\bi_\bs_\bi_\bt_\bo_\br_\b:_\b:_\bo_\bt_\bh_\be_\br_\bT_\bD_\b_\n-const TreeData & otherTD_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treedata.hh:179\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< F >::type 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:68\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: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:23\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:22\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:46\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: localfunction.hh File Reference\n+dune-functions: localderivativetraits.hh File Reference\n \n \n \n \n \n \n \n@@ -65,40 +65,36 @@\n
    \n \n \n \n \n \n \n
    \n \n-
    localfunction.hh File Reference
    \n+
    localderivativetraits.hh File Reference
    \n
    \n
    \n-
    #include <type_traits>
    \n-#include <dune/common/typeutilities.hh>
    \n-#include <dune/functions/common/defaultderivativetraits.hh>
    \n-#include <dune/functions/common/differentiablefunction.hh>
    \n-#include <dune/functions/common/localfunction_imp.hh>
    \n-#include <dune/functions/common/typeerasure.hh>
    \n-#include <dune/functions/common/functionconcepts.hh>
    \n+\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::LocalFunction< Signature, LocalContext, DerivativeTraits, bufferSize >
    struct  Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >
     Derivative traits for local functions. More...
     
    class  Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >
     Class storing local functions using type erasure. 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": "@@ -1,31 +1,27 @@\n dune-functions\u00a02.9.0\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+ * _\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-localfunction.hh File Reference\n-#include \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-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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+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-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+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/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: localfunction.hh Source File\n+dune-functions: localderivativetraits.hh Source File\n \n \n \n \n \n \n \n@@ -70,174 +70,72 @@\n \n \n \n \n \n \n \n
    \n-
    localfunction.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#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n+
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n
    5
    \n-
    6#include <type_traits>
    \n-
    7
    \n-
    8#include <dune/common/typeutilities.hh>
    \n+
    6
    \n+\n+
    8
    \n
    9
    \n-\n-\n-\n-\n-\n-
    15
    \n-
    16
    \n-
    17
    \n-
    18namespace Dune {
    \n-
    19namespace Functions {
    \n-
    20
    \n-
    21
    \n-
    22
    \n-
    23/*
    \n-
    24 * Default implementation is empty
    \n-
    25 * The actual implementation is only given if Signature is an type
    \n-
    26 * describing a function signature as Range(Domain).
    \n-
    27 */
    \n-
    28template<class Signature, class LocalContext, template<class> class DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>
    \n-
    \n-\n-
    30{};
    \n-
    \n+
    10namespace Dune {
    \n+
    11namespace Functions {
    \n+
    12
    \n+
    13
    \n+
    26template<class EntitySet, template<class> class DerivativeTraits=DefaultDerivativeTraits>
    \n+
    \n+\n+
    28{
    \n+
    29 using LocalDomain = typename EntitySet::LocalCoordinate;
    \n+
    30 using Domain = typename EntitySet::GlobalCoordinate;
    \n
    31
    \n-
    32
    \n-
    33
    \n-
    34namespace Imp
    \n-
    35{
    \n-
    36
    \n-
    38 template<class S, class L, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    39 struct LocalFunctionTraits :
    \n-
    40 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>
    \n-
    41 {
    \n-
    42 protected:
    \n-
    43 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;
    \n+
    32 template<class Signature>
    \n+
    \n+
    33 struct Traits
    \n+
    34 {
    \n+\n+
    36 };
    \n+
    \n+
    37
    \n+
    38 template<class R>
    \n+
    \n+\n+
    40 {
    \n+
    41 using Range = typename DerivativeTraits<R(Domain)>::Range;
    \n+
    42 };
    \n+
    \n+
    43};
    \n+
    \n
    44
    \n-
    45 public:
    \n-
    47 using LocalContext = L;
    \n-
    48
    \n-
    50 using DerivativeSignature = typename Base::DerivativeSignature;
    \n-
    51
    \n-\n-
    54
    \n-
    56 using Concept = LocalFunctionWrapperInterface<S, DerivativeInterface, L>;
    \n-
    57
    \n-
    59 template<class B>
    \n-
    60 using Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L, B>;
    \n-
    61 };
    \n-
    62}
    \n-
    63
    \n-
    64
    \n-
    65
    \n-
    86template<class Range, class Domain, class LocalContext, template<class> class DerivativeTraits, size_t bufferSize>
    \n-
    \n-
    87class LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize> :
    \n-
    88 public TypeErasureBase<
    \n-
    89 typename Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::Concept,
    \n-
    90 Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::template Model>
    \n-
    91{
    \n-
    92 using Traits = Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>;
    \n-
    93
    \n-\n-
    95
    \n-
    96 using DerivativeInterface = typename Traits::DerivativeInterface;
    \n-
    97
    \n-
    98public:
    \n-
    99
    \n-
    111 template<class F, disableCopyMove<LocalFunction, F> = 0 >
    \n-
    \n-\n-
    113 Base(std::forward<F>(f))
    \n-
    114 {
    \n-
    115 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-
    116 }
    \n-
    \n-
    117
    \n-
    118 LocalFunction() = default;
    \n-
    119
    \n-
    \n-
    123 Range operator() (const Domain& x) const
    \n-
    124 {
    \n-
    125 return this->asInterface().operator()(x);
    \n-
    126 }
    \n-
    \n-
    127
    \n-
    \n-
    135 friend DerivativeInterface derivative(const LocalFunction& t)
    \n-
    136 {
    \n-
    137 return t.asInterface().derivative();
    \n-
    138 }
    \n-
    \n-
    139
    \n-
    \n-
    146 void bind(const LocalContext& context)
    \n-
    147 {
    \n-
    148 this->asInterface().bind(context);
    \n-
    149 }
    \n-
    \n-
    150
    \n-
    \n-
    154 void unbind()
    \n-
    155 {
    \n-
    156 this->asInterface().unbind();
    \n-
    157 }
    \n-
    \n-
    158
    \n-
    \n-
    161 bool bound() const
    \n-
    162 {
    \n-
    163 return this->asInterface().bound();
    \n-
    164 }
    \n-
    \n-
    165
    \n-
    \n-
    169 const LocalContext& localContext() const
    \n-
    170 {
    \n-
    171 return this->asInterface().localContext();
    \n-
    172 }
    \n-
    \n-
    173};
    \n-
    \n-
    174
    \n-
    175
    \n-
    176
    \n-
    177}} // namespace Dune::Functions
    \n-
    178
    \n-
    179
    \n-
    180
    \n-
    181#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH
    \n-\n-\n-\n-\n-\n-
    friend DerivativeInterface derivative(const LocalFunction &t)
    Get derivative of wrapped function.
    Definition localfunction.hh:135
    \n+
    45
    \n+
    46}} // namespace Dune::Functions
    \n+
    47
    \n+
    48#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
    \n+\n
    Definition polynomial.hh:10
    \n-
    Definition localfunction.hh:30
    \n-
    const LocalContext & localContext() const
    Obtain local context this LocalFunction is bound to.
    Definition localfunction.hh:169
    \n-
    LocalFunction(F &&f)
    Construct from function.
    Definition localfunction.hh:112
    \n-
    void unbind()
    Unbind from local context.
    Definition localfunction.hh:154
    \n-
    bool bound() const
    Return if the local function is bound to a grid element.
    Definition localfunction.hh:161
    \n-
    void bind(const LocalContext &context)
    Bind function to a local context.
    Definition localfunction.hh:146
    \n-\n-
    Base class for type-erased interface wrapper.
    Definition typeerasure.hh:165
    \n+
    Dummy range class to be used if no proper type is available.
    Definition defaultderivativetraits.hh:23
    \n+
    Derivative traits for local functions.
    Definition localderivativetraits.hh:28
    \n+
    typename EntitySet::GlobalCoordinate Domain
    Definition localderivativetraits.hh:30
    \n+
    typename EntitySet::LocalCoordinate LocalDomain
    Definition localderivativetraits.hh:29
    \n+
    Definition localderivativetraits.hh:34
    \n+
    InvalidRange Range
    Definition localderivativetraits.hh:35
    \n+
    typename DerivativeTraits< R(Domain)>::Range Range
    Definition localderivativetraits.hh:41
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,188 +1,71 @@\n dune-functions\u00a02.9.0\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+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+localderivativetraits.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n-3#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n-4#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n+4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n 5\n-6#include \n-7\n-8#include \n+6\n+7#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+8\n 9\n-10#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\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-11#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-12#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bl_\bo_\bc_\ba_\bl_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\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_\be_\br_\ba_\bs_\bu_\br_\be_\b._\bh_\bh>\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/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-15\n-16\n-17\n-18namespace _\bD_\bu_\bn_\be {\n-19namespace Functions {\n-20\n-21\n-22\n-23/*\n-24 * Default implementation is empty\n-25 * The actual implementation is only given if Signature is an type\n-26 * describing a function signature as Range(Domain).\n-27 */\n-28template class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-_\b2_\b9class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-30{};\n+10namespace _\bD_\bu_\bn_\be {\n+11namespace Functions {\n+12\n+13\n+26template class\n+DerivativeTraits=DefaultDerivativeTraits>\n+_\b2_\b7struct _\bL_\bo_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bT_\br_\ba_\bi_\bt_\bs\n+28{\n+_\b2_\b9 using _\bL_\bo_\bc_\ba_\bl_\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::LocalCoordinate;\n+_\b3_\b0 using _\bD_\bo_\bm_\ba_\bi_\bn = typename EntitySet::GlobalCoordinate;\n 31\n-32\n-33\n-34namespace Imp\n-35{\n-36\n-38 template class DerivativeTraits, size_t\n-bufferSize>\n-39 struct LocalFunctionTraits :\n-40 DifferentiableFunctionTraits\n-41 {\n-42 protected:\n-43 using Base=DifferentiableFunctionTraits;\n+32 template\n+_\b3_\b3 struct _\bT_\br_\ba_\bi_\bt_\bs\n+34 {\n+_\b3_\b5 typedef _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bR_\ba_\bn_\bg_\be _\bR_\ba_\bn_\bg_\be;\n+36 };\n+37\n+38 template\n+_\b3_\b9 struct _\bT_\br_\ba_\bi_\bt_\bs\n+40 {\n+_\b4_\b1 using _\bR_\ba_\bn_\bg_\be = typename DerivativeTraits_\b:_\b:_\bR_\ba_\bn_\bg_\be;\n+42 };\n+43};\n 44\n-45 public:\n-47 using LocalContext = L;\n-48\n-50 using DerivativeSignature = typename Base::DerivativeSignature;\n-51\n-53 using DerivativeInterface = _\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-54\n-56 using Concept = LocalFunctionWrapperInterface;\n-57\n-59 template\n-60 using Model = LocalFunctionWrapperImplementation;\n-61 };\n-62}\n-63\n-64\n-65\n-86template class\n-DerivativeTraits, size_t bufferSize>\n-_\b8_\b7class _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn< Range(Domain), LocalContext, DerivativeTraits,\n-bufferSize> :\n-88 public _\bT_\by_\bp_\be_\bE_\br_\ba_\bs_\bu_\br_\be_\bB_\ba_\bs_\be<\n-89 typename Imp::LocalFunctionTraits::Concept,\n-90 Imp::LocalFunctionTraits::template Model>\n-91{\n-92 using Traits = Imp::LocalFunctionTraits;\n-93\n-94 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-95\n-96 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-97\n-98public:\n-99\n-111 template = 0 >\n-_\b1_\b1_\b2 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(F&& f) :\n-113 _\bB_\ba_\bs_\be(std::forward(f))\n-114 {\n-115 static_assert(Dune::Functions::Concept::isLocalFunction(), \"Trying to construct a LocalFunction from type that does not\n-model the LocalFunction concept\");\n-116 }\n-117\n-_\b1_\b1_\b8 _\bL_\bo_\bc_\ba_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn() = default;\n-119\n-_\b1_\b2_\b3 Range operator() (const Domain& x) const\n-124 {\n-125 return this->asInterface().operator()(x);\n-126 }\n-127\n-_\b1_\b3_\b5 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-136 {\n-137 return t.asInterface().derivative();\n-138 }\n-139\n-_\b1_\b4_\b6 void _\bb_\bi_\bn_\bd(const LocalContext& context)\n-147 {\n-148 this->asInterface().bind(context);\n-149 }\n-150\n-_\b1_\b5_\b4 void _\bu_\bn_\bb_\bi_\bn_\bd()\n-155 {\n-156 this->asInterface().unbind();\n-157 }\n-158\n-_\b1_\b6_\b1 bool _\bb_\bo_\bu_\bn_\bd() const\n-162 {\n-163 return this->asInterface().bound();\n-164 }\n-165\n-_\b1_\b6_\b9 const LocalContext& _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bn_\bt_\be_\bx_\bt() const\n-170 {\n-171 return this->asInterface().localContext();\n-172 }\n-173};\n-174\n-175\n-176\n-177}} // namespace Dune::Functions\n-178\n-179\n-180\n-181#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n-_\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__\bi_\bm_\bp_\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+45\n+46}} // namespace Dune::Functions\n+47\n+48#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_\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:135\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\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:30\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:169\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:112\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:154\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:161\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:146\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:165\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:23\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:28\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:30\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:29\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: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:_\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:35\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:41\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: referencehelper.hh File Reference\n+dune-functions: gridfunction_imp.hh File Reference\n \n \n \n \n \n \n \n@@ -65,58 +65,35 @@\n \n \n \n \n \n \n \n
    \n \n-
    referencehelper.hh File Reference
    \n+Namespaces
    \n+
    gridfunction_imp.hh File Reference
    \n \n
    \n-
    #include <type_traits>
    \n-#include <dune/common/referencehelper.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 Namespaces

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

    \n-Typedefs

    template<class T >
    using Dune::Functions::ResolveRef_t = Dune::ResolveRef_t< T >
     This is an alias for Dune::ResolveRef_t.
     
    \n-\n-\n-\n-\n-\n-

    \n-Functions

    template<class T >
    decltype(auto) Dune::Functions::resolveRef (T &&t)
     This is an alias for Dune::resolveRef.
     
    \n-\n-\n-\n-\n-\n

    \n-Variables

    template<class T >
    constexpr bool Dune::Functions::IsReferenceWrapper_v = Dune::IsReferenceWrapper_v<T>
     This is an alias for Dune::IsReferenceWrapper_v.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,20 @@\n dune-functions\u00a02.9.0\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 | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-referencehelper.hh File Reference\n-#include \n-#include \n+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+gridfunction_imp.hh File Reference\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh>\n _\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:_\bR_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf_\b__\bt = Dune::ResolveRef_t< T >\n-\u00a0 This is an alias for Dune::ResolveRef_t.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-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_\bR_\be_\bf (T &&t)\n-\u00a0 This is an alias for Dune::resolveRef.\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:_\bI_\bs_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\b__\bv = Dune::\n- IsReferenceWrapper_v\n-\u00a0 This is an alias for Dune::IsReferenceWrapper_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/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: referencehelper.hh Source File\n+dune-functions: gridfunction_imp.hh Source File\n \n \n \n \n \n \n \n@@ -70,71 +70,92 @@\n
    \n \n \n \n \n \n \n
    \n-
    referencehelper.hh
    \n+
    gridfunction_imp.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n-
    3#ifndef DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH
    \n-
    4#define DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH
    \n+
    3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n+
    4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n
    5
    \n-
    6#warning The header dune/functions/common/referencehelper.hh is deprecated and will be removed after release 2.9. Include dune/common/referencehelper.hh instead.
    \n-
    7
    \n-
    8#include <type_traits>
    \n+\n+\n+\n
    9
    \n-
    10#include <dune/common/referencehelper.hh>
    \n+
    10
    \n
    11
    \n-
    12
    \n-
    13
    \n-
    14
    \n-
    15namespace Dune {
    \n-
    16namespace Functions {
    \n-
    17
    \n-
    18
    \n-
    23template<class T>
    \n-
    24[[deprecated("Use Dune::IsReferenceWrapper_v instead. Will be removed after release 2.9.")]]
    \n-
    25constexpr bool
    \n-
    26IsReferenceWrapper_v = Dune::IsReferenceWrapper_v<T>;
    \n+
    12namespace Dune {
    \n+
    13namespace Functions {
    \n+
    14namespace Imp {
    \n+
    15
    \n+
    19struct HasFreeLocalFunction
    \n+
    20{
    \n+
    21 template<class F>
    \n+
    22 auto require(F&& f) -> decltype(
    \n+
    23 localFunction(f)
    \n+
    24 );
    \n+
    25};
    \n+
    26
    \n
    27
    \n
    28
    \n-
    33template<class T>
    \n-
    34decltype(auto)
    \n-
    \n-\n-
    36[[deprecated("Use Dune::resolveRef instead. Will be removed after release 2.9.")]]
    \n-
    37(T&& t)
    \n-
    38{
    \n-
    39 return Dune::resolveRef(std::forward<T>(t));
    \n-
    40}
    \n-
    \n-
    41
    \n-
    46template<class T>
    \n-\n-
    48[[deprecated("Use Dune::ResolveRef_t instead. Will be removed after release 2.9.")]]
    \n-
    49 = Dune::ResolveRef_t<T>;
    \n-
    50
    \n-
    51
    \n-
    52}} // namespace Dune::Functions
    \n-
    53
    \n-
    54
    \n-
    55
    \n-
    56#endif // DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH
    \n+
    29// Interface of type erasure wrapper
    \n+
    30//
    \n+
    31// Notice that the basic interface of polymorphic classes (destructor, clone, ...)
    \n+
    32// will be added by the type erasure foundation classes.
    \n+
    33template<class Signature, class DerivativeInterface, class LocalFunctionInterface, class EntitySet>
    \n+
    34class GridFunctionWrapperInterface :
    \n+
    35 public DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>
    \n+
    36{
    \n+
    37public:
    \n+
    38 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;
    \n+
    39
    \n+
    40 virtual const EntitySet& wrappedEntitySet() const = 0;
    \n+
    41};
    \n+
    42
    \n+
    43
    \n+
    44// Implementation of type erasure wrapper
    \n+
    45template<class Signature, class DerivativeInterface, class LocalFunctionInterface, class EntitySet, class B>
    \n+
    46class GridFunctionWrapperImplementation :
    \n+
    47 public DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>
    \n+
    48{
    \n+
    49 using Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;
    \n+
    50public:
    \n+
    51 using Base::Base;
    \n+
    52
    \n+
    53 virtual LocalFunctionInterface wrappedLocalFunction() const
    \n+
    54 {
    \n+
    55 return localFunction(this->get());
    \n+
    56 }
    \n+
    57
    \n+
    58 virtual const EntitySet& wrappedEntitySet() const
    \n+
    59 {
    \n+
    60 return this->get().entitySet();
    \n+
    61 }
    \n+
    62};
    \n+
    63
    \n+
    64
    \n+
    65
    \n+
    66}}} // namespace Dune::Functions::Imp
    \n+
    67
    \n+
    68
    \n+
    69
    \n+
    70#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH
    \n+\n+\n+\n
    Definition polynomial.hh:10
    \n-
    constexpr bool IsReferenceWrapper_v
    This is an alias for Dune::IsReferenceWrapper_v.
    Definition referencehelper.hh:26
    \n-
    Dune::ResolveRef_t< T > ResolveRef_t
    This is an alias for Dune::ResolveRef_t.
    Definition referencehelper.hh:49
    \n-
    decltype(auto) resolveRef(T &&t)
    This is an alias for Dune::resolveRef.
    Definition referencehelper.hh:37
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,74 +1,89 @@\n dune-functions\u00a02.9.0\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-referencehelper.hh\n+ * _\bg_\br_\bi_\bd_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+gridfunction_imp.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n-3#ifndef DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n-4#define DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n+3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n+4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n 5\n-6#warning The header dune/functions/common/referencehelper.hh is deprecated and\n-will be removed after release 2.9. Include dune/common/referencehelper.hh\n-instead.\n-7\n-8#include \n+6#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+7#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+8#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 9\n-10#include \n+10\n 11\n-12\n-13\n-14\n-15namespace _\bD_\bu_\bn_\be {\n-16namespace Functions {\n-17\n-18\n-23template\n-24[[deprecated(\"Use Dune::IsReferenceWrapper_v instead. Will be removed after\n-release 2.9.\")]]\n-25constexpr bool\n-_\b2_\b6_\bI_\bs_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\b__\bv = Dune::IsReferenceWrapper_v;\n+12namespace _\bD_\bu_\bn_\be {\n+13namespace Functions {\n+14namespace Imp {\n+15\n+19struct HasFreeLocalFunction\n+20{\n+21 template\n+22 auto require(F&& f) -> decltype(\n+23 localFunction(f)\n+24 );\n+25};\n+26\n 27\n 28\n-33template\n-34decltype(auto)\n-_\b3_\b5_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf\n-36[[deprecated(\"Use Dune::resolveRef instead. Will be removed after release\n-2.9.\")]]\n-37(T&& t)\n-38{\n-39 return Dune::resolveRef(std::forward(t));\n-40}\n-41\n-46template\n-_\b4_\b7using _\bR_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf_\b__\bt\n-48[[deprecated(\"Use Dune::ResolveRef_t instead. Will be removed after release\n-2.9.\")]]\n-49 = Dune::ResolveRef_t;\n-50\n-51\n-52}} // namespace Dune::Functions\n-53\n-54\n-55\n-56#endif // DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n+29// Interface of type erasure wrapper\n+30//\n+31// Notice that the basic interface of polymorphic classes (destructor, clone,\n+...)\n+32// will be added by the type erasure foundation classes.\n+33template\n+34class GridFunctionWrapperInterface :\n+35 public DifferentiableFunctionWrapperInterface\n+36{\n+37public:\n+38 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;\n+39\n+40 virtual const EntitySet& wrappedEntitySet() const = 0;\n+41};\n+42\n+43\n+44// Implementation of type erasure wrapper\n+45template\n+46class GridFunctionWrapperImplementation :\n+47 public DifferentiableFunctionWrapperImplementation\n+48{\n+49 using Base = DifferentiableFunctionWrapperImplementation;\n+50public:\n+51 using Base::Base;\n+52\n+53 virtual LocalFunctionInterface wrappedLocalFunction() const\n+54 {\n+55 return localFunction(this->get());\n+56 }\n+57\n+58 virtual const EntitySet& wrappedEntitySet() const\n+59 {\n+60 return this->get().entitySet();\n+61 }\n+62};\n+63\n+64\n+65\n+66}}} // namespace Dune::Functions::Imp\n+67\n+68\n+69\n+70#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n+_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bb_\bl_\be_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b__\bi_\bm_\bp_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+_\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be_\bs_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn polynomial.hh:10\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bI_\bs_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\b__\bv\n-constexpr bool IsReferenceWrapper_v\n-This is an alias for Dune::IsReferenceWrapper_v.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:26\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_\bR_\be_\bf_\b__\bt\n-Dune::ResolveRef_t< T > ResolveRef_t\n-This is an alias for Dune::ResolveRef_t.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:49\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_\bR_\be_\bf\n-decltype(auto) resolveRef(T &&t)\n-This is an alias for Dune::resolveRef.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:37\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/a01047.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01047.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::Polynomial< K > Class Template Reference
    \n \n
    \n \n

    A scalar 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@@ -435,15 +435,15 @@\n
    \n \n

    Move-assignment operator.

    \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/a01051.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01051.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 Public Member Functions

     Polynomial ()=default
     Default constructor.
     
     Polynomial (const Polynomial &other)=default
    \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/a01067.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01067.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::CallableFunctionWrapper< F > Class Template Reference
    \n \n
    \n \n

    Wrap a Dune::VirtualFunction into a callable object. \n More...

    \n \n-

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

    \n+

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

    \n \n \n \n \n \n \n@@ -201,15 +201,15 @@\n \n

    Forward operator() to F::evaluate()

    \n

    This uses the default constructor of F::RangeType

    \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/a01071.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01071.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/a01075.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01075.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 Public Member Functions

     CallableFunctionWrapper (const F &f)
     Instantiate from reference to f.
     
     CallableFunctionWrapper (const std::shared_ptr< const F > &f)
    \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/a01079.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01079.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/a01083.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01083.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/a01087.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01087.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/a01091.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01091.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/a01095.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01095.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/a01103.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01103.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/a01127.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01127.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/a01131.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01131.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/a01135.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01135.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/a01139.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01139.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/a01143.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01143.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/a01147.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01147.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/a01151.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01151.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/a01155.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01155.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/a01159.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01159.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/a01163.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01163.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/a01167.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01167.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/a01171.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01171.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/a01175.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01175.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/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::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/a01183.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01183.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/a01187.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01187.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/a01191.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01191.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/a01195.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01195.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/a01199.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01199.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/a01203.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01203.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/a01207.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01207.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/a01211.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01211.html", "unified_diff": "@@ -73,15 +73,15 @@\n \n \n
    \n
    Dune::Functions::FunctionFromCallable< Signature, F, FunctionInterface > Class Template Reference
    \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/a01215.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01215.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface > Class Template Reference
    \n \n
    \n \n

    Wrap a callable object as Dune::Function or Dune::VirtualFunction. \n More...

    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -234,15 +234,15 @@\n \n

    Evaluate function.

    \n

    This call is passed to the 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/a01239.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01239.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/a01243.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01243.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/a01251.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01251.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/a01263.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01263.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@@ -196,15 +196,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/a01267.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01267.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@@ -259,15 +259,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": "@@ -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/a01275.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01275.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/a01279.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01279.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/a01283.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01283.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/a01287.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01287.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/a01291.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01291.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/a01295.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01295.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/a01299.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01299.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/a01311.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01311.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Functions::UniformNodeVisitor< SimpleNodeVisitorImp, leafOnly > Struct Template Reference
    \n \n
    \n \n

    Mixin for visitors that should apply the same action on all nodes. \n More...

    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::UniformNodeVisitor< SimpleNodeVisitorImp, leafOnly >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -251,15 +251,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/a01315.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01315.html", "unified_diff": "@@ -84,15 +84,15 @@\n
    Dune::Functions::TreeData< T, ND, LO > Class Template Reference
    \n \n
    \n \n

    Container allowing to attach data to each node of a tree. \n More...

    \n \n-

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

    \n+

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

    \n \n \n \n \n \n \n@@ -571,15 +571,15 @@\n \n

    \n Classes

    struct  CopyVisitor
     
    struct  DestroyVisitor
     
    \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/a01319.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01319.html", "unified_diff": "@@ -77,15 +77,15 @@\n Public Member Functions |\n Public Attributes |\n List of all members \n
    Dune::Functions::TreeData< T, ND, LO >::InitVisitor Struct Reference
    \n \n
    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::TreeData< T, ND, LO >::InitVisitor:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -312,15 +312,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/a01323.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01323.html", "unified_diff": "@@ -77,15 +77,15 @@\n Public Member Functions |\n Public Attributes |\n List of all members \n
    Dune::Functions::TreeData< T, ND, LO >::DestroyVisitor Struct Reference
    \n \n
    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::TreeData< T, ND, LO >::DestroyVisitor:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -312,15 +312,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/a01327.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01327.html", "unified_diff": "@@ -77,15 +77,15 @@\n Public Member Functions |\n Public Attributes |\n List of all members \n
    Dune::Functions::TreeData< T, ND, LO >::CopyVisitor Struct Reference
    \n \n
    \n \n-

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

    \n+

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

    \n
    \n Inheritance diagram for Dune::Functions::TreeData< T, ND, LO >::CopyVisitor:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -340,15 +340,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/a01331.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01331.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@@ -94,15 +94,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/a01335.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01335.html", "unified_diff": "@@ -76,15 +76,15 @@\n
    Dune::Functions::StaticSize< T > Struct Template Reference
    \n \n
    \n \n

    Obtain size of 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::StaticSize< T >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -94,15 +94,15 @@\n \n
    \n

    Detailed Description

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

    Obtain size of statically sized container.

    \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/a01351.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01351.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/a01383.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01383.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 = typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type
     
    \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/a01395.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01395.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/a01411.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01411.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/a01415.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01415.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/a01419.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01419.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/a01423.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01423.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/a01427.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01427.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/a01431.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01431.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/a01467.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01467.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/a01471.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01471.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 \n \n \n \n \n@@ -664,15 +664,15 @@\n \n

    \n Public Types

    using GridView = GV
     The grid view that the FE space 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/a01475.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01475.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/a01479.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01479.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 \n \n \n \n \n@@ -1283,15 +1283,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/a01483.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01483.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 Public Types

    using GridView = GV
     The grid view that the FE space 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/a01487.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01487.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/a01491.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01491.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/a01495.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01495.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/a01503.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01503.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@@ -828,15 +828,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/a01559.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01559.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@@ -780,15 +780,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/a01563.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01563.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@@ -260,15 +260,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/a01567.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01567.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/a01619.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01619.html", "unified_diff": "@@ -79,15 +79,15 @@\n Protected Member Functions |\n Protected Attributes |\n List of all members \n
    Dune::Functions::HierarchicalLagrangeNode< GV, k, 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::HierarchicalLagrangeNode< GV, k, R >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -567,15 +567,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/a01623.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01623.html", "unified_diff": "@@ -83,15 +83,15 @@\n
    Dune::Functions::HierarchicalLagrangePreBasis< GV, k, R > Class Template Reference
    \n \n
    \n \n

    A pre-basis for a hierarchical basis. \n More...

    \n \n-

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

    \n+

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

    \n \n \n \n \n \n \n@@ -677,15 +677,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/a01627.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01627.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/a01647.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01647.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@@ -397,15 +397,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/a01667.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01667.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/a01671.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01671.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@@ -1299,15 +1299,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/a01679.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01679.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 \n \n \n \n \n@@ -900,15 +900,15 @@\n \n

    \n Public Types

    using GridView = GV
     The grid view that the FE space 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/a01687.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01687.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/a01691.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01691.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 \n \n \n \n \n@@ -636,15 +636,15 @@\n \n

    \n Public Types

    using GridView = GV
     The grid view that the FE space 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/a01707.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01707.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@@ -367,15 +367,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": "@@ -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@@ -335,15 +335,15 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01715.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01715.html", "unified_diff": "@@ -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/a01719.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01719.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/a01723.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01723.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/a01735.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01735.html", "unified_diff": "@@ -81,15 +81,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 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 \n@@ -718,15 +718,15 @@\n \n

    \n Public Types

    using SubPreBasis = SPB
     The child pre-basis.
     
    using GridView = typename SPB::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/a01739.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01739.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/a01743.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01743.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 \n \n \n \n \n@@ -615,15 +615,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/a01791.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01791.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/a01795.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01795.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 \n \n \n \n \n@@ -664,15 +664,15 @@\n \n

    \n Public Types

    using GridView = GV
     The grid view that the FE space 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/a01799.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01799.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@@ -311,15 +311,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/a01803.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01803.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/a01807.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01807.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/a01811.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01811.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/a01815.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01815.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/a01819.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01819.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/a01823.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01823.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@@ -812,15 +812,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/a01827.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01827.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@@ -779,15 +779,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/a01831.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01831.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation< IndexTransformation, SizeImplementation, 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@@ -320,15 +320,15 @@\n \n

    \n Public Member Functions

    template<class IT_R , class SI_R >
     GenericIndexingTransformation (IT_R &&indexTransformation, SI_R &&sizeImplementation)
     
    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/a01843.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01843.html", "unified_diff": "@@ -86,15 +86,15 @@\n \n template<class F , class GridView > \n AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction (F &&f, const GridView &gridView)\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/a01847.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01847.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/a01851.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01851.html", "unified_diff": "@@ -85,15 +85,15 @@\n
    Dune::Functions::ComposedGridFunction< OF, IF > Class Template Reference
    \n \n
    \n \n

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

    \n \n-

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

    \n+

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

    \n

    \n Public Types

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

    \n Public Types

    using EntitySet = typename InnerFunction< 0 >::EntitySet
     
    using Element = typename EntitySet::Element
     
    \n
    \n \n
    \n \n
    The documentation for this class was generated from the following file:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01859.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01859.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
    \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": "@@ -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/a01867.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01867.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/a01871.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01871.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@@ -682,15 +682,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::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@@ -773,15 +773,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/a01879.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01879.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/a01883.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01883.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/a01887.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01887.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/a01895.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01895.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/a01903.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01903.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/a01919.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01919.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/a01923.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01923.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/a01927.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01927.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/a01931.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01931.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/a01935.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01935.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/a01939.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01939.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/a02876.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a02876.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/a02876_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a02876_source.html", "unified_diff": "@@ -86,17 +86,17 @@\n
    3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
    \n
    4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
    \n
    5
    \n
    6
    \n
    7#include <dune/common/concept.hh>
    \n
    8#include <dune/common/reservedvector.hh>
    \n
    9
    \n-\n+\n
    11
    \n-\n+\n
    13
    \n
    14
    \n
    15namespace Dune {
    \n
    16namespace Functions {
    \n
    17namespace Concept {
    \n
    18
    \n
    19using namespace Dune::Concept;
    \n@@ -319,16 +319,16 @@\n
    214
    \n
    215} // namespace Dune::Functions::Concept
    \n
    216} // namespace Dune::Functions
    \n
    217} // namespace Dune
    \n
    218
    \n
    219
    \n
    220#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH
    \n-\n-\n+\n+\n
    Definition polynomial.hh:10
    \n
    Definition functionspacebases/concepts.hh:23
    \n
    auto require(C &&c) -> decltype(c.resize(0))
    \n
    Definition functionspacebases/concepts.hh:33
    \n
    auto require(C &&c) -> decltype(c.size())
    \n
    Definition functionspacebases/concepts.hh:43
    \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
    treedata.hhgridfunction.hh
    treedata.hhgridviewentityset.hh
    \n+

    common → gridfunctions Relation

    File in dune/functions/commonIncludes file in dune/functions/gridfunctions
    functionconcepts.hhgridviewentityset.hh
    functionconcepts.hhlocalderivativetraits.hh
    treedata.hhgridfunction.hh
    treedata.hhgridviewentityset.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
    defaultglobalbasis.hhtype_traits.hh
    defaultlocalview.hhmultiindex.hh
    defaultlocalview.hhoverflowarray.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,58 +90,58 @@\n \"\"\n \"\"\n \n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\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

     callable.hh
     callable.hh
     
     defaultderivativetraits.hh
     defaultderivativetraits.hh
     
     differentiablefunction.hh
     differentiablefunction.hh
     
     differentiablefunction_imp.hh
     differentiablefunction_imp.hh
     
     differentiablefunctionfromcallables.hh
     differentiablefunctionfromcallables.hh
     
     functionconcepts.hh
     functionconcepts.hh
     
     functionfromcallable.hh
     functionfromcallable.hh
     
     indexaccess.hh
     indexaccess.hh
     
     interfaces.hh
     interfaces.hh
     
     localfunction.hh
     localfunction.hh
     
     localfunction_imp.hh
     localfunction_imp.hh
     
     multiindex.hh
     multiindex.hh
     
     overflowarray.hh
     overflowarray.hh
     
     polymorphicsmallobject.hh
     polymorphicsmallobject.hh
     
     referencehelper.hh
     referencehelper.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
     
     treedata.hh
     treedata.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 \n

    \n Files

     analyticgridviewfunction.hh
     analyticgridviewfunction.hh
     
     composedgridfunction.hh
     composedgridfunction.hh
     
     discreteglobalbasisfunction.hh
     discreteglobalbasisfunction.hh
     
     facenormalgridfunction.hh
     facenormalgridfunction.hh
     
     gridfunction.hh
     gridfunction.hh
     
     gridfunction_imp.hh
     gridfunction_imp.hh
     
     gridviewentityset.hh
     gridviewentityset.hh
     
     gridviewfunction.hh
     gridviewfunction.hh
     
     localderivativetraits.hh
     localderivativetraits.hh
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_8457ebf380090bd61e5d3eab5b7eb9a1.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_8457ebf380090bd61e5d3eab5b7eb9a1.html", "unified_diff": "@@ -92,15 +92,15 @@\n \n \n \n \n \n \n-\n+\n \n

    \n Files

     concepts.hh
     
     istlvectorbackend.hh
     istlvectorbackend.hh
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_a2250aba7ee066a4c694d7c3cf43d078.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_a2250aba7ee066a4c694d7c3cf43d078.html", "unified_diff": "@@ -93,74 +93,74 @@\n \"\"\n \"\"\n \n \n \n \n-\n+\n \n \n \n-\n+\n \n-\n-\n+\n+\n \n-\n+\n \n \n \n \n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\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
     
     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
     
     defaultglobalbasis.hh
     
     defaultlocalview.hh
     defaultlocalview.hh
     
     defaultnodetorangemap.hh
     defaultnodetorangemap.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
     
     nedelecbasis.hh
     nedelecbasis.hh
     
     nodes.hh
     nodes.hh
     
     periodicbasis.hh
     periodicbasis.hh
     
     powerbasis.hh
     powerbasis.hh
     
     rannacherturekbasis.hh
     rannacherturekbasis.hh
     
     raviartthomasbasis.hh
     raviartthomasbasis.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,99 +4,99 @@\n mainpage.md\n /build/reproducible-path/dune-functions-2.9.0/doc/doxygen/\n a00197.html\n \n \n polynomial.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/analyticfunctions/\n- a00122.html\n+ a00161.html\n Dune::Functions::Polynomial\n Dune\n Dune::Functions\n \n \n trigonometricfunction.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/analyticfunctions/\n- a00125.html\n+ a00164.html\n Dune::Functions::TrigonometricFunction\n Dune\n Dune::Functions\n \n \n istlvectorbackend.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/backends/\n- a00119.html\n- dune/functions/common/indexaccess.hh\n+ a00158.html\n+ dune/functions/common/indexaccess.hh\n dune/functions/functionspacebases/concepts.hh\n Dune\n Dune::Functions\n \n \n callable.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00182.html\n+ a00116.html\n Dune::Functions::CallableFunctionWrapper\n Dune\n Dune::Functions\n \n \n defaultderivativetraits.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00179.html\n+ a00122.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.9.0/dune/functions/common/\n- a00134.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+ a00146.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.9.0/dune/functions/common/\n- a00158.html\n- dune/functions/common/type_traits.hh\n+ a00110.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.9.0/dune/functions/common/\n- a00140.html\n- dune/functions/common/signature.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/common/functionconcepts.hh\n+ a00131.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.9.0/dune/functions/common/\n- a00173.html\n- dune/functions/common/signature.hh\n- dune/functions/gridfunctions/localderivativetraits.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n+ a00155.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@@ -106,174 +106,174 @@\n Dune\n Dune::Functions\n Dune::Functions::Concept\n \n \n functionfromcallable.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00131.html\n- dune/functions/common/signature.hh\n+ a00098.html\n+ dune/functions/common/signature.hh\n Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >\n Dune\n Dune::Functions\n \n \n indexaccess.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00149.html\n- dune/functions/common/utility.hh\n+ a00128.html\n+ dune/functions/common/utility.hh\n Dune\n Dune::Functions\n \n \n interfaces.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00152.html\n+ a00140.html\n Dune::Functions::PolymorphicType\n Dune\n Dune::Functions\n \n \n localfunction.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00188.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+ a00152.html\n+ dune/functions/common/defaultderivativetraits.hh\n+ dune/functions/common/differentiablefunction.hh\n+ dune/functions/common/localfunction_imp.hh\n+ dune/functions/common/typeerasure.hh\n+ dune/functions/common/functionconcepts.hh\n Dune::Functions::LocalFunction\n Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >\n Dune\n Dune::Functions\n \n \n localfunction_imp.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00164.html\n- dune/functions/common/type_traits.hh\n- dune/functions/common/differentiablefunction_imp.hh\n+ a00104.html\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.9.0/dune/functions/common/\n- a00128.html\n+ a00095.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.9.0/dune/functions/common/\n- a00155.html\n+ a00092.html\n Dune::Functions::OverflowArray\n Dune\n Dune::Functions\n \n \n polymorphicsmallobject.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00161.html\n+ a00119.html\n Dune::Functions::PolymorphicSmallObject\n Dune\n Dune::Functions\n \n \n referencehelper.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00191.html\n+ a00149.html\n Dune\n Dune::Functions\n \n \n reserveddeque.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00146.html\n+ a00113.html\n Dune::Functions::ReservedDeque\n Dune\n Dune::Functions\n \n #define\n CHECKSIZE\n- a00146.html\n+ a00113.html\n a65543e75bc949ecdb95a25b1f4e11675\n (X)\n \n \n \n signature.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00137.html\n- dune/functions/common/defaultderivativetraits.hh\n+ a00134.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.9.0/dune/functions/common/\n- a00176.html\n- dune/functions/common/type_traits.hh\n+ a00137.html\n+ dune/functions/common/type_traits.hh\n dune/functions/functionspacebases/concepts.hh\n Dune\n Dune::Functions\n \n \n treedata.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00185.html\n- dune/functions/gridfunctions/gridviewentityset.hh\n- dune/functions/gridfunctions/gridfunction.hh\n+ a00143.html\n+ dune/functions/gridfunctions/gridviewentityset.hh\n+ dune/functions/gridfunctions/gridfunction.hh\n Dune::Functions::UniformNodeVisitor\n Dune::Functions::TreeData\n Dune::Functions::TreeData::InitVisitor\n Dune::Functions::TreeData::DestroyVisitor\n Dune::Functions::TreeData::CopyVisitor\n Dune\n Dune::Functions\n \n \n type_traits.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00143.html\n+ a00125.html\n Dune::Functions::HasStaticSize\n Dune::Functions::StaticSize\n Dune\n Dune::Functions\n \n \n typeerasure.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/common/\n- a00167.html\n- dune/functions/common/type_traits.hh\n- dune/functions/common/interfaces.hh\n- dune/functions/common/polymorphicsmallobject.hh\n+ a00107.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.9.0/dune/functions/common/\n- a00170.html\n- dune/functions/common/functionconcepts.hh\n+ a00101.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.9.0/dune/functions/functionspacebases/\n- a00110.html\n+ a00041.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@@ -282,56 +282,56 @@\n Dune::Functions::BasisFactory\n Dune::Functions::BasisBuilder\n \n \n boundarydofs.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n a00044.html\n- dune/functions/functionspacebases/subentitydofs.hh\n+ dune/functions/functionspacebases/subentitydofs.hh\n Dune\n Dune::Functions\n \n \n brezzidouglasmarinibasis.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00035.html\n- dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n- dune/functions/functionspacebases/nodes.hh\n+ a00011.html\n+ dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/defaultglobalbasis.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.9.0/dune/functions/functionspacebases/\n- a00056.html\n- dune/functions/functionspacebases/nodes.hh\n+ a00002.html\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/defaultglobalbasis.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.9.0/dune/functions/functionspacebases/\n- a00074.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+ a00005.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::CompositePreBasis\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n Dune::Functions::BasisBuilder\n@@ -346,16 +346,16 @@\n Dune::Functions\n Dune::Functions::Concept\n \n \n functionspacebases/concepts.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n a02876.html\n- dune/functions/common/utility.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/common/utility.hh\n+ dune/functions/functionspacebases/nodes.hh\n Dune::Functions::Concept::HasResize\n Dune::Functions::Concept::HasSizeMethod\n Dune::Functions::Concept::HasIndexAccess\n Dune::Functions::Concept::BasisNode\n Dune::Functions::Concept::LeafBasisNode\n Dune::Functions::Concept::PowerBasisNode\n Dune::Functions::Concept::CompositeBasisNode\n@@ -367,392 +367,392 @@\n Dune::Functions\n Dune::Functions::Concept\n \n \n defaultglobalbasis.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n a00029.html\n- dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/defaultlocalview.hh\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.9.0/dune/functions/functionspacebases/\n- a00089.html\n- dune/functions/common/overflowarray.hh\n- dune/functions/common/multiindex.hh\n+ a00017.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.9.0/dune/functions/functionspacebases/\n- a00098.html\n+ a00071.html\n dune/functions/functionspacebases/concepts.hh\n Dune::Functions::DefaultNodeToRangeMap\n Dune::Functions::DefaultNodeToRangeMap::Visitor\n Dune\n Dune::Functions\n \n \n flatmultiindex.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00092.html\n- dune/functions/common/multiindex.hh\n+ a00014.html\n+ dune/functions/common/multiindex.hh\n Dune\n Dune::Functions\n \n \n flatvectorview.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00065.html\n+ a00089.html\n dune/functions/functionspacebases/concepts.hh\n Dune\n Dune::Functions\n \n \n globalvaluedlocalfiniteelement.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00116.html\n+ a00077.html\n Dune\n Dune::Functions\n \n \n hierarchicallagrangebasis.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00071.html\n- dune/functions/functionspacebases/nodes.hh\n+ a00035.html\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/defaultglobalbasis.hh\n Dune::Functions::HierarchicalLagrangePreBasis\n Dune::Functions::HierarchicalLagrangeNode\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n hierarchicnodetorangemap.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00059.html\n+ a00020.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.9.0/dune/functions/functionspacebases/\n- a00047.html\n- dune/functions/common/indexaccess.hh\n- dune/functions/common/utility.hh\n- dune/functions/common/type_traits.hh\n+ a00050.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.9.0/dune/functions/functionspacebases/\n- a00107.html\n- dune/functions/gridfunctions/gridviewfunction.hh\n- dune/functions/common/functionconcepts.hh\n+ a00080.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/sizeinfo.hh\n- dune/functions/functionspacebases/flatvectorview.hh\n- dune/functions/functionspacebases/hierarchicnodetorangemap.hh\n+ dune/functions/backends/istlvectorbackend.hh\n+ dune/functions/functionspacebases/sizeinfo.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.9.0/dune/functions/functionspacebases/\n- a00041.html\n- dune/functions/functionspacebases/nodes.hh\n+ a00008.html\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/defaultglobalbasis.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.9.0/dune/functions/functionspacebases/\n- a00104.html\n- dune/functions/functionspacebases/nodes.hh\n+ a00059.html\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/defaultglobalbasis.hh\n- dune/functions/functionspacebases/lagrangebasis.hh\n+ dune/functions/functionspacebases/lagrangebasis.hh\n Dune::Functions::LagrangeDGPreBasis\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n nedelecbasis.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00113.html\n+ a00065.html\n dune/functions/functionspacebases/defaultglobalbasis.hh\n- dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n- dune/functions/functionspacebases/nodes.hh\n+ dune/functions/functionspacebases/globalvaluedlocalfiniteelement.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.9.0/dune/functions/functionspacebases/\n- a00062.html\n+ a00068.html\n Dune::Functions::BasisNodeMixin\n Dune::Functions::LeafBasisNode\n Dune::Functions::PowerBasisNode\n Dune::Functions::CompositeBasisNode\n Dune\n Dune::Functions\n \n \n periodicbasis.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00101.html\n+ a00032.html\n dune/functions/functionspacebases/concepts.hh\n- dune/functions/functionspacebases/transformedindexbasis.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.9.0/dune/functions/functionspacebases/\n- a00038.html\n- dune/functions/common/utility.hh\n- dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/basistags.hh\n- dune/functions/functionspacebases/nodes.hh\n+ a00086.html\n+ dune/functions/common/utility.hh\n+ dune/functions/common/type_traits.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::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.9.0/dune/functions/functionspacebases/\n- a00068.html\n- dune/functions/functionspacebases/nodes.hh\n+ a00053.html\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/defaultglobalbasis.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.9.0/dune/functions/functionspacebases/\n- a00095.html\n- dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n- dune/functions/functionspacebases/nodes.hh\n+ a00026.html\n+ dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh\n+ dune/functions/functionspacebases/nodes.hh\n dune/functions/functionspacebases/defaultglobalbasis.hh\n Dune::Functions::RaviartThomasPreBasis\n Dune::Functions::RaviartThomasNode\n Dune\n Dune::Functions\n Dune::Functions::BasisFactory\n \n \n sizeinfo.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00086.html\n+ a00038.html\n Dune::Functions::SizeInfo\n Dune\n Dune::Functions\n \n \n subentitydofs.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00050.html\n+ a00023.html\n Dune::Functions::SubEntityDOFs\n Dune\n Dune::Functions\n \n \n subspacebasis.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/\n- a00080.html\n- dune/functions/common/type_traits.hh\n- dune/functions/functionspacebases/subspacelocalview.hh\n+ a00047.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.9.0/dune/functions/functionspacebases/\n- a00032.html\n+ a00056.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.9.0/dune/functions/functionspacebases/\n- a00077.html\n- dune/functions/functionspacebases/nodes.hh\n- dune/functions/functionspacebases/lagrangebasis.hh\n+ a00083.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.9.0/dune/functions/functionspacebases/\n- a00083.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+ a00074.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::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.9.0/dune/functions/gridfunctions/\n- a00020.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+ a00167.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.9.0/dune/functions/gridfunctions/\n- a00008.html\n- dune/functions/common/defaultderivativetraits.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/gridfunctions/gridfunction.hh\n+ a00176.html\n+ dune/functions/common/defaultderivativetraits.hh\n+ dune/functions/common/differentiablefunction.hh\n+ dune/functions/gridfunctions/gridfunction.hh\n Dune::Functions::ComposedGridFunction\n Dune\n Dune::Functions\n \n \n discreteglobalbasisfunction.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/\n- a00014.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+ a00182.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.9.0/dune/functions/gridfunctions/\n- a00023.html\n- dune/functions/gridfunctions/gridfunction.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n+ a00179.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.9.0/dune/functions/gridfunctions/\n- a00017.html\n- dune/functions/common/typeerasure.hh\n- dune/functions/common/defaultderivativetraits.hh\n- dune/functions/common/differentiablefunction.hh\n- dune/functions/common/localfunction.hh\n- dune/functions/common/functionconcepts.hh\n- dune/functions/gridfunctions/localderivativetraits.hh\n- dune/functions/gridfunctions/gridfunction_imp.hh\n+ a00173.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.9.0/dune/functions/gridfunctions/\n- a00002.html\n- dune/functions/common/type_traits.hh\n- dune/functions/common/interfaces.hh\n- dune/functions/common/differentiablefunction_imp.hh\n+ a00191.html\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.9.0/dune/functions/gridfunctions/\n- a00005.html\n+ a00170.html\n Dune::Functions::GridViewEntitySet\n Dune\n Dune::Functions\n \n \n gridviewfunction.hh\n /build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/\n- a00011.html\n- dune/functions/gridfunctions/gridfunction.hh\n- dune/functions/gridfunctions/gridviewentityset.hh\n- dune/functions/gridfunctions/analyticgridviewfunction.hh\n+ a00185.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.9.0/dune/functions/gridfunctions/\n- a00026.html\n- dune/functions/common/defaultderivativetraits.hh\n+ a00188.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,83 +75,83 @@\n
    Here is a list of all files with brief descriptions:
    \n
    [detail level 1234]
    \n \n \n \n \n \n-\n-\n+\n+\n \n \n-\n+\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n-\n+\n \n-\n-\n-\n+\n+\n+\n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n
      doc
     doxygen
      dune
      functions
      analyticfunctions
     polynomial.hh
     trigonometricfunction.hh
     polynomial.hh
     trigonometricfunction.hh
      backends
     concepts.hh
     istlvectorbackend.hh
     istlvectorbackend.hh
      common
     callable.hh
     defaultderivativetraits.hh
     differentiablefunction.hh
     differentiablefunction_imp.hh
     differentiablefunctionfromcallables.hh
     functionconcepts.hh
     functionfromcallable.hh
     indexaccess.hh
     interfaces.hh
     localfunction.hh
     localfunction_imp.hh
     multiindex.hh
     overflowarray.hh
     polymorphicsmallobject.hh
     referencehelper.hh
     reserveddeque.hhAn stl-compliant double-ended queue which stores everything on the stack
     signature.hh
     staticforloop.hh
     treedata.hh
     type_traits.hh
     typeerasure.hh
     utility.hh
     callable.hh
     defaultderivativetraits.hh
     differentiablefunction.hh
     differentiablefunction_imp.hh
     differentiablefunctionfromcallables.hh
     functionconcepts.hh
     functionfromcallable.hh
     indexaccess.hh
     interfaces.hh
     localfunction.hh
     localfunction_imp.hh
     multiindex.hh
     overflowarray.hh
     polymorphicsmallobject.hh
     referencehelper.hh
     reserveddeque.hhAn stl-compliant double-ended queue which stores everything on the stack
     signature.hh
     staticforloop.hh
     treedata.hh
     type_traits.hh
     typeerasure.hh
     utility.hh
      functionspacebases
     basistags.hh
     basistags.hh
     boundarydofs.hh
     brezzidouglasmarinibasis.hh
     bsplinebasis.hhThe B-spline global function space basis
     compositebasis.hh
     brezzidouglasmarinibasis.hh
     bsplinebasis.hhThe B-spline global function space basis
     compositebasis.hh
     concepts.hh
     defaultglobalbasis.hh
     defaultlocalview.hh
     defaultnodetorangemap.hh
     flatmultiindex.hh
     flatvectorview.hh
     globalvaluedlocalfiniteelement.hh
     hierarchicallagrangebasis.hh
     hierarchicnodetorangemap.hh
     hierarchicvectorwrapper.hh
     interpolate.hh
     lagrangebasis.hh
     lagrangedgbasis.hh
     nedelecbasis.hh
     nodes.hh
     periodicbasis.hh
     powerbasis.hh
     rannacherturekbasis.hh
     raviartthomasbasis.hh
     sizeinfo.hh
     subentitydofs.hh
     subspacebasis.hh
     subspacelocalview.hh
     taylorhoodbasis.hh
     transformedindexbasis.hh
     defaultlocalview.hh
     defaultnodetorangemap.hh
     flatmultiindex.hh
     flatvectorview.hh
     globalvaluedlocalfiniteelement.hh
     hierarchicallagrangebasis.hh
     hierarchicnodetorangemap.hh
     hierarchicvectorwrapper.hh
     interpolate.hh
     lagrangebasis.hh
     lagrangedgbasis.hh
     nedelecbasis.hh
     nodes.hh
     periodicbasis.hh
     powerbasis.hh
     rannacherturekbasis.hh
     raviartthomasbasis.hh
     sizeinfo.hh
     subentitydofs.hh
     subspacebasis.hh
     subspacelocalview.hh
     taylorhoodbasis.hh
     transformedindexbasis.hh
      gridfunctions
     analyticgridviewfunction.hh
     composedgridfunction.hh
     discreteglobalbasisfunction.hh
     facenormalgridfunction.hh
     gridfunction.hh
     gridfunction_imp.hh
     gridviewentityset.hh
     gridviewfunction.hh
     localderivativetraits.hh
     analyticgridviewfunction.hh
     composedgridfunction.hh
     discreteglobalbasisfunction.hh
     facenormalgridfunction.hh
     gridfunction.hh
     gridfunction_imp.hh
     gridviewentityset.hh
     gridviewfunction.hh
     localderivativetraits.hh
    \n
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/globals.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/globals.html", "unified_diff": "@@ -66,15 +66,15 @@\n \n \n \n \n \n
    \n
    Here is a list of all file members with links to the files they belong to:
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/globals_defs.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/globals_defs.html", "unified_diff": "@@ -66,15 +66,15 @@\n \n \n \n \n \n
    \n
    Here is a list of all macros with links to the files they belong to:
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00062.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00053.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-functions: nodes.hh File Reference\n+dune-functions: rannacherturekbasis.hh File Reference\n \n \n \n \n \n \n \n@@ -72,58 +72,59 @@\n
  • dune
  • functions
  • functionspacebases
  • \n \n \n
    \n \n-
    nodes.hh File Reference
    \n+
    rannacherturekbasis.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/compositenode.hh>
    \n-#include <dune/typetree/traversal.hh>
    \n-#include <dune/typetree/visitor.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
    \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-\n+\n \n

    \n Classes

    class  Dune::Functions::BasisNodeMixin
    class  Dune::Functions::RannacherTurekPreBasis< GV >
     Pre-basis for a Rannacher-Turek basis. More...
     
    class  Dune::Functions::LeafBasisNode
     
    class  Dune::Functions::PowerBasisNode< T, n >
     
    class  Dune::Functions::CompositeBasisNode< T >
    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+Typedefs

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

    \n Functions

    template<typename Tree >
    void Dune::Functions::clearSize (Tree &tree, std::size_t offset)
     
    template<typename Tree , typename Entity >
    void Dune::Functions::bindTree (Tree &tree, const Entity &entity, std::size_t offset=0)
     
    template<typename Tree >
    void Dune::Functions::initializeTree (Tree &tree, std::size_t treeIndexOffset=0)
     
    template<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,46 +1,43 @@\n dune-functions\u00a02.9.0\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+_\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\bM_\bi_\bx_\bi_\bn\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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:_\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:_\bC_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\bB_\ba_\bs_\bi_\bs_\bN_\bo_\bd_\be_\b<_\b _\bT_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\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-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bc_\bl_\be_\ba_\br_\bS_\bi_\bz_\be (Tree &tree, std::size_t offset)\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\by\n \u00a0\n-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:_\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"}]}]}]}]}]}