{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.ZfQiNmIi/b1/dune-geometry_2.9.0-4_armhf.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.ZfQiNmIi/b2/dune-geometry_2.9.0-4_armhf.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,4 +1,4 @@\n \n 1d2d9bfd40c72506f9892e3febeca89f 369940 debug optional libdune-geometry-dev-dbgsym_2.9.0-4_armhf.deb\n cb81d3b80d230d6f0af0e5285fd69be9 289940 libdevel optional libdune-geometry-dev_2.9.0-4_armhf.deb\n- ef3436c4dbf73f5ea196c86bb31b0851 1525924 doc optional libdune-geometry-doc_2.9.0-4_all.deb\n+ dfce769c5170bd244d2446754d96cd53 1525384 doc optional libdune-geometry-doc_2.9.0-4_all.deb\n"}, {"source1": "libdune-geometry-doc_2.9.0-4_all.deb", "source2": "libdune-geometry-doc_2.9.0-4_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-07-15 14:03:47.000000 debian-binary\n--rw-r--r-- 0 0 0 15752 2023-07-15 14:03:47.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1509980 2023-07-15 14:03:47.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 15736 2023-07-15 14:03:47.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 1509456 2023-07-15 14:03:47.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": "@@ -8,30 +8,30 @@\n usr/share/doc/libdune-geometry-doc/appl/refelements/gg_quadrilateral.png\n usr/share/doc/libdune-geometry-doc/appl/refelements/gg_tetrahedron.png\n usr/share/doc/libdune-geometry-doc/appl/refelements/gg_tetrahedron_edges.png\n usr/share/doc/libdune-geometry-doc/appl/refelements/gg_triangle.png\n usr/share/doc/libdune-geometry-doc/changelog.Debian.gz\n usr/share/doc/libdune-geometry-doc/changelog.gz\n usr/share/doc/libdune-geometry-doc/copyright\n-usr/share/doc/libdune-geometry-doc/doxygen/a00035.html\n+usr/share/doc/libdune-geometry-doc/doxygen/a00008.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00164.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00167.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00170.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00170_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00173.html\n+usr/share/doc/libdune-geometry-doc/doxygen/a00173_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00176.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00176_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00179.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00179_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00182.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00182_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00185.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00185_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00188.html\n-usr/share/doc/libdune-geometry-doc/doxygen/a00188_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00191.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00191_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00194.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00194_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00197.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00197_source.html\n usr/share/doc/libdune-geometry-doc/doxygen/a00200.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": "@@ -16,64 +16,64 @@\n -rw-r--r-- 0 root (0) root (0) 29836 2022-10-20 18:03:11.000000 ./usr/share/doc/libdune-geometry-doc/appl/refelements/gg_tetrahedron.png\n -rw-r--r-- 0 root (0) root (0) 22586 2022-10-20 18:03:11.000000 ./usr/share/doc/libdune-geometry-doc/appl/refelements/gg_tetrahedron_edges.png\n -rw-r--r-- 0 root (0) root (0) 6480 2022-10-20 18:03:11.000000 ./usr/share/doc/libdune-geometry-doc/appl/refelements/gg_triangle.png\n -rw-r--r-- 0 root (0) root (0) 845 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/changelog.Debian.gz\n -rw-r--r-- 0 root (0) root (0) 3307 2022-10-20 18:03:11.000000 ./usr/share/doc/libdune-geometry-doc/changelog.gz\n -rw-r--r-- 0 root (0) root (0) 2567 2023-01-12 15:07:27.000000 ./usr/share/doc/libdune-geometry-doc/copyright\n drwxr-xr-x 0 root (0) root (0) 0 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/\n--rw-r--r-- 0 root (0) root (0) 3075 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00035.html\n+-rw-r--r-- 0 root (0) root (0) 3075 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00008.html\n -rw-r--r-- 0 root (0) root (0) 3049 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00164.html\n -rw-r--r-- 0 root (0) root (0) 3047 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00167.html\n--rw-r--r-- 0 root (0) root (0) 3400 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00170.html\n--rw-r--r-- 0 root (0) root (0) 26542 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00170_source.html\n--rw-r--r-- 0 root (0) root (0) 4352 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00173.html\n--rw-r--r-- 0 root (0) root (0) 11783 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00176.html\n--rw-r--r-- 0 root (0) root (0) 156234 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00176_source.html\n--rw-r--r-- 0 root (0) root (0) 5671 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00179.html\n--rw-r--r-- 0 root (0) root (0) 29350 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00179_source.html\n--rw-r--r-- 0 root (0) root (0) 6690 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00182.html\n--rw-r--r-- 0 root (0) root (0) 35007 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00182_source.html\n--rw-r--r-- 0 root (0) root (0) 5106 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00185.html\n--rw-r--r-- 0 root (0) root (0) 12688 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00185_source.html\n--rw-r--r-- 0 root (0) root (0) 4510 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00188.html\n--rw-r--r-- 0 root (0) root (0) 8120 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00188_source.html\n--rw-r--r-- 0 root (0) root (0) 10165 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00191.html\n--rw-r--r-- 0 root (0) root (0) 66730 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00191_source.html\n--rw-r--r-- 0 root (0) root (0) 7986 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00194.html\n--rw-r--r-- 0 root (0) root (0) 171806 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00194_source.html\n--rw-r--r-- 0 root (0) root (0) 5096 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00197.html\n--rw-r--r-- 0 root (0) root (0) 9368 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00197_source.html\n--rw-r--r-- 0 root (0) root (0) 7240 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00200.html\n--rw-r--r-- 0 root (0) root (0) 29452 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00200_source.html\n--rw-r--r-- 0 root (0) root (0) 5299 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00203.html\n--rw-r--r-- 0 root (0) root (0) 112512 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00203_source.html\n--rw-r--r-- 0 root (0) root (0) 10134 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00206.html\n--rw-r--r-- 0 root (0) root (0) 86047 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00206_source.html\n--rw-r--r-- 0 root (0) root (0) 9692 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00209.html\n--rw-r--r-- 0 root (0) root (0) 96784 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00209_source.html\n--rw-r--r-- 0 root (0) root (0) 10293 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00212.html\n--rw-r--r-- 0 root (0) root (0) 98931 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00212_source.html\n--rw-r--r-- 0 root (0) root (0) 10328 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00215.html\n--rw-r--r-- 0 root (0) root (0) 99226 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00215_source.html\n--rw-r--r-- 0 root (0) root (0) 14353 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00218.html\n--rw-r--r-- 0 root (0) root (0) 118175 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00218_source.html\n+-rw-r--r-- 0 root (0) root (0) 5299 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00170.html\n+-rw-r--r-- 0 root (0) root (0) 112512 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00170_source.html\n+-rw-r--r-- 0 root (0) root (0) 7986 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00173.html\n+-rw-r--r-- 0 root (0) root (0) 171806 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00173_source.html\n+-rw-r--r-- 0 root (0) root (0) 5096 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00176.html\n+-rw-r--r-- 0 root (0) root (0) 9368 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00176_source.html\n+-rw-r--r-- 0 root (0) root (0) 13461 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00179.html\n+-rw-r--r-- 0 root (0) root (0) 94629 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00179_source.html\n+-rw-r--r-- 0 root (0) root (0) 7240 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00182.html\n+-rw-r--r-- 0 root (0) root (0) 29452 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00182_source.html\n+-rw-r--r-- 0 root (0) root (0) 10165 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00185.html\n+-rw-r--r-- 0 root (0) root (0) 66730 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00185_source.html\n+-rw-r--r-- 0 root (0) root (0) 4352 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00188.html\n+-rw-r--r-- 0 root (0) root (0) 5671 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00191.html\n+-rw-r--r-- 0 root (0) root (0) 29350 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00191_source.html\n+-rw-r--r-- 0 root (0) root (0) 6690 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00194.html\n+-rw-r--r-- 0 root (0) root (0) 35007 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00194_source.html\n+-rw-r--r-- 0 root (0) root (0) 11783 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00197.html\n+-rw-r--r-- 0 root (0) root (0) 156234 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00197_source.html\n+-rw-r--r-- 0 root (0) root (0) 4510 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00200.html\n+-rw-r--r-- 0 root (0) root (0) 8120 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00200_source.html\n+-rw-r--r-- 0 root (0) root (0) 6873 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00203.html\n+-rw-r--r-- 0 root (0) root (0) 85999 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00203_source.html\n+-rw-r--r-- 0 root (0) root (0) 5106 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00206.html\n+-rw-r--r-- 0 root (0) root (0) 12688 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00206_source.html\n+-rw-r--r-- 0 root (0) root (0) 5862 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00209.html\n+-rw-r--r-- 0 root (0) root (0) 36535 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00209_source.html\n+-rw-r--r-- 0 root (0) root (0) 5394 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00212.html\n+-rw-r--r-- 0 root (0) root (0) 66962 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00212_source.html\n+-rw-r--r-- 0 root (0) root (0) 5592 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00215.html\n+-rw-r--r-- 0 root (0) root (0) 44620 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00215_source.html\n+-rw-r--r-- 0 root (0) root (0) 3400 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00218.html\n+-rw-r--r-- 0 root (0) root (0) 26542 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00218_source.html\n -rw-r--r-- 0 root (0) root (0) 10618 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00221.html\n -rw-r--r-- 0 root (0) root (0) 34670 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00221_source.html\n--rw-r--r-- 0 root (0) root (0) 13461 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00224.html\n--rw-r--r-- 0 root (0) root (0) 94629 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00224_source.html\n--rw-r--r-- 0 root (0) root (0) 5394 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00227.html\n--rw-r--r-- 0 root (0) root (0) 66962 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00227_source.html\n--rw-r--r-- 0 root (0) root (0) 5592 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00230.html\n--rw-r--r-- 0 root (0) root (0) 44620 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00230_source.html\n--rw-r--r-- 0 root (0) root (0) 5567 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00233.html\n--rw-r--r-- 0 root (0) root (0) 117778 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00233_source.html\n--rw-r--r-- 0 root (0) root (0) 6873 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00236.html\n--rw-r--r-- 0 root (0) root (0) 85999 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00236_source.html\n--rw-r--r-- 0 root (0) root (0) 5862 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00239.html\n--rw-r--r-- 0 root (0) root (0) 36535 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00239_source.html\n+-rw-r--r-- 0 root (0) root (0) 10328 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00224.html\n+-rw-r--r-- 0 root (0) root (0) 99226 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00224_source.html\n+-rw-r--r-- 0 root (0) root (0) 10293 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00227.html\n+-rw-r--r-- 0 root (0) root (0) 98931 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00227_source.html\n+-rw-r--r-- 0 root (0) root (0) 10134 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00230.html\n+-rw-r--r-- 0 root (0) root (0) 86047 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00230_source.html\n+-rw-r--r-- 0 root (0) root (0) 14353 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00233.html\n+-rw-r--r-- 0 root (0) root (0) 118175 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00233_source.html\n+-rw-r--r-- 0 root (0) root (0) 9692 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00236.html\n+-rw-r--r-- 0 root (0) root (0) 96784 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00236_source.html\n+-rw-r--r-- 0 root (0) root (0) 5567 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00239.html\n+-rw-r--r-- 0 root (0) root (0) 117778 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00239_source.html\n -rw-r--r-- 0 root (0) root (0) 5813 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00242.html\n -rw-r--r-- 0 root (0) root (0) 5068 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00243.html\n -rw-r--r-- 0 root (0) root (0) 11280 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00243.png\n -rw-r--r-- 0 root (0) root (0) 5016 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00244.html\n -rw-r--r-- 0 root (0) root (0) 3926 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00244.png\n -rw-r--r-- 0 root (0) root (0) 62508 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00245.html\n -rw-r--r-- 0 root (0) root (0) 3734 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/a00245.png\n@@ -302,15 +302,15 @@\n -rw-r--r-- 0 root (0) root (0) 3162 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/dir_8c28f2953344a167049ba6db5a27148a_dep.png\n -rw-r--r-- 0 root (0) root (0) 7099 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/dir_b609f53bbb5e26b8e9292001c59476a3.html\n -rw-r--r-- 0 root (0) root (0) 2492 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/dir_b609f53bbb5e26b8e9292001c59476a3_dep.png\n -rw-r--r-- 0 root (0) root (0) 4026 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/dir_de8ef2d1b4283b99fcb86ec9d2fa66db.html\n -rw-r--r-- 0 root (0) root (0) 1994 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/dir_de8ef2d1b4283b99fcb86ec9d2fa66db_dep.png\n -rw-r--r-- 0 root (0) root (0) 3989 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/dir_e68e8157741866f444e17edd764ebbae.html\n -rw-r--r-- 0 root (0) root (0) 45631 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/doxygen.css\n--rw-r--r-- 0 root (0) root (0) 26052 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/dune-geometry.tag.gz\n+-rw-r--r-- 0 root (0) root (0) 26059 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/dune-geometry.tag.gz\n -rw-r--r-- 0 root (0) root (0) 7704 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/dynsections.js\n -rw-r--r-- 0 root (0) root (0) 13979 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/files.html\n -rw-r--r-- 0 root (0) root (0) 836 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/form_0.png\n -rw-r--r-- 0 root (0) root (0) 929 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/form_0_dark.png\n -rw-r--r-- 0 root (0) root (0) 2566 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/form_1.png\n -rw-r--r-- 0 root (0) root (0) 536 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/form_10.png\n -rw-r--r-- 0 root (0) root (0) 917 2023-07-15 14:03:47.000000 ./usr/share/doc/libdune-geometry-doc/doxygen/form_100.png\n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00170.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00170.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: deprecated_topology.hh File Reference\n+dune-geometry: referenceelementimplementation.hh File Reference\n \n \n \n \n \n \n \n@@ -69,19 +69,46 @@\n \n
\n \n
\n \n
\n-
deprecated_topology.hh File Reference
\n+
\n+Namespaces
\n+
referenceelementimplementation.hh File Reference
\n
\n
\n-\n+
#include <cassert>
\n+#include <algorithm>
\n+#include <limits>
\n+#include <tuple>
\n+#include <utility>
\n+#include <vector>
\n+#include <array>
\n+#include <bitset>
\n+#include <dune/common/fmatrix.hh>
\n+#include <dune/common/fvector.hh>
\n+#include <dune/common/hybridutilities.hh>
\n+#include <dune/common/typetraits.hh>
\n+#include <dune/common/iteratorrange.hh>
\n+#include <dune/common/math.hh>
\n+#include <dune/geometry/referenceelement.hh>
\n+#include <dune/geometry/affinegeometry.hh>
\n+#include <dune/geometry/type.hh>
\n+
\n

Go to the source code of this file.

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

\n+Namespaces

namespace  Dune
 
namespace  Dune::Geo
 
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,10 +1,33 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-deprecated_topology.hh File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+referenceelementimplementation.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/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\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+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:_\bG_\be_\bo\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-geometry-doc/doxygen/a00170_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00170_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: deprecated_topology.hh Source File\n+dune-geometry: referenceelementimplementation.hh Source File\n \n \n \n \n \n \n \n@@ -74,176 +74,721 @@\n \n
\n \n
\n \n
\n-
deprecated_topology.hh
\n+
referenceelementimplementation.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_DEPRECATED_TOPOLOGY_HH
\n-
6#define DUNE_DEPRECATED_TOPOLOGY_HH
\n+
5#ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH
\n+
6#define DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH
\n
7
\n-
8 namespace Impl
\n-
9 {
\n-
10
\n-
11 // Basic Topology Types
\n-
12 // --------------------
\n-
13
\n-
14 // PointDeprecationHelper can be used to prevent a deprecation warning for Point
\n-
15 struct PointDeprecationHelper
\n-
16 {
\n-
17 static const unsigned int dimension = 0;
\n-
18 static const unsigned int numCorners = 1;
\n-
19
\n-
20 static const unsigned int id = 0;
\n-
21
\n-
22 static std::string name () { return "p"; }
\n-
23 };
\n+
8#include <cassert>
\n+
9
\n+
10#include <algorithm>
\n+
11#include <limits>
\n+
12#include <tuple>
\n+
13#include <utility>
\n+
14#include <vector>
\n+
15#include <array>
\n+
16#include <bitset>
\n+
17
\n+
18#include <dune/common/fmatrix.hh>
\n+
19#include <dune/common/fvector.hh>
\n+
20#include <dune/common/hybridutilities.hh>
\n+
21#include <dune/common/typetraits.hh>
\n+
22#include <dune/common/iteratorrange.hh>
\n+
23#include <dune/common/math.hh>
\n
24
\n-
25 using Point [[deprecated("Use GeometryTypes::vertex instead.")]] = PointDeprecationHelper;
\n-
26
\n-
27
\n-
28 template< class BaseTopology >
\n-
29 struct [[deprecated("Use GeometryTypes::prismaticExtension(GeometryType gt) instead.")]] Prism
\n-
30 {
\n-
31 static const unsigned int dimension = BaseTopology::dimension + 1;
\n-
32 static const unsigned int numCorners = 2 * BaseTopology::numCorners;
\n-
33
\n-
34 static const unsigned int id = BaseTopology::id | ((unsigned int)prismConstruction << (dimension-1));
\n-
35
\n-
36 static std::string name () { return BaseTopology::name() + "l"; }
\n-
37 };
\n-
38
\n+\n+\n+
27#include <dune/geometry/type.hh>
\n+
28
\n+
29namespace Dune
\n+
30{
\n+
31
\n+
32 namespace Geo
\n+
33 {
\n+
34
\n+
35#ifndef DOXYGEN
\n+
36
\n+
37 // Internal Forward Declarations
\n+
38 // -----------------------------
\n
39
\n-
40 template< class BaseTopology >
\n-
41 struct [[deprecated("Use GeometryTypes::conicalExtension(GeometryType gt) instead.")]] Pyramid
\n-
42 {
\n-
43 static const unsigned int dimension = BaseTopology::dimension + 1;
\n-
44 static const unsigned int numCorners = BaseTopology::numCorners + 1;
\n+
40 namespace Impl
\n+
41 {
\n+
42 template< class ctype, int dim >
\n+
43 class ReferenceElementContainer;
\n+
44 }
\n
45
\n-
46 static const unsigned int id = BaseTopology::id | ((unsigned int)pyramidConstruction << (dimension-1));
\n-
47
\n-
48 static std::string name () { return BaseTopology::name() + "o"; }
\n-
49 };
\n+
46 template< class ctype, int dim >
\n+
47 struct ReferenceElements;
\n+
48
\n+
49
\n
50
\n-
51
\n-
52
\n-
53 // Properties of Topologies
\n-
54 // ------------------------
\n-
55
\n-
56 template< class Topology >
\n-
57 struct [[deprecated("Use GeometryType::isSimplex() instead.")]] IsSimplex
\n-
58 : public std::integral_constant< bool, (Topology::id >> 1) == 0 >
\n-
59 {};
\n+
51 namespace Impl
\n+
52 {
\n+
53
\n+
54 using Dune::Impl::isPrism;
\n+
55 using Dune::Impl::isPyramid;
\n+
56 using Dune::Impl::baseTopologyId;
\n+
57 using Dune::Impl::prismConstruction;
\n+
58 using Dune::Impl::pyramidConstruction;
\n+
59 using Dune::Impl::numTopologies;
\n
60
\n-
61 template< class Topology >
\n-
62 struct [[deprecated("Use GeometryType::isCube() instead.")]] IsCube
\n-
63 : public std::integral_constant< bool, (Topology::id | 1) == (1 << Topology::dimension) - 1 >
\n-
64 {};
\n+
62 unsigned int size ( unsigned int topologyId, int dim, int codim );
\n+
63
\n+
64
\n
65
\n-
78 [[deprecated("Use GeometryType::isPrismatic() or GeometryType::isConical() instead.")]]
\n-
79 inline static bool isTopology ( TopologyConstruction construction, unsigned int topologyId, int dim, int codim = 0 ) noexcept
\n-
80 {
\n-
81 assert( (dim > 0) && (topologyId < numTopologies( dim )) );
\n-
82 assert( (0 <= codim) && (codim <= dim) );
\n-
83 return (codim >= (dim-1)) || (((topologyId >> (dim-codim-1)) & 1) == (unsigned int)construction);
\n-
84 }
\n+
73 unsigned int subTopologyId ( unsigned int topologyId, int dim, int codim, unsigned int i );
\n+
74
\n+
75
\n+
76
\n+
77 // subTopologyNumbering
\n+
78 // --------------------
\n+
79
\n+
80 void subTopologyNumbering ( unsigned int topologyId, int dim, int codim, unsigned int i, int subcodim,
\n+
81 unsigned int *beginOut, unsigned int *endOut );
\n+
82
\n+
83
\n+
84
\n
85
\n-
86
\n-
87 // SimplexTopology
\n-
88 // ---------------
\n-
89
\n-
90 template< unsigned int dim >
\n-
91 struct [[deprecated("Use GeometryTypes::simplex(dim) instead.")]] SimplexTopology
\n-
92 {
\n-
93 typedef Pyramid< typename SimplexTopology< dim-1 >::type > type;
\n-
94 };
\n+
86 // checkInside
\n+
87 // -----------
\n+
88
\n+
89 template< class ct, int cdim >
\n+
90 inline bool
\n+
91 checkInside ( unsigned int topologyId, int dim, const FieldVector< ct, cdim > &x, ct tolerance, ct factor = ct( 1 ) )
\n+
92 {
\n+
93 assert( (dim >= 0) && (dim <= cdim) );
\n+
94 assert( topologyId < numTopologies( dim ) );
\n
95
\n-
96 template<>
\n-
97 struct [[deprecated("Use GeometryTypes::simplex(dim) instead.")]] SimplexTopology< 0 >
\n-
98 {
\n-
99 typedef Point type;
\n-
100 };
\n-
101
\n-
102
\n-
103
\n-
104 // CubeTopology
\n-
105 // ------------
\n-
106
\n-
107 template< unsigned int dim >
\n-
108 struct [[deprecated("Use GeometryTypes::cube(dim) instead.")]] CubeTopology
\n-
109 {
\n-
110 typedef Prism< typename CubeTopology< dim-1 >::type > type;
\n-
111 };
\n+
96 if( dim > 0 )
\n+
97 {
\n+
98 const ct baseFactor = (isPrism( topologyId, dim ) ? factor : factor - x[ dim-1 ]);
\n+
99 if( (x[ dim-1 ] > -tolerance) && (factor - x[ dim-1 ] > -tolerance) )
\n+
100 return checkInside< ct, cdim >( baseTopologyId( topologyId, dim ), dim-1, x, tolerance, baseFactor );
\n+
101 else
\n+
102 return false;
\n+
103 }
\n+
104 else
\n+
105 return true;
\n+
106 }
\n+
107
\n+
108
\n+
109
\n+
110 // referenceCorners
\n+
111 // ----------------
\n
112
\n-
113 template<>
\n-
114 struct [[deprecated("Use GeometryTypes::simplex(dim) instead.")]] CubeTopology< 0 >
\n-
115 {
\n-
116 typedef Point type;
\n-
117 };
\n-
118
\n+
113 template< class ct, int cdim >
\n+
114 inline unsigned int
\n+
115 referenceCorners ( unsigned int topologyId, int dim, FieldVector< ct, cdim > *corners )
\n+
116 {
\n+
117 assert( (dim >= 0) && (dim <= cdim) );
\n+
118 assert( topologyId < numTopologies( dim ) );
\n
119
\n-
120
\n-
121 // PyramidTopology
\n-
122 // ---------------
\n-
123
\n-
124 template< unsigned int dim >
\n-
125 struct [[deprecated]] PyramidTopology
\n-
126 {
\n-
127 typedef Pyramid< typename CubeTopology< dim-1 >::type > type;
\n-
128 };
\n-
129
\n-
130
\n-
131
\n-
132 // PrismTopology
\n-
133 // -------------
\n-
134
\n-
135 template< unsigned int dim >
\n-
136 struct [[deprecated]] PrismTopology
\n-
137 {
\n-
138 typedef Prism< typename SimplexTopology< dim-1 >::type > type;
\n-
139 };
\n-
140
\n-
141
\n-
142
\n-
143
\n-
144 // IfTopology
\n-
145 // ----------
\n+
120 if( dim > 0 )
\n+
121 {
\n+
122 const unsigned int nBaseCorners
\n+
123 = referenceCorners( baseTopologyId( topologyId, dim ), dim-1, corners );
\n+
124 assert( nBaseCorners == size( baseTopologyId( topologyId, dim ), dim-1, dim-1 ) );
\n+
125 if( isPrism( topologyId, dim ) )
\n+
126 {
\n+
127 std::copy( corners, corners + nBaseCorners, corners + nBaseCorners );
\n+
128 for( unsigned int i = 0; i < nBaseCorners; ++i )
\n+
129 corners[ i+nBaseCorners ][ dim-1 ] = ct( 1 );
\n+
130 return 2*nBaseCorners;
\n+
131 }
\n+
132 else
\n+
133 {
\n+
134 corners[ nBaseCorners ] = FieldVector< ct, cdim >( ct( 0 ) );
\n+
135 corners[ nBaseCorners ][ dim-1 ] = ct( 1 );
\n+
136 return nBaseCorners+1;
\n+
137 }
\n+
138 }
\n+
139 else
\n+
140 {
\n+
141 *corners = FieldVector< ct, cdim >( ct( 0 ) );
\n+
142 return 1;
\n+
143 }
\n+
144 }
\n+
145
\n
146
\n-
147 template< template< class > class Operation, int dim, class Topology = PointDeprecationHelper >
\n-
148 struct [[deprecated("Use IfGeometryType instead.")]] IfTopology
\n-
149 {
\n-
150 template< class... Args >
\n-
151 static auto apply ( unsigned int topologyId, Args &&... args )
\n-
152 {
\n-
153 if( topologyId & 1 )
\n-
154 return IfTopology< Operation, dim-1, Prism< Topology > >::apply( topologyId >> 1, std::forward< Args >( args )... );
\n-
155 else
\n-
156 return IfTopology< Operation, dim-1, Pyramid< Topology > >::apply( topologyId >> 1, std::forward< Args >( args )... );
\n+
147
\n+
148 // referenceVolume
\n+
149 // ---------------
\n+
150
\n+
151 unsigned long referenceVolumeInverse ( unsigned int topologyId, int dim );
\n+
152
\n+
153 template< class ct >
\n+
154 inline ct referenceVolume ( unsigned int topologyId, int dim )
\n+
155 {
\n+
156 return ct( 1 ) / ct( referenceVolumeInverse( topologyId, dim ) );
\n
157 }
\n-
158 };
\n+
158
\n
159
\n-
160 template< template< class > class Operation, class Topology >
\n-
161 struct [[deprecated("Use IfGeometryType instead.")]] IfTopology< Operation, 0, Topology >
\n-
162 {
\n-
163 template< class... Args >
\n-
164 static auto apply ([[maybe_unused]] unsigned int topologyId, Args &&... args)
\n-
165 {
\n-
166 return Operation< Topology >::apply( std::forward< Args >( args )... );
\n-
167 }
\n-
168 };
\n-
169
\n-
170 } // namespace Impl
\n-
171#endif
\n+
160
\n+
161 // referenceOrigins
\n+
162 // ----------------
\n+
163
\n+
164 template< class ct, int cdim >
\n+
165 inline unsigned int
\n+
166 referenceOrigins ( unsigned int topologyId, int dim, int codim, FieldVector< ct, cdim > *origins )
\n+
167 {
\n+
168 assert( (dim >= 0) && (dim <= cdim) );
\n+
169 assert( topologyId < numTopologies( dim ) );
\n+
170 assert( (codim >= 0) && (codim <= dim) );
\n+
171
\n+
172 if( codim > 0 )
\n+
173 {
\n+
174 const unsigned int baseId = baseTopologyId( topologyId, dim );
\n+
175 if( isPrism( topologyId, dim ) )
\n+
176 {
\n+
177 const unsigned int n = (codim < dim ? referenceOrigins( baseId, dim-1, codim, origins ) : 0);
\n+
178 const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins+n );
\n+
179 for( unsigned int i = 0; i < m; ++i )
\n+
180 {
\n+
181 origins[ n+m+i ] = origins[ n+i ];
\n+
182 origins[ n+m+i ][ dim-1 ] = ct( 1 );
\n+
183 }
\n+
184 return n+2*m;
\n+
185 }
\n+
186 else
\n+
187 {
\n+
188 const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins );
\n+
189 if( codim == dim )
\n+
190 {
\n+
191 origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) );
\n+
192 origins[ m ][ dim-1 ] = ct( 1 );
\n+
193 return m+1;
\n+
194 }
\n+
195 else
\n+
196 return m+referenceOrigins( baseId, dim-1, codim, origins+m );
\n+
197 }
\n+
198 }
\n+
199 else
\n+
200 {
\n+
201 origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );
\n+
202 return 1;
\n+
203 }
\n+
204 }
\n+
205
\n+
206
\n+
207
\n+
208 // referenceEmbeddings
\n+
209 // -------------------
\n+
210
\n+
211 template< class ct, int cdim, int mydim >
\n+
212 inline unsigned int
\n+
213 referenceEmbeddings ( unsigned int topologyId, int dim, int codim,
\n+
214 FieldVector< ct, cdim > *origins,
\n+
215 FieldMatrix< ct, mydim, cdim > *jacobianTransposeds )
\n+
216 {
\n+
217 assert( (0 <= codim) && (codim <= dim) && (dim <= cdim) );
\n+
218 assert( (dim - codim <= mydim) && (mydim <= cdim) );
\n+
219 assert( topologyId < numTopologies( dim ) );
\n+
220
\n+
221 if( codim > 0 )
\n+
222 {
\n+
223 const unsigned int baseId = baseTopologyId( topologyId, dim );
\n+
224 if( isPrism( topologyId, dim ) )
\n+
225 {
\n+
226 const unsigned int n = (codim < dim ? referenceEmbeddings( baseId, dim-1, codim, origins, jacobianTransposeds ) : 0);
\n+
227 for( unsigned int i = 0; i < n; ++i )
\n+
228 jacobianTransposeds[ i ][ dim-codim-1 ][ dim-1 ] = ct( 1 );
\n+
229
\n+
230 const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1, origins+n, jacobianTransposeds+n );
\n+
231 std::copy( origins+n, origins+n+m, origins+n+m );
\n+
232 std::copy( jacobianTransposeds+n, jacobianTransposeds+n+m, jacobianTransposeds+n+m );
\n+
233 for( unsigned int i = 0; i < m; ++i )
\n+
234 origins[ n+m+i ][ dim-1 ] = ct( 1 );
\n+
235
\n+
236 return n+2*m;
\n+
237 }
\n+
238 else
\n+
239 {
\n+
240 const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1, origins, jacobianTransposeds );
\n+
241 if( codim == dim )
\n+
242 {
\n+
243 origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) );
\n+
244 origins[ m ][ dim-1 ] = ct( 1 );
\n+
245 jacobianTransposeds[ m ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) );
\n+
246 return m+1;
\n+
247 }
\n+
248 else
\n+
249 {
\n+
250 const unsigned int n = referenceEmbeddings( baseId, dim-1, codim, origins+m, jacobianTransposeds+m );
\n+
251 for( unsigned int i = 0; i < n; ++i )
\n+
252 {
\n+
253 for( int k = 0; k < dim-1; ++k )
\n+
254 jacobianTransposeds[ m+i ][ dim-codim-1 ][ k ] = -origins[ m+i ][ k ];
\n+
255 jacobianTransposeds[ m+i ][ dim-codim-1 ][ dim-1 ] = ct( 1 );
\n+
256 }
\n+
257 return m+n;
\n+
258 }
\n+
259 }
\n+
260 }
\n+
261 else
\n+
262 {
\n+
263 origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );
\n+
264 jacobianTransposeds[ 0 ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) );
\n+
265 for( int k = 0; k < dim; ++k )
\n+
266 jacobianTransposeds[ 0 ][ k ][ k ] = ct( 1 );
\n+
267 return 1;
\n+
268 }
\n+
269 }
\n+
270
\n+
271
\n+
272
\n+
273 // referenceIntegrationOuterNormals
\n+
274 // --------------------------------
\n+
275
\n+
276 template< class ct, int cdim >
\n+
277 inline unsigned int
\n+
278 referenceIntegrationOuterNormals ( unsigned int topologyId, int dim,
\n+
279 const FieldVector< ct, cdim > *origins,
\n+
280 FieldVector< ct, cdim > *normals )
\n+
281 {
\n+
282 assert( (dim > 0) && (dim <= cdim) );
\n+
283 assert( topologyId < numTopologies( dim ) );
\n+
284
\n+
285 if( dim > 1 )
\n+
286 {
\n+
287 const unsigned int baseId = baseTopologyId( topologyId, dim );
\n+
288 if( isPrism( topologyId, dim ) )
\n+
289 {
\n+
290 const unsigned int numBaseFaces
\n+
291 = referenceIntegrationOuterNormals( baseId, dim-1, origins, normals );
\n+
292
\n+
293 for( unsigned int i = 0; i < 2; ++i )
\n+
294 {
\n+
295 normals[ numBaseFaces+i ] = FieldVector< ct, cdim >( ct( 0 ) );
\n+
296 normals[ numBaseFaces+i ][ dim-1 ] = ct( 2*int( i )-1 );
\n+
297 }
\n+
298
\n+
299 return numBaseFaces+2;
\n+
300 }
\n+
301 else
\n+
302 {
\n+
303 normals[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );
\n+
304 normals[ 0 ][ dim-1 ] = ct( -1 );
\n+
305
\n+
306 const unsigned int numBaseFaces
\n+
307 = referenceIntegrationOuterNormals( baseId, dim-1, origins+1, normals+1 );
\n+
308 for( unsigned int i = 1; i <= numBaseFaces; ++i )
\n+
309 normals[ i ][ dim-1 ] = normals[ i ]*origins[ i ];
\n+
310
\n+
311 return numBaseFaces+1;
\n+
312 }
\n+
313 }
\n+
314 else
\n+
315 {
\n+
316 for( unsigned int i = 0; i < 2; ++i )
\n+
317 {
\n+
318 normals[ i ] = FieldVector< ct, cdim >( ct( 0 ) );
\n+
319 normals[ i ][ 0 ] = ct( 2*int( i )-1 );
\n+
320 }
\n+
321
\n+
322 return 2;
\n+
323 }
\n+
324 }
\n+
325
\n+
326 template< class ct, int cdim >
\n+
327 inline unsigned int
\n+
328 referenceIntegrationOuterNormals ( unsigned int topologyId, int dim,
\n+
329 FieldVector< ct, cdim > *normals )
\n+
330 {
\n+
331 assert( (dim > 0) && (dim <= cdim) );
\n+
332
\n+
333 FieldVector< ct, cdim > *origins
\n+
334 = new FieldVector< ct, cdim >[ size( topologyId, dim, 1 ) ];
\n+
335 referenceOrigins( topologyId, dim, 1, origins );
\n+
336
\n+
337 const unsigned int numFaces
\n+
338 = referenceIntegrationOuterNormals( topologyId, dim, origins, normals );
\n+
339 assert( numFaces == size( topologyId, dim, 1 ) );
\n+
340
\n+
341 delete[] origins;
\n+
342
\n+
343 return numFaces;
\n+
344 }
\n+
345
\n+
346 } // namespace Impl
\n+
347
\n+
348
\n+
349
\n+
350 // ReferenceElement
\n+
351 // ----------------
\n+
352
\n+
371 template< class ctype_, int dim >
\n+
372 class ReferenceElementImplementation
\n+
373 {
\n+
374
\n+
375 public:
\n+
376
\n+
378 using ctype = ctype_;
\n+
379
\n+
381 using CoordinateField = ctype;
\n+
382
\n+
384 using Coordinate = Dune::FieldVector<ctype,dim>;
\n+
385
\n+
387 static constexpr int dimension = dim;
\n+
388
\n+
390 typedef ctype Volume;
\n+
391
\n+
392 private:
\n+
393
\n+
394 friend class Impl::ReferenceElementContainer< ctype, dim >;
\n+
395
\n+
396 struct SubEntityInfo;
\n+
397
\n+
398 template< int codim > struct CreateGeometries;
\n+
399
\n+
400 public:
\n+
402 template< int codim >
\n+
403 struct Codim
\n+
404 {
\n+
406 typedef AffineGeometry< ctype, dim-codim, dim > Geometry;
\n+
407 };
\n+
408
\n+
409 // ReferenceElement cannot be copied.
\n+
410 ReferenceElementImplementation ( const ReferenceElementImplementation& ) = delete;
\n+
411
\n+
412 // ReferenceElementImplementation cannot be copied.
\n+
413 ReferenceElementImplementation& operator= ( const ReferenceElementImplementation& ) = delete;
\n+
414
\n+
415 // ReferenceElementImplementation is default-constructible (required for storage in std::array)
\n+
416 ReferenceElementImplementation () = default;
\n+
417
\n+
422 int size ( int c ) const
\n+
423 {
\n+
424 assert( (c >= 0) && (c <= dim) );
\n+
425 return info_[ c ].size();
\n+
426 }
\n+
427
\n+
439 int size ( int i, int c, int cc ) const
\n+
440 {
\n+
441 assert( (i >= 0) && (i < size( c )) );
\n+
442 return info_[ c ][ i ].size( cc );
\n+
443 }
\n+
444
\n+
458 int subEntity ( int i, int c, int ii, int cc ) const
\n+
459 {
\n+
460 assert( (i >= 0) && (i < size( c )) );
\n+
461 return info_[ c ][ i ].number( ii, cc );
\n+
462 }
\n+
463
\n+
479 auto subEntities ( int i, int c, int cc ) const
\n+
480 {
\n+
481 assert( (i >= 0) && (i < size( c )) );
\n+
482 return info_[ c ][ i ].numbers( cc );
\n+
483 }
\n+
484
\n+
493 const GeometryType &type ( int i, int c ) const
\n+
494 {
\n+
495 assert( (i >= 0) && (i < size( c )) );
\n+
496 return info_[ c ][ i ].type();
\n+
497 }
\n+
498
\n+
500 const GeometryType &type () const { return type( 0, 0 ); }
\n+
501
\n+
511 const Coordinate &position( int i, int c ) const
\n+
512 {
\n+
513 assert( (c >= 0) && (c <= dim) );
\n+
514 return baryCenters_[ c ][ i ];
\n+
515 }
\n+
516
\n+
524 bool checkInside ( const Coordinate &local ) const
\n+
525 {
\n+
526 const ctype tolerance = ctype( 64 ) * std::numeric_limits< ctype >::epsilon();
\n+
527 return Impl::template checkInside< ctype, dim >( type().id(), dim, local, tolerance );
\n+
528 }
\n+
529
\n+
541 template< int codim >
\n+
542 typename Codim< codim >::Geometry geometry ( int i ) const
\n+
543 {
\n+
544 return std::get< codim >( geometries_ )[ i ];
\n+
545 }
\n+
546
\n+
548 Volume volume () const
\n+
549 {
\n+
550 return volume_;
\n+
551 }
\n+
552
\n+
560 const Coordinate &integrationOuterNormal ( int face ) const
\n+
561 {
\n+
562 assert( (face >= 0) && (face < int( integrationNormals_.size() )) );
\n+
563 return integrationNormals_[ face ];
\n+
564 }
\n+
565
\n+
566 private:
\n+
567 void initialize ( unsigned int topologyId )
\n+
568 {
\n+
569 assert( topologyId < Impl::numTopologies( dim ) );
\n+
570
\n+
571 // set up subentities
\n+
572 for( int codim = 0; codim <= dim; ++codim )
\n+
573 {
\n+
574 const unsigned int size = Impl::size( topologyId, dim, codim );
\n+
575 info_[ codim ].resize( size );
\n+
576 for( unsigned int i = 0; i < size; ++i )
\n+
577 info_[ codim ][ i ].initialize( topologyId, codim, i );
\n+
578 }
\n+
579
\n+
580 // compute corners
\n+
581 const unsigned int numVertices = size( dim );
\n+
582 baryCenters_[ dim ].resize( numVertices );
\n+
583 Impl::referenceCorners( topologyId, dim, &(baryCenters_[ dim ][ 0 ]) );
\n+
584
\n+
585 // compute barycenters
\n+
586 for( int codim = 0; codim < dim; ++codim )
\n+
587 {
\n+
588 baryCenters_[ codim ].resize( size(codim) );
\n+
589 for( int i = 0; i < size( codim ); ++i )
\n+
590 {
\n+
591 baryCenters_[ codim ][ i ] = Coordinate( ctype( 0 ) );
\n+
592 const unsigned int numCorners = size( i, codim, dim );
\n+
593 for( unsigned int j = 0; j < numCorners; ++j )
\n+
594 baryCenters_[ codim ][ i ] += baryCenters_[ dim ][ subEntity( i, codim, j, dim ) ];
\n+
595 baryCenters_[ codim ][ i ] *= ctype( 1 ) / ctype( numCorners );
\n+
596 }
\n+
597 }
\n+
598
\n+
599 // compute reference element volume
\n+
600 volume_ = Impl::template referenceVolume< ctype >( topologyId, dim );
\n+
601
\n+
602 // compute integration outer normals
\n+
603 if( dim > 0 )
\n+
604 {
\n+
605 integrationNormals_.resize( size( 1 ) );
\n+
606 Impl::referenceIntegrationOuterNormals( topologyId, dim, &(integrationNormals_[ 0 ]) );
\n+
607 }
\n+
608
\n+
609 // set up geometries
\n+
610 Hybrid::forEach( std::make_index_sequence< dim+1 >{}, [ & ]( auto i ){ CreateGeometries< i >::apply( *this, geometries_ ); } );
\n+
611 }
\n+
612
\n+
613 template< int... codim >
\n+
614 static std::tuple< std::vector< typename Codim< codim >::Geometry >... >
\n+
615 makeGeometryTable ( std::integer_sequence< int, codim... > );
\n+
616
\n+
618 typedef decltype( makeGeometryTable( std::make_integer_sequence< int, dim+1 >() ) ) GeometryTable;
\n+
619
\n+
621 ctype volume_;
\n+
622
\n+
623 std::vector< Coordinate > baryCenters_[ dim+1 ];
\n+
624 std::vector< Coordinate > integrationNormals_;
\n+
625
\n+
627 GeometryTable geometries_;
\n+
628
\n+
629 std::vector< SubEntityInfo > info_[ dim+1 ];
\n+
630 };
\n+
631
\n+
633 template< class ctype, int dim >
\n+
634 struct ReferenceElementImplementation< ctype, dim >::SubEntityInfo
\n+
635 {
\n+
636 // Compute upper bound for the number of subsentities.
\n+
637 // If someone knows an explicit formal feel free to
\n+
638 // implement it here.
\n+
639 static constexpr std::size_t maxSubEntityCount()
\n+
640 {
\n+
641 std::size_t maxCount=0;
\n+
642 for(std::size_t codim=0; codim<=dim; ++codim)
\n+
643 maxCount = std::max(maxCount, binomial(std::size_t(dim),codim)*(1 << codim));
\n+
644 return maxCount;
\n+
645 }
\n+
646
\n+
647 using SubEntityFlags = std::bitset<maxSubEntityCount()>;
\n+
648
\n+
649 class SubEntityRange
\n+
650 : public Dune::IteratorRange<const unsigned int*>
\n+
651 {
\n+
652 using Base = typename Dune::IteratorRange<const unsigned int*>;
\n+
653
\n+
654 public:
\n+
655
\n+
656 using iterator = Base::iterator;
\n+
657 using const_iterator = Base::const_iterator;
\n+
658
\n+
659 SubEntityRange(const iterator& begin, const iterator& end, const SubEntityFlags& contains) :
\n+
660 Base(begin, end),
\n+
661 containsPtr_(&contains),
\n+
662 size_(end-begin)
\n+
663 {}
\n+
664
\n+
665 SubEntityRange() :
\n+
666 Base(),
\n+
667 containsPtr_(nullptr),
\n+
668 size_(0)
\n+
669 {}
\n+
670
\n+
671 std::size_t size() const
\n+
672 {
\n+
673 return size_;
\n+
674 }
\n+
675
\n+
676 bool contains(std::size_t i) const
\n+
677 {
\n+
678 return (*containsPtr_)[i];
\n+
679 }
\n+
680
\n+
681 private:
\n+
682 const SubEntityFlags* containsPtr_;
\n+
683 std::size_t size_;
\n+
684 std::size_t offset_;
\n+
685 };
\n+
686
\n+
687 using NumberRange = typename Dune::IteratorRange<const unsigned int*>;
\n+
688
\n+
689 SubEntityInfo ()
\n+
690 : numbering_( nullptr )
\n+
691 {
\n+
692 std::fill( offset_.begin(), offset_.end(), 0 );
\n+
693 }
\n+
694
\n+
695 SubEntityInfo ( const SubEntityInfo &other )
\n+
696 : offset_( other.offset_ ),
\n+
697 type_( other.type_ ),
\n+
698 containsSubentity_( other.containsSubentity_ )
\n+
699 {
\n+
700 numbering_ = allocate();
\n+
701 std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ );
\n+
702 }
\n+
703
\n+
704 ~SubEntityInfo () { deallocate( numbering_ ); }
\n+
705
\n+
706 const SubEntityInfo &operator= ( const SubEntityInfo &other )
\n+
707 {
\n+
708 type_ = other.type_;
\n+
709 offset_ = other.offset_;
\n+
710
\n+
711 deallocate( numbering_ );
\n+
712 numbering_ = allocate();
\n+
713 std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ );
\n+
714
\n+
715 containsSubentity_ = other.containsSubentity_;
\n+
716
\n+
717 return *this;
\n+
718 }
\n+
719
\n+
720 int size ( int cc ) const
\n+
721 {
\n+
722 assert( (cc >= 0) && (cc <= dim) );
\n+
723 return (offset_[ cc+1 ] - offset_[ cc ]);
\n+
724 }
\n+
725
\n+
726 int number ( int ii, int cc ) const
\n+
727 {
\n+
728 assert( (ii >= 0) && (ii < size( cc )) );
\n+
729 return numbering_[ offset_[ cc ] + ii ];
\n+
730 }
\n+
731
\n+
732 auto numbers ( int cc ) const
\n+
733 {
\n+
734 return SubEntityRange( numbering_ + offset_[ cc ], numbering_ + offset_[ cc+1 ], containsSubentity_[cc]);
\n+
735 }
\n+
736
\n+
737 const GeometryType &type () const { return type_; }
\n+
738
\n+
739 void initialize ( unsigned int topologyId, int codim, unsigned int i )
\n+
740 {
\n+
741 const unsigned int subId = Impl::subTopologyId( topologyId, dim, codim, i );
\n+
742 type_ = GeometryType( subId, dim-codim );
\n+
743
\n+
744 // compute offsets
\n+
745 for( int cc = 0; cc <= codim; ++cc )
\n+
746 offset_[ cc ] = 0;
\n+
747 for( int cc = codim; cc <= dim; ++cc )
\n+
748 offset_[ cc+1 ] = offset_[ cc ] + Impl::size( subId, dim-codim, cc-codim );
\n+
749
\n+
750 // compute subnumbering
\n+
751 deallocate( numbering_ );
\n+
752 numbering_ = allocate();
\n+
753 for( int cc = codim; cc <= dim; ++cc )
\n+
754 Impl::subTopologyNumbering( topologyId, dim, codim, i, cc-codim, numbering_+offset_[ cc ], numbering_+offset_[ cc+1 ] );
\n+
755
\n+
756 // initialize containsSubentity lookup-table
\n+
757 for(std::size_t cc=0; cc<= dim; ++cc)
\n+
758 {
\n+
759 containsSubentity_[cc].reset();
\n+
760 for(std::size_t idx=0; idx<std::size_t(size(cc)); ++idx)
\n+
761 containsSubentity_[cc][number(idx,cc)] = true;
\n+
762 }
\n+
763 }
\n+
764
\n+
765 protected:
\n+
766 int codim () const { return dim - type().dim(); }
\n+
767
\n+
768 unsigned int *allocate () { return (capacity() != 0 ? new unsigned int[ capacity() ] : nullptr); }
\n+
769 void deallocate ( unsigned int *ptr ) { delete[] ptr; }
\n+
770 unsigned int capacity () const { return offset_[ dim+1 ]; }
\n+
771
\n+
772 private:
\n+
773 unsigned int *numbering_;
\n+
774 std::array< unsigned int, dim+2 > offset_;
\n+
775 GeometryType type_;
\n+
776 std::array< SubEntityFlags, dim+1> containsSubentity_;
\n+
777 };
\n+
778
\n+
779
\n+
780 template< class ctype, int dim >
\n+
781 template< int codim >
\n+
782 struct ReferenceElementImplementation< ctype, dim >::CreateGeometries
\n+
783 {
\n+
784 template< int cc >
\n+
785 static typename ReferenceElements< ctype, dim-cc >::ReferenceElement
\n+
786 subRefElement( const ReferenceElementImplementation< ctype, dim > &refElement, int i, std::integral_constant< int, cc > )
\n+
787 {
\n+
788 return ReferenceElements< ctype, dim-cc >::general( refElement.type( i, cc ) );
\n+
789 }
\n+
790
\n+\n+
792 subRefElement(const ReferenceElementImplementation< ctype, dim > &refElement,
\n+
793 [[maybe_unused]] int i, std::integral_constant<int, 0>)
\n+
794 {
\n+
795 return refElement;
\n+
796 }
\n+
797
\n+
798 static void apply ( const ReferenceElementImplementation< ctype, dim > &refElement, GeometryTable &geometries )
\n+
799 {
\n+
800 const int size = refElement.size( codim );
\n+
801 std::vector< FieldVector< ctype, dim > > origins( size );
\n+
802 std::vector< FieldMatrix< ctype, dim - codim, dim > > jacobianTransposeds( size );
\n+
803 Impl::referenceEmbeddings( refElement.type().id(), dim, codim, &(origins[ 0 ]), &(jacobianTransposeds[ 0 ]) );
\n+
804
\n+
805 std::get< codim >( geometries ).reserve( size );
\n+
806 for( int i = 0; i < size; ++i )
\n+
807 {
\n+
808 typename Codim< codim >::Geometry geometry( subRefElement( refElement, i, std::integral_constant< int, codim >() ), origins[ i ], jacobianTransposeds[ i ] );
\n+
809 std::get< codim >( geometries ).push_back( geometry );
\n+
810 }
\n+
811 }
\n+
812 };
\n+
813
\n+
814#endif // DOXYGEN
\n+
815
\n+
816 } // namespace Geo
\n+
817
\n+
818} // namespace Dune
\n+
819
\n+
820#endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH
\n+
A unique label for each type of element that can occur in a grid.
\n+\n+
An implementation of the Geometry interface for affine geometries.
\n+
Definition affinegeometry.hh:21
\n+
@ size
Definition quadraturerules.hh:145
\n+
int binomial(int upper, int lower)
calculate
Definition simplex.cc:305
\n+
typename Container::ReferenceElement ReferenceElement
The reference element type.
Definition referenceelements.hh:188
\n+
static const ReferenceElement & general(const GeometryType &type)
get general reference elements
Definition referenceelements.hh:198
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,188 +1,767 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-deprecated_topology.hh\n+referenceelementimplementation.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_DEPRECATED_TOPOLOGY_HH\n-6#define DUNE_DEPRECATED_TOPOLOGY_HH\n+5#ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH\n+6#define DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH\n 7\n-8 namespace Impl\n-9 {\n-10\n-11 // Basic Topology Types\n-12 // --------------------\n-13\n-14 // PointDeprecationHelper can be used to prevent a deprecation warning for\n-Point\n-15 struct PointDeprecationHelper\n-16 {\n-17 static const unsigned int dimension = 0;\n-18 static const unsigned int numCorners = 1;\n-19\n-20 static const unsigned int id = 0;\n-21\n-22 static std::string name () { return \"p\"; }\n-23 };\n+8#include \n+9\n+10#include \n+11#include \n+12#include \n+13#include \n+14#include \n+15#include \n+16#include \n+17\n+18#include \n+19#include \n+20#include \n+21#include \n+22#include \n+23#include \n 24\n-25 using Point [[deprecated(\"Use GeometryTypes::vertex instead.\")]] =\n-PointDeprecationHelper;\n-26\n-27\n-28 template< class BaseTopology >\n-29 struct [[deprecated(\"Use GeometryTypes::prismaticExtension(GeometryType gt)\n-instead.\")]] Prism\n-30 {\n-31 static const unsigned int dimension = BaseTopology::dimension + 1;\n-32 static const unsigned int numCorners = 2 * BaseTopology::numCorners;\n-33\n-34 static const unsigned int id = BaseTopology::id | ((unsigned\n-int)prismConstruction << (dimension-1));\n-35\n-36 static std::string name () { return BaseTopology::name() + \"l\"; }\n-37 };\n-38\n+25#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n+26#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n+27#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+28\n+29namespace _\bD_\bu_\bn_\be\n+30{\n+31\n+32 namespace Geo\n+33 {\n+34\n+35#ifndef DOXYGEN\n+36\n+37 // Internal Forward Declarations\n+38 // -----------------------------\n 39\n-40 template< class BaseTopology >\n-41 struct [[deprecated(\"Use GeometryTypes::conicalExtension(GeometryType gt)\n-instead.\")]] Pyramid\n-42 {\n-43 static const unsigned int dimension = BaseTopology::dimension + 1;\n-44 static const unsigned int numCorners = BaseTopology::numCorners + 1;\n+40 namespace Impl\n+41 {\n+42 template< class ctype, int dim >\n+43 class ReferenceElementContainer;\n+44 }\n 45\n-46 static const unsigned int id = BaseTopology::id | ((unsigned\n-int)pyramidConstruction << (dimension-1));\n-47\n-48 static std::string name () { return BaseTopology::name() + \"o\"; }\n-49 };\n+46 template< class ctype, int dim >\n+47 struct ReferenceElements;\n+48\n+49\n 50\n-51\n-52\n-53 // Properties of Topologies\n-54 // ------------------------\n-55\n-56 template< class Topology >\n-57 struct [[deprecated(\"Use GeometryType::isSimplex() instead.\")]] IsSimplex\n-58 : public std::integral_constant< bool, (Topology::id >> 1) == 0 >\n-59 {};\n+51 namespace Impl\n+52 {\n+53\n+54 using Dune::Impl::isPrism;\n+55 using Dune::Impl::isPyramid;\n+56 using Dune::Impl::baseTopologyId;\n+57 using Dune::Impl::prismConstruction;\n+58 using Dune::Impl::pyramidConstruction;\n+59 using Dune::Impl::numTopologies;\n 60\n-61 template< class Topology >\n-62 struct [[deprecated(\"Use GeometryType::isCube() instead.\")]] IsCube\n-63 : public std::integral_constant< bool, (Topology::id | 1) == (1 <<\n-Topology::dimension) - 1 >\n-64 {};\n+62 unsigned int _\bs_\bi_\bz_\be ( unsigned int topologyId, int dim, int codim );\n+63\n+64\n 65\n-78 [[deprecated(\"Use GeometryType::isPrismatic() or GeometryType::isConical()\n-instead.\")]]\n-79 inline static bool isTopology ( TopologyConstruction construction, unsigned\n-int topologyId, int dim, int codim = 0 ) noexcept\n-80 {\n-81 assert( (dim > 0) && (topologyId < numTopologies( dim )) );\n-82 assert( (0 <= codim) && (codim <= dim) );\n-83 return (codim >= (dim-1)) || (((topologyId >> (dim-codim-1)) & 1) ==\n-(unsigned int)construction);\n-84 }\n+73 unsigned int subTopologyId ( unsigned int topologyId, int dim, int codim,\n+unsigned int i );\n+74\n+75\n+76\n+77 // subTopologyNumbering\n+78 // --------------------\n+79\n+80 void subTopologyNumbering ( unsigned int topologyId, int dim, int codim,\n+unsigned int i, int subcodim,\n+81 unsigned int *beginOut, unsigned int *endOut );\n+82\n+83\n+84\n 85\n-86\n-87 // SimplexTopology\n-88 // ---------------\n-89\n-90 template< unsigned int dim >\n-91 struct [[deprecated(\"Use GeometryTypes::simplex(dim) instead.\")]]\n-SimplexTopology\n+86 // checkInside\n+87 // -----------\n+88\n+89 template< class ct, int cdim >\n+90 inline bool\n+91 checkInside ( unsigned int topologyId, int dim, const FieldVector< ct, cdim\n+> &x, ct tolerance, ct factor = ct( 1 ) )\n 92 {\n-93 typedef Pyramid< typename SimplexTopology< dim-1 >::type > type;\n-94 };\n+93 assert( (dim >= 0) && (dim <= cdim) );\n+94 assert( topologyId < numTopologies( dim ) );\n 95\n-96 template<>\n-97 struct [[deprecated(\"Use GeometryTypes::simplex(dim) instead.\")]]\n-SimplexTopology< 0 >\n-98 {\n-99 typedef Point type;\n-100 };\n-101\n-102\n-103\n-104 // CubeTopology\n-105 // ------------\n-106\n-107 template< unsigned int dim >\n-108 struct [[deprecated(\"Use GeometryTypes::cube(dim) instead.\")]] CubeTopology\n-109 {\n-110 typedef Prism< typename CubeTopology< dim-1 >::type > type;\n-111 };\n+96 if( dim > 0 )\n+97 {\n+98 const ct baseFactor = (isPrism( topologyId, dim ) ? factor : factor - x\n+[ dim-1 ]);\n+99 if( (x[ dim-1 ] > -tolerance) && (factor - x[ dim-1 ] > -tolerance) )\n+100 return checkInside< ct, cdim >( baseTopologyId( topologyId, dim ), dim-1,\n+x, tolerance, baseFactor );\n+101 else\n+102 return false;\n+103 }\n+104 else\n+105 return true;\n+106 }\n+107\n+108\n+109\n+110 // referenceCorners\n+111 // ----------------\n 112\n-113 template<>\n-114 struct [[deprecated(\"Use GeometryTypes::simplex(dim) instead.\")]]\n-CubeTopology< 0 >\n-115 {\n-116 typedef Point type;\n-117 };\n-118\n+113 template< class ct, int cdim >\n+114 inline unsigned int\n+115 referenceCorners ( unsigned int topologyId, int dim, FieldVector< ct, cdim\n+> *corners )\n+116 {\n+117 assert( (dim >= 0) && (dim <= cdim) );\n+118 assert( topologyId < numTopologies( dim ) );\n 119\n-120\n-121 // PyramidTopology\n-122 // ---------------\n-123\n-124 template< unsigned int dim >\n-125 struct [[deprecated]] PyramidTopology\n+120 if( dim > 0 )\n+121 {\n+122 const unsigned int nBaseCorners\n+123 = referenceCorners( baseTopologyId( topologyId, dim ), dim-1, corners );\n+124 assert( nBaseCorners == _\bs_\bi_\bz_\be( baseTopologyId( topologyId, dim ), dim-1,\n+dim-1 ) );\n+125 if( isPrism( topologyId, dim ) )\n 126 {\n-127 typedef Pyramid< typename CubeTopology< dim-1 >::type > type;\n-128 };\n-129\n-130\n-131\n-132 // PrismTopology\n-133 // -------------\n-134\n-135 template< unsigned int dim >\n-136 struct [[deprecated]] PrismTopology\n-137 {\n-138 typedef Prism< typename SimplexTopology< dim-1 >::type > type;\n-139 };\n-140\n-141\n-142\n-143\n-144 // IfTopology\n-145 // ----------\n+127 std::copy( corners, corners + nBaseCorners, corners + nBaseCorners );\n+128 for( unsigned int i = 0; i < nBaseCorners; ++i )\n+129 corners[ i+nBaseCorners ][ dim-1 ] = ct( 1 );\n+130 return 2*nBaseCorners;\n+131 }\n+132 else\n+133 {\n+134 corners[ nBaseCorners ] = FieldVector< ct, cdim >( ct( 0 ) );\n+135 corners[ nBaseCorners ][ dim-1 ] = ct( 1 );\n+136 return nBaseCorners+1;\n+137 }\n+138 }\n+139 else\n+140 {\n+141 *corners = FieldVector< ct, cdim >( ct( 0 ) );\n+142 return 1;\n+143 }\n+144 }\n+145\n 146\n-147 template< template< class > class Operation, int dim, class Topology =\n-PointDeprecationHelper >\n-148 struct [[deprecated(\"Use IfGeometryType instead.\")]] IfTopology\n-149 {\n-150 template< class... Args >\n-151 static auto apply ( unsigned int topologyId, Args &&... args )\n-152 {\n-153 if( topologyId & 1 )\n-154 return IfTopology< Operation, dim-1, Prism< Topology > >::apply( topologyId\n->> 1, std::forward< Args >( args )... );\n-155 else\n-156 return IfTopology< Operation, dim-1, Pyramid< Topology > >::apply\n-( topologyId >> 1, std::forward< Args >( args )... );\n+147\n+148 // referenceVolume\n+149 // ---------------\n+150\n+151 unsigned long referenceVolumeInverse ( unsigned int topologyId, int dim );\n+152\n+153 template< class ct >\n+154 inline ct referenceVolume ( unsigned int topologyId, int dim )\n+155 {\n+156 return ct( 1 ) / ct( referenceVolumeInverse( topologyId, dim ) );\n 157 }\n-158 };\n+158\n 159\n-160 template< template< class > class Operation, class Topology >\n-161 struct [[deprecated(\"Use IfGeometryType instead.\")]] IfTopology< Operation,\n-0, Topology >\n-162 {\n-163 template< class... Args >\n-164 static auto apply ([[maybe_unused]] unsigned int topologyId, Args &&...\n-args)\n-165 {\n-166 return Operation< Topology >::apply( std::forward< Args >( args )... );\n-167 }\n-168 };\n-169\n-170 } // namespace Impl\n-171#endif\n+160\n+161 // referenceOrigins\n+162 // ----------------\n+163\n+164 template< class ct, int cdim >\n+165 inline unsigned int\n+166 referenceOrigins ( unsigned int topologyId, int dim, int codim,\n+FieldVector< ct, cdim > *origins )\n+167 {\n+168 assert( (dim >= 0) && (dim <= cdim) );\n+169 assert( topologyId < numTopologies( dim ) );\n+170 assert( (codim >= 0) && (codim <= dim) );\n+171\n+172 if( codim > 0 )\n+173 {\n+174 const unsigned int baseId = baseTopologyId( topologyId, dim );\n+175 if( isPrism( topologyId, dim ) )\n+176 {\n+177 const unsigned int n = (codim < dim ? referenceOrigins( baseId, dim-1,\n+codim, origins ) : 0);\n+178 const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins+n\n+);\n+179 for( unsigned int i = 0; i < m; ++i )\n+180 {\n+181 origins[ n+m+i ] = origins[ n+i ];\n+182 origins[ n+m+i ][ dim-1 ] = ct( 1 );\n+183 }\n+184 return n+2*m;\n+185 }\n+186 else\n+187 {\n+188 const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins );\n+189 if( codim == dim )\n+190 {\n+191 origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) );\n+192 origins[ m ][ dim-1 ] = ct( 1 );\n+193 return m+1;\n+194 }\n+195 else\n+196 return m+referenceOrigins( baseId, dim-1, codim, origins+m );\n+197 }\n+198 }\n+199 else\n+200 {\n+201 origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );\n+202 return 1;\n+203 }\n+204 }\n+205\n+206\n+207\n+208 // referenceEmbeddings\n+209 // -------------------\n+210\n+211 template< class ct, int cdim, int mydim >\n+212 inline unsigned int\n+213 referenceEmbeddings ( unsigned int topologyId, int dim, int codim,\n+214 FieldVector< ct, cdim > *origins,\n+215 FieldMatrix< ct, mydim, cdim > *jacobianTransposeds )\n+216 {\n+217 assert( (0 <= codim) && (codim <= dim) && (dim <= cdim) );\n+218 assert( (dim - codim <= mydim) && (mydim <= cdim) );\n+219 assert( topologyId < numTopologies( dim ) );\n+220\n+221 if( codim > 0 )\n+222 {\n+223 const unsigned int baseId = baseTopologyId( topologyId, dim );\n+224 if( isPrism( topologyId, dim ) )\n+225 {\n+226 const unsigned int n = (codim < dim ? referenceEmbeddings( baseId, dim-1,\n+codim, origins, jacobianTransposeds ) : 0);\n+227 for( unsigned int i = 0; i < n; ++i )\n+228 jacobianTransposeds[ i ][ dim-codim-1 ][ dim-1 ] = ct( 1 );\n+229\n+230 const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1,\n+origins+n, jacobianTransposeds+n );\n+231 std::copy( origins+n, origins+n+m, origins+n+m );\n+232 std::copy( jacobianTransposeds+n, jacobianTransposeds+n+m,\n+jacobianTransposeds+n+m );\n+233 for( unsigned int i = 0; i < m; ++i )\n+234 origins[ n+m+i ][ dim-1 ] = ct( 1 );\n+235\n+236 return n+2*m;\n+237 }\n+238 else\n+239 {\n+240 const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1,\n+origins, jacobianTransposeds );\n+241 if( codim == dim )\n+242 {\n+243 origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) );\n+244 origins[ m ][ dim-1 ] = ct( 1 );\n+245 jacobianTransposeds[ m ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) );\n+246 return m+1;\n+247 }\n+248 else\n+249 {\n+250 const unsigned int n = referenceEmbeddings( baseId, dim-1, codim,\n+origins+m, jacobianTransposeds+m );\n+251 for( unsigned int i = 0; i < n; ++i )\n+252 {\n+253 for( int k = 0; k < dim-1; ++k )\n+254 jacobianTransposeds[ m+i ][ dim-codim-1 ][ k ] = -origins[ m+i ][ k ];\n+255 jacobianTransposeds[ m+i ][ dim-codim-1 ][ dim-1 ] = ct( 1 );\n+256 }\n+257 return m+n;\n+258 }\n+259 }\n+260 }\n+261 else\n+262 {\n+263 origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );\n+264 jacobianTransposeds[ 0 ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) );\n+265 for( int k = 0; k < dim; ++k )\n+266 jacobianTransposeds[ 0 ][ k ][ k ] = ct( 1 );\n+267 return 1;\n+268 }\n+269 }\n+270\n+271\n+272\n+273 // referenceIntegrationOuterNormals\n+274 // --------------------------------\n+275\n+276 template< class ct, int cdim >\n+277 inline unsigned int\n+278 referenceIntegrationOuterNormals ( unsigned int topologyId, int dim,\n+279 const FieldVector< ct, cdim > *origins,\n+280 FieldVector< ct, cdim > *normals )\n+281 {\n+282 assert( (dim > 0) && (dim <= cdim) );\n+283 assert( topologyId < numTopologies( dim ) );\n+284\n+285 if( dim > 1 )\n+286 {\n+287 const unsigned int baseId = baseTopologyId( topologyId, dim );\n+288 if( isPrism( topologyId, dim ) )\n+289 {\n+290 const unsigned int numBaseFaces\n+291 = referenceIntegrationOuterNormals( baseId, dim-1, origins, normals );\n+292\n+293 for( unsigned int i = 0; i < 2; ++i )\n+294 {\n+295 normals[ numBaseFaces+i ] = FieldVector< ct, cdim >( ct( 0 ) );\n+296 normals[ numBaseFaces+i ][ dim-1 ] = ct( 2*int( i )-1 );\n+297 }\n+298\n+299 return numBaseFaces+2;\n+300 }\n+301 else\n+302 {\n+303 normals[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );\n+304 normals[ 0 ][ dim-1 ] = ct( -1 );\n+305\n+306 const unsigned int numBaseFaces\n+307 = referenceIntegrationOuterNormals( baseId, dim-1, origins+1, normals+1 );\n+308 for( unsigned int i = 1; i <= numBaseFaces; ++i )\n+309 normals[ i ][ dim-1 ] = normals[ i ]*origins[ i ];\n+310\n+311 return numBaseFaces+1;\n+312 }\n+313 }\n+314 else\n+315 {\n+316 for( unsigned int i = 0; i < 2; ++i )\n+317 {\n+318 normals[ i ] = FieldVector< ct, cdim >( ct( 0 ) );\n+319 normals[ i ][ 0 ] = ct( 2*int( i )-1 );\n+320 }\n+321\n+322 return 2;\n+323 }\n+324 }\n+325\n+326 template< class ct, int cdim >\n+327 inline unsigned int\n+328 referenceIntegrationOuterNormals ( unsigned int topologyId, int dim,\n+329 FieldVector< ct, cdim > *normals )\n+330 {\n+331 assert( (dim > 0) && (dim <= cdim) );\n+332\n+333 FieldVector< ct, cdim > *origins\n+334 = new FieldVector< ct, cdim >[ _\bs_\bi_\bz_\be( topologyId, dim, 1 ) ];\n+335 referenceOrigins( topologyId, dim, 1, origins );\n+336\n+337 const unsigned int numFaces\n+338 = referenceIntegrationOuterNormals( topologyId, dim, origins, normals );\n+339 assert( numFaces == _\bs_\bi_\bz_\be( topologyId, dim, 1 ) );\n+340\n+341 delete[] origins;\n+342\n+343 return numFaces;\n+344 }\n+345\n+346 } // namespace Impl\n+347\n+348\n+349\n+350 // ReferenceElement\n+351 // ----------------\n+352\n+371 template< class ctype_, int dim >\n+372 class ReferenceElementImplementation\n+373 {\n+374\n+375 public:\n+376\n+378 using ctype = ctype_;\n+379\n+381 using CoordinateField = ctype;\n+382\n+384 using Coordinate = Dune::FieldVector;\n+385\n+387 static constexpr int dimension = dim;\n+388\n+390 typedef ctype Volume;\n+391\n+392 private:\n+393\n+394 friend class Impl::ReferenceElementContainer< ctype, dim >;\n+395\n+396 struct SubEntityInfo;\n+397\n+398 template< int codim > struct CreateGeometries;\n+399\n+400 public:\n+402 template< int codim >\n+403 struct Codim\n+404 {\n+406 typedef AffineGeometry< ctype, dim-codim, dim > Geometry;\n+407 };\n+408\n+409 // ReferenceElement cannot be copied.\n+410 ReferenceElementImplementation ( const ReferenceElementImplementation& ) =\n+delete;\n+411\n+412 // ReferenceElementImplementation cannot be copied.\n+413 ReferenceElementImplementation& operator= ( const\n+ReferenceElementImplementation& ) = delete;\n+414\n+415 // ReferenceElementImplementation is default-constructible (required for\n+storage in std::array)\n+416 ReferenceElementImplementation () = default;\n+417\n+422 int _\bs_\bi_\bz_\be ( int c ) const\n+423 {\n+424 assert( (c >= 0) && (c <= dim) );\n+425 return info_[ c ].size();\n+426 }\n+427\n+439 int _\bs_\bi_\bz_\be ( int i, int c, int cc ) const\n+440 {\n+441 assert( (i >= 0) && (i < _\bs_\bi_\bz_\be( c )) );\n+442 return info_[ c ][ i ].size( cc );\n+443 }\n+444\n+458 int subEntity ( int i, int c, int ii, int cc ) const\n+459 {\n+460 assert( (i >= 0) && (i < _\bs_\bi_\bz_\be( c )) );\n+461 return info_[ c ][ i ].number( ii, cc );\n+462 }\n+463\n+479 auto subEntities ( int i, int c, int cc ) const\n+480 {\n+481 assert( (i >= 0) && (i < _\bs_\bi_\bz_\be( c )) );\n+482 return info_[ c ][ i ].numbers( cc );\n+483 }\n+484\n+493 const GeometryType &type ( int i, int c ) const\n+494 {\n+495 assert( (i >= 0) && (i < _\bs_\bi_\bz_\be( c )) );\n+496 return info_[ c ][ i ].type();\n+497 }\n+498\n+500 const GeometryType &type () const { return type( 0, 0 ); }\n+501\n+511 const Coordinate &position( int i, int c ) const\n+512 {\n+513 assert( (c >= 0) && (c <= dim) );\n+514 return baryCenters_[ c ][ i ];\n+515 }\n+516\n+524 bool checkInside ( const Coordinate &local ) const\n+525 {\n+526 const ctype tolerance = ctype( 64 ) * std::numeric_limits< ctype >::epsilon\n+();\n+527 return Impl::template checkInside< ctype, dim >( type().id(), dim, local,\n+tolerance );\n+528 }\n+529\n+541 template< int codim >\n+542 typename Codim< codim >::Geometry geometry ( int i ) const\n+543 {\n+544 return std::get< codim >( geometries_ )[ i ];\n+545 }\n+546\n+548 Volume volume () const\n+549 {\n+550 return volume_;\n+551 }\n+552\n+560 const Coordinate &integrationOuterNormal ( int face ) const\n+561 {\n+562 assert( (face >= 0) && (face < int( integrationNormals_.size() )) );\n+563 return integrationNormals_[ face ];\n+564 }\n+565\n+566 private:\n+567 void initialize ( unsigned int topologyId )\n+568 {\n+569 assert( topologyId < Impl::numTopologies( dim ) );\n+570\n+571 // set up subentities\n+572 for( int codim = 0; codim <= dim; ++codim )\n+573 {\n+574 const unsigned int _\bs_\bi_\bz_\be = Impl::size( topologyId, dim, codim );\n+575 info_[ codim ].resize( size );\n+576 for( unsigned int i = 0; i < _\bs_\bi_\bz_\be; ++i )\n+577 info_[ codim ][ i ].initialize( topologyId, codim, i );\n+578 }\n+579\n+580 // compute corners\n+581 const unsigned int numVertices = _\bs_\bi_\bz_\be( dim );\n+582 baryCenters_[ dim ].resize( numVertices );\n+583 Impl::referenceCorners( topologyId, dim, &(baryCenters_[ dim ][ 0 ]) );\n+584\n+585 // compute barycenters\n+586 for( int codim = 0; codim < dim; ++codim )\n+587 {\n+588 baryCenters_[ codim ].resize( _\bs_\bi_\bz_\be(codim) );\n+589 for( int i = 0; i < _\bs_\bi_\bz_\be( codim ); ++i )\n+590 {\n+591 baryCenters_[ codim ][ i ] = Coordinate( ctype( 0 ) );\n+592 const unsigned int numCorners = _\bs_\bi_\bz_\be( i, codim, dim );\n+593 for( unsigned int j = 0; j < numCorners; ++j )\n+594 baryCenters_[ codim ][ i ] += baryCenters_[ dim ][ subEntity( i, codim, j,\n+dim ) ];\n+595 baryCenters_[ codim ][ i ] *= ctype( 1 ) / ctype( numCorners );\n+596 }\n+597 }\n+598\n+599 // compute reference element volume\n+600 volume_ = Impl::template referenceVolume< ctype >( topologyId, dim );\n+601\n+602 // compute integration outer normals\n+603 if( dim > 0 )\n+604 {\n+605 integrationNormals_.resize( _\bs_\bi_\bz_\be( 1 ) );\n+606 Impl::referenceIntegrationOuterNormals( topologyId, dim, &\n+(integrationNormals_[ 0 ]) );\n+607 }\n+608\n+609 // set up geometries\n+610 Hybrid::forEach( std::make_index_sequence< dim+1 >{}, [ & ]( auto i )\n+{ CreateGeometries< i >::apply( *this, geometries_ ); } );\n+611 }\n+612\n+613 template< int... codim >\n+614 static std::tuple< std::vector< typename Codim< codim >::Geometry >... >\n+615 makeGeometryTable ( std::integer_sequence< int, codim... > );\n+616\n+618 typedef decltype( makeGeometryTable( std::make_integer_sequence< int, dim+1\n+>() ) ) GeometryTable;\n+619\n+621 ctype volume_;\n+622\n+623 std::vector< Coordinate > baryCenters_[ dim+1 ];\n+624 std::vector< Coordinate > integrationNormals_;\n+625\n+627 GeometryTable geometries_;\n+628\n+629 std::vector< SubEntityInfo > info_[ dim+1 ];\n+630 };\n+631\n+633 template< class ctype, int dim >\n+634 struct ReferenceElementImplementation< ctype, dim >::SubEntityInfo\n+635 {\n+636 // Compute upper bound for the number of subsentities.\n+637 // If someone knows an explicit formal feel free to\n+638 // implement it here.\n+639 static constexpr std::size_t maxSubEntityCount()\n+640 {\n+641 std::size_t maxCount=0;\n+642 for(std::size_t codim=0; codim<=dim; ++codim)\n+643 maxCount = std::max(maxCount, _\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl(std::size_t(dim),codim)*(1 <<\n+codim));\n+644 return maxCount;\n+645 }\n+646\n+647 using SubEntityFlags = std::bitset;\n+648\n+649 class SubEntityRange\n+650 : public Dune::IteratorRange\n+651 {\n+652 using Base = typename Dune::IteratorRange;\n+653\n+654 public:\n+655\n+656 using iterator = Base::iterator;\n+657 using const_iterator = Base::const_iterator;\n+658\n+659 SubEntityRange(const iterator& begin, const iterator& end, const\n+SubEntityFlags& contains) :\n+660 Base(begin, end),\n+661 containsPtr_(&contains),\n+662 size_(end-begin)\n+663 {}\n+664\n+665 SubEntityRange() :\n+666 Base(),\n+667 containsPtr_(nullptr),\n+668 size_(0)\n+669 {}\n+670\n+671 std::size_t _\bs_\bi_\bz_\be() const\n+672 {\n+673 return size_;\n+674 }\n+675\n+676 bool contains(std::size_t i) const\n+677 {\n+678 return (*containsPtr_)[i];\n+679 }\n+680\n+681 private:\n+682 const SubEntityFlags* containsPtr_;\n+683 std::size_t size_;\n+684 std::size_t offset_;\n+685 };\n+686\n+687 using NumberRange = typename Dune::IteratorRange;\n+688\n+689 SubEntityInfo ()\n+690 : numbering_( nullptr )\n+691 {\n+692 std::fill( offset_.begin(), offset_.end(), 0 );\n+693 }\n+694\n+695 SubEntityInfo ( const SubEntityInfo &other )\n+696 : offset_( other.offset_ ),\n+697 type_( other.type_ ),\n+698 containsSubentity_( other.containsSubentity_ )\n+699 {\n+700 numbering_ = allocate();\n+701 std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ );\n+702 }\n+703\n+704 ~SubEntityInfo () { deallocate( numbering_ ); }\n+705\n+706 const SubEntityInfo &operator= ( const SubEntityInfo &other )\n+707 {\n+708 type_ = other.type_;\n+709 offset_ = other.offset_;\n+710\n+711 deallocate( numbering_ );\n+712 numbering_ = allocate();\n+713 std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ );\n+714\n+715 containsSubentity_ = other.containsSubentity_;\n+716\n+717 return *this;\n+718 }\n+719\n+720 int _\bs_\bi_\bz_\be ( int cc ) const\n+721 {\n+722 assert( (cc >= 0) && (cc <= dim) );\n+723 return (offset_[ cc+1 ] - offset_[ cc ]);\n+724 }\n+725\n+726 int number ( int ii, int cc ) const\n+727 {\n+728 assert( (ii >= 0) && (ii < _\bs_\bi_\bz_\be( cc )) );\n+729 return numbering_[ offset_[ cc ] + ii ];\n+730 }\n+731\n+732 auto numbers ( int cc ) const\n+733 {\n+734 return SubEntityRange( numbering_ + offset_[ cc ], numbering_ + offset_\n+[ cc+1 ], containsSubentity_[cc]);\n+735 }\n+736\n+737 const GeometryType &type () const { return type_; }\n+738\n+739 void initialize ( unsigned int topologyId, int codim, unsigned int i )\n+740 {\n+741 const unsigned int subId = Impl::subTopologyId( topologyId, dim, codim, i\n+);\n+742 type_ = GeometryType( subId, dim-codim );\n+743\n+744 // compute offsets\n+745 for( int cc = 0; cc <= codim; ++cc )\n+746 offset_[ cc ] = 0;\n+747 for( int cc = codim; cc <= dim; ++cc )\n+748 offset_[ cc+1 ] = offset_[ cc ] + Impl::size( subId, dim-codim, cc-codim );\n+749\n+750 // compute subnumbering\n+751 deallocate( numbering_ );\n+752 numbering_ = allocate();\n+753 for( int cc = codim; cc <= dim; ++cc )\n+754 Impl::subTopologyNumbering( topologyId, dim, codim, i, cc-codim,\n+numbering_+offset_[ cc ], numbering_+offset_[ cc+1 ] );\n+755\n+756 // initialize containsSubentity lookup-table\n+757 for(std::size_t cc=0; cc<= dim; ++cc)\n+758 {\n+759 containsSubentity_[cc].reset();\n+760 for(std::size_t idx=0; idx offset_;\n+775 GeometryType type_;\n+776 std::array< SubEntityFlags, dim+1> containsSubentity_;\n+777 };\n+778\n+779\n+780 template< class ctype, int dim >\n+781 template< int codim >\n+782 struct ReferenceElementImplementation< ctype, dim >::CreateGeometries\n+783 {\n+784 template< int cc >\n+785 static typename ReferenceElements< ctype, dim-cc >::ReferenceElement\n+786 subRefElement( const ReferenceElementImplementation< ctype, dim >\n+&refElement, int i, std::integral_constant< int, cc > )\n+787 {\n+788 return _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b-_\bc_\bc_\b _\b>_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl( refElement.type( i, cc\n+) );\n+789 }\n+790\n+791 static typename _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b _\b>_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+792 subRefElement(const ReferenceElementImplementation< ctype, dim >\n+&refElement,\n+793 [[maybe_unused]] int i, std::integral_constant)\n+794 {\n+795 return refElement;\n+796 }\n+797\n+798 static void apply ( const ReferenceElementImplementation< ctype, dim >\n+&refElement, GeometryTable &geometries )\n+799 {\n+800 const int _\bs_\bi_\bz_\be = refElement.size( codim );\n+801 std::vector< FieldVector< ctype, dim > > origins( size );\n+802 std::vector< FieldMatrix< ctype, dim - codim, dim > > jacobianTransposeds\n+( size );\n+803 Impl::referenceEmbeddings( refElement.type().id(), dim, codim, &(origins[ 0\n+]), &(jacobianTransposeds[ 0 ]) );\n+804\n+805 std::get< codim >( geometries ).reserve( size );\n+806 for( int i = 0; i < _\bs_\bi_\bz_\be; ++i )\n+807 {\n+808 typename Codim< codim >::Geometry geometry( subRefElement( refElement, i,\n+std::integral_constant< int, codim >() ), origins[ i ], jacobianTransposeds[ i\n+] );\n+809 std::get< codim >( geometries ).push_back( geometry );\n+810 }\n+811 }\n+812 };\n+813\n+814#endif // DOXYGEN\n+815\n+816 } // namespace Geo\n+817\n+818} // namespace Dune\n+819\n+820#endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH\n+_\bt_\by_\bp_\be_\b._\bh_\bh\n+A unique label for each type of element that can occur in a grid.\n+_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh\n+An implementation of the Geometry interface for affine geometries.\n+_\bD_\bu_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bz_\be\n+@ size\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:145\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl\n+int binomial(int upper, int lower)\n+calculate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:305\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename Container::ReferenceElement ReferenceElement\n+The reference element type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:188\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl\n+static const ReferenceElement & general(const GeometryType &type)\n+get general reference elements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:198\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00173.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00173.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: referenceelementimplementation.cc File Reference\n+dune-geometry: multilineargeometry.hh File Reference\n \n \n \n \n \n \n \n@@ -70,27 +70,57 @@\n
\n \n
\n \n
\n \n-
referenceelementimplementation.cc File Reference
\n+
multilineargeometry.hh File Reference
\n
\n
\n-
#include <config.h>
\n-#include <dune/geometry/referenceelementimplementation.hh>
\n-
\n+
#include <cassert>
\n+#include <functional>
\n+#include <iterator>
\n+#include <limits>
\n+#include <vector>
\n+#include <dune/common/fmatrix.hh>
\n+#include <dune/common/fvector.hh>
\n+#include <dune/common/typetraits.hh>
\n+#include <dune/geometry/affinegeometry.hh>
\n+#include <dune/geometry/referenceelements.hh>
\n+#include <dune/geometry/type.hh>
\n+
\n+

Go to the source code of this file.

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

\n+Classes

struct  Dune::MultiLinearGeometryTraits< ct >
 default traits class for MultiLinearGeometry More...
 
struct  Dune::MultiLinearGeometryTraits< ct >::CornerStorage< mydim, cdim >
 template specifying the storage for the corners More...
 
struct  Dune::MultiLinearGeometryTraits< ct >::hasSingleGeometryType< dim >
 will there be only one geometry type for a dimension? More...
 
class  Dune::MultiLinearGeometry< ct, mydim, cdim, Traits >
 generic geometry implementation based on corner coordinates More...
 
class  Dune::MultiLinearGeometry< ct, mydim, cdim, Traits >::JacobianInverseTransposed
 
class  Dune::CachedMultiLinearGeometry< ct, mydim, cdim, Traits >
 Implement a MultiLinearGeometry with additional caching. More...
 
\n \n \n \n-\n-\n

\n Namespaces

namespace  Dune
 
namespace  Dune::Geo
 
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,17 +1,44 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-referenceelementimplementation.cc File Reference\n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+multilineargeometry.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/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\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:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bt_\b _\b>\n+\u00a0 default traits class for _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bt_\b _\b>_\b:_\b:_\bC_\bo_\br_\bn_\be_\br_\bS_\bt_\bo_\br_\ba_\bg_\be_\b<_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b _\b>\n+\u00a0 template specifying the storage for the corners _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bt_\b _\b>_\b:_\b:_\bh_\ba_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b<_\b _\bd_\bi_\bm_\b _\b>\n+\u00a0 will there be only one geometry type for a dimension? _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 generic geometry implementation based on corner coordinates _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:\n+ _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 Implement a _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by with additional caching. _\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:_\bG_\be_\bo\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-geometry-doc/doxygen/a00176.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00176.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: virtualrefinement.cc File Reference\n+dune-geometry: dimension.hh File Reference\n \n \n \n \n \n \n \n@@ -71,96 +71,36 @@\n \n \n \n
\n \n-
virtualrefinement.cc File Reference
\n+Namespaces
\n+
dimension.hh File Reference
\n \n
\n-\n-

This file contains the virtual wrapper around refinement. \n-More...

\n-
#include <cassert>
\n-#include <typeinfo>
\n-#include <dune/common/exceptions.hh>
\n-#include <dune/common/fvector.hh>
\n-#include <dune/common/iteratorfacades.hh>
\n-#include "type.hh"
\n-#include "refinement.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-\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::VirtualRefinementSubEntityIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::VirtualRefinementSubEntityIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::VirtualRefinement< dimension, CoordType >::Codim< codimension >
 
class  Dune::VirtualRefinementSubEntityIteratorBackSpecial< dimension, CoordType, dimension >
 
class  Dune::VirtualRefinementSubEntityIteratorBackSpecial< dimension, CoordType, 0 >
 
class  Dune::VirtualRefinement< dimension, CoordType >::SubEntityIteratorBack< dimension, CoordType >
 
class  Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >
 
class  Dune::VirtualRefinementImpSubEntityIteratorBackSpecial< topologyId, CoordType, coerceToId, dimension, dimension >
 
class  Dune::VirtualRefinementImpSubEntityIteratorBackSpecial< topologyId, CoordType, coerceToId, dimension, 0 >
struct  Dune::Dim< dim >
 Static tag representing a dimension. More...
 
class  Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >::SubEntityIteratorBack< codimension >
 
class  Dune::RefinementBuilder< dimension, CoordType >
 
class  Dune::RefinementBuilder< 1, CoordType >
 
class  Dune::RefinementBuilder< 3, CoordType >
struct  Dune::Codim< codim >
 Static tag representing a codimension. More...
 
\n \n \n \n-

\n Namespaces

namespace  Dune
 
\n-\n-\n-\n-

\n-Macros

#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
 
\n-\n-\n-\n-\n-\n

\n-Functions

template<int dimension, class CoordType >
VirtualRefinement< dimension, CoordType > & Dune::buildRefinement (GeometryType geometryType, GeometryType coerceTo)
 return a reference to the VirtualRefinement according to the parameters
 
\n-

Detailed Description

\n-

This file contains the virtual wrapper around refinement.

\n-

Macro Definition Documentation

\n-\n-

◆ DUNE_GEOMETRY_VIRTUALREFINEMENT_CC

\n-\n-
\n-
\n- \n- \n- \n- \n-
#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
\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,74 +1,22 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-virtualrefinement.cc File Reference\n-This file contains the virtual wrapper around refinement. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n-#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\"\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+dimension.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:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm_\b<_\b _\bd_\bi_\bm_\b _\b>\n+\u00a0 Static tag representing a dimension. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n- _\b0_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\b1_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\b3_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\b _\b>\n+\u00a0 Static tag representing a codimension. _\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-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bV_\bI_\bR_\bT_\bU_\bA_\bL_\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bC_\bC\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt< dimension, CoordType > _\bD_\bu_\bn_\be_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n- &\u00a0 geometryType, _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be coerceTo)\n- return a reference to the\n-\u00a0 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt according to the\n- parameters\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-This file contains the virtual wrapper around refinement.\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_V\bVI\bIR\bRT\bTU\bUA\bAL\bLR\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n-#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00176_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00176_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: virtualrefinement.cc Source File\n+dune-geometry: dimension.hh Source File\n \n \n \n \n \n \n \n@@ -74,817 +74,54 @@\n \n
\n \n
\n
\n
\n-
virtualrefinement.cc
\n+
dimension.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5
\n-
6#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
\n-
7#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
\n-
8
\n-
14#include <cassert>
\n-
15#include <typeinfo>
\n-
16
\n-
17#include <dune/common/exceptions.hh>
\n-
18#include <dune/common/fvector.hh>
\n-
19#include <dune/common/iteratorfacades.hh>
\n-
20
\n-
21#include "type.hh"
\n-
22#include "refinement.hh"
\n-
23
\n-
24namespace Dune
\n-
25{
\n-
26 // //////////////////////////////////////////
\n-
27 //
\n-
28 // The virtual base class and its iterators
\n-
29 //
\n-
30
\n-
31 //
\n-
32 // Refinement
\n-
33 //
\n-
34
\n-
35 template<int dimension, class CoordType>
\n-\n-
\n-\n-\n-
39 {
\n-
40 return VertexIterator(vBeginBack(tag));
\n-
41 }
\n-
\n-
42
\n-
43 template<int dimension, class CoordType>
\n-\n-
\n-\n-\n-
47 {
\n-
48 return VertexIterator(vEndBack(tag));
\n-
49 }
\n-
\n-
50
\n-
51 template<int dimension, class CoordType>
\n-\n-
\n-\n-\n-
55 {
\n-
56 return ElementIterator(eBeginBack(tag));
\n-
57 }
\n-
\n-
58
\n-
59 template<int dimension, class CoordType>
\n-\n-
\n-\n-\n-
63 {
\n-
64 return ElementIterator(eEndBack(tag));
\n-
65 }
\n-
\n-
66
\n-
67 //
\n-
68 // The iterators
\n-
69 //
\n-
70
\n-
71 template<int dimension, class CoordType, int codimension>
\n-\n-
73
\n-
74 // The iterator for vertices
\n-
75 template<int dimension, class CoordType>
\n-
\n-
76 class VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, dimension>
\n-
77 {};
\n-
\n-
78
\n-
79 // The iterator for elements
\n-
80 template<int dimension, class CoordType>
\n-
\n-
81 class VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, 0>
\n-
82 {
\n-
83 public:
\n-\n-
85 typedef typename Refinement::template Codim<0>::SubEntityIterator Common;
\n-
86 typedef typename Refinement::IndexVector IndexVector;
\n-
87
\n-
88 IndexVector vertexIndices() const;
\n-
89 };
\n-
\n-
90
\n-
91 template<int dimension, class CoordType>
\n-\n-
\n-\n-
94 vertexIndices() const
\n-
95 {
\n-
96 return static_cast<const Common *>(this)->backend->vertexIndices();
\n-
97 }
\n-
\n-
98
\n-
99 // The iterator common stuff
\n-
100 template<int dimension, class CoordType>
\n-
101 template<int codimension>
\n-
\n-
102 class VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n-
103 : public ForwardIteratorFacade<typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n-
104 public VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>
\n-
105 {
\n-
106 public:
\n-\n-
108 typedef typename Refinement::template Codim<codimension>::SubEntityIterator This;
\n-
109 typedef typename Refinement::template SubEntityIteratorBack<codimension> IteratorBack;
\n-
110 typedef typename Refinement::CoordVector CoordVector;
\n-
111
\n-\n-
113 SubEntityIterator(const This &other);
\n-\n-
115
\n-
116 This &operator=(const This &other);
\n-
117
\n-
118 bool equals(const This &other) const;
\n-
119 void increment();
\n-
120
\n-
121 int index() const;
\n-
122
\n-
123 // If you simply use an unqualified CoordVector here g++-4.2 chokes
\n-\n-
125 CoordVector coords() const;
\n-
126 private:
\n-
127 friend class VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>;
\n-
128 IteratorBack *backend;
\n-
129 };
\n-
\n-
130
\n-
131#ifndef DOXYGEN
\n-
132 template<int dimension, class CoordType>
\n-
133 template<int codimension>
\n-\n-
135 SubEntityIterator(IteratorBack *backend_)
\n-
136 : backend(backend_)
\n-
137 {}
\n-
138
\n-
139 template<int dimension, class CoordType>
\n-
140 template<int codimension>
\n-\n-
142 SubEntityIterator(const This &other)
\n-
143 : backend(other.backend->clone())
\n-
144 {}
\n-
145
\n-
146 template<int dimension, class CoordType>
\n-
147 template<int codimension>
\n-
148 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
149 ~SubEntityIterator()
\n-
150 {
\n-
151 delete backend;
\n-
152 }
\n-
153
\n-
154 template<int dimension, class CoordType>
\n-
155 template<int codimension>
\n-
156 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator &
\n-
157 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
158 operator=(const This &other)
\n-
159 {
\n-
160 delete backend;
\n-
161 backend = other.backend->clone();
\n-
162 }
\n-
163
\n-
164 template<int dimension, class CoordType>
\n-
165 template<int codimension>
\n-
166 bool
\n-
167 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
168 equals(const This &other) const
\n-
169 { return *backend == *(other.backend); }
\n-
170
\n-
171 template<int dimension, class CoordType>
\n-
172 template<int codimension>
\n-
173 void
\n-
174 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
175 increment()
\n-
176 {
\n-
177 ++*backend;
\n-
178 }
\n-
179
\n-
180 template<int dimension, class CoordType>
\n-
181 template<int codimension>
\n-
182 int
\n-
183 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
184 index() const
\n-
185 { return backend->index(); }
\n-
186
\n-
187 template<int dimension, class CoordType>
\n-
188 template<int codimension>
\n-
189 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator::CoordVector
\n-
190 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
191 coords() const
\n-
192 { return backend->coords(); }
\n-
193#endif // DOXYGEN
\n-
194
\n-
195 //
\n-
196 // The iterator backend
\n-
197 //
\n-
198
\n-
199 template<int dimension, class CoordType, int codimension>
\n-\n-
201
\n-
202 // The iterator backend for vertices
\n-
203 template<int dimension, class CoordType>
\n-
\n-
204 class VirtualRefinementSubEntityIteratorBackSpecial<dimension, CoordType, dimension>
\n-
205 {
\n-
206 public:
\n-
207
\n-\n-
210 };
\n-
\n-
211
\n-
212 // The iterator backend for elements
\n-
213 template<int dimension, class CoordType>
\n-
\n-\n-
215 {
\n-
216 public:
\n-\n-
218 typedef typename Refinement::IndexVector IndexVector;
\n-
219
\n-
220 virtual IndexVector vertexIndices() const = 0;
\n-
221
\n-\n-
224 };
\n-
\n-
225
\n-
226 // The iterator backend common stuff
\n-
227 template<int dimension, class CoordType>
\n-
228 template<int codimension>
\n-
\n-
229 class VirtualRefinement<dimension, CoordType>::SubEntityIteratorBack
\n-
230 : public VirtualRefinementSubEntityIteratorBackSpecial<dimension, CoordType, codimension>
\n-
231 {
\n-
232 public:
\n-\n-
234 typedef typename Refinement::template SubEntityIteratorBack<codimension> This;
\n-
235 typedef typename Refinement::CoordVector CoordVector;
\n-
236
\n-\n-
238
\n-
239 virtual This *clone() const = 0;
\n-
240
\n-
241 virtual bool operator==(const This &other) const = 0;
\n-
242 virtual This &operator++() = 0;
\n-
243
\n-
244 virtual int index() const = 0;
\n-
245 virtual CoordVector coords() const = 0;
\n-
246 };
\n-
\n-
247
\n-
248 // /////////////////////////////////////////////////
\n-
249 //
\n-
250 // The derived classes and their iterator backends
\n-
251 //
\n-
252
\n-
253 //
\n-
254 // The refinement implementation
\n-
255 //
\n-
256
\n-
257 template<unsigned topologyId, class CoordType,
\n-
258 unsigned coerceToId, int dimension>
\n-
\n-\n-
260 : public Dune::VirtualRefinement<dimension, CoordType>
\n-
261 {
\n-
262 public:
\n-\n-\n-
265
\n-
266 template<int codimension>
\n-\n-
268
\n-
269 int nVertices(Dune::RefinementIntervals tag) const;
\n-
270
\n-
271 int nElements(Dune::RefinementIntervals tag) const;
\n-
272
\n-\n-
274 private:
\n-\n-
276
\n-\n-\n-\n-\n-
281 };
\n-
\n-
282
\n-
283 template<unsigned topologyId, class CoordType,
\n-
284 unsigned coerceToId, int dimension>
\n-
285 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension> &
\n-
\n-\n-
287 {
\n-
288 static VirtualRefinementImp instance_{};
\n-
289 return instance_;
\n-
290 }
\n-
\n-
291
\n-
292 template<unsigned topologyId, class CoordType,
\n-
293 unsigned coerceToId, int dimension>
\n-\n-
299
\n-
300 template<unsigned topologyId, class CoordType,
\n-
301 unsigned coerceToId, int dimension>
\n-\n-\n-\n-
305 {
\n-
306 return new SubEntityIteratorBack<dimension>(StaticRefinement::vBegin(tag));
\n-
307 }
\n-
308
\n-
309 template<unsigned topologyId, class CoordType,
\n-
310 unsigned coerceToId, int dimension>
\n-\n-
312 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::
\n-
313 vEndBack(Dune::RefinementIntervals tag) const
\n-
314 {
\n-
315 return new SubEntityIteratorBack<dimension>(StaticRefinement::vEnd(tag));
\n-
316 }
\n-
317
\n-
318 template<unsigned topologyId, class CoordType,
\n-
319 unsigned coerceToId, int dimension>
\n-\n-
324
\n-
325 template<unsigned topologyId, class CoordType,
\n-
326 unsigned coerceToId, int dimension>
\n-\n-\n-\n-
330 {
\n-
331 return new SubEntityIteratorBack<0>(StaticRefinement::eBegin(tag));
\n-
332 }
\n-
333
\n-
334 template<unsigned topologyId, class CoordType,
\n-
335 unsigned coerceToId, int dimension>
\n-\n-
337 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::
\n-
338 eEndBack(Dune::RefinementIntervals tag) const
\n-
339 {
\n-
340 return new SubEntityIteratorBack<0>(StaticRefinement::eEnd(tag));
\n-
341 }
\n-
342
\n-
343 //
\n-
344 // The iterator backend implementation
\n-
345 //
\n-
346
\n-
347 // The iterator backend implementation specialties
\n-
348 template<unsigned topologyId, class CoordType,
\n-
349 unsigned coerceToId, int dimension, int codimension>
\n-\n-
351
\n-
352 // The iterator backend implementation specialties for vertices
\n-
353 template<unsigned topologyId, class CoordType,
\n-
354 unsigned coerceToId, int dimension>
\n-
\n-
355 class VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, dimension>
\n-
356 : public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<dimension>
\n-
357 {};
\n-
\n-
358
\n-
359 // The iterator backend implementation specialties for elements
\n-
360
\n-
361 template<unsigned topologyId, class CoordType,
\n-
362 unsigned coerceToId, int dimension>
\n-
\n-
363 class VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, 0>
\n-
364 : public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<0>
\n-
365 {
\n-
366 public:
\n-\n-
368 typedef typename VirtualRefinementImp::template SubEntityIteratorBack<0> Common;
\n-\n-\n-
371 typedef typename RefinementBase::IndexVector IndexVector;
\n-
372
\n-
373 IndexVector vertexIndices() const;
\n-
374 };
\n-
\n-
375
\n-
376 template<unsigned topologyId, class CoordType,
\n-
377 unsigned coerceToId, int dimension>
\n-\n-
\n-\n-
380 vertexIndices() const
\n-
381 {
\n-
382 IndexVector vIndices;
\n-
383 vIndices.reserve(StaticRefinement::IndexVector::dimension);
\n-
384
\n-
385 typename StaticRefinement::IndexVector sIndices = static_cast<const Common *>(this)->backend.vertexIndices();
\n-
386 for(int i = 0; i < StaticRefinement::IndexVector::dimension; ++i)
\n-
387 vIndices.push_back(sIndices[i]);
\n-
388 return vIndices;
\n-
389 }
\n-
\n-
390
\n-
391 // The shared iterator backend implementation
\n-
392 template<unsigned topologyId, class CoordType,
\n-
393 unsigned coerceToId, int dimension>
\n-
394 template<int codimension>
\n-
\n-
395 class VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack
\n-
396 : public VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, codimension>
\n-
397 {
\n-
398 public:
\n-
399 typedef typename StaticRefinement::template Codim<codimension>::SubEntityIterator BackendIterator;
\n-\n-
401 typedef typename VirtualRefinement::template SubEntityIteratorBack<codimension> Base;
\n-\n-
403
\n-\n-
405 SubEntityIteratorBack(const This &other);
\n-
406
\n-
407 Base *clone() const;
\n-
408
\n-
409 bool operator==(const Base &other) const;
\n-
410 Base &operator++();
\n-
411
\n-
412 int index() const;
\n-
413 CoordVector coords() const;
\n-
414
\n-
415 private:
\n-
416 friend class VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, codimension>;
\n-
417 BackendIterator backend;
\n-
418 };
\n-
\n-
419
\n-
420 template<unsigned topologyId, class CoordType,
\n-
421 unsigned coerceToId, int dimension>
\n-
422 template<int codimension>
\n-\n-
427
\n-
428 template<unsigned topologyId, class CoordType,
\n-
429 unsigned coerceToId, int dimension>
\n-
430 template<int codimension>
\n-
\n-\n-
432 SubEntityIteratorBack(const This &other)
\n-
433 : VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, codimension>(other),
\n-
434 backend(other.backend)
\n-
435 {}
\n-
\n-
436
\n-
437 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n-
438 template<int codimension>
\n-\n-\n-
443
\n-
444 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n-
445 template<int codimension>
\n-
446 bool
\n-
\n-\n-
448 operator==(const Base &other) const
\n-
449 {
\n-
450 try {
\n-
451 return backend == dynamic_cast<const This &>(other).backend;
\n-
452 }
\n-
453 catch(const std::bad_cast&)
\n-
454 {
\n-
455 return false;
\n-
456 }
\n-
457 }
\n-
\n-
458
\n-
459 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n-
460 template<int codimension>
\n-\n-\n-
468
\n-
469 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n-
470 template<int codimension>
\n-
471 int
\n-\n-
475
\n-
476 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n-
477 template<int codimension>
\n-\n-\n-
482
\n-
483 // ////////////////////////
\n-
484 //
\n-
485 // The refinement builder
\n-
486 //
\n-
487
\n-
488 template<int dimension, class CoordType>
\n-
489 class RefinementBuilder;
\n-
490
\n-
501 template<int dimension, class CoordType>
\n-\n-
\n-\n-
504 GeometryType geometryType,
\n-
506 GeometryType coerceTo)
\n-
507 {
\n-
508 // Check that the user used valid geometry types
\n-
509 assert(geometryType.dim() == dimension && coerceTo.dim() == dimension);
\n-
510 return RefinementBuilder<dimension, CoordType>::build( geometryType.id(), coerceTo.id() );
\n-
511 }
\n-
\n-
512
\n-
513 // In principle the trick with the class is no longer necessary,
\n-
514 // but I'm keeping it in here so it will be easier to specialize
\n-
515 // buildRefinement when someone implements pyramids and prisms
\n-
516 template<int dimension, class CoordType>
\n-
\n-\n-
518 {
\n-
519 public:
\n-
520 static
\n-\n-
\n-
522 build(unsigned topologyId, unsigned coerceToId)
\n-
523 {
\n-
524 topologyId &= ~1;
\n-
525 coerceToId &= ~1;
\n-
526
\n-
527 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
\n-
528 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;
\n-
529
\n-
530 switch( topologyId )
\n-
531 {
\n-
532 //case GeometryType::simplex:
\n-
533 case idSimplex :
\n-
534 //switch( coerceTo )
\n-
535 switch( coerceToId )
\n-
536 {
\n-
537 //case GeometryType::simplex:
\n-
538 case idSimplex :
\n-\n-
540 default :
\n-
541 break;
\n-
542 }
\n-
543 break;
\n-
544
\n-
545 //case GeometryType::cube:
\n-
546 case idCube :
\n-
547 switch( coerceToId )
\n-
548 {
\n-
549 case idSimplex :
\n-\n-
551 case idCube :
\n-\n-
553 default :
\n-
554 break;
\n-
555 }
\n-
556 break;
\n-
557
\n-
558 default :
\n-
559 break;
\n-
560 }
\n-
561 DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, "
\n-
562 << coerceToId << " >.");
\n-
563 }
\n-
\n-
564 };
\n-
\n-
565
\n-
566 template<class CoordType>
\n-
\n-
567 class RefinementBuilder<1, CoordType>
\n-
568 {
\n-
569 static const std::size_t dimension = 1;
\n-
570 public:
\n-
571 static
\n-\n-
\n-
573 build(unsigned topologyId, unsigned coerceToId)
\n-
574 {
\n-
575 topologyId &= ~1;
\n-
576 coerceToId &= ~1;
\n-
577
\n-
578 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
\n-
579
\n-
580 if (topologyId == 0 && coerceToId == 0)
\n-\n-
582
\n-
583 DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, "
\n-
584 << coerceToId << " >.");
\n-
585 }
\n-
\n-
586 };
\n-
\n-
587
\n-
588 template<class CoordType>
\n-
\n-
589 class RefinementBuilder<3, CoordType>
\n-
590 {
\n-
591 static const std::size_t dimension = 3;
\n-
592 public:
\n-
593 static
\n-\n-
\n-
595 build(unsigned topologyId, unsigned coerceToId)
\n-
596 {
\n-
597 topologyId &= ~1;
\n-
598 coerceToId &= ~1;
\n-
599
\n-
600 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
\n-
601 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;
\n-
602 constexpr unsigned idPrism = GeometryTypes::prism.id() & ~1;
\n-
603 constexpr unsigned idPyramid = GeometryTypes::pyramid.id() & ~1;
\n-
604
\n-
605 switch( topologyId )
\n-
606 {
\n-
607 //case GeometryType::simplex:
\n-
608 case idSimplex :
\n-
609 //switch( coerceTo )
\n-
610 switch( coerceToId )
\n-
611 {
\n-
612 //case GeometryType::simplex:
\n-
613 case idSimplex :
\n-\n-
615 default :
\n-
616 break;
\n-
617 }
\n-
618 break;
\n-
619
\n-
620 //case GeometryType::cube:
\n-
621 case idCube :
\n-
622 switch( coerceToId )
\n-
623 {
\n-
624 case idSimplex :
\n-\n-
626 case idCube :
\n-\n-
628 default :
\n-
629 break;
\n-
630 }
\n-
631 break;
\n-
632
\n-
633 //case GeometryType::prism:
\n-
634 case idPrism :
\n-
635 switch( coerceToId )
\n-
636 {
\n-
637 case idSimplex :
\n-\n-
639 default :
\n-
640 break;
\n-
641 }
\n-
642 break;
\n-
643
\n-
644 //case GeometryType::pyramid:
\n-
645 case idPyramid :
\n-
646 switch( coerceToId )
\n-
647 {
\n-
648 case idSimplex :
\n-\n-
650 default :
\n-
651 break;
\n-
652 }
\n-
653 break;
\n-
654
\n-
655 default :
\n-
656 break;
\n-
657 }
\n-
658 DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, "
\n-
659 << coerceToId << " >.");
\n-
660 }
\n-
\n-
661 };
\n-
\n-
662
\n-
663} // namespace Dune
\n-
664
\n-
665#endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
\n-
This file simply includes all Refinement implementations so you don't have to do them separately.
\n-
A unique label for each type of element that can occur in a grid.
\n+
5#ifndef DUNE_GEOMETRY_DIMENSION_HH
\n+
6#define DUNE_GEOMETRY_DIMENSION_HH
\n+
7
\n+
8#include <type_traits>
\n+
9
\n+
10namespace Dune {
\n+
11
\n+
13 template<int dim>
\n+
\n+
14 struct Dim
\n+
15 : public std::integral_constant<int,dim>
\n+
16 {
\n+
17 typedef Dim type;
\n+
18 };
\n+
\n+
19
\n+
21 template<int codim>
\n+
\n+
22 struct Codim
\n+
23 : public std::integral_constant<int,codim>
\n+
24 {
\n+
25 typedef Codim type;
\n+
26 };
\n+
\n+
27
\n+
28}
\n+
29
\n+
30#endif // DUNE_GEOMETRY_DIMENSION_HH
\n
Definition affinegeometry.hh:21
\n-
VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType geometryType, GeometryType coerceTo)
return a reference to the VirtualRefinement according to the parameters
Definition virtualrefinement.cc:503
\n+
Static tag representing a dimension.
Definition dimension.hh:16
\n+
Dim type
Definition dimension.hh:17
\n
Static tag representing a codimension.
Definition dimension.hh:24
\n-
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:94
\n-
Wrap each Refinement implementation to get a consistent interface.
Definition base.cc:141
\n-
static ElementIterator eEnd(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:247
\n-
static ElementIterator eBegin(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:237
\n-
static int nElements(Dune::RefinementIntervals tag)
Get the number of Elements.
Definition base.cc:227
\n-
static int nVertices(Dune::RefinementIntervals tag)
Get the number of Vertices.
Definition base.cc:197
\n-
static VertexIterator vBegin(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:207
\n-
typedef IndexVector
The IndexVector of the Refinement.
Definition base.cc:177
\n-
static VertexIterator vEnd(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:217
\n-
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n-
constexpr unsigned int dim() const
Return dimension of the type.
Definition type.hh:372
\n-
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
\n-
Definition virtualrefinement.cc:72
\n-
Refinement::template Codim< 0 >::SubEntityIterator Common
Definition virtualrefinement.cc:85
\n-
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:84
\n-
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:86
\n-
VirtualRefinement< dimension, CoordType >::template Codim< codimension >::SubEntityIterator::CoordVector coords() const
\n-\n-\n-\n-\n-\n-
Refinement::template SubEntityIteratorBack< codimension > IteratorBack
Definition virtualrefinement.cc:109
\n-
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:110
\n-
Refinement::template Codim< codimension >::SubEntityIterator This
Definition virtualrefinement.cc:108
\n-
bool equals(const This &other) const
\n-
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:107
\n-\n-
Definition virtualrefinement.cc:200
\n-
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:208
\n-\n-
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:217
\n-
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:218
\n-
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:222
\n-
Definition virtualrefinement.cc:231
\n-\n-
Refinement::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:234
\n-\n-
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:235
\n-
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:233
\n-
virtual bool operator==(const This &other) const =0
\n-
virtual CoordVector coords() const =0
\n-
virtual ~SubEntityIteratorBack()
Definition virtualrefinement.cc:237
\n-\n-
Definition virtualrefinement.cc:261
\n-
int nVertices(Dune::RefinementIntervals tag) const
Get the number of Vertices.
Definition virtualrefinement.cc:295
\n-
Dune::VirtualRefinement< dimension, CoordType > VirtualRefinement
Definition virtualrefinement.cc:264
\n-
int nElements(Dune::RefinementIntervals tag) const
Get the number of Elements.
Definition virtualrefinement.cc:320
\n-
static VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > & instance()
Definition virtualrefinement.cc:286
\n-
Dune::StaticRefinement< topologyId, CoordType, coerceToId, dimension > StaticRefinement
Definition virtualrefinement.cc:263
\n-
Definition virtualrefinement.cc:397
\n-
VirtualRefinement::template SubEntityIteratorBack< codimension > Base
Definition virtualrefinement.cc:401
\n-
VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:400
\n-
StaticRefinement::template Codim< codimension >::SubEntityIterator BackendIterator
Definition virtualrefinement.cc:399
\n-
VirtualRefinement::CoordVector CoordVector
Definition virtualrefinement.cc:402
\n-\n-
VirtualRefinementImp::template SubEntityIteratorBack< 0 > Common
Definition virtualrefinement.cc:368
\n-\n-
VirtualRefinement< dimension, CoordType > RefinementBase
Definition virtualrefinement.cc:370
\n-
Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > VirtualRefinementImp
Definition virtualrefinement.cc:367
\n-
VirtualRefinementImp::StaticRefinement StaticRefinement
Definition virtualrefinement.cc:369
\n-
Definition virtualrefinement.cc:518
\n-
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:522
\n-
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:573
\n-
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:595
\n-
VirtualRefinement base class.
Definition virtualrefinement.hh:294
\n-
SubEntityIteratorBack< dimension > VertexIteratorBack
Definition virtualrefinement.hh:318
\n-
VertexIterator vBegin(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:38
\n-
ElementIterator eBegin(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:54
\n-
ElementIterator eEnd(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:62
\n-
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the VirtualRefinement.
Definition virtualrefinement.hh:301
\n-
VertexIterator vEnd(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:46
\n-
FieldVector< CoordType, dimension > CoordVector
The CoordVector of the VirtualRefinement.
Definition virtualrefinement.hh:308
\n-
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the VirtualRefinement.
Definition virtualrefinement.hh:299
\n-
SubEntityIteratorBack< 0 > ElementIteratorBack
Definition virtualrefinement.hh:319
\n-
codim database of VirtualRefinement
Definition virtualrefinement.hh:378
\n+
Codim type
Definition dimension.hh:25
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,1002 +1,53 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-virtualrefinement.cc\n+dimension.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5\n-6#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_CC\n-_\b7#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC\n-8\n-14#include \n-15#include \n-16\n-17#include \n-18#include \n-19#include \n-20\n-21#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n-22#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\"\n-23\n-24namespace _\bD_\bu_\bn_\be\n-25{\n-26 // //////////////////////////////////////////\n-27 //\n-28 // The virtual base class and its iterators\n-29 //\n-30\n-31 //\n-32 // Refinement\n-33 //\n-34\n-35 template\n-36 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b3_\b7 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-38_\b _\bv_\bB_\be_\bg_\bi_\bn(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-39 {\n-40 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(vBeginBack(tag));\n-41 }\n-42\n-43 template\n-44 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b4_\b5 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-46_\b _\bv_\bE_\bn_\bd(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-47 {\n-48 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(vEndBack(tag));\n-49 }\n-50\n-51 template\n-52 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b5_\b3 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-54_\b _\be_\bB_\be_\bg_\bi_\bn(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-55 {\n-56 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(eBeginBack(tag));\n-57 }\n-58\n-59 template\n-60 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b6_\b1 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-62_\b _\be_\bE_\bn_\bd(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-63 {\n-64 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(eEndBack(tag));\n-65 }\n-66\n-67 //\n-68 // The iterators\n-69 //\n-70\n-71 template\n-_\b7_\b2 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-73\n-74 // The iterator for vertices\n-75 template\n-_\b7_\b6 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-77 {};\n-78\n-79 // The iterator for elements\n-80 template\n-_\b8_\b1 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-82 {\n-83 public:\n-_\b8_\b4 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b8_\b5 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bC_\bo_\bm_\bm_\bo_\bn;\n-_\b8_\b6 typedef typename Refinement::IndexVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-87\n-88 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n-89 };\n-90\n-91 template\n-92 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-_\b9_\b3 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-94_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n-95 {\n-96 return static_cast(this)->backend->vertexIndices();\n-97 }\n-98\n-99 // The iterator common stuff\n-100 template\n-101 template\n-_\b1_\b0_\b2 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::_\bC_\bo_\bd_\bi_\bm::\n-SubEntityIterator\n-103 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n-104 public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-105 {\n-106 public:\n-_\b1_\b0_\b7 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b1_\b0_\b8 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\bT_\bh_\bi_\bs;\n-_\b1_\b0_\b9 typedef typename Refinement::template _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>\n-_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n-_\b1_\b1_\b0 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-111\n-_\b1_\b1_\b2 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *backend);\n-_\b1_\b1_\b3 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bT_\bh_\bi_\bs &other);\n-_\b1_\b1_\b4 _\b~_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br();\n-115\n-_\b1_\b1_\b6 _\bT_\bh_\bi_\bs &_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs &other);\n-117\n-_\b1_\b1_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n-_\b1_\b1_\b9 void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt();\n-120\n-_\b1_\b2_\b1 int _\bi_\bn_\bd_\be_\bx() const;\n-122\n-123 // If you simply use an unqualified CoordVector here g++-4.2 chokes\n-124 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n-_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::\n-_\b1_\b2_\b5 CoordVector _\bc_\bo_\bo_\br_\bd_\bs() const;\n-126 private:\n-127 friend class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-128 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *backend;\n-129 };\n-130\n-131#ifndef DOXYGEN\n-132 template\n-133 template\n-134 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n-135_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(IteratorBack *backend_)\n-136 : backend(backend_)\n-137 {}\n-138\n-139 template\n-140 template\n-141 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n-142_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const This &other)\n-143 : backend(other.backend->clone())\n-144 {}\n-145\n-146 template\n-147 template\n-148 VirtualRefinement::Codim::\n-SubEntityIterator::\n-149 ~SubEntityIterator()\n-150 {\n-151 delete backend;\n-152 }\n-153\n-154 template\n-155 template\n-156 typename VirtualRefinement::template\n-Codim::SubEntityIterator &\n-157 VirtualRefinement::Codim::\n-SubEntityIterator::\n-158 operator=(const This &other)\n-159 {\n-160 delete backend;\n-161 backend = other.backend->clone();\n-162 }\n-163\n-164 template\n-165 template\n-166 bool\n-167 VirtualRefinement::Codim::\n-SubEntityIterator::\n-168 equals(const This &other) const\n-169 { return *backend == *(other.backend); }\n-170\n-171 template\n-172 template\n-173 void\n-174 VirtualRefinement::Codim::\n-SubEntityIterator::\n-175 increment()\n-176 {\n-177 ++*backend;\n-178 }\n-179\n-180 template\n-181 template\n-182 int\n-183 VirtualRefinement::Codim::\n-SubEntityIterator::\n-184 index() const\n-185 { return backend->index(); }\n-186\n-187 template\n-188 template\n-189 typename VirtualRefinement::template\n-Codim::SubEntityIterator::CoordVector\n-190 VirtualRefinement::Codim::\n-SubEntityIterator::\n-191 coords() const\n-192 { return backend->coords(); }\n-193#endif // DOXYGEN\n-194\n-195 //\n-196 // The iterator backend\n-197 //\n-198\n-199 template\n-_\b2_\b0_\b0 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-201\n-202 // The iterator backend for vertices\n-203 template\n-_\b2_\b0_\b4 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-205 {\n-206 public:\n-207\n-_\b2_\b0_\b8 virtual _\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl()\n-209 {}\n-210 };\n-211\n-212 // The iterator backend for elements\n-213 template\n-_\b2_\b1_\b4 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-215 {\n-216 public:\n-_\b2_\b1_\b7 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b1_\b8 typedef typename Refinement::IndexVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-219\n-_\b2_\b2_\b0 virtual _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const = 0;\n-221\n-_\b2_\b2_\b2 virtual _\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl()\n-223 {}\n-224 };\n-225\n-226 // The iterator backend common stuff\n-227 template\n-228 template\n-_\b2_\b2_\b9 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-230 : public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-231 {\n-232 public:\n-_\b2_\b3_\b3 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b3_\b4 typedef typename Refinement::template _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>\n-_\bT_\bh_\bi_\bs;\n-_\b2_\b3_\b5 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-236\n-_\b2_\b3_\b7 virtual _\b~_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk() {}\n-238\n-_\b2_\b3_\b9 virtual _\bT_\bh_\bi_\bs *_\bc_\bl_\bo_\bn_\be() const = 0;\n-240\n-_\b2_\b4_\b1 virtual bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bT_\bh_\bi_\bs &other) const = 0;\n-_\b2_\b4_\b2 virtual _\bT_\bh_\bi_\bs &_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+() = 0;\n-243\n-_\b2_\b4_\b4 virtual int _\bi_\bn_\bd_\be_\bx() const = 0;\n-_\b2_\b4_\b5 virtual _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bc_\bo_\bo_\br_\bd_\bs() const = 0;\n-246 };\n-247\n-248 // /////////////////////////////////////////////////\n-249 //\n-250 // The derived classes and their iterator backends\n-251 //\n-252\n-253 //\n-254 // The refinement implementation\n-255 //\n-256\n-257 template\n-_\b2_\b5_\b9 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-260 : public _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-261 {\n-262 public:\n-_\b2_\b6_\b3 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b6_\b4 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-265\n-266 template\n-267 class _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n-268\n-269 int nVertices(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-270\n-271 int nElements(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-272\n-273 static _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>\n-&instance();\n-274 private:\n-275 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp() {}\n-276\n-277 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *vBeginBack(_\bD_\bu_\bn_\be_\b:_\b:\n-_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-278 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *vEndBack(_\bD_\bu_\bn_\be_\b:_\b:\n-_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-279 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *eBeginBack(_\bD_\bu_\bn_\be_\b:_\b:\n-_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-280 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *eEndBack(_\bD_\bu_\bn_\be_\b:_\b:\n-_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-281 };\n-282\n-283 template\n-285 VirtualRefinementImp &\n-_\b2_\b8_\b6 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be()\n-287 {\n-288 static _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp instance_{};\n-289 return instance_;\n-290 }\n-291\n-292 template\n-_\b2_\b9_\b4 int _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-295_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-296 {\n-297 return _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(tag);\n-298 }\n-299\n-300 template\n-302 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *\n-303 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-304_\b _\bv_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-305 {\n-306 return new SubEntityIteratorBack(_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn(tag));\n-307 }\n-308\n-309 template\n-311 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *\n-312 VirtualRefinementImp::\n-313 vEndBack(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-314 {\n-315 return new SubEntityIteratorBack(_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd(tag));\n-316 }\n-317\n-318 template\n-_\b3_\b2_\b0 int _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-321 {\n-322 return _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(tag);\n-323 }\n-324\n-325 template\n-327 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *\n-328 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-329_\b _\be_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-330 {\n-331 return new SubEntityIteratorBack<0>(_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn(tag));\n-332 }\n-333\n-334 template\n-336 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *\n-337 VirtualRefinementImp::\n-338 eEndBack(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-339 {\n-340 return new SubEntityIteratorBack<0>(_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd(tag));\n-341 }\n-342\n-343 //\n-344 // The iterator backend implementation\n-345 //\n-346\n-347 // The iterator backend implementation specialties\n-348 template\n-_\b3_\b5_\b0 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-351\n-352 // The iterator backend implementation specialties for vertices\n-353 template\n-_\b3_\b5_\b5 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-356 : public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::template\n-SubEntityIteratorBack\n-357 {};\n-358\n-359 // The iterator backend implementation specialties for elements\n-360\n-361 template\n-_\b3_\b6_\b3 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-364 : public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::template\n-SubEntityIteratorBack<0>\n-365 {\n-366 public:\n-_\b3_\b6_\b7 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp;\n-_\b3_\b6_\b8 typedef typename VirtualRefinementImp::template SubEntityIteratorBack<0>\n-_\bC_\bo_\bm_\bm_\bo_\bn;\n-_\b3_\b6_\b9 typedef typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b3_\b7_\b0 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\ba_\bs_\be;\n-_\b3_\b7_\b1 typedef typename RefinementBase::IndexVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-372\n-373 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n-374 };\n-375\n-376 template\n-378 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-_\b3_\b7_\b9 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b>_\b:_\b:\n-380_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n-381 {\n-382 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vIndices;\n-383 vIndices.reserve(StaticRefinement::IndexVector::dimension);\n-384\n-385 typename _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br sIndices = static_cast(this)->backend.vertexIndices();\n-386 for(int i = 0; i < StaticRefinement::IndexVector::dimension; ++i)\n-387 vIndices.push_back(sIndices[i]);\n-388 return vIndices;\n-389 }\n-390\n-391 // The shared iterator backend implementation\n-392 template\n-394 template\n-_\b3_\b9_\b5 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-396 : public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-397 {\n-398 public:\n-_\b3_\b9_\b9 typedef typename StaticRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b4_\b0_\b0 typedef typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bT_\bh_\bi_\bs;\n-_\b4_\b0_\b1 typedef typename VirtualRefinement::template\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bB_\ba_\bs_\be;\n-_\b4_\b0_\b2 typedef typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-403\n-404 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk(const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br &backend);\n-405 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk(const _\bT_\bh_\bi_\bs &other);\n-406\n-407 _\bB_\ba_\bs_\be *clone() const;\n-408\n-409 bool operator==(const _\bB_\ba_\bs_\be &other) const;\n-410 _\bB_\ba_\bs_\be &operator++();\n-411\n-412 int index() const;\n-_\b4_\b1_\b3 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-414\n-415 private:\n-416 friend class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-417 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br backend;\n-418 };\n-419\n-420 template\n-422 template\n-_\b4_\b2_\b3 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-424_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk(const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br &backend_)\n-425 : backend(backend_)\n-426 {}\n-427\n-428 template\n-430 template\n-_\b4_\b3_\b1 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-432_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk(const _\bT_\bh_\bi_\bs &other)\n-433 : _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl(other),\n-434 backend(other.backend)\n-435 {}\n-436\n-437 template\n-438 template\n-439 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bB_\ba_\bs_\be *\n-_\b4_\b4_\b0 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-441_\b _\bc_\bl_\bo_\bn_\be() const\n-442 { return new _\bT_\bh_\bi_\bs(*this); }\n-443\n-444 template\n-445 template\n-446 bool\n-_\b4_\b4_\b7 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-448_\b _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bB_\ba_\bs_\be &other) const\n-449 {\n-450 try {\n-451 return backend == dynamic_cast(other).backend;\n-452 }\n-453 catch(const std::bad_cast&)\n-454 {\n-455 return false;\n-456 }\n-457 }\n-458\n-459 template\n-460 template\n-461 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bB_\ba_\bs_\be &\n-_\b4_\b6_\b2 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-463_\b _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+()\n-464 {\n-465 ++backend;\n-466 return *this;\n-467 }\n-468\n-469 template\n-470 template\n-471 int\n-_\b4_\b7_\b2 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-473_\b _\bi_\bn_\bd_\be_\bx() const\n-474 { return backend.index(); }\n-475\n-476 template\n-477 template\n-478 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b4_\b7_\b9 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-480_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-481 { return backend.coords(); }\n-482\n-483 // ////////////////////////\n-484 //\n-485 // The refinement builder\n-486 //\n-487\n-488 template\n-489 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br;\n-490\n-501 template\n-502 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n-_\b5_\b0_\b3 _\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt(\n-504 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be geometryType,\n-506 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be coerceTo)\n-507 {\n-508 // Check that the user used valid geometry types\n-509 assert(geometryType._\bd_\bi_\bm() == dimension && coerceTo._\bd_\bi_\bm() == dimension);\n-510 return _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bb_\bu_\bi_\bl_\bd( geometryType._\bi_\bd(),\n-coerceTo._\bi_\bd() );\n-511 }\n-512\n-513 // In principle the trick with the class is no longer necessary,\n-514 // but I'm keeping it in here so it will be easier to specialize\n-515 // buildRefinement when someone implements pyramids and prisms\n-516 template\n-_\b5_\b1_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br\n-518 {\n-519 public:\n-520 static\n-521 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n-_\b5_\b2_\b2 _\bb_\bu_\bi_\bl_\bd(unsigned topologyId, unsigned coerceToId)\n-523 {\n-524 topologyId &= ~1;\n-525 coerceToId &= ~1;\n-526\n-527 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;\n-528 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;\n-529\n-530 switch( topologyId )\n-531 {\n-532 //case GeometryType::simplex:\n-533 case idSimplex :\n-534 //switch( coerceTo )\n-535 switch( coerceToId )\n-536 {\n-537 //case GeometryType::simplex:\n-538 case idSimplex :\n-539 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n-540 default :\n-541 break;\n-542 }\n-543 break;\n-544\n-545 //case GeometryType::cube:\n-546 case idCube :\n-547 switch( coerceToId )\n-548 {\n-549 case idSimplex :\n-550 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n-551 case idCube :\n-552 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n-553 default :\n-554 break;\n-555 }\n-556 break;\n-557\n-558 default :\n-559 break;\n-560 }\n-561 DUNE_THROW( NotImplemented, \"No Refinement<\" << topologyId << \", CoordType,\n-\"\n-562 << coerceToId << \" >.\");\n-563 }\n-564 };\n-565\n-566 template\n-_\b5_\b6_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br<1, CoordType>\n-568 {\n-569 static const std::size_t dimension = 1;\n-570 public:\n-571 static\n-572 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n-_\b5_\b7_\b3 _\bb_\bu_\bi_\bl_\bd(unsigned topologyId, unsigned coerceToId)\n-574 {\n-575 topologyId &= ~1;\n-576 coerceToId &= ~1;\n-577\n-578 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;\n-579\n-580 if (topologyId == 0 && coerceToId == 0)\n-581 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n-582\n-583 DUNE_THROW( NotImplemented, \"No Refinement<\" << topologyId << \", CoordType,\n-\"\n-584 << coerceToId << \" >.\");\n-585 }\n-586 };\n-587\n-588 template\n-_\b5_\b8_\b9 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br<3, CoordType>\n-590 {\n-591 static const std::size_t dimension = 3;\n-592 public:\n-593 static\n-594 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n-_\b5_\b9_\b5 _\bb_\bu_\bi_\bl_\bd(unsigned topologyId, unsigned coerceToId)\n-596 {\n-597 topologyId &= ~1;\n-598 coerceToId &= ~1;\n-599\n-600 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;\n-601 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;\n-602 constexpr unsigned idPrism = GeometryTypes::prism.id() & ~1;\n-603 constexpr unsigned idPyramid = GeometryTypes::pyramid.id() & ~1;\n-604\n-605 switch( topologyId )\n-606 {\n-607 //case GeometryType::simplex:\n-608 case idSimplex :\n-609 //switch( coerceTo )\n-610 switch( coerceToId )\n-611 {\n-612 //case GeometryType::simplex:\n-613 case idSimplex :\n-614 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n-615 default :\n-616 break;\n-617 }\n-618 break;\n-619\n-620 //case GeometryType::cube:\n-621 case idCube :\n-622 switch( coerceToId )\n-623 {\n-624 case idSimplex :\n-625 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n-626 case idCube :\n-627 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n-628 default :\n-629 break;\n-630 }\n-631 break;\n-632\n-633 //case GeometryType::prism:\n-634 case idPrism :\n-635 switch( coerceToId )\n-636 {\n-637 case idSimplex :\n-638 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bP_\br_\bi_\bs_\bm_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n-639 default :\n-640 break;\n-641 }\n-642 break;\n-643\n-644 //case GeometryType::pyramid:\n-645 case idPyramid :\n-646 switch( coerceToId )\n-647 {\n-648 case idSimplex :\n-649 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bP_\by_\br_\ba_\bm_\bi_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n-650 default :\n-651 break;\n-652 }\n-653 break;\n-654\n-655 default :\n-656 break;\n-657 }\n-658 DUNE_THROW( NotImplemented, \"No Refinement<\" << topologyId << \", CoordType,\n-\"\n-659 << coerceToId << \" >.\");\n-660 }\n-661 };\n-662\n-663} // namespace Dune\n-664\n-665#endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_CC\n-_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n-This file simply includes all Refinement implementations so you don't have to\n-do them separately.\n-_\bt_\by_\bp_\be_\b._\bh_\bh\n-A unique label for each type of element that can occur in a grid.\n+5#ifndef DUNE_GEOMETRY_DIMENSION_HH\n+6#define DUNE_GEOMETRY_DIMENSION_HH\n+7\n+8#include \n+9\n+10namespace _\bD_\bu_\bn_\be {\n+11\n+13 template\n+_\b1_\b4 struct _\bD_\bi_\bm\n+15 : public std::integral_constant\n+16 {\n+_\b1_\b7 typedef _\bD_\bi_\bm _\bt_\by_\bp_\be;\n+18 };\n+19\n+21 template\n+_\b2_\b2 struct _\bC_\bo_\bd_\bi_\bm\n+23 : public std::integral_constant\n+24 {\n+_\b2_\b5 typedef _\bC_\bo_\bd_\bi_\bm _\bt_\by_\bp_\be;\n+26 };\n+27\n+28}\n+29\n+30#endif // DUNE_GEOMETRY_DIMENSION_HH\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType\n-geometryType, GeometryType coerceTo)\n-return a reference to the VirtualRefinement according to the parameters\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:503\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm\n+Static tag representing a dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:16\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm_\b:_\b:_\bt_\by_\bp_\be\n+Dim type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:17\n _\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n Static tag representing a codimension.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs\n-Holds the number of refined intervals per axis needed for virtual and static\n-refinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:94\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-Wrap each Refinement implementation to get a consistent interface.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:141\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd\n-static ElementIterator eEnd(Dune::RefinementIntervals tag)\n-Get an ElementIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:247\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n-static ElementIterator eBegin(Dune::RefinementIntervals tag)\n-Get an ElementIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:237\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-static int nElements(Dune::RefinementIntervals tag)\n-Get the number of Elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:227\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-static int nVertices(Dune::RefinementIntervals tag)\n-Get the number of Vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:197\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n-static VertexIterator vBegin(Dune::RefinementIntervals tag)\n-Get a VertexIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:207\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-typedef IndexVector\n-The IndexVector of the Refinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:177\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd\n-static VertexIterator vEnd(Dune::RefinementIntervals tag)\n-Get a VertexIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:217\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-Unique label for each type of entities that can occur in DUNE grids.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bd_\bi_\bm\n-constexpr unsigned int dim() const\n-Return dimension of the type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:372\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n-constexpr unsigned int id() const\n-Return the topology id of the type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:72\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:\n-_\bC_\bo_\bm_\bm_\bo_\bn\n-Refinement::template Codim< 0 >::SubEntityIterator Common\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:85\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:\n-_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-VirtualRefinement< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:84\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:\n-_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::IndexVector IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:86\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bs\n-VirtualRefinement< dimension, CoordType >::template Codim< codimension >::\n-SubEntityIterator::CoordVector coords() const\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SubEntityIterator(const This &other)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-This & operator=(const This &other)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bi_\bn_\bd_\be_\bx\n-int index() const\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\b~_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-~SubEntityIterator()\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SubEntityIterator(IteratorBack *backend)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-Refinement::template SubEntityIteratorBack< codimension > IteratorBack\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:109\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:110\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bT_\bh_\bi_\bs\n-Refinement::template Codim< codimension >::SubEntityIterator This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:108\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other) const\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-VirtualRefinement< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:107\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n-void increment()\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:200\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-virtual ~VirtualRefinementSubEntityIteratorBackSpecial()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:208\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0\n-_\b>_\b:_\b:_\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-virtual IndexVector vertexIndices() const =0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0\n-_\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-VirtualRefinement< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:217\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0\n-_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::IndexVector IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:218\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0\n-_\b>_\b:_\b:_\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-virtual ~VirtualRefinementSubEntityIteratorBackSpecial()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:222\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:231\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bi_\bn_\bd_\be_\bx\n-virtual int index() const =0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bT_\bh_\bi_\bs\n-Refinement::template SubEntityIteratorBack< codimension > This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:234\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual This * clone() const =0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:235\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-VirtualRefinement< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:233\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-virtual bool operator==(const This &other) const =0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bs\n-virtual CoordVector coords() const =0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\b~_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-virtual ~SubEntityIteratorBack()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:237\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-virtual This & operator++()=0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:261\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-int nVertices(Dune::RefinementIntervals tag) const\n-Get the number of Vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:295\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-Dune::VirtualRefinement< dimension, CoordType > VirtualRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:264\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-int nElements(Dune::RefinementIntervals tag) const\n-Get the number of Elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:320\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be\n-static VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > &\n-instance()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:286\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-Dune::StaticRefinement< topologyId, CoordType, coerceToId, dimension >\n-StaticRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:263\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:397\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bB_\ba_\bs_\be\n-VirtualRefinement::template SubEntityIteratorBack< codimension > Base\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:401\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bT_\bh_\bi_\bs\n-VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >::template\n-SubEntityIteratorBack< codimension > This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:400\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-StaticRefinement::template Codim< codimension >::SubEntityIterator\n-BackendIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:399\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-VirtualRefinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:402\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:350\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bm_\bm_\bo_\bn\n-VirtualRefinementImp::template SubEntityIteratorBack< 0 > Common\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:368\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-RefinementBase::IndexVector IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:371\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\ba_\bs_\be\n-VirtualRefinement< dimension, CoordType > RefinementBase\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:370\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >\n-VirtualRefinementImp\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:367\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-VirtualRefinementImp::StaticRefinement StaticRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:369\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:518\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b:_\b:_\bb_\bu_\bi_\bl_\bd\n-static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId,\n-unsigned coerceToId)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:522\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\b1_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bb_\bu_\bi_\bl_\bd\n-static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId,\n-unsigned coerceToId)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:573\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\b3_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bb_\bu_\bi_\bl_\bd\n-static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId,\n-unsigned coerceToId)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:595\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-VirtualRefinement base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:294\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-SubEntityIteratorBack< dimension > VertexIteratorBack\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:318\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n-VertexIterator vBegin(Dune::RefinementIntervals tag) const\n-Get an VertexIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:38\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n-ElementIterator eBegin(Dune::RefinementIntervals tag) const\n-Get an ElementIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:54\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd\n-ElementIterator eEnd(Dune::RefinementIntervals tag) const\n-Get an ElementIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< 0 >::SubEntityIterator ElementIterator\n-The ElementIterator of the VirtualRefinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:301\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd\n-VertexIterator vEnd(Dune::RefinementIntervals tag) const\n-Get an VertexIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:46\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< CoordType, dimension > CoordVector\n-The CoordVector of the VirtualRefinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:308\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< dimension >::SubEntityIterator VertexIterator\n-The VertexIterator of the VirtualRefinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:299\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-SubEntityIteratorBack< 0 > ElementIteratorBack\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:319\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-codim database of VirtualRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:378\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bt_\by_\bp_\be\n+Codim type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:25\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00179.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00179.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: typeindex.hh File Reference\n+dune-geometry: quadraturerules.hh File Reference\n \n \n \n \n \n \n \n@@ -71,44 +71,119 @@\n \n \n \n
\n \n-
typeindex.hh File Reference
\n+Namespaces |\n+Macros |\n+Enumerations
\n+
quadraturerules.hh File Reference
\n \n
\n-\n-

Helper classes to provide indices for geometrytypes for use in a vector. \n-More...

\n-
#include <cstddef>
\n-#include <dune/common/indices.hh>
\n-#include <dune/common/hybridutilities.hh>
\n-#include "type.hh"
\n+
#include <algorithm>
\n+#include <iostream>
\n+#include <limits>
\n+#include <mutex>
\n+#include <utility>
\n+#include <vector>
\n+#include <dune/common/fvector.hh>
\n+#include <dune/common/exceptions.hh>
\n+#include <dune/common/stdstreams.hh>
\n+#include <dune/common/stdthread.hh>
\n+#include <dune/common/visibility.hh>
\n+#include <dune/geometry/type.hh>
\n+#include <dune/geometry/typeindex.hh>
\n+#include "quadraturerules/pointquadrature.hh"
\n+#include "quadraturerules/gausslobattoquadrature.hh"
\n+#include "quadraturerules/gaussquadrature.hh"
\n+#include "quadraturerules/gaussradauleftquadrature.hh"
\n+#include "quadraturerules/gaussradaurightquadrature.hh"
\n+#include "quadraturerules/jacobi1quadrature.hh"
\n+#include "quadraturerules/jacobi2quadrature.hh"
\n+#include "quadraturerules/jacobiNquadrature.hh"
\n+#include "quadraturerules/prismquadrature.hh"
\n+#include "quadraturerules/simplexquadrature.hh"
\n+#include "quadraturerules/tensorproductquadrature.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 Classes

class  Dune::LocalGeometryTypeIndex
 Compute per-dimension indices for geometry types. More...
class  Dune::QuadratureOrderOutOfRange
 Exception thrown if a desired QuadratureRule is not available, because the requested order is to high. More...
 
class  Dune::QuadraturePoint< ct, dim >
 Single evaluation point in a quadrature rule. More...
 
class  Dune::QuadratureRule< ct, dim >
 Abstract base class for quadrature rules. More...
 
class  Dune::QuadratureRules< ctype, dim >
 A container for all quadrature rules of dimension dim More...
 
class  Dune::QuadratureRuleFactory< ctype, dim >
 Factory class for creation of quadrature rules, depending on GeometryType, order and QuadratureType. More...
 
class  Dune::QuadratureRuleFactory< ctype, 0 >
 
class  Dune::QuadratureRuleFactory< ctype, 1 >
 
class  Dune::QuadratureRuleFactory< ctype, 2 >
 
class  Dune::GlobalGeometryTypeIndex
 Compute indices for geometry types, taking the dimension into account. More...
class  Dune::QuadratureRuleFactory< ctype, 3 >
 
\n \n \n \n+\n+\n+\n+

\n Namespaces

namespace  Dune
 
namespace  Dune::QuadratureType
 Defines an enum for currently available quadrature rules.
 
\n+\n+\n+\n+

\n+Macros

#define DUNE_INCLUDING_IMPLEMENTATION
 
\n+\n+\n+\n

\n+Enumerations

enum  Dune::QuadratureType::Enum {
\n+  Dune::QuadratureType::GaussLegendre = 0\n+, Dune::QuadratureType::GaussJacobi_1_0 = 1\n+, Dune::QuadratureType::GaussJacobi_2_0 = 2\n+, Dune::QuadratureType::GaussJacobi_n_0 = 3\n+,
\n+  Dune::QuadratureType::GaussLobatto = 4\n+, Dune::QuadratureType::GaussRadauLeft = 5\n+, Dune::QuadratureType::GaussRadauRight = 6\n+, Dune::QuadratureType::size\n+
\n+ }
 
\n

Detailed Description

\n-

Helper classes to provide indices for geometrytypes for use in a vector.

\n-
\n+

Interface for quadrature points and rules

\n+

Macro Definition Documentation

\n+\n+

◆ DUNE_INCLUDING_IMPLEMENTATION

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+
#define DUNE_INCLUDING_IMPLEMENTATION
\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,30 +1,85 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-typeindex.hh File Reference\n-Helper classes to provide indices for geometrytypes for use in a vector.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n+quadraturerules.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+#include \"quadraturerules/pointquadrature.hh\"\n+#include \"quadraturerules/gausslobattoquadrature.hh\"\n+#include \"quadraturerules/gaussquadrature.hh\"\n+#include \"quadraturerules/gaussradauleftquadrature.hh\"\n+#include \"quadraturerules/gaussradaurightquadrature.hh\"\n+#include \"quadraturerules/jacobi1quadrature.hh\"\n+#include \"quadraturerules/jacobi2quadrature.hh\"\n+#include \"quadraturerules/jacobiNquadrature.hh\"\n+#include \"quadraturerules/prismquadrature.hh\"\n+#include \"quadraturerules/simplexquadrature.hh\"\n+#include \"quadraturerules/tensorproductquadrature.hh\"\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:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n-\u00a0 Compute per-dimension indices for geometry types. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bO_\br_\bd_\be_\br_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be\n+\u00a0 Exception thrown if a desired _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be is not available, because\n+ the requested order is to high. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n-\u00a0 Compute indices for geometry types, taking the dimension into account.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b<_\b _\bc_\bt_\b,_\b _\bd_\bi_\bm_\b _\b>\n+\u00a0 Single evaluation point in a quadrature rule. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\b _\bc_\bt_\b,_\b _\bd_\bi_\bm_\b _\b>\n+\u00a0 Abstract base class for quadrature rules. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b _\b>\n+\u00a0 A container for all quadrature rules of dimension dim _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b _\b>\n+\u00a0 Factory class for creation of quadrature rules, depending on\n+ _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be, order and _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\b2_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\b3_\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:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be\n+\u00a0 Defines an enum for currently available quadrature rules.\n+\u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bI_\bN_\bC_\bL_\bU_\bD_\bI_\bN_\bG_\b__\bI_\bM_\bP_\bL_\bE_\bM_\bE_\bN_\bT_\bA_\bT_\bI_\bO_\bN\n+\u00a0\n+E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n+enum \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm {\n+ \u00a0\u00a0_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be = 0 , _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:\n+ _\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0 = 1 , _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0 = 2 , _\bD_\bu_\bn_\be_\b:_\b:\n+ _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 = 3 ,\n+ \u00a0\u00a0_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo = 4 , _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:\n+ _\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt = 5 , _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt = 6 , _\bD_\bu_\bn_\be_\b:_\b:\n+ _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bz_\be\n+ }\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-Helper classes to provide indices for geometrytypes for use in a vector.\n+Interface for quadrature points and rules\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\u00a0D\bDU\bUN\bNE\bE_\b_I\bIN\bNC\bCL\bLU\bUD\bDI\bIN\bNG\bG_\b_I\bIM\bMP\bPL\bLE\bEM\bME\bEN\bNT\bTA\bAT\bTI\bIO\bON\bN *\b**\b**\b**\b**\b*\n+#define DUNE_INCLUDING_IMPLEMENTATION\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00179_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00179_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: typeindex.hh Source File\n+dune-geometry: quadraturerules.hh Source File\n \n \n \n \n \n \n \n@@ -74,161 +74,474 @@\n \n
\n \n
\n \n
\n-
typeindex.hh
\n+
quadraturerules.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_TYPEINDEX_HH
\n-
6#define DUNE_GEOMETRY_TYPEINDEX_HH
\n-
7
\n-
14#include <cstddef>
\n+
5
\n+
6#ifndef DUNE_GEOMETRY_QUADRATURERULES_HH
\n+
7#define DUNE_GEOMETRY_QUADRATURERULES_HH
\n+
8
\n+
9#include <algorithm>
\n+
10#include <iostream>
\n+
11#include <limits>
\n+
12#include <mutex>
\n+
13#include <utility>
\n+
14#include <vector>
\n
15
\n-
16#include <dune/common/indices.hh>
\n-
17#include <dune/common/hybridutilities.hh>
\n-
18
\n-
19#include "type.hh"
\n-
20
\n-
21namespace Dune
\n-
22{
\n-
\n-\n-
25 {
\n-
32 inline static constexpr std::size_t regular_size(std::size_t dim)
\n-
33 {
\n-
34 // The following expression is derived from the expression for
\n-
35 // GlobalGeometryTypeIndex::regular_offset(). Subtracting
\n-
36 // regular_offset(dim+1)-regular_offset(dim) we get:
\n-
37 //
\n-
38 // ((1 << dim+1) >> 1) - ((1 << dim) >> 1)
\n-
39 //
\n-
40 // We always have
\n-
41 //
\n-
42 // dim >= 0,
\n-
43 //
\n-
44 // so
\n-
45 //
\n-
46 // (1 << dim+1) >= 2 and (1 << dim+2) % 2 == 0.
\n-
47 //
\n-
48 // So if we apply a single right-shift to that, we will never lose any
\n-
49 // set bits, thus
\n-
50 //
\n-
51 // ((1 << dim+1) >> 1) == (1 << dim)
\n-
52 return (1 << dim) - ((1 << dim) >> 1);
\n-
53 }
\n+
16#include <dune/common/fvector.hh>
\n+
17#include <dune/common/exceptions.hh>
\n+
18#include <dune/common/stdstreams.hh>
\n+
19#include <dune/common/stdthread.hh>
\n+
20#include <dune/common/visibility.hh>
\n+
21
\n+
22#include <dune/geometry/type.hh>
\n+\n+
24
\n+
30namespace Dune {
\n+
31
\n+
36 class QuadratureOrderOutOfRange : public NotImplemented {};
\n+
37
\n+
43 template<typename ct, int dim>
\n+
\n+\n+
45 public:
\n+
47 constexpr static int dimension = dim;
\n+
48
\n+
50 typedef ct Field;
\n+
51
\n+
53 typedef Dune::FieldVector<ct,dim> Vector;
\n
54
\n-
55 public:
\n-
\n-
61 inline static constexpr std::size_t size(std::size_t dim)
\n-
62 {
\n-
63 // one for "none"
\n-
64 return regular_size(dim) + 1;
\n+
\n+
56 QuadraturePoint (const Vector& x, ct w) : local(x)
\n+
57 {
\n+
58 weight_ = w;
\n+
59 }
\n+
\n+
60
\n+
\n+
62 const Vector& position () const
\n+
63 {
\n+
64 return local;
\n
65 }
\n
\n
66
\n-
\n-
73 inline static constexpr std::size_t index(const GeometryType &gt)
\n-
74 {
\n-
75 return gt.isNone() ? regular_size(gt.dim()) : (gt.id() >> 1);
\n-
76 }
\n+
\n+
68 const ct &weight () const
\n+
69 {
\n+
70 return weight_;
\n+
71 }
\n+
\n+
72
\n+
73 protected:
\n+
74 FieldVector<ct, dim> local;
\n+\n+
76 };
\n
\n
77
\n-
\n-
79 inline static constexpr GeometryType type(std::size_t dim, std::size_t index) {
\n-
80 return (index == regular_size(dim)) ?
\n-
81 GeometryTypes::none(dim) :
\n-
82 // the cast to unsigned makes sure this is interpreted as the topology
\n-
83 // ID constructor
\n-
84 GeometryType(static_cast< unsigned int >(index << 1), dim);
\n-
85 }
\n-
\n-
86 };
\n-
\n-
87
\n-
\n-\n-
90 {
\n-
98 inline static constexpr std::size_t regular_offset(std::size_t dim)
\n-
99 {
\n-
100 // The number of regular geometry types in a given dimension is
\n-
101 // 2^(dim-1). For dim==0 this would yield 1/2 geometry types (which is
\n-
102 // obviously bogus, dim==0 has one regular geometry type, the point).
\n-
103 // The following expression relies on 1 >> 1 == 0 to treat dim==0
\n-
104 // specially.
\n-
105 return (1 << dim) >> 1;
\n-
106 }
\n+
\n+
81 namespace QuadratureType {
\n+
\n+
82 enum Enum {
\n+\n+
93
\n+\n+
100
\n+\n
107
\n-
108 public:
\n-
\n-
113 inline static constexpr std::size_t offset(std::size_t dim)
\n-
114 {
\n-
115 // dim times "none"
\n-
116 return regular_offset(dim) + dim;
\n-
117 }
\n-
\n-
118
\n-
\n-
125 inline static constexpr std::size_t size(std::size_t maxdim)
\n-
126 {
\n-
127 return offset(maxdim+1);
\n-
128 }
\n-
\n-
129
\n-
\n-
138 inline static constexpr std::size_t index(const GeometryType &gt)
\n-
139 {
\n-
140 return offset(gt.dim()) + LocalGeometryTypeIndex::index(gt);
\n-
141 }
\n-
\n-
142 };
\n-
\n-
143
\n-
144 namespace Impl {
\n-
145
\n-
146 // Map a dynamic GeometryType to a static integral_constant<GeometryType::Id, ...>
\n-
147 template<int dim, class F>
\n-
148 static auto toGeometryTypeIdConstant(const GeometryType& gt, F&& f) {
\n-
149 // Transform LocalGeometryTypeIndex to GeometryType::Id
\n-
150 auto callWithId = [&](auto index) {
\n-
151 static constexpr auto id = LocalGeometryTypeIndex::type(dim, decltype(index)::value).toId();
\n-
152 return f(std::integral_constant<GeometryType::Id, id>{});
\n-
153 };
\n-
154 // switchCases needs a fallback to determine the return type.
\n-
155 auto fallBack = [&]() { return callWithId(Dune::Indices::_0); };
\n-
156 // Iterate over all _regular_ GeometryType indices for given dimension
\n-
157 auto allIndices = std::make_index_sequence<LocalGeometryTypeIndex::size(dim)-1>{};
\n-
158 return Dune::Hybrid::switchCases(allIndices, LocalGeometryTypeIndex::index(gt), callWithId, fallBack);
\n-
159 }
\n-
160
\n-
161 } // namespace Impl
\n-
162} // namespace Dune
\n-
163
\n-
164#endif // DUNE_GEOMETRY_TYPEINDEX_HH
\n-
A unique label for each type of element that can occur in a grid.
\n+\n+
120
\n+\n+
128
\n+\n+
136
\n+\n+
145 size
\n+
146 };
\n+
\n+
147 }
\n+
\n+
148
\n+
152 template<typename ct, int dim>
\n+
\n+
153 class QuadratureRule : public std::vector<QuadraturePoint<ct,dim> >
\n+
154 {
\n+
155 public:
\n+\n+
162
\n+
163 protected:
\n+\n+
166
\n+\n+
169 public:
\n+
171 constexpr static int d = dim;
\n+
172
\n+
174 typedef ct CoordType;
\n+
175
\n+
177 virtual int order () const { return delivered_order; }
\n+
178
\n+
180 virtual GeometryType type () const { return geometry_type; }
\n+
181 virtual ~QuadratureRule(){}
\n+
182
\n+
185 typedef typename std::vector<QuadraturePoint<ct,dim> >::const_iterator iterator;
\n+
186
\n+
187 protected:
\n+\n+\n+
190 };
\n+
\n+
191
\n+
192 // Forward declaration of the factory class,
\n+
193 // needed internally by the QuadratureRules container class.
\n+
194 template<typename ctype, int dim> class QuadratureRuleFactory;
\n+
195
\n+
199 template<typename ctype, int dim>
\n+
\n+\n+
201
\n+\n+
204
\n+
205 // indexed by quadrature order
\n+
206 using QuadratureOrderVector = std::vector<std::pair<std::once_flag, QuadratureRule> >;
\n+
207
\n+
208 // indexed by geometry type
\n+
209 using GeometryTypeVector = std::vector<std::pair<std::once_flag, QuadratureOrderVector> >;
\n+
210
\n+
211 // indexed by quadrature type enum
\n+
212 using QuadratureCacheVector = std::vector<std::pair<std::once_flag, GeometryTypeVector> >;
\n+
213
\n+
215 DUNE_EXPORT const QuadratureRule& _rule(const GeometryType& t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre) const
\n+
216 {
\n+
217 assert(t.dim()==dim);
\n+
218
\n+
219 DUNE_ASSERT_CALL_ONCE();
\n+
220
\n+
221 static QuadratureCacheVector quadratureCache(QuadratureType::size);
\n+
222
\n+
223 auto& [ onceFlagQuadratureType, geometryTypes ] = quadratureCache[qt];
\n+
224 // initialize geometry types for this quadrature type once
\n+
225 std::call_once(onceFlagQuadratureType, [&types = geometryTypes]{
\n+
226 types = GeometryTypeVector(LocalGeometryTypeIndex::size(dim));
\n+
227 });
\n+
228
\n+
229 auto& [ onceFlagGeometryType, quadratureOrders ] = geometryTypes[LocalGeometryTypeIndex::index(t)];
\n+
230 // initialize quadrature orders for this geometry type and quadrature type once
\n+
231 std::call_once(onceFlagGeometryType, [&, &orders = quadratureOrders]{
\n+
232 // we only need one quadrature rule for points, not maxint
\n+
233 const auto numRules = dim == 0 ? 1 : QuadratureRuleFactory<ctype,dim>::maxOrder(t, qt)+1;
\n+
234 orders = QuadratureOrderVector(numRules);
\n+
235 });
\n+
236
\n+
237 // we only have one quadrature rule for points
\n+
238 auto& [ onceFlagQuadratureOrder, quadratureRule ] = quadratureOrders[dim == 0 ? 0 : p];
\n+
239 // initialize quadrature rule once
\n+
240 std::call_once(onceFlagQuadratureOrder, [&, &rule = quadratureRule]{
\n+\n+
242 });
\n+
243
\n+
244 return quadratureRule;
\n+
245 }
\n+
246
\n+
248 DUNE_EXPORT static QuadratureRules& instance()
\n+
249 {
\n+
250 static QuadratureRules instance;
\n+
251 return instance;
\n+
252 }
\n+
253
\n+
255 QuadratureRules () = default;
\n+
256 public:
\n+
258 static unsigned
\n+\n+
264
\n+
\n+\n+
267 {
\n+
268 return instance()._rule(t,p,qt);
\n+
269 }
\n+
\n+
270
\n+
\n+\n+
273 {
\n+
274 GeometryType gt(t,dim);
\n+
275 return instance()._rule(gt,p,qt);
\n+
276 }
\n+
\n+
277 };
\n+
\n+
278
\n+
279} // end namespace Dune
\n+
280
\n+
281#define DUNE_INCLUDING_IMPLEMENTATION
\n+
282
\n+
283// 0d rules
\n+
284#include "quadraturerules/pointquadrature.hh"
\n+
285// 1d rules
\n+
286#include "quadraturerules/gausslobattoquadrature.hh"
\n+
287#include "quadraturerules/gaussquadrature.hh"
\n+
288#include "quadraturerules/gaussradauleftquadrature.hh"
\n+
289#include "quadraturerules/gaussradaurightquadrature.hh"
\n+
290#include "quadraturerules/jacobi1quadrature.hh"
\n+
291#include "quadraturerules/jacobi2quadrature.hh"
\n+
292#include "quadraturerules/jacobiNquadrature.hh"
\n+
293// 3d rules
\n+
294#include "quadraturerules/prismquadrature.hh"
\n+
295// general rules
\n+
296#include "quadraturerules/simplexquadrature.hh"
\n+
297#include "quadraturerules/tensorproductquadrature.hh"
\n+
298
\n+
299#undef DUNE_INCLUDING_IMPLEMENTATION
\n+
300
\n+
301namespace Dune {
\n+
302
\n+
309 template<typename ctype, int dim>
\n+
\n+\n+
311 private:
\n+
312 friend class QuadratureRules<ctype, dim>;
\n+
313 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
\n+
314 {
\n+
315 return TensorProductQuadratureRule<ctype,dim>::maxOrder(t.id(), qt);
\n+
316 }
\n+
317 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int p, QuadratureType::Enum qt)
\n+
318 {
\n+
319 return TensorProductQuadratureRule<ctype,dim>(t.id(), p, qt);
\n+
320 }
\n+
321 };
\n+
\n+
322
\n+
323 template<typename ctype>
\n+
\n+
324 class QuadratureRuleFactory<ctype, 0> {
\n+
325 private:
\n+
326 constexpr static int dim = 0;
\n+
327 friend class QuadratureRules<ctype, dim>;
\n+
328 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum)
\n+
329 {
\n+
330 if (t.isVertex())
\n+
331 {
\n+
332 return std::numeric_limits<int>::max();
\n+
333 }
\n+
334 DUNE_THROW(Exception, "Unknown GeometryType");
\n+
335 }
\n+
336 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int , QuadratureType::Enum)
\n+
337 {
\n+
338 if (t.isVertex())
\n+
339 {
\n+
340 return PointQuadratureRule<ctype>();
\n+
341 }
\n+
342 DUNE_THROW(Exception, "Unknown GeometryType");
\n+
343 }
\n+
344 };
\n+
\n+
345
\n+
346 template<typename ctype>
\n+
\n+
347 class QuadratureRuleFactory<ctype, 1> {
\n+
348 private:
\n+
349 constexpr static int dim = 1;
\n+
350 friend class QuadratureRules<ctype, dim>;
\n+
351 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
\n+
352 {
\n+
353 if (t.isLine())
\n+
354 {
\n+
355 switch (qt) {
\n+\n+
357 return GaussQuadratureRule1D<ctype>::highest_order;
\n+\n+
359 return Jacobi1QuadratureRule1D<ctype>::highest_order;
\n+\n+
361 return Jacobi2QuadratureRule1D<ctype>::highest_order;
\n+\n+
363 return GaussLobattoQuadratureRule1D<ctype>::highest_order;
\n+\n+
365 return JacobiNQuadratureRule1D<ctype>::maxOrder();
\n+\n+
367 return GaussRadauLeftQuadratureRule1D<ctype>::highest_order;
\n+\n+
369 return GaussRadauRightQuadratureRule1D<ctype>::highest_order;
\n+
370 default :
\n+
371 DUNE_THROW(Exception, "Unknown QuadratureType");
\n+
372 }
\n+
373 }
\n+
374 DUNE_THROW(Exception, "Unknown GeometryType");
\n+
375 }
\n+
376 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int p, QuadratureType::Enum qt)
\n+
377 {
\n+
378 if (t.isLine())
\n+
379 {
\n+
380 switch (qt) {
\n+\n+
382 return GaussQuadratureRule1D<ctype>(p);
\n+\n+
384 return Jacobi1QuadratureRule1D<ctype>(p);
\n+\n+
386 return Jacobi2QuadratureRule1D<ctype>(p);
\n+\n+
388 return GaussLobattoQuadratureRule1D<ctype>(p);
\n+\n+
390 return JacobiNQuadratureRule1D<ctype>(p);
\n+\n+
392 return GaussRadauLeftQuadratureRule1D<ctype>(p);
\n+\n+
394 return GaussRadauRightQuadratureRule1D<ctype>(p);
\n+
395 default :
\n+
396 DUNE_THROW(Exception, "Unknown QuadratureType");
\n+
397 }
\n+
398 }
\n+
399 DUNE_THROW(Exception, "Unknown GeometryType");
\n+
400 }
\n+
401 };
\n+
\n+
402
\n+
403 template<typename ctype>
\n+
\n+
404 class QuadratureRuleFactory<ctype, 2> {
\n+
405 private:
\n+
406 constexpr static int dim = 2;
\n+
407 friend class QuadratureRules<ctype, dim>;
\n+
408 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
\n+
409 {
\n+
410 unsigned order =
\n+
411 TensorProductQuadratureRule<ctype,dim>::maxOrder(t.id(), qt);
\n+
412 if (t.isSimplex())
\n+
413 order = std::max
\n+
414 (order, unsigned(SimplexQuadratureRule<ctype,dim>::highest_order));
\n+
415 return order;
\n+
416 }
\n+
417 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int p, QuadratureType::Enum qt)
\n+
418 {
\n+
419 if (t.isSimplex()
\n+\n+
421 && p <= SimplexQuadratureRule<ctype,dim>::highest_order)
\n+
422 {
\n+
423 return SimplexQuadratureRule<ctype,dim>(p);
\n+
424 }
\n+
425 return TensorProductQuadratureRule<ctype,dim>(t.id(), p, qt);
\n+
426 }
\n+
427 };
\n+
\n+
428
\n+
429 template<typename ctype>
\n+
\n+
430 class QuadratureRuleFactory<ctype, 3> {
\n+
431 private:
\n+
432 constexpr static int dim = 3;
\n+
433 friend class QuadratureRules<ctype, dim>;
\n+
434 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
\n+
435 {
\n+
436 unsigned order =
\n+
437 TensorProductQuadratureRule<ctype,dim>::maxOrder(t.id(), qt);
\n+
438 if (t.isSimplex())
\n+
439 order = std::max
\n+
440 (order, unsigned(SimplexQuadratureRule<ctype,dim>::highest_order));
\n+
441 if (t.isPrism())
\n+
442 order = std::max
\n+
443 (order, unsigned(PrismQuadratureRule<ctype,dim>::highest_order));
\n+
444 return order;
\n+
445 }
\n+
446 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int p, QuadratureType::Enum qt)
\n+
447 {
\n+
448
\n+
449 if (t.isSimplex()
\n+\n+
451 && p <= SimplexQuadratureRule<ctype,dim>::highest_order)
\n+
452 {
\n+
453 return SimplexQuadratureRule<ctype,dim>(p);
\n+
454 }
\n+
455 if (t.isPrism()
\n+\n+
457 && p <= PrismQuadratureRule<ctype,dim>::highest_order)
\n+
458 {
\n+
459 return PrismQuadratureRule<ctype,dim>(p);
\n+
460 }
\n+
461 return TensorProductQuadratureRule<ctype,dim>(t.id(), p, qt);
\n+
462 }
\n+
463 };
\n+
\n+
464
\n+
465#ifndef DUNE_NO_EXTERN_QUADRATURERULES
\n+
466 extern template class GaussLobattoQuadratureRule<double, 1>;
\n+
467 extern template class GaussQuadratureRule<double, 1>;
\n+
468 extern template class GaussRadauLeftQuadratureRule<double, 1>;
\n+
469 extern template class GaussRadauRightQuadratureRule<double, 1>;
\n+
470 extern template class Jacobi1QuadratureRule<double, 1>;
\n+
471 extern template class Jacobi2QuadratureRule<double, 1>;
\n+
472 extern template class JacobiNQuadratureRule<double, 1>;
\n+
473 extern template class PrismQuadratureRule<double, 3>;
\n+
474 extern template class SimplexQuadratureRule<double, 2>;
\n+
475 extern template class SimplexQuadratureRule<double, 3>;
\n+
476#endif // !DUNE_NO_EXTERN_QUADRATURERULES
\n+
477
\n+
478} // end namespace
\n+
479
\n+
480#endif // DUNE_GEOMETRY_QUADRATURERULES_HH
\n+
Helper classes to provide indices for geometrytypes for use in a vector.
\n+
A unique label for each type of element that can occur in a grid.
\n
Definition affinegeometry.hh:21
\n+
Enum
Definition quadraturerules.hh:82
\n+
@ GaussJacobi_n_0
Gauss-Legendre rules with .
Definition quadraturerules.hh:119
\n+
@ GaussJacobi_2_0
Gauss-Legendre rules with .
Definition quadraturerules.hh:106
\n+
@ GaussRadauRight
Gauss-Radau rules including the right endpoint.
Definition quadraturerules.hh:144
\n+
@ GaussJacobi_1_0
Gauss-Jacobi rules with .
Definition quadraturerules.hh:99
\n+
@ size
Definition quadraturerules.hh:145
\n+
@ GaussLobatto
Gauss-Lobatto rules.
Definition quadraturerules.hh:127
\n+
@ GaussRadauLeft
Gauss-Radau rules including the left endpoint.
Definition quadraturerules.hh:135
\n+
@ GaussLegendre
Gauss-Legendre rules (default)
Definition quadraturerules.hh:92
\n+
Exception thrown if a desired QuadratureRule is not available, because the requested order is to high...
Definition quadraturerules.hh:36
\n+
Single evaluation point in a quadrature rule.
Definition quadraturerules.hh:44
\n+
const Vector & position() const
return local coordinates of integration point i
Definition quadraturerules.hh:62
\n+
Dune::FieldVector< ct, dim > Vector
Type used for the position of a quadrature point.
Definition quadraturerules.hh:53
\n+
ct Field
Number type used for coordinates and quadrature weights.
Definition quadraturerules.hh:50
\n+
const ct & weight() const
return weight associated with integration point i
Definition quadraturerules.hh:68
\n+
ct weight_
Definition quadraturerules.hh:75
\n+
static constexpr int dimension
Dimension of the integration domain.
Definition quadraturerules.hh:47
\n+
QuadraturePoint(const Vector &x, ct w)
set up quadrature of given order in d dimensions
Definition quadraturerules.hh:56
\n+
FieldVector< ct, dim > local
Definition quadraturerules.hh:74
\n+
Abstract base class for quadrature rules.
Definition quadraturerules.hh:154
\n+
virtual ~QuadratureRule()
Definition quadraturerules.hh:181
\n+
static constexpr int d
The space dimension.
Definition quadraturerules.hh:171
\n+
virtual GeometryType type() const
return type of element
Definition quadraturerules.hh:180
\n+
int delivered_order
Definition quadraturerules.hh:189
\n+
QuadratureRule(GeometryType t, int order)
Constructor for a given geometry type and a given quadrature order.
Definition quadraturerules.hh:168
\n+
GeometryType geometry_type
Definition quadraturerules.hh:188
\n+
ct CoordType
The type used for coordinates.
Definition quadraturerules.hh:174
\n+
QuadratureRule()
Default constructor.
Definition quadraturerules.hh:161
\n+
virtual int order() const
return order
Definition quadraturerules.hh:177
\n+
QuadratureRule(GeometryType t)
Constructor for a given geometry type. Leaves the quadrature order invalid
Definition quadraturerules.hh:165
\n+
std::vector< QuadraturePoint< ct, dim > >::const_iterator iterator
Definition quadraturerules.hh:185
\n+
Factory class for creation of quadrature rules, depending on GeometryType, order and QuadratureType.
Definition quadraturerules.hh:310
\n+
A container for all quadrature rules of dimension dim
Definition quadraturerules.hh:200
\n+
static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt=QuadratureType::GaussLegendre)
maximum quadrature order for given geometry type and quadrature type
Definition quadraturerules.hh:259
\n+
static const QuadratureRule & rule(const GeometryType::BasicType t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre)
select the appropriate QuadratureRule for GeometryType t and order p
Definition quadraturerules.hh:272
\n+
static const QuadratureRule & rule(const GeometryType &t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre)
select the appropriate QuadratureRule for GeometryType t and order p
Definition quadraturerules.hh:266
\n
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n-
constexpr Id toId() const
Create an Id representation of this GeometryType.
Definition type.hh:222
\n+
constexpr bool isPrism() const
Return true if entity is a prism.
Definition type.hh:321
\n+
constexpr bool isVertex() const
Return true if entity is a vertex.
Definition type.hh:291
\n
constexpr unsigned int dim() const
Return dimension of the type.
Definition type.hh:372
\n+
BasicType
Each entity can be tagged by one of these basic types plus its space dimension.
Definition type.hh:132
\n+
constexpr bool isLine() const
Return true if entity is a line segment.
Definition type.hh:296
\n
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
\n-
constexpr bool isNone() const
Return true if entity is a singular of any dimension.
Definition type.hh:367
\n-
Compute per-dimension indices for geometry types.
Definition typeindex.hh:25
\n+
constexpr bool isSimplex() const
Return true if entity is a simplex of any dimension.
Definition type.hh:331
\n
static constexpr std::size_t size(std::size_t dim)
Compute total number of geometry types for the given dimension.
Definition typeindex.hh:61
\n-
static constexpr GeometryType type(std::size_t dim, std::size_t index)
compute the geometry type for the given local index and dimension
Definition typeindex.hh:79
\n
static constexpr std::size_t index(const GeometryType &gt)
Compute the index for the given geometry type within its dimension.
Definition typeindex.hh:73
\n-
Compute indices for geometry types, taking the dimension into account.
Definition typeindex.hh:90
\n-
static constexpr std::size_t index(const GeometryType &gt)
Compute the index for the given geometry type over all dimensions.
Definition typeindex.hh:138
\n-
static constexpr std::size_t offset(std::size_t dim)
Compute the starting index for a given dimension including irregular geometry types.
Definition typeindex.hh:113
\n-
static constexpr std::size_t size(std::size_t maxdim)
Compute total number of geometry types up to and including the given dimension.
Definition typeindex.hh:125
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,183 +1,587 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-typeindex.hh\n+quadraturerules.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_TYPEINDEX_HH\n-6#define DUNE_GEOMETRY_TYPEINDEX_HH\n-7\n-14#include \n+5\n+6#ifndef DUNE_GEOMETRY_QUADRATURERULES_HH\n+7#define DUNE_GEOMETRY_QUADRATURERULES_HH\n+8\n+9#include \n+10#include \n+11#include \n+12#include \n+13#include \n+14#include \n 15\n-16#include \n-17#include \n-18\n-19#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n-20\n-21namespace _\bD_\bu_\bn_\be\n-22{\n-_\b2_\b4 class _\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n-25 {\n-32 inline static constexpr std::size_t regular_size(std::size_t dim)\n-33 {\n-34 // The following expression is derived from the expression for\n-35 // GlobalGeometryTypeIndex::regular_offset(). Subtracting\n-36 // regular_offset(dim+1)-regular_offset(dim) we get:\n-37 //\n-38 // ((1 << dim+1) >> 1) - ((1 << dim) >> 1)\n-39 //\n-40 // We always have\n-41 //\n-42 // dim >= 0,\n-43 //\n-44 // so\n-45 //\n-46 // (1 << dim+1) >= 2 and (1 << dim+2) % 2 == 0.\n-47 //\n-48 // So if we apply a single right-shift to that, we will never lose any\n-49 // set bits, thus\n-50 //\n-51 // ((1 << dim+1) >> 1) == (1 << dim)\n-52 return (1 << dim) - ((1 << dim) >> 1);\n-53 }\n+16#include \n+17#include \n+18#include \n+19#include \n+20#include \n+21\n+22#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+23#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+24\n+30namespace _\bD_\bu_\bn_\be {\n+31\n+_\b3_\b6 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bO_\br_\bd_\be_\br_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be : public NotImplemented {};\n+37\n+43 template\n+_\b4_\b4 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt {\n+45 public:\n+_\b4_\b7 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dim;\n+48\n+_\b5_\b0 typedef ct _\bF_\bi_\be_\bl_\bd;\n+51\n+_\b5_\b3 typedef Dune::FieldVector _\bV_\be_\bc_\bt_\bo_\br;\n 54\n-55 public:\n-_\b6_\b1 inline static constexpr std::size_t _\bs_\bi_\bz_\be(std::size_t dim)\n-62 {\n-63 // one for \"none\"\n-64 return regular_size(dim) + 1;\n+_\b5_\b6 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt (const _\bV_\be_\bc_\bt_\bo_\br& x, ct w) : _\bl_\bo_\bc_\ba_\bl(x)\n+57 {\n+58 _\bw_\be_\bi_\bg_\bh_\bt_\b_ = w;\n+59 }\n+60\n+_\b6_\b2 const _\bV_\be_\bc_\bt_\bo_\br& _\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn () const\n+63 {\n+64 return _\bl_\bo_\bc_\ba_\bl;\n 65 }\n 66\n-_\b7_\b3 inline static constexpr std::size_t _\bi_\bn_\bd_\be_\bx(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >)\n-74 {\n-75 return gt._\bi_\bs_\bN_\bo_\bn_\be() ? regular_size(gt._\bd_\bi_\bm()) : (gt._\bi_\bd() >> 1);\n-76 }\n+_\b6_\b8 const ct &_\bw_\be_\bi_\bg_\bh_\bt () const\n+69 {\n+70 return _\bw_\be_\bi_\bg_\bh_\bt_\b_;\n+71 }\n+72\n+73 protected:\n+_\b7_\b4 FieldVector _\bl_\bo_\bc_\ba_\bl;\n+_\b7_\b5 ct _\bw_\be_\bi_\bg_\bh_\bt_\b_;\n+76 };\n 77\n-_\b7_\b9 inline static constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bt_\by_\bp_\be(std::size_t dim, std::size_t\n-_\bi_\bn_\bd_\be_\bx) {\n-80 return (_\bi_\bn_\bd_\be_\bx == regular_size(dim)) ?\n-81 GeometryTypes::none(dim) :\n-82 // the cast to unsigned makes sure this is interpreted as the topology\n-83 // ID constructor\n-84 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(static_cast< unsigned int >(_\bi_\bn_\bd_\be_\bx << 1), dim);\n-85 }\n-86 };\n-87\n-_\b8_\b9 class _\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n-90 {\n-98 inline static constexpr std::size_t regular_offset(std::size_t dim)\n-99 {\n-100 // The number of regular geometry types in a given dimension is\n-101 // 2^(dim-1). For dim==0 this would yield 1/2 geometry types (which is\n-102 // obviously bogus, dim==0 has one regular geometry type, the point).\n-103 // The following expression relies on 1 >> 1 == 0 to treat dim==0\n-104 // specially.\n-105 return (1 << dim) >> 1;\n-106 }\n+_\b8_\b1 namespace QuadratureType {\n+_\b8_\b2 enum _\bE_\bn_\bu_\bm {\n+_\b9_\b2 _\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be = 0,\n+93\n+_\b9_\b9 _\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0 = 1,\n+100\n+_\b1_\b0_\b6 _\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0 = 2,\n 107\n-108 public:\n-_\b1_\b1_\b3 inline static constexpr std::size_t _\bo_\bf_\bf_\bs_\be_\bt(std::size_t dim)\n-114 {\n-115 // dim times \"none\"\n-116 return regular_offset(dim) + dim;\n-117 }\n-118\n-_\b1_\b2_\b5 inline static constexpr std::size_t _\bs_\bi_\bz_\be(std::size_t maxdim)\n-126 {\n-127 return _\bo_\bf_\bf_\bs_\be_\bt(maxdim+1);\n-128 }\n-129\n-_\b1_\b3_\b8 inline static constexpr std::size_t _\bi_\bn_\bd_\be_\bx(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >)\n-139 {\n-140 return _\bo_\bf_\bf_\bs_\be_\bt(gt._\bd_\bi_\bm()) + _\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx(gt);\n-141 }\n-142 };\n-143\n-144 namespace Impl {\n-145\n-146 // Map a dynamic GeometryType to a static integral_constant\n-147 template\n-148 static auto toGeometryTypeIdConstant(const GeometryType& gt, F&& f) {\n-149 // Transform LocalGeometryTypeIndex to GeometryType::Id\n-150 auto callWithId = [&](auto index) {\n-151 static constexpr auto id = _\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bt_\by_\bp_\be(dim, decltype\n-(index)::value)._\bt_\bo_\bI_\bd();\n-152 return f(std::integral_constant{});\n-153 };\n-154 // switchCases needs a fallback to determine the return type.\n-155 auto fallBack = [&]() { return callWithId(Dune::Indices::_0); };\n-156 // Iterate over all _regular_ GeometryType indices for given dimension\n-157 auto allIndices = std::make_index_sequence<_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n-(dim)-1>{};\n-158 return Dune::Hybrid::switchCases(allIndices, _\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx\n-(gt), callWithId, fallBack);\n-159 }\n-160\n-161 } // namespace Impl\n-162} // namespace Dune\n-163\n-164#endif // DUNE_GEOMETRY_TYPEINDEX_HH\n+_\b1_\b1_\b9 _\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 = 3,\n+120\n+_\b1_\b2_\b7 _\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo = 4,\n+128\n+_\b1_\b3_\b5 _\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt = 5,\n+136\n+_\b1_\b4_\b4 _\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt = 6,\n+145 _\bs_\bi_\bz_\be\n+_\b1_\b4_\b6 };\n+147 }\n+148\n+152 template\n+_\b1_\b5_\b3 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be : public std::vector >\n+154 {\n+155 public:\n+_\b1_\b6_\b1 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be() : _\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br(-1) {}\n+162\n+163 protected:\n+_\b1_\b6_\b5 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be(_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be t) : _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be(t), _\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br(-1) {}\n+166\n+_\b1_\b6_\b8 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be(_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be t, int _\bo_\br_\bd_\be_\br) : _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be(t),\n+_\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br(_\bo_\br_\bd_\be_\br) {}\n+169 public:\n+_\b1_\b7_\b1 constexpr static int _\bd = dim;\n+172\n+_\b1_\b7_\b4 typedef ct _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be;\n+175\n+_\b1_\b7_\b7 virtual int _\bo_\br_\bd_\be_\br () const { return _\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br; }\n+178\n+_\b1_\b8_\b0 virtual _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bt_\by_\bp_\be () const { return _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be; }\n+_\b1_\b8_\b1 virtual _\b~_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be(){}\n+182\n+_\b1_\b8_\b5 typedef typename std::vector >::const_iterator\n+_\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+186\n+187 protected:\n+_\b1_\b8_\b8 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be;\n+_\b1_\b8_\b9 int _\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br;\n+190 };\n+191\n+192 // Forward declaration of the factory class,\n+193 // needed internally by the QuadratureRules container class.\n+194 template class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by;\n+195\n+199 template\n+_\b2_\b0_\b0 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs {\n+201\n+203 using _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be = _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b>;\n+204\n+205 // indexed by quadrature order\n+206 using QuadratureOrderVector = std::vector >;\n+207\n+208 // indexed by geometry type\n+209 using GeometryTypeVector = std::vector >;\n+210\n+211 // indexed by quadrature type enum\n+212 using QuadratureCacheVector = std::vector >;\n+213\n+215 DUNE_EXPORT const _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be& _rule(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n+_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt=_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be) const\n+216 {\n+217 assert(t._\bd_\bi_\bm()==dim);\n+218\n+219 DUNE_ASSERT_CALL_ONCE();\n+220\n+221 static QuadratureCacheVector quadratureCache(_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bz_\be);\n+222\n+223 auto& [ onceFlagQuadratureType, geometryTypes ] = quadratureCache[qt];\n+224 // initialize geometry types for this quadrature type once\n+225 std::call_once(onceFlagQuadratureType, [&types = geometryTypes]{\n+226 types = GeometryTypeVector(_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be(dim));\n+227 });\n+228\n+229 auto& [ onceFlagGeometryType, quadratureOrders ] = geometryTypes\n+[_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx(t)];\n+230 // initialize quadrature orders for this geometry type and quadrature type\n+once\n+231 std::call_once(onceFlagGeometryType, [&, &orders = quadratureOrders]{\n+232 // we only need one quadrature rule for points, not maxint\n+233 const auto numRules = dim == 0 ? 1 : _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bc_\bt_\by_\bp_\be_\b,_\bd_\bi_\bm_\b>_\b:_\b:\n+_\bm_\ba_\bx_\bO_\br_\bd_\be_\br(t, qt)+1;\n+234 orders = QuadratureOrderVector(numRules);\n+235 });\n+236\n+237 // we only have one quadrature rule for points\n+238 auto& [ onceFlagQuadratureOrder, quadratureRule ] = quadratureOrders[dim ==\n+0 ? 0 : p];\n+239 // initialize quadrature rule once\n+240 std::call_once(onceFlagQuadratureOrder, [&, &_\br_\bu_\bl_\be = quadratureRule]{\n+241 _\br_\bu_\bl_\be = _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bc_\bt_\by_\bp_\be_\b,_\bd_\bi_\bm_\b>_\b:_\b:_\br_\bu_\bl_\be(t, p, qt);\n+242 });\n+243\n+244 return quadratureRule;\n+245 }\n+246\n+248 DUNE_EXPORT static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs& instance()\n+249 {\n+250 static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs instance;\n+251 return instance;\n+252 }\n+253\n+255 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs () = default;\n+256 public:\n+258 static unsigned\n+_\b2_\b5_\b9 _\bm_\ba_\bx_\bO_\br_\bd_\be_\br(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t,\n+260 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt=_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be)\n+261 {\n+262 return _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bc_\bt_\by_\bp_\be_\b,_\bd_\bi_\bm_\b>_\b:_\b:_\bm_\ba_\bx_\bO_\br_\bd_\be_\br(t,qt);\n+263 }\n+264\n+_\b2_\b6_\b6 static const _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be& _\br_\bu_\bl_\be(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n+_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt=_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be)\n+267 {\n+268 return instance()._rule(t,p,qt);\n+269 }\n+270\n+_\b2_\b7_\b2 static const _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be& _\br_\bu_\bl_\be(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bc_\bT_\by_\bp_\be t, int p,\n+_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt=_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be)\n+273 {\n+274 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt(t,dim);\n+275 return instance()._rule(gt,p,qt);\n+276 }\n+277 };\n+278\n+279} // end namespace Dune\n+280\n+_\b2_\b8_\b1#define DUNE_INCLUDING_IMPLEMENTATION\n+282\n+283// 0d rules\n+284#include \"quadraturerules/pointquadrature.hh\"\n+285// 1d rules\n+286#include \"quadraturerules/gausslobattoquadrature.hh\"\n+287#include \"quadraturerules/gaussquadrature.hh\"\n+288#include \"quadraturerules/gaussradauleftquadrature.hh\"\n+289#include \"quadraturerules/gaussradaurightquadrature.hh\"\n+290#include \"quadraturerules/jacobi1quadrature.hh\"\n+291#include \"quadraturerules/jacobi2quadrature.hh\"\n+292#include \"quadraturerules/jacobiNquadrature.hh\"\n+293// 3d rules\n+294#include \"quadraturerules/prismquadrature.hh\"\n+295// general rules\n+296#include \"quadraturerules/simplexquadrature.hh\"\n+297#include \"quadraturerules/tensorproductquadrature.hh\"\n+298\n+299#undef DUNE_INCLUDING_IMPLEMENTATION\n+300\n+301namespace _\bD_\bu_\bn_\be {\n+302\n+309 template\n+_\b3_\b1_\b0 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n+311 private:\n+312 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n+313 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n+314 {\n+315 return TensorProductQuadratureRule::maxOrder(t._\bi_\bd(), qt);\n+316 }\n+317 static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b> rule(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n+_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n+318 {\n+319 return TensorProductQuadratureRule(t._\bi_\bd(), p, qt);\n+320 }\n+321 };\n+322\n+323 template\n+_\b3_\b2_\b4 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n+325 private:\n+_\b3_\b2_\b6 constexpr static int dim = 0;\n+327 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n+328 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm)\n+329 {\n+330 if (t._\bi_\bs_\bV_\be_\br_\bt_\be_\bx())\n+331 {\n+332 return std::numeric_limits::max();\n+333 }\n+334 DUNE_THROW(Exception, \"Unknown GeometryType\");\n+335 }\n+336 static QuadratureRule rule(const GeometryType& t, int ,\n+_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm)\n+337 {\n+338 if (t.isVertex())\n+339 {\n+340 return PointQuadratureRule();\n+341 }\n+342 DUNE_THROW(Exception, \"Unknown GeometryType\");\n+343 }\n+344 };\n+345\n+346 template\n+_\b3_\b4_\b7 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n+348 private:\n+_\b3_\b4_\b9 constexpr static int dim = 1;\n+350 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n+351 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n+352 {\n+353 if (t._\bi_\bs_\bL_\bi_\bn_\be())\n+354 {\n+355 switch (qt) {\n+356 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be :\n+357 return GaussQuadratureRule1D::highest_order;\n+358 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0 :\n+359 return Jacobi1QuadratureRule1D::highest_order;\n+360 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0 :\n+361 return Jacobi2QuadratureRule1D::highest_order;\n+362 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo :\n+363 return GaussLobattoQuadratureRule1D::highest_order;\n+364 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 :\n+365 return JacobiNQuadratureRule1D::maxOrder();\n+366 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt :\n+367 return GaussRadauLeftQuadratureRule1D::highest_order;\n+368 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt :\n+369 return GaussRadauRightQuadratureRule1D::highest_order;\n+370 default :\n+371 DUNE_THROW(Exception, \"Unknown QuadratureType\");\n+372 }\n+373 }\n+374 DUNE_THROW(Exception, \"Unknown GeometryType\");\n+375 }\n+376 static QuadratureRule rule(const GeometryType& t, int p,\n+_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n+377 {\n+378 if (t.isLine())\n+379 {\n+380 switch (qt) {\n+381 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be :\n+382 return GaussQuadratureRule1D(p);\n+383 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0 :\n+384 return Jacobi1QuadratureRule1D(p);\n+385 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0 :\n+386 return Jacobi2QuadratureRule1D(p);\n+387 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo :\n+388 return GaussLobattoQuadratureRule1D(p);\n+389 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 :\n+390 return JacobiNQuadratureRule1D(p);\n+391 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt :\n+392 return GaussRadauLeftQuadratureRule1D(p);\n+393 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt :\n+394 return GaussRadauRightQuadratureRule1D(p);\n+395 default :\n+396 DUNE_THROW(Exception, \"Unknown QuadratureType\");\n+397 }\n+398 }\n+399 DUNE_THROW(Exception, \"Unknown GeometryType\");\n+400 }\n+401 };\n+402\n+403 template\n+_\b4_\b0_\b4 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n+405 private:\n+_\b4_\b0_\b6 constexpr static int dim = 2;\n+407 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n+408 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n+409 {\n+410 unsigned order =\n+411 TensorProductQuadratureRule::maxOrder(t._\bi_\bd(), qt);\n+412 if (t._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx())\n+413 order = std::max\n+414 (order, unsigned(SimplexQuadratureRule::highest_order));\n+415 return order;\n+416 }\n+417 static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b> rule(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n+_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n+418 {\n+419 if (t._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx()\n+420 && ( qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be || qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:\n+_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 )\n+421 && p <= SimplexQuadratureRule::highest_order)\n+422 {\n+423 return SimplexQuadratureRule(p);\n+424 }\n+425 return TensorProductQuadratureRule(t._\bi_\bd(), p, qt);\n+426 }\n+427 };\n+428\n+429 template\n+_\b4_\b3_\b0 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n+431 private:\n+_\b4_\b3_\b2 constexpr static int dim = 3;\n+433 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n+434 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n+435 {\n+436 unsigned order =\n+437 TensorProductQuadratureRule::maxOrder(t._\bi_\bd(), qt);\n+438 if (t._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx())\n+439 order = std::max\n+440 (order, unsigned(SimplexQuadratureRule::highest_order));\n+441 if (t._\bi_\bs_\bP_\br_\bi_\bs_\bm())\n+442 order = std::max\n+443 (order, unsigned(PrismQuadratureRule::highest_order));\n+444 return order;\n+445 }\n+446 static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b> rule(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n+_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n+447 {\n+448\n+449 if (t._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx()\n+450 && ( qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be || qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:\n+_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 )\n+451 && p <= SimplexQuadratureRule::highest_order)\n+452 {\n+453 return SimplexQuadratureRule(p);\n+454 }\n+455 if (t._\bi_\bs_\bP_\br_\bi_\bs_\bm()\n+456 && qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be\n+457 && p <= PrismQuadratureRule::highest_order)\n+458 {\n+459 return PrismQuadratureRule(p);\n+460 }\n+461 return TensorProductQuadratureRule(t._\bi_\bd(), p, qt);\n+462 }\n+463 };\n+464\n+465#ifndef DUNE_NO_EXTERN_QUADRATURERULES\n+466 extern template class GaussLobattoQuadratureRule;\n+467 extern template class GaussQuadratureRule;\n+468 extern template class GaussRadauLeftQuadratureRule;\n+469 extern template class GaussRadauRightQuadratureRule;\n+470 extern template class Jacobi1QuadratureRule;\n+471 extern template class Jacobi2QuadratureRule;\n+472 extern template class JacobiNQuadratureRule;\n+473 extern template class PrismQuadratureRule;\n+474 extern template class SimplexQuadratureRule;\n+_\b4_\b7_\b5 extern template class SimplexQuadratureRule;\n+476#endif // !DUNE_NO_EXTERN_QUADRATURERULES\n+477\n+478} // end namespace\n+479\n+480#endif // DUNE_GEOMETRY_QUADRATURERULES_HH\n+_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n+Helper classes to provide indices for geometrytypes for use in a vector.\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm\n+Enum\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:82\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0\n+@ GaussJacobi_n_0\n+Gauss-Legendre rules with .\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:119\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0\n+@ GaussJacobi_2_0\n+Gauss-Legendre rules with .\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:106\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt\n+@ GaussRadauRight\n+Gauss-Radau rules including the right endpoint.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:144\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0\n+@ GaussJacobi_1_0\n+Gauss-Jacobi rules with .\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:99\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bz_\be\n+@ size\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:145\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo\n+@ GaussLobatto\n+Gauss-Lobatto rules.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:127\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt\n+@ GaussRadauLeft\n+Gauss-Radau rules including the left endpoint.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:135\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be\n+@ GaussLegendre\n+Gauss-Legendre rules (default)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:92\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bO_\br_\bd_\be_\br_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be\n+Exception thrown if a desired QuadratureRule is not available, because the\n+requested order is to high...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt\n+Single evaluation point in a quadrature rule.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:44\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn\n+const Vector & position() const\n+return local coordinates of integration point i\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n+Dune::FieldVector< ct, dim > Vector\n+Type used for the position of a quadrature point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:53\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bF_\bi_\be_\bl_\bd\n+ct Field\n+Number type used for coordinates and quadrature weights.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt\n+const ct & weight() const\n+return weight associated with integration point i\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\b_\n+ct weight_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static constexpr int dimension\n+Dimension of the integration domain.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:47\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt\n+QuadraturePoint(const Vector &x, ct w)\n+set up quadrature of given order in d dimensions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:56\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl\n+FieldVector< ct, dim > local\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n+Abstract base class for quadrature rules.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:154\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\b~_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n+virtual ~QuadratureRule()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bd\n+static constexpr int d\n+The space dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:171\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bt_\by_\bp_\be\n+virtual GeometryType type() const\n+return type of element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:180\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br\n+int delivered_order\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:189\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n+QuadratureRule(GeometryType t, int order)\n+Constructor for a given geometry type and a given quadrature order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:168\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be\n+GeometryType geometry_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:188\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be\n+ct CoordType\n+The type used for coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:174\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n+QuadratureRule()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:161\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bo_\br_\bd_\be_\br\n+virtual int order() const\n+return order\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:177\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n+QuadratureRule(GeometryType t)\n+Constructor for a given geometry type. Leaves the quadrature order invalid\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+std::vector< QuadraturePoint< ct, dim > >::const_iterator iterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:185\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by\n+Factory class for creation of quadrature rules, depending on GeometryType,\n+order and QuadratureType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:310\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs\n+A container for all quadrature rules of dimension dim\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:200\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs_\b:_\b:_\bm_\ba_\bx_\bO_\br_\bd_\be_\br\n+static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum\n+qt=QuadratureType::GaussLegendre)\n+maximum quadrature order for given geometry type and quadrature type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:259\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs_\b:_\b:_\br_\bu_\bl_\be\n+static const QuadratureRule & rule(const GeometryType::BasicType t, int p,\n+QuadratureType::Enum qt=QuadratureType::GaussLegendre)\n+select the appropriate QuadratureRule for GeometryType t and order p\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:272\n+_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs_\b:_\b:_\br_\bu_\bl_\be\n+static const QuadratureRule & rule(const GeometryType &t, int p,\n+QuadratureType::Enum qt=QuadratureType::GaussLegendre)\n+select the appropriate QuadratureRule for GeometryType t and order p\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:266\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n Unique label for each type of entities that can occur in DUNE grids.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bt_\bo_\bI_\bd\n-constexpr Id toId() const\n-Create an Id representation of this GeometryType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:222\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\br_\bi_\bs_\bm\n+constexpr bool isPrism() const\n+Return true if entity is a prism.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:321\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bV_\be_\br_\bt_\be_\bx\n+constexpr bool isVertex() const\n+Return true if entity is a vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:291\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bd_\bi_\bm\n constexpr unsigned int dim() const\n Return dimension of the type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:372\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bc_\bT_\by_\bp_\be\n+BasicType\n+Each entity can be tagged by one of these basic types plus its space dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:132\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bL_\bi_\bn_\be\n+constexpr bool isLine() const\n+Return true if entity is a line segment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:296\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n constexpr unsigned int id() const\n Return the topology id of the type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bN_\bo_\bn_\be\n-constexpr bool isNone() const\n-Return true if entity is a singular of any dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:367\n-_\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n-Compute per-dimension indices for geometry types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:25\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx\n+constexpr bool isSimplex() const\n+Return true if entity is a simplex of any dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:331\n _\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n static constexpr std::size_t size(std::size_t dim)\n Compute total number of geometry types for the given dimension.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bt_\by_\bp_\be\n-static constexpr GeometryType type(std::size_t dim, std::size_t index)\n-compute the geometry type for the given local index and dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:79\n _\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx\n static constexpr std::size_t index(const GeometryType >)\n Compute the index for the given geometry type within its dimension.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n-Compute indices for geometry types, taking the dimension into account.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:90\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx\n-static constexpr std::size_t index(const GeometryType >)\n-Compute the index for the given geometry type over all dimensions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:138\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bo_\bf_\bf_\bs_\be_\bt\n-static constexpr std::size_t offset(std::size_t dim)\n-Compute the starting index for a given dimension including irregular geometry\n-types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:113\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr std::size_t size(std::size_t maxdim)\n-Compute total number of geometry types up to and including the given dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:125\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00182.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00182.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: generalvertexorder.hh File Reference\n+dune-geometry: virtualrefinement.hh File Reference\n \n \n \n \n \n \n \n@@ -73,49 +73,51 @@\n
\n
\n
\n \n-
generalvertexorder.hh File Reference
\n+
virtualrefinement.hh File Reference
\n
\n
\n-
#include <algorithm>
\n-#include <cassert>
\n-#include <cstddef>
\n-#include <iterator>
\n-#include <vector>
\n-#include <dune/common/iteratorfacades.hh>
\n-#include "type.hh"
\n-#include <dune/geometry/referenceelements.hh>
\n+\n+

This file contains the virtual wrapper around refinement. \n+More...

\n+
#include <vector>
\n+#include <dune/common/fvector.hh>
\n+#include "refinement.hh"
\n+#include "type.hh"
\n+#include "virtualrefinement.cc"
\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::GeneralVertexOrder< dim, Index_ >
 Class providing information on the ordering of vertices. More...
class  Dune::VirtualRefinement< dimension, CoordType >
 VirtualRefinement base class. More...
 
class  Dune::GeneralVertexOrder< dim, Index_ >::iterator
 Iterate over the vertex indices of some sub-entity. More...
struct  Dune::VirtualRefinement< dimension, CoordType >::Codim< codimension >
 codim database of VirtualRefinement More...
 
\n \n \n \n

\n Namespaces

namespace  Dune
 
\n \n-\n-\n-\n-\n+\n+\n+\n+\n

\n Functions

template<class InIterator , class OutIterator >
void Dune::reduceOrder (const InIterator &inBegin, const InIterator &inEnd, OutIterator outIt)
 Algorithm to reduce vertex order information.
 
template<int dimension, class CoordType >
VirtualRefinement< dimension, CoordType > & Dune::buildRefinement (GeometryType geometryType, GeometryType coerceTo)
 return a reference to the VirtualRefinement according to the parameters
 
\n-
\n+

Detailed Description

\n+

This file contains the virtual wrapper around refinement.

\n+
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,37 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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-generalvertexorder.hh File Reference\n-#include \n-#include \n-#include \n-#include \n+virtualrefinement.hh File Reference\n+This file contains the virtual wrapper around refinement. _\bM_\bo_\br_\be_\b._\b._\b.\n #include \n-#include \n+#include \n+#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\"\n #include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+#include \"_\bv_\bi_\br_\bt_\bu_\ba_\bl_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bc_\bc\"\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:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b<_\b _\bd_\bi_\bm_\b,_\b _\bI_\bn_\bd_\be_\bx_\b__\b _\b>\n-\u00a0 Class providing information on the ordering of vertices. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+\u00a0 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt base class. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b<_\b _\bd_\bi_\bm_\b,_\b _\bI_\bn_\bd_\be_\bx_\b__\b _\b>_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-\u00a0 Iterate over the vertex indices of some sub-entity. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0 codim database of _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\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 F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br (const InIterator &inBegin, const InIterator &inEnd,\n- OutIterator outIt)\n-\u00a0 Algorithm to reduce vertex order information.\n+template\n+_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt< dimension, CoordType > _\bD_\bu_\bn_\be_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+ &\u00a0 geometryType, _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be coerceTo)\n+ return a reference to the\n+\u00a0 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt according to the\n+ parameters\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+This file contains the virtual wrapper around refinement.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00182_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00182_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: generalvertexorder.hh Source File\n+dune-geometry: virtualrefinement.hh Source File\n \n \n \n \n \n \n \n@@ -74,187 +74,135 @@\n \n
\n \n
\n \n
\n-
generalvertexorder.hh
\n+
virtualrefinement.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5
\n-
6#ifndef DUNE_GEOMETRY_GENERALVERTEXORDER_HH
\n-
7#define DUNE_GEOMETRY_GENERALVERTEXORDER_HH
\n-
8
\n-
9#include <algorithm>
\n-
10#include <cassert>
\n-
11#include <cstddef>
\n-
12#include <iterator>
\n-
13#include <vector>
\n-
14
\n-
15#include <dune/common/iteratorfacades.hh>
\n-
16
\n-
17#include "type.hh"
\n-\n-
19
\n-
20namespace Dune {
\n-
21
\n-
39 template<class InIterator, class OutIterator>
\n-
\n-
40 void reduceOrder(const InIterator& inBegin, const InIterator& inEnd,
\n-
41 OutIterator outIt)
\n-
42 {
\n-
43 for(InIterator inIt = inBegin; inIt != inEnd; ++inIt, ++outIt)
\n-
44 *outIt = std::count_if(inBegin, inEnd, [&](const auto& v)
\n-
45 {
\n-
46 return v < *inIt;
\n-
47 });
\n-
48 }
\n-
\n-
49
\n-
51
\n-
66 template<std::size_t dim, class Index_ = std::size_t>
\n-
\n-\n-
68 typedef ReferenceElements<double, dim> RefElems;
\n-
69 typedef typename RefElems::ReferenceElement RefElem;
\n-
70
\n-
71 RefElem refelem;
\n-
72 GeometryType gt;
\n-
73 std::vector<Index_> vertexOrder;
\n-
74
\n-
75 public:
\n-
77 typedef Index_ Index;
\n-
78
\n-
80 class iterator;
\n-
81
\n-
83 static const std::size_t dimension = dim;
\n-
85 const GeometryType &type() const { return gt; }
\n-
86
\n-
88
\n-
96 template<class InIterator>
\n-
\n-
97 GeneralVertexOrder(const GeometryType& gt_, const InIterator &inBegin,
\n-
98 const InIterator &inEnd) :
\n-
99 refelem(RefElems::general(gt_)), gt(gt_),
\n-
100 vertexOrder(refelem.size(dim))
\n-
101 { reduceOrder(inBegin, inEnd, vertexOrder.begin()); }
\n-
\n-
102
\n-
104
\n-
\n-
108 iterator begin(std::size_t codim, std::size_t subEntity) const
\n-
109 { return iterator(*this, codim, subEntity); }
\n-
\n-
111
\n-
\n-
115 iterator end(std::size_t codim, std::size_t subEntity) const {
\n-
116 return iterator(*this, codim, subEntity,
\n-
117 refelem.size(subEntity, codim, dim));
\n-
118 }
\n-
\n-
119
\n-
121
\n-
\n-
128 void getReduced(std::size_t codim, std::size_t subEntity,
\n-
129 std::vector<Index>& order) const
\n-
130 {
\n-
131 order.resize(refelem.size(subEntity, codim, dim));
\n-
132 reduceOrder(begin(codim, subEntity), end(codim, subEntity),
\n-
133 order.begin());
\n-
134 }
\n-
\n-
135 };
\n-
\n-
136
\n-
138
\n-
141 template<std::size_t dim, class Index_>
\n-
\n-
142 class GeneralVertexOrder<dim, Index_>::iterator :
\n-
143 public Dune::RandomAccessIteratorFacade<iterator, const Index_>
\n-
144 {
\n-
145 const GeneralVertexOrder *order;
\n-
146 std::size_t codim;
\n-
147 std::size_t subEntity;
\n-
148 std::size_t vertex;
\n-
149
\n-
150 iterator(const GeneralVertexOrder &order_, std::size_t codim_,
\n-
151 std::size_t subEntity_, std::size_t vertex_ = 0) :
\n-
152 order(&order_), codim(codim_), subEntity(subEntity_), vertex(vertex_)
\n-
153 { }
\n-
154
\n-
155 public:
\n-
\n-
156 const Index &dereference() const {
\n-
157 return order->vertexOrder[order->refelem.subEntity(subEntity, codim,
\n-
158 vertex, dim)];
\n-
159 }
\n-
\n-
\n-
160 const Index &elementAt(std::ptrdiff_t n) const {
\n-
161 return order->vertexOrder[order->refelem.subEntity(subEntity, codim,
\n-
162 vertex+n, dim)];
\n-
163 }
\n-
\n-
\n-
164 bool equals(const iterator &other) const {
\n-
165 return order == other.order && codim == other.codim &&
\n-
166 subEntity == other.subEntity && vertex == other.vertex;
\n-
167 }
\n-
\n-
168 void increment() { ++vertex; }
\n-
169 void decrement() { --vertex; }
\n-
170 void advance(std::ptrdiff_t n) { vertex += n; }
\n-
\n-
171 std::ptrdiff_t distanceTo(const iterator &other) const {
\n-
172 // make sure we reference the same container
\n-
173 assert(order == other.order && codim == other.codim &&
\n-
174 subEntity == other.subEntity);
\n-
175 if(vertex < other.vertex) return other.vertex - vertex;
\n-
176 else return -static_cast<std::ptrdiff_t>(vertex - other.vertex);
\n-
177 }
\n-
\n-
178
\n-
179 friend class GeneralVertexOrder<dim, Index>;
\n-
180
\n-
182
\n-\n-
188 };
\n-
\n-
189} // namespace Dune
\n-
190
\n-
191#endif // DUNE_GEOMETRY_GENERALVERTEXORDER_HH
\n-\n-
A unique label for each type of element that can occur in a grid.
\n+
5#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_HH
\n+
6#define DUNE_GEOMETRY_VIRTUALREFINEMENT_HH
\n+
7
\n+
268#include <vector>
\n+
269
\n+
270#include <dune/common/fvector.hh>
\n+
271
\n+
272#include "refinement.hh"
\n+
273#include "type.hh"
\n+
274
\n+
275namespace Dune
\n+
276{
\n+
277 // //////////////////////////////////////////
\n+
278 //
\n+
279 // The virtual base class and its iterators
\n+
280 //
\n+
281
\n+
282 //
\n+
283 // Refinement
\n+
284 //
\n+
285
\n+
292 template<int dimension, class CoordType>
\n+
\n+\n+
294 {
\n+
295 public:
\n+
296 template<int codimension>
\n+
297 struct Codim;
\n+\n+\n+
302
\n+
308 typedef FieldVector<CoordType, dimension> CoordVector;
\n+
314 typedef std::vector<int> IndexVector;
\n+
315
\n+
316 template<int codimension>
\n+\n+\n+\n+
320
\n+
326 virtual int nVertices(Dune::RefinementIntervals tag) const = 0;
\n+
327
\n+\n+
334
\n+\n+
341
\n+
347 virtual int nElements(Dune::RefinementIntervals tag) const = 0;
\n+
348
\n+\n+
355
\n+\n+
362
\n+
\n+\n+
365 {}
\n+
\n+
366
\n+
367 protected:
\n+\n+\n+\n+\n+
372 };
\n+
\n+
373
\n+
375 template<int dimension, class CoordType>
\n+
376 template<int codimension>
\n+
\n+
377 struct VirtualRefinement<dimension, CoordType>::Codim
\n+
378 {
\n+
379 class SubEntityIterator;
\n+
380 };
\n+
\n+
381
\n+
382 // ////////////////////////
\n+
383 //
\n+
384 // The refinement builder
\n+
385 //
\n+
386
\n+
387 template<int dimension, class CoordType>
\n+\n+
389 buildRefinement(GeometryType geometryType, GeometryType coerceTo);
\n+
390
\n+
391} // namespace Dune
\n+
392
\n+
393#include "virtualrefinement.cc"
\n+
394
\n+
395#endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_HH
\n+
This file contains the virtual wrapper around refinement.
\n+
This file simply includes all Refinement implementations so you don't have to do them separately.
\n+
A unique label for each type of element that can occur in a grid.
\n
Definition affinegeometry.hh:21
\n-
void reduceOrder(const InIterator &inBegin, const InIterator &inEnd, OutIterator outIt)
Algorithm to reduce vertex order information.
Definition generalvertexorder.hh:40
\n-
Class providing access to the singletons of the reference elements.
Definition referenceelements.hh:170
\n-
typename Container::ReferenceElement ReferenceElement
The reference element type.
Definition referenceelements.hh:188
\n-
Class providing information on the ordering of vertices.
Definition generalvertexorder.hh:67
\n-
Index_ Index
Type of indices.
Definition generalvertexorder.hh:77
\n-
const GeometryType & type() const
get type of the entity's geometry
Definition generalvertexorder.hh:85
\n-
static const std::size_t dimension
export the dimension of the entity we provide information for
Definition generalvertexorder.hh:83
\n-
void getReduced(std::size_t codim, std::size_t subEntity, std::vector< Index > &order) const
get a vector of reduced indices for some sub-entity
Definition generalvertexorder.hh:128
\n-
iterator end(std::size_t codim, std::size_t subEntity) const
get end iterator for the vertex indices of some sub-entity
Definition generalvertexorder.hh:115
\n-
GeneralVertexOrder(const GeometryType &gt_, const InIterator &inBegin, const InIterator &inEnd)
construct a GeneralVertexOrder
Definition generalvertexorder.hh:97
\n-
iterator begin(std::size_t codim, std::size_t subEntity) const
get begin iterator for the vertex indices of some sub-entity
Definition generalvertexorder.hh:108
\n-
Iterate over the vertex indices of some sub-entity.
Definition generalvertexorder.hh:144
\n-
iterator()
public default constructor
Definition generalvertexorder.hh:187
\n-
void decrement()
Definition generalvertexorder.hh:169
\n-
void advance(std::ptrdiff_t n)
Definition generalvertexorder.hh:170
\n-
const Index & dereference() const
Definition generalvertexorder.hh:156
\n-
void increment()
Definition generalvertexorder.hh:168
\n-
bool equals(const iterator &other) const
Definition generalvertexorder.hh:164
\n-
std::ptrdiff_t distanceTo(const iterator &other) const
Definition generalvertexorder.hh:171
\n-
const Index & elementAt(std::ptrdiff_t n) const
Definition generalvertexorder.hh:160
\n+
VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType geometryType, GeometryType coerceTo)
return a reference to the VirtualRefinement according to the parameters
Definition virtualrefinement.cc:503
\n+
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:94
\n
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n+
Definition virtualrefinement.cc:231
\n+
VirtualRefinement base class.
Definition virtualrefinement.hh:294
\n+
SubEntityIteratorBack< dimension > VertexIteratorBack
Definition virtualrefinement.hh:318
\n+
virtual ElementIteratorBack * eEndBack(Dune::RefinementIntervals tag) const =0
\n+
VertexIterator vBegin(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:38
\n+
ElementIterator eBegin(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:54
\n+
virtual int nElements(Dune::RefinementIntervals tag) const =0
Get the number of Elements.
\n+
ElementIterator eEnd(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:62
\n+
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the VirtualRefinement.
Definition virtualrefinement.hh:301
\n+
virtual ~VirtualRefinement()
Destructor.
Definition virtualrefinement.hh:364
\n+
VertexIterator vEnd(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:46
\n+
FieldVector< CoordType, dimension > CoordVector
The CoordVector of the VirtualRefinement.
Definition virtualrefinement.hh:308
\n+
virtual int nVertices(Dune::RefinementIntervals tag) const =0
Get the number of Vertices.
\n+
std::vector< int > IndexVector
The IndexVector of the VirtualRefinement.
Definition virtualrefinement.hh:314
\n+
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the VirtualRefinement.
Definition virtualrefinement.hh:299
\n+
virtual VertexIteratorBack * vEndBack(Dune::RefinementIntervals tag) const =0
\n+
SubEntityIteratorBack< 0 > ElementIteratorBack
Definition virtualrefinement.hh:319
\n+
virtual ElementIteratorBack * eBeginBack(Dune::RefinementIntervals tag) const =0
\n+
virtual VertexIteratorBack * vBeginBack(Dune::RefinementIntervals tag) const =0
\n+
codim database of VirtualRefinement
Definition virtualrefinement.hh:378
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,216 +1,186 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-generalvertexorder.hh\n+virtualrefinement.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5\n-6#ifndef DUNE_GEOMETRY_GENERALVERTEXORDER_HH\n-7#define DUNE_GEOMETRY_GENERALVERTEXORDER_HH\n-8\n-9#include \n-10#include \n-11#include \n-12#include \n-13#include \n-14\n-15#include \n-16\n-17#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n-18#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-19\n-20namespace _\bD_\bu_\bn_\be {\n-21\n-39 template\n-_\b4_\b0 void _\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br(const InIterator& inBegin, const InIterator& inEnd,\n-41 OutIterator outIt)\n-42 {\n-43 for(InIterator inIt = inBegin; inIt != inEnd; ++inIt, ++outIt)\n-44 *outIt = std::count_if(inBegin, inEnd, [&](const auto& v)\n-45 {\n-46 return v < *inIt;\n-47 });\n-48 }\n-49\n-51\n-66 template\n-_\b6_\b7 class _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br {\n-68 typedef _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bd_\bi_\bm_\b> RefElems;\n-69 typedef typename _\bR_\be_\bf_\bE_\bl_\be_\bm_\bs_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt RefElem;\n-70\n-71 RefElem refelem;\n-72 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt;\n-73 std::vector vertexOrder;\n-74\n-75 public:\n-_\b7_\b7 typedef Index_ _\bI_\bn_\bd_\be_\bx;\n-78\n-80 class _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-81\n-_\b8_\b3 static const std::size_t _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dim;\n-_\b8_\b5 const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &_\bt_\by_\bp_\be() const { return gt; }\n-86\n-88\n-96 template\n-_\b9_\b7 _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt_, const InIterator &inBegin,\n-98 const InIterator &inEnd) :\n-99 refelem(RefElems::general(gt_)), gt(gt_),\n-100 vertexOrder(refelem.size(dim))\n-101 { _\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br(inBegin, inEnd, vertexOrder.begin()); }\n-102\n-104\n-_\b1_\b0_\b8 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn(std::size_t codim, std::size_t subEntity) const\n-109 { return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, codim, subEntity); }\n-111\n-_\b1_\b1_\b5 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd(std::size_t codim, std::size_t subEntity) const {\n-116 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, codim, subEntity,\n-117 refelem.size(subEntity, codim, dim));\n-118 }\n-119\n-121\n-_\b1_\b2_\b8 void _\bg_\be_\bt_\bR_\be_\bd_\bu_\bc_\be_\bd(std::size_t codim, std::size_t subEntity,\n-129 std::vector& order) const\n-130 {\n-131 order.resize(refelem.size(subEntity, codim, dim));\n-132 _\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br(_\bb_\be_\bg_\bi_\bn(codim, subEntity), _\be_\bn_\bd(codim, subEntity),\n-133 order.begin());\n-134 }\n-135 };\n-136\n-138\n-141 template\n-_\b1_\b4_\b2 class _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br::_\bi_\bt_\be_\br_\ba_\bt_\bo_\br :\n-143 public Dune::RandomAccessIteratorFacade\n-144 {\n-145 const _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br *order;\n-146 std::size_t codim;\n-147 std::size_t subEntity;\n-148 std::size_t vertex;\n-149\n-150 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br &order_, std::size_t codim_,\n-151 std::size_t subEntity_, std::size_t vertex_ = 0) :\n-152 order(&order_), codim(codim_), subEntity(subEntity_), vertex(vertex_)\n-153 { }\n-154\n-155 public:\n-_\b1_\b5_\b6 const _\bI_\bn_\bd_\be_\bx &_\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be() const {\n-157 return order->vertexOrder[order->refelem.subEntity(subEntity, codim,\n-158 vertex, dim)];\n-159 }\n-_\b1_\b6_\b0 const _\bI_\bn_\bd_\be_\bx &_\be_\bl_\be_\bm_\be_\bn_\bt_\bA_\bt(std::ptrdiff_t n) const {\n-161 return order->vertexOrder[order->refelem.subEntity(subEntity, codim,\n-162 vertex+n, dim)];\n-163 }\n-_\b1_\b6_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bi_\bt_\be_\br_\ba_\bt_\bo_\br &other) const {\n-165 return order == other.order && codim == other.codim &&\n-166 subEntity == other.subEntity && vertex == other.vertex;\n-167 }\n-_\b1_\b6_\b8 void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt() { ++vertex; }\n-_\b1_\b6_\b9 void _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt() { --vertex; }\n-_\b1_\b7_\b0 void _\ba_\bd_\bv_\ba_\bn_\bc_\be(std::ptrdiff_t n) { vertex += n; }\n-_\b1_\b7_\b1 std::ptrdiff_t _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo(const _\bi_\bt_\be_\br_\ba_\bt_\bo_\br &other) const {\n-172 // make sure we reference the same container\n-173 assert(order == other.order && codim == other.codim &&\n-174 subEntity == other.subEntity);\n-175 if(vertex < other.vertex) return other.vertex - vertex;\n-176 else return -static_cast(vertex - other.vertex);\n-177 }\n-178\n-179 friend class _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br;\n-180\n-182\n-_\b1_\b8_\b7 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br() { }\n-188 };\n-189} // namespace Dune\n-190\n-191#endif // DUNE_GEOMETRY_GENERALVERTEXORDER_HH\n-_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n+5#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_HH\n+6#define DUNE_GEOMETRY_VIRTUALREFINEMENT_HH\n+7\n+268#include \n+269\n+270#include \n+271\n+272#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\"\n+273#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n+274\n+275namespace _\bD_\bu_\bn_\be\n+276{\n+277 // //////////////////////////////////////////\n+278 //\n+279 // The virtual base class and its iterators\n+280 //\n+281\n+282 //\n+283 // Refinement\n+284 //\n+285\n+292 template\n+_\b2_\b9_\b3 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+294 {\n+295 public:\n+296 template\n+297 struct _\bC_\bo_\bd_\bi_\bm;\n+_\b2_\b9_\b9 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b3_\b0_\b1 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+302\n+_\b3_\b0_\b8 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b3_\b1_\b4 typedef std::vector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+315\n+316 template\n+317 class _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n+_\b3_\b1_\b8 typedef _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n+_\b3_\b1_\b9 typedef _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\b0_\b> _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n+320\n+_\b3_\b2_\b6 virtual int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const = 0;\n+327\n+333 _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+334\n+340 _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+341\n+_\b3_\b4_\b7 virtual int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const = 0;\n+348\n+354 _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+355\n+361 _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+362\n+_\b3_\b6_\b4 virtual _\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt()\n+365 {}\n+366\n+367 protected:\n+_\b3_\b6_\b8 virtual _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *_\bv_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+= 0;\n+_\b3_\b6_\b9 virtual _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *_\bv_\bE_\bn_\bd_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const =\n+0;\n+_\b3_\b7_\b0 virtual _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *_\be_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag)\n+const = 0;\n+_\b3_\b7_\b1 virtual _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *_\be_\bE_\bn_\bd_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+= 0;\n+372 };\n+373\n+375 template\n+376 template\n+_\b3_\b7_\b7 struct _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::_\bC_\bo_\bd_\bi_\bm\n+378 {\n+379 class SubEntityIterator;\n+380 };\n+381\n+382 // ////////////////////////\n+383 //\n+384 // The refinement builder\n+385 //\n+386\n+387 template\n+388 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n+389 _\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt(_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be geometryType, _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be coerceTo);\n+390\n+391} // namespace Dune\n+392\n+393#include \"_\bv_\bi_\br_\bt_\bu_\ba_\bl_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bc_\bc\"\n+394\n+395#endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_HH\n+_\bv_\bi_\br_\bt_\bu_\ba_\bl_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bc_\bc\n+This file contains the virtual wrapper around refinement.\n+_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+This file simply includes all Refinement implementations so you don't have to\n+do them separately.\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br\n-void reduceOrder(const InIterator &inBegin, const InIterator &inEnd,\n-OutIterator outIt)\n-Algorithm to reduce vertex order information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:40\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-Class providing access to the singletons of the reference elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:170\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename Container::ReferenceElement ReferenceElement\n-The reference element type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br\n-Class providing information on the ordering of vertices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n-Index_ Index\n-Type of indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:77\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bt_\by_\bp_\be\n-const GeometryType & type() const\n-get type of the entity's geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:85\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static const std::size_t dimension\n-export the dimension of the entity we provide information for\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:83\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bg_\be_\bt_\bR_\be_\bd_\bu_\bc_\be_\bd\n-void getReduced(std::size_t codim, std::size_t subEntity, std::vector< Index >\n-&order) const\n-get a vector of reduced indices for some sub-entity\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\be_\bn_\bd\n-iterator end(std::size_t codim, std::size_t subEntity) const\n-get end iterator for the vertex indices of some sub-entity\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:115\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br\n-GeneralVertexOrder(const GeometryType >_, const InIterator &inBegin, const\n-InIterator &inEnd)\n-construct a GeneralVertexOrder\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:97\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin(std::size_t codim, std::size_t subEntity) const\n-get begin iterator for the vertex indices of some sub-entity\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:108\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Iterate over the vertex indices of some sub-entity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:144\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-iterator()\n-public default constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:187\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt\n-void decrement()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bv_\ba_\bn_\bc_\be\n-void advance(std::ptrdiff_t n)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:170\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-const Index & dereference() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:156\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n-void increment()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:168\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const iterator &other) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:164\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo\n-std::ptrdiff_t distanceTo(const iterator &other) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\bA_\bt\n-const Index & elementAt(std::ptrdiff_t n) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:160\n+_\bD_\bu_\bn_\be_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType\n+geometryType, GeometryType coerceTo)\n+return a reference to the VirtualRefinement according to the parameters\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:503\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs\n+Holds the number of refined intervals per axis needed for virtual and static\n+refinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:94\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n Unique label for each type of entities that can occur in DUNE grids.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:231\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+VirtualRefinement base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:294\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+SubEntityIteratorBack< dimension > VertexIteratorBack\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:318\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd_\bB_\ba_\bc_\bk\n+virtual ElementIteratorBack * eEndBack(Dune::RefinementIntervals tag) const =0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n+VertexIterator vBegin(Dune::RefinementIntervals tag) const\n+Get an VertexIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:38\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n+ElementIterator eBegin(Dune::RefinementIntervals tag) const\n+Get an ElementIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:54\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+virtual int nElements(Dune::RefinementIntervals tag) const =0\n+Get the number of Elements.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd\n+ElementIterator eEnd(Dune::RefinementIntervals tag) const\n+Get an ElementIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< 0 >::SubEntityIterator ElementIterator\n+The ElementIterator of the VirtualRefinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:301\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+virtual ~VirtualRefinement()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:364\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd\n+VertexIterator vEnd(Dune::RefinementIntervals tag) const\n+Get an VertexIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:46\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< CoordType, dimension > CoordVector\n+The CoordVector of the VirtualRefinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:308\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+virtual int nVertices(Dune::RefinementIntervals tag) const =0\n+Get the number of Vertices.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< int > IndexVector\n+The IndexVector of the VirtualRefinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:314\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< dimension >::SubEntityIterator VertexIterator\n+The VertexIterator of the VirtualRefinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:299\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd_\bB_\ba_\bc_\bk\n+virtual VertexIteratorBack * vEndBack(Dune::RefinementIntervals tag) const =0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+SubEntityIteratorBack< 0 > ElementIteratorBack\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:319\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk\n+virtual ElementIteratorBack * eBeginBack(Dune::RefinementIntervals tag) const\n+=0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk\n+virtual VertexIteratorBack * vBeginBack(Dune::RefinementIntervals tag) const =0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+codim database of VirtualRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:378\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00185.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00185.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: typefromvertexcount.hh File Reference\n+dune-geometry: referenceelements.hh File Reference\n \n \n \n \n \n \n \n@@ -65,38 +65,79 @@\n \n \n \n \n \n \n \n
\n \n-
typefromvertexcount.hh File Reference
\n+
referenceelements.hh File Reference
\n
\n
\n-
#include <dune/geometry/type.hh>
\n+
#include <cassert>
\n+#include <algorithm>
\n+#include <limits>
\n+#include <tuple>
\n+#include <utility>
\n+#include <vector>
\n+#include <array>
\n+#include <dune/common/typetraits.hh>
\n+#include <dune/common/std/type_traits.hh>
\n+#include <dune/common/visibility.hh>
\n+#include <dune/geometry/dimension.hh>
\n+#include <dune/geometry/type.hh>
\n+#include <dune/geometry/referenceelement.hh>
\n+#include <dune/geometry/referenceelementimplementation.hh>
\n
\n

Go to the source code of this file.

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

\n+Classes

struct  Dune::Geo::ReferenceElements< ctype_, dim >
 Class providing access to the singletons of the reference elements. More...
 
\n \n \n \n+\n+\n+\n+\n+

\n Namespaces

namespace  Dune
 
namespace  Dune::Geo
 
namespace  Dune::Transitional
 
\n+\n+\n+\n+\n+\n

\n+Typedefs

template<typename T , int dim>
using Dune::ReferenceElement = unspecified-type
 Returns the type of reference element for the argument type T.
 
\n \n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n Functions

GeometryType Dune::geometryTypeFromVertexCount (unsigned int dim, unsigned int vertices)
 Utitlity function to construct the correct geometry type given the dimension and the number of vertices.
 
template<typename... T>
unspecified value type Dune::referenceElement (T &&... t)
 Returns a reference element for the objects t....
 
template<typename T , int dim>
auto Dune::referenceElement (const Dune::GeometryType &gt, Dune::Dim< dim >={})
 Returns a reference element of dimension dim for the given geometry type and coordinate field type.
 
template<typename T , int dim, std::enable_if_t< IsNumber< std::decay_t< T > >::value, int > = 0>
auto Dune::referenceElement (const T &, const Dune::GeometryType &gt, Dune::Dim< dim >)
 Returns a reference element of dimension dim for the given geometry type and coordinate field type.
 
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,60 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bu_\bt_\bi_\bl_\bi_\bt_\by\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-typefromvertexcount.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+referenceelements.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/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\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:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b__\b,_\b _\bd_\bi_\bm_\b _\b>\n+\u00a0 Class providing access to the singletons of the reference elements.\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:_\bG_\be_\bo\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = unspecified-type\n+\u00a0 Returns the type of reference element for the argument type T.\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bu_\bn_\bt (unsigned int dim, unsigned int\n- vertices)\n-\u00a0 Utitlity function to construct the correct geometry type given\n- the dimension and the number of vertices.\n+template\n+unspecified value type\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt (T &&... t)\n+\u00a0 Returns a reference element for the objects t....\n+\u00a0\n+template\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt (const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >,\n+ _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm< dim >={})\n+\u00a0 Returns a reference element of dimension dim for the\n+ given geometry type and coordinate field type.\n+\u00a0\n+template\n+>::value, int > = 0>\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt (const T &, const _\bD_\bu_\bn_\be_\b:_\b:\n+ _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >, _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm< dim >)\n+\u00a0 Returns a reference element of dimension dim for the\n+ given geometry type and coordinate field type.\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-geometry-doc/doxygen/a00185_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00185_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: typefromvertexcount.hh Source File\n+dune-geometry: referenceelements.hh Source File\n \n \n \n \n \n \n \n@@ -70,77 +70,425 @@\n
\n \n \n \n \n \n \n
\n-
typefromvertexcount.hh
\n+
referenceelements.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH
\n-
6#define DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH
\n+
5#ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH
\n+
6#define DUNE_GEOMETRY_REFERENCEELEMENTS_HH
\n
7
\n-\n+
8#include <cassert>
\n
9
\n-
10namespace Dune {
\n-
11
\n-
16 inline
\n-
\n-
17 GeometryType geometryTypeFromVertexCount(unsigned int dim, unsigned int vertices)
\n-
18 {
\n-
19 switch (dim)
\n-
20 {
\n-
21 case 0 :
\n-
22 return GeometryTypes::vertex;
\n-
23 case 1 :
\n-
24 return GeometryTypes::line;
\n-
25 case 2 :
\n-
26 switch (vertices) {
\n-
27 case 3 :
\n-
28 return GeometryTypes::triangle;
\n-
29 case 4 :
\n-
30 return GeometryTypes::quadrilateral;
\n-
31 default :
\n-
32 DUNE_THROW(NotImplemented, "2d elements with " << vertices << " corners are not supported!");
\n-
33 }
\n-
34 case 3 :
\n-
35 switch (vertices) {
\n-
36 case 4 :
\n-
37 return GeometryTypes::tetrahedron;
\n-
38 case 5 :
\n-
39 return GeometryTypes::pyramid;
\n-
40 case 6 :
\n-
41 return GeometryTypes::prism;
\n-
42 case 8 :
\n-
43 return GeometryTypes::hexahedron;
\n-
44 default :
\n-
45 DUNE_THROW(NotImplemented, "3d elements with " << vertices << " corners are not supported!");
\n-
46 }
\n-
47 default :
\n-
48 DUNE_THROW(NotImplemented, "geometryTypeFromVertexCount works only up to dim=3");
\n-
49 }
\n-
50 }
\n-
\n-
51
\n-
52}
\n-
53
\n-
54#endif // DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH
\n-
A unique label for each type of element that can occur in a grid.
\n+
10#include <algorithm>
\n+
11#include <limits>
\n+
12#include <tuple>
\n+
13#include <utility>
\n+
14#include <vector>
\n+
15#include <array>
\n+
16
\n+
17#include <dune/common/typetraits.hh>
\n+
18#include <dune/common/std/type_traits.hh>
\n+
19#include <dune/common/visibility.hh>
\n+
20
\n+\n+
22#include <dune/geometry/type.hh>
\n+\n+\n+
25
\n+
26namespace Dune
\n+
27{
\n+
28
\n+
29 namespace Geo
\n+
30 {
\n+
31
\n+
32#ifndef DOXYGEN
\n+
33
\n+
34
\n+
35 template<typename ctype, int dim>
\n+
36 class DeprecatedReferenceElement
\n+
37 : public ReferenceElement<ReferenceElementImplementation<ctype,dim>>
\n+
38 {
\n+
39
\n+
40 protected:
\n+
41
\n+
42 DeprecatedReferenceElement() = default;
\n+
43
\n+
44 public:
\n+
45
\n+
46 DeprecatedReferenceElement(const DeprecatedReferenceElement&) = delete;
\n+
47 DeprecatedReferenceElement& operator=(const DeprecatedReferenceElement&) = delete;
\n+
48
\n+
49 DeprecatedReferenceElement(const ReferenceElementImplementation<ctype,dim>& impl)
\n+
50 : ReferenceElement<ReferenceElementImplementation<ctype,dim>>(impl)
\n+
51 {}
\n+
52
\n+
53 };
\n+
54
\n+
55
\n+
56 template<typename ctype, int dim>
\n+
57 class ConstructibleDeprecatedReferenceElement
\n+
58 : public DeprecatedReferenceElement<ctype,dim>
\n+
59 {
\n+
60 public:
\n+
61 ConstructibleDeprecatedReferenceElement() = default;
\n+
62 };
\n+
63
\n+
64
\n+
65 namespace Impl
\n+
66 {
\n+
67
\n+
68 // ReferenceElementContainer
\n+
69 // -------------------------
\n+
70
\n+
71 template< class ctype, int dim >
\n+
72 class ReferenceElementContainer
\n+
73 {
\n+
74 static const unsigned int numTopologies = dim >= 0 ? (1u << dim) : 0;
\n+
75
\n+
76 using Implementation = ReferenceElementImplementation< ctype, dim >;
\n+
77 using ConstructibleDeprecatedReferenceElement = Dune::Geo::ConstructibleDeprecatedReferenceElement<ctype,dim>;
\n+
78
\n+
79 public:
\n+
80
\n+
81 using DeprecatedReferenceElement = Dune::Geo::DeprecatedReferenceElement<ctype,dim>;
\n+
82
\n+
83 using ReferenceElement = Dune::Geo::ReferenceElement< Implementation >;
\n+
84 using value_type = ReferenceElement;
\n+
85 using const_iterator = const value_type*;
\n+
86
\n+
87 ReferenceElementContainer ()
\n+
88 {
\n+
89 for( unsigned int topologyId = 0; topologyId < numTopologies; ++topologyId )
\n+
90 {
\n+
91 implementations_[ topologyId ].initialize( topologyId );
\n+
92 reference_elements_[ topologyId ].setImplementation( implementations_[ topologyId ] );
\n+
93 }
\n+
94 }
\n+
95
\n+
96 const ReferenceElement& operator() ( const GeometryType &type ) const
\n+
97 {
\n+
98 assert( type.dim() == dim );
\n+
99 return reference_elements_[ type.id() ];
\n+
100 }
\n+
101
\n+
102 const ReferenceElement& simplex () const
\n+
103 {
\n+
104 return reference_elements_[ Dune::GeometryTypes::simplex(dim).id() ];
\n+
105 }
\n+
106
\n+
107 const ReferenceElement& cube () const
\n+
108 {
\n+
109 return reference_elements_[ Dune::GeometryTypes::cube(dim).id() ];
\n+
110 }
\n+
111
\n+
112 const ReferenceElement& pyramid () const
\n+
113 {
\n+
114 return reference_elements_[ Dune::GeometryTypes::pyramid.id() ];
\n+
115 }
\n+
116
\n+
117 const ReferenceElement& prism () const
\n+
118 {
\n+
119 return reference_elements_[ Dune::GeometryTypes::prism.id() ];
\n+
120 }
\n+
121
\n+
122 const_iterator begin () const
\n+
123 {
\n+
124 return reference_elements_.data();
\n+
125 }
\n+
126
\n+
127 const_iterator end () const
\n+
128 {
\n+
129 return reference_elements_.data() + numTopologies;
\n+
130 }
\n+
131
\n+
132 // here, we make sure to actually return a const reference to something
\n+
133 // that is guaranteed not to become invalid, as otherwise, we might run
\n+
134 // straight into debugging hell when a user binds the return value to a
\n+
135 // const ref and the temporary goes out of scope.
\n+
136 const DeprecatedReferenceElement& deprecated(const ReferenceElement& v) const
\n+
137 {
\n+
138 return reference_elements_[v.impl().type(0,0).id()];
\n+
139 }
\n+
140
\n+
141 private:
\n+
142
\n+
143 std::array<Implementation,numTopologies> implementations_;
\n+
144 std::array<ConstructibleDeprecatedReferenceElement,numTopologies> reference_elements_;
\n+
145
\n+
146 };
\n+
147
\n+
148
\n+
149 } // namespace Impl
\n+
150
\n+
151
\n+
152#endif // DOXYGEN
\n+
153
\n+
154
\n+
155 // ReferenceElements
\n+
156 // ------------------------
\n+
157
\n+
168 template< class ctype_, int dim >
\n+
\n+\n+
170 {
\n+
171
\n+
173 using ctype = ctype_;
\n+
174
\n+\n+
177
\n+
179 static constexpr int dimension = dim;
\n+
180
\n+
181 private:
\n+
182
\n+
183 using Container = Impl::ReferenceElementContainer< ctype, dim >;
\n+
184
\n+
185 public:
\n+
186
\n+
188 using ReferenceElement = typename Container::ReferenceElement;
\n+
189
\n+
191 using Iterator = typename Container::const_iterator;
\n+
192
\n+\n+
195
\n+
197 static const ReferenceElement&
\n+
\n+
198 general ( const GeometryType& type )
\n+
199 {
\n+
200 return container() ( type );
\n+
201 }
\n+
\n+
202
\n+
\n+
204 static const ReferenceElement& simplex ()
\n+
205 {
\n+
206 return container().simplex();
\n+
207 }
\n+
\n+
208
\n+
\n+
210 static const ReferenceElement& cube ()
\n+
211 {
\n+
212 return container().cube();
\n+
213 }
\n+
\n+
214
\n+
\n+
215 static Iterator begin ()
\n+
216 {
\n+
217 return container().begin();
\n+
218 }
\n+
\n+
219
\n+
\n+
220 static Iterator end ()
\n+
221 {
\n+
222 return container().end();
\n+
223 }
\n+
\n+
224
\n+
225#ifndef DOXYGEN
\n+
226 static const typename Container::DeprecatedReferenceElement&
\n+
227 deprecated(const ReferenceElement& v)
\n+
228 {
\n+
229 return container().deprecated(v);
\n+
230 }
\n+
231#endif // DOXYGEN
\n+
232
\n+
233 private:
\n+
234
\n+
235 DUNE_EXPORT static const Container& container ()
\n+
236 {
\n+
237 static Container container;
\n+
238 return container;
\n+
239 }
\n+
240 };
\n+
\n+
241
\n+
242 } // namespace Geo
\n+
243
\n+
245 using Geo::ReferenceElements;
\n+
246
\n+
247
\n+
248#ifdef DOXYGEN
\n+
249
\n+
251
\n+
294 template<typename... T>
\n+
295 unspecified-value-type referenceElement(T&&... t);
\n+
296
\n+
297#endif
\n+
298
\n+
299
\n+
301
\n+
314 template<typename T, int dim>
\n+
\n+\n+
316 {
\n+\n+
318 }
\n+
\n+
319
\n+
320
\n+
322
\n+
334 template<typename T, int dim, std::enable_if_t<IsNumber<std::decay_t<T>>::value, int> = 0>
\n+
\n+\n+
336 {
\n+\n+
338 }
\n+
\n+
339
\n+
340
\n+
341#ifndef DOXYGEN
\n+
342
\n+
343 // helpers for the ReferenceElement<> meta function
\n+
344
\n+
345 namespace Impl {
\n+
346
\n+
347 // Evaluates to the correct reference element iff <T...> matches the pattern <number_type,Dim<int>>
\n+
348 // otherwise, it's ill-formed. Should be used with detected_or and friends.
\n+
349
\n+
350 template<typename... T>
\n+
351 struct DefaultReferenceElementExtractor;
\n+
352
\n+
353 template<typename T, typename std::enable_if<IsNumber<T>::value,int>::type dim>
\n+
354 struct DefaultReferenceElementExtractor<T,Dim<dim>>
\n+
355 {
\n+\n+
357 };
\n+
358
\n+
359 template<typename... T>
\n+
360 using DefaultReferenceElement = typename DefaultReferenceElementExtractor<T...>::type;
\n+
361
\n+
362 }
\n+
363
\n+
364 // looks up the type of a reference element by trying to instantiate the correct overload
\n+
365 // of referenceElement() for the given arguments. This will fail if there is no valid
\n+
366 // overload and should be used with detected_or or some other utility that places the
\n+
367 // instantiation in SFINAE context.
\n+
368 //
\n+
369 // this is placed directly in namespace Dune to avoid any weird surprises
\n+
370
\n+
371 template<typename... T>
\n+
372 using LookupReferenceElement = decltype(referenceElement(std::declval<T>()...));
\n+
373
\n+
374#endif // DOXYGEN
\n+
375
\n+
\n+
376 namespace Transitional {
\n+
377
\n+
378#ifndef DOXYGEN
\n+
379
\n+
380 // this abomination checks whether the template signature matches the special case
\n+
381 // ReferenceElement<number_type,Dune::Dim<int>> and otherwise defers the type lookup
\n+
382 // to a decltype on a call to referenceElement(std::declval<T>())
\n+
383
\n+
384 template<typename... T>
\n+
385 using ReferenceElement = Std::detected_or_t<
\n+
386 Std::detected_t<LookupReferenceElement,T...>,
\n+
387 Impl::DefaultReferenceElement,
\n+
388 T...
\n+
389 >;
\n+
390
\n+
391#else // DOXYGEN
\n+
392
\n+
394
\n+
416 template<typename... T>
\n+
417 using ReferenceElement = unspecified-type;
\n+
418
\n+
419#endif //DOXYGEN
\n+
420
\n+
421 }
\n+
\n+
422
\n+
423#ifndef DOXYGEN
\n+
424
\n+
425 namespace Impl {
\n+
426
\n+
427 // helpers for triggering a deprecation warning for occurrences of the old
\n+
428 // ReferenceElement syntax (Dune::ReferenceElement<T,int>)
\n+
429
\n+
430 // this looks a little weird, encoding the type in the return type of a nested function,
\n+
431 // but it was the only reliable way to trigger the warning iff the compiler encounters
\n+
432 // an invalid use. Other solutions either miss some (or all) uses or trigger false alarms.
\n+
433
\n+
434 template<typename T>
\n+
435 struct ValidReferenceElementTypeSignature
\n+
436 {
\n+
437 Transitional::ReferenceElement<T> check();
\n+
438 };
\n+
439
\n+
440 template<typename T>
\n+
441 struct DeprecatedReferenceElementTypeSignature
\n+
442 {
\n+
443 [[deprecated("Dune::ReferenceElement<T,int> is deprecated, please use Dune::ReferenceElement<Geometry> (if you have a geometry), Dune::ReferenceElements<T,int>::ReferenceElement or Dune::Transitional::ReferenceElement<T,Dune::Dim<int>> instead. After Dune 2.6, you will be able to use Dune::ReferenceElement<T,Dune::Dim<int>>.")]] T check();
\n+
444 };
\n+
445
\n+
446 } // namespace Impl
\n+
447
\n+
448 // This just makes sure the user doesn't use invalid syntax (by checking against the -1 default for
\n+
449 // the dimension, and then either hands back the old-style type along with a deprecation warning or
\n+
450 // forwards to the transitional version
\n+
451 template<typename T, int dim = -1>
\n+
452 using ReferenceElement = decltype(
\n+
453 std::declval<
\n+
454 typename std::conditional<
\n+
455 dim == -1,
\n+
456 Impl::ValidReferenceElementTypeSignature<T>,
\n+
457 Impl::DeprecatedReferenceElementTypeSignature<Geo::DeprecatedReferenceElement<T,dim>>
\n+
458 >::type
\n+
459 >().check());
\n+
460
\n+
461#else // DOXYGEN
\n+
462
\n+
464
\n+
496 template<typename T, int dim>
\n+
497 using ReferenceElement = unspecified-type;
\n+
498
\n+
499#endif // DOXYGEN
\n+
500
\n+
501
\n+
502
\n+
503} // namespace Dune
\n+
504
\n+
505#endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH
\n+\n+\n+
A unique label for each type of element that can occur in a grid.
\n+\n+
unspecified value type referenceElement(T &&... t)
Returns a reference element for the objects t....
\n+
unspecified-type ReferenceElement
Returns the type of reference element for the argument type T.
Definition referenceelements.hh:497
\n
Definition affinegeometry.hh:21
\n-
GeometryType geometryTypeFromVertexCount(unsigned int dim, unsigned int vertices)
Utitlity function to construct the correct geometry type given the dimension and the number of vertic...
Definition typefromvertexcount.hh:17
\n+
This class provides access to geometric and topological properties of a reference element.
Definition referenceelement.hh:52
\n+
Class providing access to the singletons of the reference elements.
Definition referenceelements.hh:170
\n+
static Iterator begin()
Definition referenceelements.hh:215
\n+
Iterator iterator
Iterator over available reference elements.
Definition referenceelements.hh:194
\n+
typename Container::ReferenceElement ReferenceElement
The reference element type.
Definition referenceelements.hh:188
\n+
static const ReferenceElement & cube()
get hypercube reference elements
Definition referenceelements.hh:210
\n+
static Iterator end()
Definition referenceelements.hh:220
\n+
ctype_ ctype
The coordinate field type of the contained reference elements.
Definition referenceelements.hh:173
\n+
static const ReferenceElement & general(const GeometryType &type)
get general reference elements
Definition referenceelements.hh:198
\n+
static const ReferenceElement & simplex()
get simplex reference elements
Definition referenceelements.hh:204
\n+
typename Container::const_iterator Iterator
Iterator over available reference elements.
Definition referenceelements.hh:191
\n+
static constexpr int dimension
The dimension of the contained reference elements.
Definition referenceelements.hh:179
\n+
ctype CoordinateField
The coordinate field type of the contained reference elements.
Definition referenceelements.hh:176
\n+
Static tag representing a dimension.
Definition dimension.hh:16
\n
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n+
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,79 +1,476 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bu_\bt_\bi_\bl_\bi_\bt_\by\n-typefromvertexcount.hh\n+referenceelements.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH\n-6#define DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH\n+5#ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH\n+6#define DUNE_GEOMETRY_REFERENCEELEMENTS_HH\n 7\n-8#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+8#include \n 9\n-10namespace _\bD_\bu_\bn_\be {\n-11\n-16 inline\n-_\b1_\b7 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bu_\bn_\bt(unsigned int dim, unsigned int\n-vertices)\n-18 {\n-19 switch (dim)\n-20 {\n-21 case 0 :\n-22 return GeometryTypes::vertex;\n-23 case 1 :\n-24 return GeometryTypes::line;\n-25 case 2 :\n-26 switch (vertices) {\n-27 case 3 :\n-28 return GeometryTypes::triangle;\n-29 case 4 :\n-30 return GeometryTypes::quadrilateral;\n-31 default :\n-32 DUNE_THROW(NotImplemented, \"2d elements with \" << vertices << \" corners are\n-not supported!\");\n-33 }\n-34 case 3 :\n-35 switch (vertices) {\n-36 case 4 :\n-37 return GeometryTypes::tetrahedron;\n-38 case 5 :\n-39 return GeometryTypes::pyramid;\n-40 case 6 :\n-41 return GeometryTypes::prism;\n-42 case 8 :\n-43 return GeometryTypes::hexahedron;\n-44 default :\n-45 DUNE_THROW(NotImplemented, \"3d elements with \" << vertices << \" corners are\n-not supported!\");\n-46 }\n-47 default :\n-48 DUNE_THROW(NotImplemented, \"geometryTypeFromVertexCount works only up to\n-dim=3\");\n-49 }\n-50 }\n-51\n-52}\n-53\n-54#endif // DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH\n+10#include \n+11#include \n+12#include \n+13#include \n+14#include \n+15#include \n+16\n+17#include \n+18#include \n+19#include \n+20\n+21#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b._\bh_\bh>\n+22#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+23#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n+24#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+25\n+26namespace _\bD_\bu_\bn_\be\n+27{\n+28\n+29 namespace Geo\n+30 {\n+31\n+32#ifndef DOXYGEN\n+33\n+34\n+35 template\n+36 class DeprecatedReferenceElement\n+37 : public ReferenceElement>\n+38 {\n+39\n+40 protected:\n+41\n+42 DeprecatedReferenceElement() = default;\n+43\n+44 public:\n+45\n+46 DeprecatedReferenceElement(const DeprecatedReferenceElement&) = delete;\n+47 DeprecatedReferenceElement& operator=(const DeprecatedReferenceElement&) =\n+delete;\n+48\n+49 DeprecatedReferenceElement(const ReferenceElementImplementation&\n+impl)\n+50 : ReferenceElement>(impl)\n+51 {}\n+52\n+53 };\n+54\n+55\n+56 template\n+57 class ConstructibleDeprecatedReferenceElement\n+58 : public DeprecatedReferenceElement\n+59 {\n+60 public:\n+61 ConstructibleDeprecatedReferenceElement() = default;\n+62 };\n+63\n+64\n+65 namespace Impl\n+66 {\n+67\n+68 // ReferenceElementContainer\n+69 // -------------------------\n+70\n+71 template< class ctype, int dim >\n+72 class ReferenceElementContainer\n+73 {\n+74 static const unsigned int numTopologies = dim >= 0 ? (1u << dim) : 0;\n+75\n+76 using Implementation = ReferenceElementImplementation< ctype, dim >;\n+77 using ConstructibleDeprecatedReferenceElement = Dune::Geo::\n+ConstructibleDeprecatedReferenceElement;\n+78\n+79 public:\n+80\n+81 using DeprecatedReferenceElement = Dune::Geo::\n+DeprecatedReferenceElement;\n+82\n+83 using ReferenceElement = _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\b>;\n+84 using value_type = ReferenceElement;\n+85 using const_iterator = const value_type*;\n+86\n+87 ReferenceElementContainer ()\n+88 {\n+89 for( unsigned int topologyId = 0; topologyId < numTopologies; ++topologyId )\n+90 {\n+91 implementations_[ topologyId ].initialize( topologyId );\n+92 reference_elements_[ topologyId ].setImplementation( implementations_\n+[ topologyId ] );\n+93 }\n+94 }\n+95\n+96 const ReferenceElement& operator() ( const GeometryType &type ) const\n+97 {\n+98 assert( type.dim() == dim );\n+99 return reference_elements_[ type.id() ];\n+100 }\n+101\n+102 const ReferenceElement& simplex () const\n+103 {\n+104 return reference_elements_[ Dune::GeometryTypes::simplex(dim)._\bi_\bd() ];\n+105 }\n+106\n+107 const ReferenceElement& cube () const\n+108 {\n+109 return reference_elements_[ Dune::GeometryTypes::cube(dim)._\bi_\bd() ];\n+110 }\n+111\n+112 const ReferenceElement& pyramid () const\n+113 {\n+114 return reference_elements_[ Dune::GeometryTypes::pyramid._\bi_\bd() ];\n+115 }\n+116\n+117 const ReferenceElement& prism () const\n+118 {\n+119 return reference_elements_[ Dune::GeometryTypes::prism._\bi_\bd() ];\n+120 }\n+121\n+122 const_iterator begin () const\n+123 {\n+124 return reference_elements_.data();\n+125 }\n+126\n+127 const_iterator end () const\n+128 {\n+129 return reference_elements_.data() + numTopologies;\n+130 }\n+131\n+132 // here, we make sure to actually return a const reference to something\n+133 // that is guaranteed not to become invalid, as otherwise, we might run\n+134 // straight into debugging hell when a user binds the return value to a\n+135 // const ref and the temporary goes out of scope.\n+136 const DeprecatedReferenceElement& deprecated(const ReferenceElement& v)\n+const\n+137 {\n+138 return reference_elements_[v.impl().type(0,0).id()];\n+139 }\n+140\n+141 private:\n+142\n+143 std::array implementations_;\n+144 std::array\n+reference_elements_;\n+145\n+146 };\n+147\n+148\n+149 } // namespace Impl\n+150\n+151\n+152#endif // DOXYGEN\n+153\n+154\n+155 // ReferenceElements\n+156 // ------------------------\n+157\n+168 template< class ctype_, int dim >\n+_\b1_\b6_\b9 struct _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+170 {\n+171\n+_\b1_\b7_\b3 using _\bc_\bt_\by_\bp_\be = ctype_;\n+174\n+_\b1_\b7_\b6 using _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd = _\bc_\bt_\by_\bp_\be;\n+177\n+_\b1_\b7_\b9 static constexpr int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dim;\n+180\n+181 private:\n+182\n+183 using Container = Impl::ReferenceElementContainer< ctype, dim >;\n+184\n+185 public:\n+186\n+_\b1_\b8_\b8 using _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = typename Container::ReferenceElement;\n+189\n+_\b1_\b9_\b1 using _\bI_\bt_\be_\br_\ba_\bt_\bo_\br = typename Container::const_iterator;\n+192\n+_\b1_\b9_\b4 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br = _\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+195\n+197 static const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt&\n+_\b1_\b9_\b8 _\bg_\be_\bn_\be_\br_\ba_\bl ( const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& type )\n+199 {\n+200 return container() ( type );\n+201 }\n+202\n+_\b2_\b0_\b4 static const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bs_\bi_\bm_\bp_\bl_\be_\bx ()\n+205 {\n+206 return container().simplex();\n+207 }\n+208\n+_\b2_\b1_\b0 static const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bc_\bu_\bb_\be ()\n+211 {\n+212 return container().cube();\n+213 }\n+214\n+_\b2_\b1_\b5 static _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn ()\n+216 {\n+217 return container().begin();\n+218 }\n+219\n+_\b2_\b2_\b0 static _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd ()\n+221 {\n+222 return container().end();\n+223 }\n+224\n+225#ifndef DOXYGEN\n+226 static const typename Container::DeprecatedReferenceElement&\n+227 deprecated(const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& v)\n+228 {\n+229 return container().deprecated(v);\n+230 }\n+231#endif // DOXYGEN\n+232\n+233 private:\n+234\n+235 DUNE_EXPORT static const Container& container ()\n+236 {\n+237 static Container container;\n+238 return container;\n+239 }\n+240 };\n+241\n+242 } // namespace Geo\n+243\n+245 using Geo::ReferenceElements;\n+246\n+247\n+248#ifdef DOXYGEN\n+249\n+251\n+294 template\n+_\b2_\b9_\b5 unspecified-value-type _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(T&&... t);\n+296\n+297#endif\n+298\n+299\n+301\n+314 template\n+_\b3_\b1_\b5 auto _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt, _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm_\b<_\bd_\bi_\bm_\b> = {})\n+316 {\n+317 return _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bT_\b,_\bd_\bi_\bm_\b>_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl(gt);\n+318 }\n+319\n+320\n+322\n+334 template>::\n+value, int> = 0>\n+_\b3_\b3_\b5 auto _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const T&, const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt, _\bD_\bu_\bn_\be_\b:_\b:\n+_\bD_\bi_\bm_\b<_\bd_\bi_\bm_\b>)\n+336 {\n+337 return _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bT_\b,_\bd_\bi_\bm_\b>_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl(gt);\n+338 }\n+339\n+340\n+341#ifndef DOXYGEN\n+342\n+343 // helpers for the ReferenceElement<> meta function\n+344\n+345 namespace Impl {\n+346\n+347 // Evaluates to the correct reference element iff matches the\n+pattern >\n+348 // otherwise, it's ill-formed. Should be used with detected_or and friends.\n+349\n+350 template\n+351 struct DefaultReferenceElementExtractor;\n+352\n+353 template::value,int>::type\n+dim>\n+354 struct DefaultReferenceElementExtractor>\n+355 {\n+356 using type = typename _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bT_\b,_\bd_\bi_\bm_\b>_\b:_\b:\n+_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n+357 };\n+358\n+359 template\n+360 using DefaultReferenceElement = typename\n+DefaultReferenceElementExtractor::type;\n+361\n+362 }\n+363\n+364 // looks up the type of a reference element by trying to instantiate the\n+correct overload\n+365 // of referenceElement() for the given arguments. This will fail if there\n+is no valid\n+366 // overload and should be used with detected_or or some other utility that\n+places the\n+367 // instantiation in SFINAE context.\n+368 //\n+369 // this is placed directly in namespace Dune to avoid any weird surprises\n+370\n+371 template\n+372 using LookupReferenceElement = decltype(_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(std::declval\n+()...));\n+373\n+374#endif // DOXYGEN\n+375\n+_\b3_\b7_\b6 namespace Transitional {\n+377\n+378#ifndef DOXYGEN\n+379\n+380 // this abomination checks whether the template signature matches the\n+special case\n+381 // ReferenceElement> and otherwise defers the\n+type lookup\n+382 // to a decltype on a call to referenceElement(std::declval())\n+383\n+384 template\n+385 using ReferenceElement = Std::detected_or_t<\n+386 Std::detected_t,\n+387 Impl::DefaultReferenceElement,\n+388 T...\n+389 >;\n+390\n+391#else // DOXYGEN\n+392\n+394\n+416 template\n+417 using ReferenceElement = unspecified-type;\n+418\n+419#endif //DOXYGEN\n+420\n+421 }\n+422\n+423#ifndef DOXYGEN\n+424\n+425 namespace Impl {\n+426\n+427 // helpers for triggering a deprecation warning for occurrences of the old\n+428 // ReferenceElement syntax (Dune::ReferenceElement)\n+429\n+430 // this looks a little weird, encoding the type in the return type of a\n+nested function,\n+431 // but it was the only reliable way to trigger the warning iff the compiler\n+encounters\n+432 // an invalid use. Other solutions either miss some (or all) uses or\n+trigger false alarms.\n+433\n+434 template\n+435 struct ValidReferenceElementTypeSignature\n+436 {\n+437 Transitional::ReferenceElement check();\n+438 };\n+439\n+440 template\n+441 struct DeprecatedReferenceElementTypeSignature\n+442 {\n+443 [[deprecated(\"Dune::ReferenceElement is deprecated, please use\n+Dune::ReferenceElement (if you have a geometry), Dune::\n+ReferenceElements::ReferenceElement or Dune::Transitional::\n+ReferenceElement> instead. After Dune 2.6, you will be able to\n+use Dune::ReferenceElement>.\")]] T check();\n+444 };\n+445\n+446 } // namespace Impl\n+447\n+448 // This just makes sure the user doesn't use invalid syntax (by checking\n+against the -1 default for\n+449 // the dimension, and then either hands back the old-style type along with\n+a deprecation warning or\n+450 // forwards to the transitional version\n+451 template\n+452 using _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = decltype(\n+453 std::declval<\n+454 typename std::conditional<\n+455 dim == -1,\n+456 Impl::ValidReferenceElementTypeSignature,\n+457 Impl::DeprecatedReferenceElementTypeSignature>\n+458 >::type\n+459 >().check());\n+460\n+461#else // DOXYGEN\n+462\n+464\n+496 template\n+_\b4_\b9_\b7 using _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = unspecified-type;\n+498\n+499#endif // DOXYGEN\n+500\n+501\n+502\n+503} // namespace Dune\n+504\n+505#endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH\n+_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh_\bh\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b._\bh_\bh\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n+_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+_\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+unspecified value type referenceElement(T &&... t)\n+Returns a reference element for the objects t....\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+unspecified-type ReferenceElement\n+Returns the type of reference element for the argument type T.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:497\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bu_\bn_\bt\n-GeometryType geometryTypeFromVertexCount(unsigned int dim, unsigned int\n-vertices)\n-Utitlity function to construct the correct geometry type given the dimension\n-and the number of vertic...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typefromvertexcount.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+This class provides access to geometric and topological properties of a\n+reference element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+Class providing access to the singletons of the reference elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:170\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+static Iterator begin()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:215\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+Iterator iterator\n+Iterator over available reference elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:194\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+typename Container::ReferenceElement ReferenceElement\n+The reference element type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:188\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bc_\bu_\bb_\be\n+static const ReferenceElement & cube()\n+get hypercube reference elements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:210\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\be_\bn_\bd\n+static Iterator end()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:220\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bc_\bt_\by_\bp_\be\n+ctype_ ctype\n+The coordinate field type of the contained reference elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:173\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl\n+static const ReferenceElement & general(const GeometryType &type)\n+get general reference elements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:198\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx\n+static const ReferenceElement & simplex()\n+get simplex reference elements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:204\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+typename Container::const_iterator Iterator\n+Iterator over available reference elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:191\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static constexpr int dimension\n+The dimension of the contained reference elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:179\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd\n+ctype CoordinateField\n+The coordinate field type of the contained reference elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:176\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm\n+Static tag representing a dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:16\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n Unique label for each type of entities that can occur in DUNE grids.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n+constexpr unsigned int id() const\n+Return the topology id of the type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00188.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00188.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: refinement.hh File Reference\n+dune-geometry: referenceelementimplementation.cc File Reference\n \n \n \n \n \n \n \n@@ -69,30 +69,29 @@\n \n
\n \n
\n \n
\n-
refinement.hh File Reference
\n+ \n+
referenceelementimplementation.cc File Reference
\n
\n
\n-\n-

This file simply includes all Refinement implementations so you don't have to do them separately. \n-More...

\n-\n-

Go to the source code of this file.

\n-

Detailed Description

\n-

This file simply includes all Refinement implementations so you don't have to do them separately.

\n-
\n+
#include <config.h>
\n+#include <dune/geometry/referenceelementimplementation.hh>
\n+
\n+\n+\n+\n+\n+\n+

\n+Namespaces

namespace  Dune
 
namespace  Dune::Geo
 
\n+\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,17 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-refinement.hh File Reference\n-This file simply includes all _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementations so you don't have to\n-do them separately. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n-#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bh_\bc_\bu_\bb_\be_\b._\bc_\bc\"\n-#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n-#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bh_\bc_\bu_\bb_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\"\n-#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bp_\br_\bi_\bs_\bm_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\"\n-#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bp_\by_\br_\ba_\bm_\bi_\bd_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\"\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-*\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-This file simply includes all _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementations so you don't have to\n-do them separately.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+referenceelementimplementation.cc File Reference\n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh_\bh>\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:_\bG_\be_\bo\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-geometry-doc/doxygen/a00191.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00191.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: referenceelements.hh File Reference\n+dune-geometry: typeindex.hh File Reference\n \n \n \n \n \n \n \n@@ -71,74 +71,44 @@\n \n \n \n
\n \n-
referenceelements.hh File Reference
\n+Namespaces
\n+
typeindex.hh File Reference
\n \n
\n-
#include <cassert>
\n-#include <algorithm>
\n-#include <limits>
\n-#include <tuple>
\n-#include <utility>
\n-#include <vector>
\n-#include <array>
\n-#include <dune/common/typetraits.hh>
\n-#include <dune/common/std/type_traits.hh>
\n-#include <dune/common/visibility.hh>
\n-#include <dune/geometry/dimension.hh>
\n-#include <dune/geometry/type.hh>
\n-#include <dune/geometry/referenceelement.hh>
\n-#include <dune/geometry/referenceelementimplementation.hh>
\n+\n+

Helper classes to provide indices for geometrytypes for use in a vector. \n+More...

\n+
#include <cstddef>
\n+#include <dune/common/indices.hh>
\n+#include <dune/common/hybridutilities.hh>
\n+#include "type.hh"
\n
\n

Go to the source code of this file.

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

\n Classes

struct  Dune::Geo::ReferenceElements< ctype_, dim >
 Class providing access to the singletons of the reference elements. More...
class  Dune::LocalGeometryTypeIndex
 Compute per-dimension indices for geometry types. More...
 
class  Dune::GlobalGeometryTypeIndex
 Compute indices for geometry types, taking the dimension into account. More...
 
\n \n \n \n-\n-\n-\n-\n-

\n Namespaces

namespace  Dune
 
namespace  Dune::Geo
 
namespace  Dune::Transitional
 
\n-\n-\n-\n-\n-\n-

\n-Typedefs

template<typename T , int dim>
using Dune::ReferenceElement = unspecified-type
 Returns the type of reference element for the argument type T.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

template<typename... T>
unspecified value type Dune::referenceElement (T &&... t)
 Returns a reference element for the objects t....
 
template<typename T , int dim>
auto Dune::referenceElement (const Dune::GeometryType &gt, Dune::Dim< dim >={})
 Returns a reference element of dimension dim for the given geometry type and coordinate field type.
 
template<typename T , int dim, std::enable_if_t< IsNumber< std::decay_t< T > >::value, int > = 0>
auto Dune::referenceElement (const T &, const Dune::GeometryType &gt, Dune::Dim< dim >)
 Returns a reference element of dimension dim for the given geometry type and coordinate field type.
 
\n-
\n+

Detailed Description

\n+

Helper classes to provide indices for geometrytypes for use in a vector.

\n+
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,60 +1,30 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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-referenceelements.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/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+typeindex.hh File Reference\n+Helper classes to provide indices for geometrytypes for use in a vector.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \"_\bt_\by_\bp_\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:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b__\b,_\b _\bd_\bi_\bm_\b _\b>\n-\u00a0 Class providing access to the singletons of the reference elements.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n+\u00a0 Compute per-dimension indices for geometry types. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n+\u00a0 Compute indices for geometry types, taking the dimension into account.\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:_\bG_\be_\bo\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = unspecified-type\n-\u00a0 Returns the type of reference element for the argument type T.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-unspecified value type\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt (T &&... t)\n-\u00a0 Returns a reference element for the objects t....\n-\u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt (const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >,\n- _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm< dim >={})\n-\u00a0 Returns a reference element of dimension dim for the\n- given geometry type and coordinate field type.\n-\u00a0\n-template\n->::value, int > = 0>\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt (const T &, const _\bD_\bu_\bn_\be_\b:_\b:\n- _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >, _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm< dim >)\n-\u00a0 Returns a reference element of dimension dim for the\n- given geometry type and coordinate field type.\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+Helper classes to provide indices for geometrytypes for use in a vector.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00191_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00191_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: referenceelements.hh Source File\n+dune-geometry: typeindex.hh Source File\n \n \n \n \n \n \n \n@@ -74,421 +74,161 @@\n \n
\n \n
\n \n
\n-
referenceelements.hh
\n+
typeindex.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH
\n-
6#define DUNE_GEOMETRY_REFERENCEELEMENTS_HH
\n+
5#ifndef DUNE_GEOMETRY_TYPEINDEX_HH
\n+
6#define DUNE_GEOMETRY_TYPEINDEX_HH
\n
7
\n-
8#include <cassert>
\n-
9
\n-
10#include <algorithm>
\n-
11#include <limits>
\n-
12#include <tuple>
\n-
13#include <utility>
\n-
14#include <vector>
\n-
15#include <array>
\n-
16
\n-
17#include <dune/common/typetraits.hh>
\n-
18#include <dune/common/std/type_traits.hh>
\n-
19#include <dune/common/visibility.hh>
\n+
14#include <cstddef>
\n+
15
\n+
16#include <dune/common/indices.hh>
\n+
17#include <dune/common/hybridutilities.hh>
\n+
18
\n+
19#include "type.hh"
\n
20
\n-\n-
22#include <dune/geometry/type.hh>
\n-\n-\n-
25
\n-
26namespace Dune
\n-
27{
\n-
28
\n-
29 namespace Geo
\n-
30 {
\n-
31
\n-
32#ifndef DOXYGEN
\n-
33
\n-
34
\n-
35 template<typename ctype, int dim>
\n-
36 class DeprecatedReferenceElement
\n-
37 : public ReferenceElement<ReferenceElementImplementation<ctype,dim>>
\n-
38 {
\n-
39
\n-
40 protected:
\n-
41
\n-
42 DeprecatedReferenceElement() = default;
\n-
43
\n-
44 public:
\n-
45
\n-
46 DeprecatedReferenceElement(const DeprecatedReferenceElement&) = delete;
\n-
47 DeprecatedReferenceElement& operator=(const DeprecatedReferenceElement&) = delete;
\n-
48
\n-
49 DeprecatedReferenceElement(const ReferenceElementImplementation<ctype,dim>& impl)
\n-
50 : ReferenceElement<ReferenceElementImplementation<ctype,dim>>(impl)
\n-
51 {}
\n-
52
\n-
53 };
\n+
21namespace Dune
\n+
22{
\n+
\n+\n+
25 {
\n+
32 inline static constexpr std::size_t regular_size(std::size_t dim)
\n+
33 {
\n+
34 // The following expression is derived from the expression for
\n+
35 // GlobalGeometryTypeIndex::regular_offset(). Subtracting
\n+
36 // regular_offset(dim+1)-regular_offset(dim) we get:
\n+
37 //
\n+
38 // ((1 << dim+1) >> 1) - ((1 << dim) >> 1)
\n+
39 //
\n+
40 // We always have
\n+
41 //
\n+
42 // dim >= 0,
\n+
43 //
\n+
44 // so
\n+
45 //
\n+
46 // (1 << dim+1) >= 2 and (1 << dim+2) % 2 == 0.
\n+
47 //
\n+
48 // So if we apply a single right-shift to that, we will never lose any
\n+
49 // set bits, thus
\n+
50 //
\n+
51 // ((1 << dim+1) >> 1) == (1 << dim)
\n+
52 return (1 << dim) - ((1 << dim) >> 1);
\n+
53 }
\n
54
\n-
55
\n-
56 template<typename ctype, int dim>
\n-
57 class ConstructibleDeprecatedReferenceElement
\n-
58 : public DeprecatedReferenceElement<ctype,dim>
\n-
59 {
\n-
60 public:
\n-
61 ConstructibleDeprecatedReferenceElement() = default;
\n-
62 };
\n-
63
\n-
64
\n-
65 namespace Impl
\n-
66 {
\n-
67
\n-
68 // ReferenceElementContainer
\n-
69 // -------------------------
\n-
70
\n-
71 template< class ctype, int dim >
\n-
72 class ReferenceElementContainer
\n-
73 {
\n-
74 static const unsigned int numTopologies = dim >= 0 ? (1u << dim) : 0;
\n-
75
\n-
76 using Implementation = ReferenceElementImplementation< ctype, dim >;
\n-
77 using ConstructibleDeprecatedReferenceElement = Dune::Geo::ConstructibleDeprecatedReferenceElement<ctype,dim>;
\n-
78
\n-
79 public:
\n-
80
\n-
81 using DeprecatedReferenceElement = Dune::Geo::DeprecatedReferenceElement<ctype,dim>;
\n-
82
\n-
83 using ReferenceElement = Dune::Geo::ReferenceElement< Implementation >;
\n-
84 using value_type = ReferenceElement;
\n-
85 using const_iterator = const value_type*;
\n-
86
\n-
87 ReferenceElementContainer ()
\n-
88 {
\n-
89 for( unsigned int topologyId = 0; topologyId < numTopologies; ++topologyId )
\n-
90 {
\n-
91 implementations_[ topologyId ].initialize( topologyId );
\n-
92 reference_elements_[ topologyId ].setImplementation( implementations_[ topologyId ] );
\n-
93 }
\n-
94 }
\n-
95
\n-
96 const ReferenceElement& operator() ( const GeometryType &type ) const
\n-
97 {
\n-
98 assert( type.dim() == dim );
\n-
99 return reference_elements_[ type.id() ];
\n-
100 }
\n-
101
\n-
102 const ReferenceElement& simplex () const
\n-
103 {
\n-
104 return reference_elements_[ Dune::GeometryTypes::simplex(dim).id() ];
\n-
105 }
\n-
106
\n-
107 const ReferenceElement& cube () const
\n-
108 {
\n-
109 return reference_elements_[ Dune::GeometryTypes::cube(dim).id() ];
\n-
110 }
\n-
111
\n-
112 const ReferenceElement& pyramid () const
\n-
113 {
\n-
114 return reference_elements_[ Dune::GeometryTypes::pyramid.id() ];
\n-
115 }
\n-
116
\n-
117 const ReferenceElement& prism () const
\n-
118 {
\n-
119 return reference_elements_[ Dune::GeometryTypes::prism.id() ];
\n-
120 }
\n-
121
\n-
122 const_iterator begin () const
\n-
123 {
\n-
124 return reference_elements_.data();
\n-
125 }
\n-
126
\n-
127 const_iterator end () const
\n-
128 {
\n-
129 return reference_elements_.data() + numTopologies;
\n-
130 }
\n-
131
\n-
132 // here, we make sure to actually return a const reference to something
\n-
133 // that is guaranteed not to become invalid, as otherwise, we might run
\n-
134 // straight into debugging hell when a user binds the return value to a
\n-
135 // const ref and the temporary goes out of scope.
\n-
136 const DeprecatedReferenceElement& deprecated(const ReferenceElement& v) const
\n-
137 {
\n-
138 return reference_elements_[v.impl().type(0,0).id()];
\n-
139 }
\n-
140
\n-
141 private:
\n-
142
\n-
143 std::array<Implementation,numTopologies> implementations_;
\n-
144 std::array<ConstructibleDeprecatedReferenceElement,numTopologies> reference_elements_;
\n+
55 public:
\n+
\n+
61 inline static constexpr std::size_t size(std::size_t dim)
\n+
62 {
\n+
63 // one for "none"
\n+
64 return regular_size(dim) + 1;
\n+
65 }
\n+
\n+
66
\n+
\n+
73 inline static constexpr std::size_t index(const GeometryType &gt)
\n+
74 {
\n+
75 return gt.isNone() ? regular_size(gt.dim()) : (gt.id() >> 1);
\n+
76 }
\n+
\n+
77
\n+
\n+
79 inline static constexpr GeometryType type(std::size_t dim, std::size_t index) {
\n+
80 return (index == regular_size(dim)) ?
\n+
81 GeometryTypes::none(dim) :
\n+
82 // the cast to unsigned makes sure this is interpreted as the topology
\n+
83 // ID constructor
\n+
84 GeometryType(static_cast< unsigned int >(index << 1), dim);
\n+
85 }
\n+
\n+
86 };
\n+
\n+
87
\n+
\n+\n+
90 {
\n+
98 inline static constexpr std::size_t regular_offset(std::size_t dim)
\n+
99 {
\n+
100 // The number of regular geometry types in a given dimension is
\n+
101 // 2^(dim-1). For dim==0 this would yield 1/2 geometry types (which is
\n+
102 // obviously bogus, dim==0 has one regular geometry type, the point).
\n+
103 // The following expression relies on 1 >> 1 == 0 to treat dim==0
\n+
104 // specially.
\n+
105 return (1 << dim) >> 1;
\n+
106 }
\n+
107
\n+
108 public:
\n+
\n+
113 inline static constexpr std::size_t offset(std::size_t dim)
\n+
114 {
\n+
115 // dim times "none"
\n+
116 return regular_offset(dim) + dim;
\n+
117 }
\n+
\n+
118
\n+
\n+
125 inline static constexpr std::size_t size(std::size_t maxdim)
\n+
126 {
\n+
127 return offset(maxdim+1);
\n+
128 }
\n+
\n+
129
\n+
\n+
138 inline static constexpr std::size_t index(const GeometryType &gt)
\n+
139 {
\n+
140 return offset(gt.dim()) + LocalGeometryTypeIndex::index(gt);
\n+
141 }
\n+
\n+
142 };
\n+
\n+
143
\n+
144 namespace Impl {
\n
145
\n-
146 };
\n-
147
\n-
148
\n-
149 } // namespace Impl
\n-
150
\n-
151
\n-
152#endif // DOXYGEN
\n-
153
\n-
154
\n-
155 // ReferenceElements
\n-
156 // ------------------------
\n-
157
\n-
168 template< class ctype_, int dim >
\n-
\n-\n-
170 {
\n-
171
\n-
173 using ctype = ctype_;
\n-
174
\n-\n-
177
\n-
179 static constexpr int dimension = dim;
\n-
180
\n-
181 private:
\n-
182
\n-
183 using Container = Impl::ReferenceElementContainer< ctype, dim >;
\n-
184
\n-
185 public:
\n-
186
\n-
188 using ReferenceElement = typename Container::ReferenceElement;
\n-
189
\n-
191 using Iterator = typename Container::const_iterator;
\n-
192
\n-\n-
195
\n-
197 static const ReferenceElement&
\n-
\n-
198 general ( const GeometryType& type )
\n-
199 {
\n-
200 return container() ( type );
\n-
201 }
\n-
\n-
202
\n-
\n-
204 static const ReferenceElement& simplex ()
\n-
205 {
\n-
206 return container().simplex();
\n-
207 }
\n-
\n-
208
\n-
\n-
210 static const ReferenceElement& cube ()
\n-
211 {
\n-
212 return container().cube();
\n-
213 }
\n-
\n-
214
\n-
\n-
215 static Iterator begin ()
\n-
216 {
\n-
217 return container().begin();
\n-
218 }
\n-
\n-
219
\n-
\n-
220 static Iterator end ()
\n-
221 {
\n-
222 return container().end();
\n-
223 }
\n-
\n-
224
\n-
225#ifndef DOXYGEN
\n-
226 static const typename Container::DeprecatedReferenceElement&
\n-
227 deprecated(const ReferenceElement& v)
\n-
228 {
\n-
229 return container().deprecated(v);
\n-
230 }
\n-
231#endif // DOXYGEN
\n-
232
\n-
233 private:
\n-
234
\n-
235 DUNE_EXPORT static const Container& container ()
\n-
236 {
\n-
237 static Container container;
\n-
238 return container;
\n-
239 }
\n-
240 };
\n-
\n-
241
\n-
242 } // namespace Geo
\n-
243
\n-
245 using Geo::ReferenceElements;
\n-
246
\n-
247
\n-
248#ifdef DOXYGEN
\n-
249
\n-
251
\n-
294 template<typename... T>
\n-
295 unspecified-value-type referenceElement(T&&... t);
\n-
296
\n-
297#endif
\n-
298
\n-
299
\n-
301
\n-
314 template<typename T, int dim>
\n-
\n-\n-
316 {
\n-\n-
318 }
\n-
\n-
319
\n-
320
\n-
322
\n-
334 template<typename T, int dim, std::enable_if_t<IsNumber<std::decay_t<T>>::value, int> = 0>
\n-
\n-\n-
336 {
\n-\n-
338 }
\n-
\n-
339
\n-
340
\n-
341#ifndef DOXYGEN
\n-
342
\n-
343 // helpers for the ReferenceElement<> meta function
\n-
344
\n-
345 namespace Impl {
\n-
346
\n-
347 // Evaluates to the correct reference element iff <T...> matches the pattern <number_type,Dim<int>>
\n-
348 // otherwise, it's ill-formed. Should be used with detected_or and friends.
\n-
349
\n-
350 template<typename... T>
\n-
351 struct DefaultReferenceElementExtractor;
\n-
352
\n-
353 template<typename T, typename std::enable_if<IsNumber<T>::value,int>::type dim>
\n-
354 struct DefaultReferenceElementExtractor<T,Dim<dim>>
\n-
355 {
\n-\n-
357 };
\n-
358
\n-
359 template<typename... T>
\n-
360 using DefaultReferenceElement = typename DefaultReferenceElementExtractor<T...>::type;
\n-
361
\n-
362 }
\n-
363
\n-
364 // looks up the type of a reference element by trying to instantiate the correct overload
\n-
365 // of referenceElement() for the given arguments. This will fail if there is no valid
\n-
366 // overload and should be used with detected_or or some other utility that places the
\n-
367 // instantiation in SFINAE context.
\n-
368 //
\n-
369 // this is placed directly in namespace Dune to avoid any weird surprises
\n-
370
\n-
371 template<typename... T>
\n-
372 using LookupReferenceElement = decltype(referenceElement(std::declval<T>()...));
\n-
373
\n-
374#endif // DOXYGEN
\n-
375
\n-
\n-
376 namespace Transitional {
\n-
377
\n-
378#ifndef DOXYGEN
\n-
379
\n-
380 // this abomination checks whether the template signature matches the special case
\n-
381 // ReferenceElement<number_type,Dune::Dim<int>> and otherwise defers the type lookup
\n-
382 // to a decltype on a call to referenceElement(std::declval<T>())
\n-
383
\n-
384 template<typename... T>
\n-
385 using ReferenceElement = Std::detected_or_t<
\n-
386 Std::detected_t<LookupReferenceElement,T...>,
\n-
387 Impl::DefaultReferenceElement,
\n-
388 T...
\n-
389 >;
\n-
390
\n-
391#else // DOXYGEN
\n-
392
\n-
394
\n-
416 template<typename... T>
\n-
417 using ReferenceElement = unspecified-type;
\n-
418
\n-
419#endif //DOXYGEN
\n-
420
\n-
421 }
\n-
\n-
422
\n-
423#ifndef DOXYGEN
\n-
424
\n-
425 namespace Impl {
\n-
426
\n-
427 // helpers for triggering a deprecation warning for occurrences of the old
\n-
428 // ReferenceElement syntax (Dune::ReferenceElement<T,int>)
\n-
429
\n-
430 // this looks a little weird, encoding the type in the return type of a nested function,
\n-
431 // but it was the only reliable way to trigger the warning iff the compiler encounters
\n-
432 // an invalid use. Other solutions either miss some (or all) uses or trigger false alarms.
\n-
433
\n-
434 template<typename T>
\n-
435 struct ValidReferenceElementTypeSignature
\n-
436 {
\n-
437 Transitional::ReferenceElement<T> check();
\n-
438 };
\n-
439
\n-
440 template<typename T>
\n-
441 struct DeprecatedReferenceElementTypeSignature
\n-
442 {
\n-
443 [[deprecated("Dune::ReferenceElement<T,int> is deprecated, please use Dune::ReferenceElement<Geometry> (if you have a geometry), Dune::ReferenceElements<T,int>::ReferenceElement or Dune::Transitional::ReferenceElement<T,Dune::Dim<int>> instead. After Dune 2.6, you will be able to use Dune::ReferenceElement<T,Dune::Dim<int>>.")]] T check();
\n-
444 };
\n-
445
\n-
446 } // namespace Impl
\n-
447
\n-
448 // This just makes sure the user doesn't use invalid syntax (by checking against the -1 default for
\n-
449 // the dimension, and then either hands back the old-style type along with a deprecation warning or
\n-
450 // forwards to the transitional version
\n-
451 template<typename T, int dim = -1>
\n-
452 using ReferenceElement = decltype(
\n-
453 std::declval<
\n-
454 typename std::conditional<
\n-
455 dim == -1,
\n-
456 Impl::ValidReferenceElementTypeSignature<T>,
\n-
457 Impl::DeprecatedReferenceElementTypeSignature<Geo::DeprecatedReferenceElement<T,dim>>
\n-
458 >::type
\n-
459 >().check());
\n-
460
\n-
461#else // DOXYGEN
\n-
462
\n-
464
\n-
496 template<typename T, int dim>
\n-
497 using ReferenceElement = unspecified-type;
\n-
498
\n-
499#endif // DOXYGEN
\n-
500
\n-
501
\n-
502
\n-
503} // namespace Dune
\n-
504
\n-
505#endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH
\n-\n-\n-\n-
A unique label for each type of element that can occur in a grid.
\n-
unspecified value type referenceElement(T &&... t)
Returns a reference element for the objects t....
\n-
unspecified-type ReferenceElement
Returns the type of reference element for the argument type T.
Definition referenceelements.hh:497
\n+
146 // Map a dynamic GeometryType to a static integral_constant<GeometryType::Id, ...>
\n+
147 template<int dim, class F>
\n+
148 static auto toGeometryTypeIdConstant(const GeometryType& gt, F&& f) {
\n+
149 // Transform LocalGeometryTypeIndex to GeometryType::Id
\n+
150 auto callWithId = [&](auto index) {
\n+
151 static constexpr auto id = LocalGeometryTypeIndex::type(dim, decltype(index)::value).toId();
\n+
152 return f(std::integral_constant<GeometryType::Id, id>{});
\n+
153 };
\n+
154 // switchCases needs a fallback to determine the return type.
\n+
155 auto fallBack = [&]() { return callWithId(Dune::Indices::_0); };
\n+
156 // Iterate over all _regular_ GeometryType indices for given dimension
\n+
157 auto allIndices = std::make_index_sequence<LocalGeometryTypeIndex::size(dim)-1>{};
\n+
158 return Dune::Hybrid::switchCases(allIndices, LocalGeometryTypeIndex::index(gt), callWithId, fallBack);
\n+
159 }
\n+
160
\n+
161 } // namespace Impl
\n+
162} // namespace Dune
\n+
163
\n+
164#endif // DUNE_GEOMETRY_TYPEINDEX_HH
\n+
A unique label for each type of element that can occur in a grid.
\n
Definition affinegeometry.hh:21
\n-
This class provides access to geometric and topological properties of a reference element.
Definition referenceelement.hh:52
\n-
Class providing access to the singletons of the reference elements.
Definition referenceelements.hh:170
\n-
static Iterator begin()
Definition referenceelements.hh:215
\n-
Iterator iterator
Iterator over available reference elements.
Definition referenceelements.hh:194
\n-
typename Container::ReferenceElement ReferenceElement
The reference element type.
Definition referenceelements.hh:188
\n-
static const ReferenceElement & cube()
get hypercube reference elements
Definition referenceelements.hh:210
\n-
static Iterator end()
Definition referenceelements.hh:220
\n-
ctype_ ctype
The coordinate field type of the contained reference elements.
Definition referenceelements.hh:173
\n-
static const ReferenceElement & general(const GeometryType &type)
get general reference elements
Definition referenceelements.hh:198
\n-
static const ReferenceElement & simplex()
get simplex reference elements
Definition referenceelements.hh:204
\n-
typename Container::const_iterator Iterator
Iterator over available reference elements.
Definition referenceelements.hh:191
\n-
static constexpr int dimension
The dimension of the contained reference elements.
Definition referenceelements.hh:179
\n-
ctype CoordinateField
The coordinate field type of the contained reference elements.
Definition referenceelements.hh:176
\n-
Static tag representing a dimension.
Definition dimension.hh:16
\n
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n+
constexpr Id toId() const
Create an Id representation of this GeometryType.
Definition type.hh:222
\n+
constexpr unsigned int dim() const
Return dimension of the type.
Definition type.hh:372
\n
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
\n+
constexpr bool isNone() const
Return true if entity is a singular of any dimension.
Definition type.hh:367
\n+
Compute per-dimension indices for geometry types.
Definition typeindex.hh:25
\n+
static constexpr std::size_t size(std::size_t dim)
Compute total number of geometry types for the given dimension.
Definition typeindex.hh:61
\n+
static constexpr GeometryType type(std::size_t dim, std::size_t index)
compute the geometry type for the given local index and dimension
Definition typeindex.hh:79
\n+
static constexpr std::size_t index(const GeometryType &gt)
Compute the index for the given geometry type within its dimension.
Definition typeindex.hh:73
\n+
Compute indices for geometry types, taking the dimension into account.
Definition typeindex.hh:90
\n+
static constexpr std::size_t index(const GeometryType &gt)
Compute the index for the given geometry type over all dimensions.
Definition typeindex.hh:138
\n+
static constexpr std::size_t offset(std::size_t dim)
Compute the starting index for a given dimension including irregular geometry types.
Definition typeindex.hh:113
\n+
static constexpr std::size_t size(std::size_t maxdim)
Compute total number of geometry types up to and including the given dimension.
Definition typeindex.hh:125
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,476 +1,183 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-referenceelements.hh\n+typeindex.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH\n-6#define DUNE_GEOMETRY_REFERENCEELEMENTS_HH\n+5#ifndef DUNE_GEOMETRY_TYPEINDEX_HH\n+6#define DUNE_GEOMETRY_TYPEINDEX_HH\n 7\n-8#include \n-9\n-10#include \n-11#include \n-12#include \n-13#include \n-14#include \n-15#include \n-16\n-17#include \n-18#include \n-19#include \n+14#include \n+15\n+16#include \n+17#include \n+18\n+19#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n 20\n-21#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b._\bh_\bh>\n-22#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-23#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n-24#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh_\bh>\n-25\n-26namespace _\bD_\bu_\bn_\be\n-27{\n-28\n-29 namespace Geo\n-30 {\n-31\n-32#ifndef DOXYGEN\n-33\n-34\n-35 template\n-36 class DeprecatedReferenceElement\n-37 : public ReferenceElement>\n-38 {\n-39\n-40 protected:\n-41\n-42 DeprecatedReferenceElement() = default;\n-43\n-44 public:\n-45\n-46 DeprecatedReferenceElement(const DeprecatedReferenceElement&) = delete;\n-47 DeprecatedReferenceElement& operator=(const DeprecatedReferenceElement&) =\n-delete;\n-48\n-49 DeprecatedReferenceElement(const ReferenceElementImplementation&\n-impl)\n-50 : ReferenceElement>(impl)\n-51 {}\n-52\n-53 };\n+21namespace _\bD_\bu_\bn_\be\n+22{\n+_\b2_\b4 class _\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n+25 {\n+32 inline static constexpr std::size_t regular_size(std::size_t dim)\n+33 {\n+34 // The following expression is derived from the expression for\n+35 // GlobalGeometryTypeIndex::regular_offset(). Subtracting\n+36 // regular_offset(dim+1)-regular_offset(dim) we get:\n+37 //\n+38 // ((1 << dim+1) >> 1) - ((1 << dim) >> 1)\n+39 //\n+40 // We always have\n+41 //\n+42 // dim >= 0,\n+43 //\n+44 // so\n+45 //\n+46 // (1 << dim+1) >= 2 and (1 << dim+2) % 2 == 0.\n+47 //\n+48 // So if we apply a single right-shift to that, we will never lose any\n+49 // set bits, thus\n+50 //\n+51 // ((1 << dim+1) >> 1) == (1 << dim)\n+52 return (1 << dim) - ((1 << dim) >> 1);\n+53 }\n 54\n-55\n-56 template\n-57 class ConstructibleDeprecatedReferenceElement\n-58 : public DeprecatedReferenceElement\n-59 {\n-60 public:\n-61 ConstructibleDeprecatedReferenceElement() = default;\n-62 };\n-63\n-64\n-65 namespace Impl\n-66 {\n-67\n-68 // ReferenceElementContainer\n-69 // -------------------------\n-70\n-71 template< class ctype, int dim >\n-72 class ReferenceElementContainer\n-73 {\n-74 static const unsigned int numTopologies = dim >= 0 ? (1u << dim) : 0;\n-75\n-76 using Implementation = ReferenceElementImplementation< ctype, dim >;\n-77 using ConstructibleDeprecatedReferenceElement = Dune::Geo::\n-ConstructibleDeprecatedReferenceElement;\n-78\n-79 public:\n-80\n-81 using DeprecatedReferenceElement = Dune::Geo::\n-DeprecatedReferenceElement;\n-82\n-83 using ReferenceElement = _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\b>;\n-84 using value_type = ReferenceElement;\n-85 using const_iterator = const value_type*;\n-86\n-87 ReferenceElementContainer ()\n-88 {\n-89 for( unsigned int topologyId = 0; topologyId < numTopologies; ++topologyId )\n+55 public:\n+_\b6_\b1 inline static constexpr std::size_t _\bs_\bi_\bz_\be(std::size_t dim)\n+62 {\n+63 // one for \"none\"\n+64 return regular_size(dim) + 1;\n+65 }\n+66\n+_\b7_\b3 inline static constexpr std::size_t _\bi_\bn_\bd_\be_\bx(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >)\n+74 {\n+75 return gt._\bi_\bs_\bN_\bo_\bn_\be() ? regular_size(gt._\bd_\bi_\bm()) : (gt._\bi_\bd() >> 1);\n+76 }\n+77\n+_\b7_\b9 inline static constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bt_\by_\bp_\be(std::size_t dim, std::size_t\n+_\bi_\bn_\bd_\be_\bx) {\n+80 return (_\bi_\bn_\bd_\be_\bx == regular_size(dim)) ?\n+81 GeometryTypes::none(dim) :\n+82 // the cast to unsigned makes sure this is interpreted as the topology\n+83 // ID constructor\n+84 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(static_cast< unsigned int >(_\bi_\bn_\bd_\be_\bx << 1), dim);\n+85 }\n+86 };\n+87\n+_\b8_\b9 class _\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n 90 {\n-91 implementations_[ topologyId ].initialize( topologyId );\n-92 reference_elements_[ topologyId ].setImplementation( implementations_\n-[ topologyId ] );\n-93 }\n-94 }\n-95\n-96 const ReferenceElement& operator() ( const GeometryType &type ) const\n-97 {\n-98 assert( type.dim() == dim );\n-99 return reference_elements_[ type.id() ];\n-100 }\n-101\n-102 const ReferenceElement& simplex () const\n-103 {\n-104 return reference_elements_[ Dune::GeometryTypes::simplex(dim)._\bi_\bd() ];\n-105 }\n-106\n-107 const ReferenceElement& cube () const\n-108 {\n-109 return reference_elements_[ Dune::GeometryTypes::cube(dim)._\bi_\bd() ];\n-110 }\n-111\n-112 const ReferenceElement& pyramid () const\n-113 {\n-114 return reference_elements_[ Dune::GeometryTypes::pyramid._\bi_\bd() ];\n-115 }\n-116\n-117 const ReferenceElement& prism () const\n-118 {\n-119 return reference_elements_[ Dune::GeometryTypes::prism._\bi_\bd() ];\n-120 }\n-121\n-122 const_iterator begin () const\n-123 {\n-124 return reference_elements_.data();\n-125 }\n-126\n-127 const_iterator end () const\n-128 {\n-129 return reference_elements_.data() + numTopologies;\n-130 }\n-131\n-132 // here, we make sure to actually return a const reference to something\n-133 // that is guaranteed not to become invalid, as otherwise, we might run\n-134 // straight into debugging hell when a user binds the return value to a\n-135 // const ref and the temporary goes out of scope.\n-136 const DeprecatedReferenceElement& deprecated(const ReferenceElement& v)\n-const\n-137 {\n-138 return reference_elements_[v.impl().type(0,0).id()];\n-139 }\n-140\n-141 private:\n-142\n-143 std::array implementations_;\n-144 std::array\n-reference_elements_;\n+98 inline static constexpr std::size_t regular_offset(std::size_t dim)\n+99 {\n+100 // The number of regular geometry types in a given dimension is\n+101 // 2^(dim-1). For dim==0 this would yield 1/2 geometry types (which is\n+102 // obviously bogus, dim==0 has one regular geometry type, the point).\n+103 // The following expression relies on 1 >> 1 == 0 to treat dim==0\n+104 // specially.\n+105 return (1 << dim) >> 1;\n+106 }\n+107\n+108 public:\n+_\b1_\b1_\b3 inline static constexpr std::size_t _\bo_\bf_\bf_\bs_\be_\bt(std::size_t dim)\n+114 {\n+115 // dim times \"none\"\n+116 return regular_offset(dim) + dim;\n+117 }\n+118\n+_\b1_\b2_\b5 inline static constexpr std::size_t _\bs_\bi_\bz_\be(std::size_t maxdim)\n+126 {\n+127 return _\bo_\bf_\bf_\bs_\be_\bt(maxdim+1);\n+128 }\n+129\n+_\b1_\b3_\b8 inline static constexpr std::size_t _\bi_\bn_\bd_\be_\bx(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >)\n+139 {\n+140 return _\bo_\bf_\bf_\bs_\be_\bt(gt._\bd_\bi_\bm()) + _\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx(gt);\n+141 }\n+142 };\n+143\n+144 namespace Impl {\n 145\n-146 };\n-147\n-148\n-149 } // namespace Impl\n-150\n-151\n-152#endif // DOXYGEN\n-153\n-154\n-155 // ReferenceElements\n-156 // ------------------------\n-157\n-168 template< class ctype_, int dim >\n-_\b1_\b6_\b9 struct _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-170 {\n-171\n-_\b1_\b7_\b3 using _\bc_\bt_\by_\bp_\be = ctype_;\n-174\n-_\b1_\b7_\b6 using _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd = _\bc_\bt_\by_\bp_\be;\n-177\n-_\b1_\b7_\b9 static constexpr int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dim;\n-180\n-181 private:\n-182\n-183 using Container = Impl::ReferenceElementContainer< ctype, dim >;\n-184\n-185 public:\n-186\n-_\b1_\b8_\b8 using _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = typename Container::ReferenceElement;\n-189\n-_\b1_\b9_\b1 using _\bI_\bt_\be_\br_\ba_\bt_\bo_\br = typename Container::const_iterator;\n-192\n-_\b1_\b9_\b4 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br = _\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-195\n-197 static const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt&\n-_\b1_\b9_\b8 _\bg_\be_\bn_\be_\br_\ba_\bl ( const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& type )\n-199 {\n-200 return container() ( type );\n-201 }\n-202\n-_\b2_\b0_\b4 static const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bs_\bi_\bm_\bp_\bl_\be_\bx ()\n-205 {\n-206 return container().simplex();\n-207 }\n-208\n-_\b2_\b1_\b0 static const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& _\bc_\bu_\bb_\be ()\n-211 {\n-212 return container().cube();\n-213 }\n-214\n-_\b2_\b1_\b5 static _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn ()\n-216 {\n-217 return container().begin();\n-218 }\n-219\n-_\b2_\b2_\b0 static _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd ()\n-221 {\n-222 return container().end();\n-223 }\n-224\n-225#ifndef DOXYGEN\n-226 static const typename Container::DeprecatedReferenceElement&\n-227 deprecated(const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& v)\n-228 {\n-229 return container().deprecated(v);\n-230 }\n-231#endif // DOXYGEN\n-232\n-233 private:\n-234\n-235 DUNE_EXPORT static const Container& container ()\n-236 {\n-237 static Container container;\n-238 return container;\n-239 }\n-240 };\n-241\n-242 } // namespace Geo\n-243\n-245 using Geo::ReferenceElements;\n-246\n-247\n-248#ifdef DOXYGEN\n-249\n-251\n-294 template\n-_\b2_\b9_\b5 unspecified-value-type _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(T&&... t);\n-296\n-297#endif\n-298\n-299\n-301\n-314 template\n-_\b3_\b1_\b5 auto _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt, _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm_\b<_\bd_\bi_\bm_\b> = {})\n-316 {\n-317 return _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bT_\b,_\bd_\bi_\bm_\b>_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl(gt);\n-318 }\n-319\n-320\n-322\n-334 template>::\n-value, int> = 0>\n-_\b3_\b3_\b5 auto _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const T&, const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt, _\bD_\bu_\bn_\be_\b:_\b:\n-_\bD_\bi_\bm_\b<_\bd_\bi_\bm_\b>)\n-336 {\n-337 return _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bT_\b,_\bd_\bi_\bm_\b>_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl(gt);\n-338 }\n-339\n-340\n-341#ifndef DOXYGEN\n-342\n-343 // helpers for the ReferenceElement<> meta function\n-344\n-345 namespace Impl {\n-346\n-347 // Evaluates to the correct reference element iff matches the\n-pattern >\n-348 // otherwise, it's ill-formed. Should be used with detected_or and friends.\n-349\n-350 template\n-351 struct DefaultReferenceElementExtractor;\n-352\n-353 template::value,int>::type\n-dim>\n-354 struct DefaultReferenceElementExtractor>\n-355 {\n-356 using type = typename _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bT_\b,_\bd_\bi_\bm_\b>_\b:_\b:\n-_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n-357 };\n-358\n-359 template\n-360 using DefaultReferenceElement = typename\n-DefaultReferenceElementExtractor::type;\n-361\n-362 }\n-363\n-364 // looks up the type of a reference element by trying to instantiate the\n-correct overload\n-365 // of referenceElement() for the given arguments. This will fail if there\n-is no valid\n-366 // overload and should be used with detected_or or some other utility that\n-places the\n-367 // instantiation in SFINAE context.\n-368 //\n-369 // this is placed directly in namespace Dune to avoid any weird surprises\n-370\n-371 template\n-372 using LookupReferenceElement = decltype(_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(std::declval\n-()...));\n-373\n-374#endif // DOXYGEN\n-375\n-_\b3_\b7_\b6 namespace Transitional {\n-377\n-378#ifndef DOXYGEN\n-379\n-380 // this abomination checks whether the template signature matches the\n-special case\n-381 // ReferenceElement> and otherwise defers the\n-type lookup\n-382 // to a decltype on a call to referenceElement(std::declval())\n-383\n-384 template\n-385 using ReferenceElement = Std::detected_or_t<\n-386 Std::detected_t,\n-387 Impl::DefaultReferenceElement,\n-388 T...\n-389 >;\n-390\n-391#else // DOXYGEN\n-392\n-394\n-416 template\n-417 using ReferenceElement = unspecified-type;\n-418\n-419#endif //DOXYGEN\n-420\n-421 }\n-422\n-423#ifndef DOXYGEN\n-424\n-425 namespace Impl {\n-426\n-427 // helpers for triggering a deprecation warning for occurrences of the old\n-428 // ReferenceElement syntax (Dune::ReferenceElement)\n-429\n-430 // this looks a little weird, encoding the type in the return type of a\n-nested function,\n-431 // but it was the only reliable way to trigger the warning iff the compiler\n-encounters\n-432 // an invalid use. Other solutions either miss some (or all) uses or\n-trigger false alarms.\n-433\n-434 template\n-435 struct ValidReferenceElementTypeSignature\n-436 {\n-437 Transitional::ReferenceElement check();\n-438 };\n-439\n-440 template\n-441 struct DeprecatedReferenceElementTypeSignature\n-442 {\n-443 [[deprecated(\"Dune::ReferenceElement is deprecated, please use\n-Dune::ReferenceElement (if you have a geometry), Dune::\n-ReferenceElements::ReferenceElement or Dune::Transitional::\n-ReferenceElement> instead. After Dune 2.6, you will be able to\n-use Dune::ReferenceElement>.\")]] T check();\n-444 };\n-445\n-446 } // namespace Impl\n-447\n-448 // This just makes sure the user doesn't use invalid syntax (by checking\n-against the -1 default for\n-449 // the dimension, and then either hands back the old-style type along with\n-a deprecation warning or\n-450 // forwards to the transitional version\n-451 template\n-452 using _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = decltype(\n-453 std::declval<\n-454 typename std::conditional<\n-455 dim == -1,\n-456 Impl::ValidReferenceElementTypeSignature,\n-457 Impl::DeprecatedReferenceElementTypeSignature>\n-458 >::type\n-459 >().check());\n-460\n-461#else // DOXYGEN\n-462\n-464\n-496 template\n-_\b4_\b9_\b7 using _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt = unspecified-type;\n-498\n-499#endif // DOXYGEN\n-500\n-501\n-502\n-503} // namespace Dune\n-504\n-505#endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b._\bh_\bh\n-_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh_\bh\n-_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+146 // Map a dynamic GeometryType to a static integral_constant\n+147 template\n+148 static auto toGeometryTypeIdConstant(const GeometryType& gt, F&& f) {\n+149 // Transform LocalGeometryTypeIndex to GeometryType::Id\n+150 auto callWithId = [&](auto index) {\n+151 static constexpr auto id = _\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bt_\by_\bp_\be(dim, decltype\n+(index)::value)._\bt_\bo_\bI_\bd();\n+152 return f(std::integral_constant{});\n+153 };\n+154 // switchCases needs a fallback to determine the return type.\n+155 auto fallBack = [&]() { return callWithId(Dune::Indices::_0); };\n+156 // Iterate over all _regular_ GeometryType indices for given dimension\n+157 auto allIndices = std::make_index_sequence<_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n+(dim)-1>{};\n+158 return Dune::Hybrid::switchCases(allIndices, _\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx\n+(gt), callWithId, fallBack);\n+159 }\n+160\n+161 } // namespace Impl\n+162} // namespace Dune\n+163\n+164#endif // DUNE_GEOMETRY_TYPEINDEX_HH\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n-_\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-unspecified value type referenceElement(T &&... t)\n-Returns a reference element for the objects t....\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-unspecified-type ReferenceElement\n-Returns the type of reference element for the argument type T.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:497\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-This class provides access to geometric and topological properties of a\n-reference element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-Class providing access to the singletons of the reference elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:170\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-static Iterator begin()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:215\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Iterator iterator\n-Iterator over available reference elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:194\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename Container::ReferenceElement ReferenceElement\n-The reference element type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bc_\bu_\bb_\be\n-static const ReferenceElement & cube()\n-get hypercube reference elements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:210\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\be_\bn_\bd\n-static Iterator end()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:220\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bc_\bt_\by_\bp_\be\n-ctype_ ctype\n-The coordinate field type of the contained reference elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:173\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl\n-static const ReferenceElement & general(const GeometryType &type)\n-get general reference elements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:198\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx\n-static const ReferenceElement & simplex()\n-get simplex reference elements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:204\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-typename Container::const_iterator Iterator\n-Iterator over available reference elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:191\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static constexpr int dimension\n-The dimension of the contained reference elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:179\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd\n-ctype CoordinateField\n-The coordinate field type of the contained reference elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:176\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm\n-Static tag representing a dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:16\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n Unique label for each type of entities that can occur in DUNE grids.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bt_\bo_\bI_\bd\n+constexpr Id toId() const\n+Create an Id representation of this GeometryType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:222\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bd_\bi_\bm\n+constexpr unsigned int dim() const\n+Return dimension of the type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:372\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n constexpr unsigned int id() const\n Return the topology id of the type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bN_\bo_\bn_\be\n+constexpr bool isNone() const\n+Return true if entity is a singular of any dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:367\n+_\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n+Compute per-dimension indices for geometry types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:25\n+_\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n+static constexpr std::size_t size(std::size_t dim)\n+Compute total number of geometry types for the given dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:61\n+_\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bt_\by_\bp_\be\n+static constexpr GeometryType type(std::size_t dim, std::size_t index)\n+compute the geometry type for the given local index and dimension\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:79\n+_\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx\n+static constexpr std::size_t index(const GeometryType >)\n+Compute the index for the given geometry type within its dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:73\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx\n+Compute indices for geometry types, taking the dimension into account.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:90\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx\n+static constexpr std::size_t index(const GeometryType >)\n+Compute the index for the given geometry type over all dimensions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:138\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bo_\bf_\bf_\bs_\be_\bt\n+static constexpr std::size_t offset(std::size_t dim)\n+Compute the starting index for a given dimension including irregular geometry\n+types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:113\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n+static constexpr std::size_t size(std::size_t maxdim)\n+Compute total number of geometry types up to and including the given dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:125\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00194.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00194.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: multilineargeometry.hh File Reference\n+dune-geometry: generalvertexorder.hh File Reference\n \n \n \n \n \n \n \n@@ -71,56 +71,50 @@\n \n \n \n
\n \n-
multilineargeometry.hh File Reference
\n+Namespaces |\n+Functions
\n+
generalvertexorder.hh File Reference
\n \n
\n-
#include <cassert>
\n-#include <functional>
\n+
#include <algorithm>
\n+#include <cassert>
\n+#include <cstddef>
\n #include <iterator>
\n-#include <limits>
\n #include <vector>
\n-#include <dune/common/fmatrix.hh>
\n-#include <dune/common/fvector.hh>
\n-#include <dune/common/typetraits.hh>
\n-#include <dune/geometry/affinegeometry.hh>
\n-#include <dune/geometry/referenceelements.hh>
\n-#include <dune/geometry/type.hh>
\n+#include <dune/common/iteratorfacades.hh>
\n+#include "type.hh"
\n+#include <dune/geometry/referenceelements.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 Classes

struct  Dune::MultiLinearGeometryTraits< ct >
 default traits class for MultiLinearGeometry More...
class  Dune::GeneralVertexOrder< dim, Index_ >
 Class providing information on the ordering of vertices. More...
 
struct  Dune::MultiLinearGeometryTraits< ct >::CornerStorage< mydim, cdim >
 template specifying the storage for the corners More...
 
struct  Dune::MultiLinearGeometryTraits< ct >::hasSingleGeometryType< dim >
 will there be only one geometry type for a dimension? More...
 
class  Dune::MultiLinearGeometry< ct, mydim, cdim, Traits >
 generic geometry implementation based on corner coordinates More...
 
class  Dune::MultiLinearGeometry< ct, mydim, cdim, Traits >::JacobianInverseTransposed
 
class  Dune::CachedMultiLinearGeometry< ct, mydim, cdim, Traits >
 Implement a MultiLinearGeometry with additional caching. More...
class  Dune::GeneralVertexOrder< dim, Index_ >::iterator
 Iterate over the vertex indices of some sub-entity. More...
 
\n \n \n \n+

\n Namespaces

namespace  Dune
 
\n+\n+\n+\n+\n+\n

\n+Functions

template<class InIterator , class OutIterator >
void Dune::reduceOrder (const InIterator &inBegin, const InIterator &inEnd, OutIterator outIt)
 Algorithm to reduce vertex order information.
 
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +1,35 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-multilineargeometry.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+generalvertexorder.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/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n+#include \n+#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\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:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bt_\b _\b>\n-\u00a0 default traits class for _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b<_\b _\bd_\bi_\bm_\b,_\b _\bI_\bn_\bd_\be_\bx_\b__\b _\b>\n+\u00a0 Class providing information on the ordering of vertices. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bt_\b _\b>_\b:_\b:_\bC_\bo_\br_\bn_\be_\br_\bS_\bt_\bo_\br_\ba_\bg_\be_\b<_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b _\b>\n-\u00a0 template specifying the storage for the corners _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bt_\b _\b>_\b:_\b:_\bh_\ba_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b<_\b _\bd_\bi_\bm_\b _\b>\n-\u00a0 will there be only one geometry type for a dimension? _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-\u00a0 generic geometry implementation based on corner coordinates _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:\n- _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-\u00a0 Implement a _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by with additional caching. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b<_\b _\bd_\bi_\bm_\b,_\b _\bI_\bn_\bd_\be_\bx_\b__\b _\b>_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+\u00a0 Iterate over the vertex indices of some 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+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br (const InIterator &inBegin, const InIterator &inEnd,\n+ OutIterator outIt)\n+\u00a0 Algorithm to reduce vertex order information.\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-geometry-doc/doxygen/a00194_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00194_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: multilineargeometry.hh Source File\n+dune-geometry: generalvertexorder.hh Source File\n \n \n \n \n \n \n \n@@ -74,839 +74,186 @@\n \n
\n \n
\n
\n
\n-
multilineargeometry.hh
\n+
generalvertexorder.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_MULTILINEARGEOMETRY_HH
\n-
6#define DUNE_GEOMETRY_MULTILINEARGEOMETRY_HH
\n-
7
\n-
8#include <cassert>
\n-
9#include <functional>
\n-
10#include <iterator>
\n-
11#include <limits>
\n-
12#include <vector>
\n-
13
\n-
14#include <dune/common/fmatrix.hh>
\n-
15#include <dune/common/fvector.hh>
\n-
16#include <dune/common/typetraits.hh>
\n-
17
\n-\n-\n-
20#include <dune/geometry/type.hh>
\n+
5
\n+
6#ifndef DUNE_GEOMETRY_GENERALVERTEXORDER_HH
\n+
7#define DUNE_GEOMETRY_GENERALVERTEXORDER_HH
\n+
8
\n+
9#include <algorithm>
\n+
10#include <cassert>
\n+
11#include <cstddef>
\n+
12#include <iterator>
\n+
13#include <vector>
\n+
14
\n+
15#include <dune/common/iteratorfacades.hh>
\n+
16
\n+
17#include "type.hh"
\n+\n+
19
\n+
20namespace Dune {
\n
21
\n-
22namespace Dune
\n-
23{
\n-
24
\n-
25 // MultiLinearGeometryTraits
\n-
26 // -------------------------
\n-
27
\n-
37 template< class ct >
\n-
\n-\n-
39 {
\n-
58 typedef Impl::FieldMatrixHelper< ct > MatrixHelper;
\n-
59
\n-
61 static ct tolerance () { return ct( 16 ) * std::numeric_limits< ct >::epsilon(); }
\n-
62
\n-
127 template< int mydim, int cdim >
\n-
\n-\n-
129 {
\n-
130 typedef std::vector< FieldVector< ct, cdim > > Type;
\n-
131 };
\n-
\n-
132
\n-
146 template< int dim >
\n-
\n-\n-
148 {
\n-
149 static const bool v = false;
\n-
150 static const unsigned int topologyId = ~0u;
\n-
151 };
\n-
\n-
152 };
\n-
\n-
153
\n+
39 template<class InIterator, class OutIterator>
\n+
\n+
40 void reduceOrder(const InIterator& inBegin, const InIterator& inEnd,
\n+
41 OutIterator outIt)
\n+
42 {
\n+
43 for(InIterator inIt = inBegin; inIt != inEnd; ++inIt, ++outIt)
\n+
44 *outIt = std::count_if(inBegin, inEnd, [&](const auto& v)
\n+
45 {
\n+
46 return v < *inIt;
\n+
47 });
\n+
48 }
\n+
\n+
49
\n+
51
\n+
66 template<std::size_t dim, class Index_ = std::size_t>
\n+
\n+\n+
68 typedef ReferenceElements<double, dim> RefElems;
\n+
69 typedef typename RefElems::ReferenceElement RefElem;
\n+
70
\n+
71 RefElem refelem;
\n+
72 GeometryType gt;
\n+
73 std::vector<Index_> vertexOrder;
\n+
74
\n+
75 public:
\n+
77 typedef Index_ Index;
\n+
78
\n+
80 class iterator;
\n+
81
\n+
83 static const std::size_t dimension = dim;
\n+
85 const GeometryType &type() const { return gt; }
\n+
86
\n+
88
\n+
96 template<class InIterator>
\n+
\n+
97 GeneralVertexOrder(const GeometryType& gt_, const InIterator &inBegin,
\n+
98 const InIterator &inEnd) :
\n+
99 refelem(RefElems::general(gt_)), gt(gt_),
\n+
100 vertexOrder(refelem.size(dim))
\n+
101 { reduceOrder(inBegin, inEnd, vertexOrder.begin()); }
\n+
\n+
102
\n+
104
\n+
\n+
108 iterator begin(std::size_t codim, std::size_t subEntity) const
\n+
109 { return iterator(*this, codim, subEntity); }
\n+
\n+
111
\n+
\n+
115 iterator end(std::size_t codim, std::size_t subEntity) const {
\n+
116 return iterator(*this, codim, subEntity,
\n+
117 refelem.size(subEntity, codim, dim));
\n+
118 }
\n+
\n+
119
\n+
121
\n+
\n+
128 void getReduced(std::size_t codim, std::size_t subEntity,
\n+
129 std::vector<Index>& order) const
\n+
130 {
\n+
131 order.resize(refelem.size(subEntity, codim, dim));
\n+
132 reduceOrder(begin(codim, subEntity), end(codim, subEntity),
\n+
133 order.begin());
\n+
134 }
\n+
\n+
135 };
\n+
\n+
136
\n+
138
\n+
141 template<std::size_t dim, class Index_>
\n+
\n+
142 class GeneralVertexOrder<dim, Index_>::iterator :
\n+
143 public Dune::RandomAccessIteratorFacade<iterator, const Index_>
\n+
144 {
\n+
145 const GeneralVertexOrder *order;
\n+
146 std::size_t codim;
\n+
147 std::size_t subEntity;
\n+
148 std::size_t vertex;
\n+
149
\n+
150 iterator(const GeneralVertexOrder &order_, std::size_t codim_,
\n+
151 std::size_t subEntity_, std::size_t vertex_ = 0) :
\n+
152 order(&order_), codim(codim_), subEntity(subEntity_), vertex(vertex_)
\n+
153 { }
\n
154
\n-
155
\n-
156 // MultiLinearGeometry
\n-
157 // -------------------
\n-
158
\n-
179 template< class ct, int mydim, int cdim, class Traits = MultiLinearGeometryTraits< ct > >
\n-
\n-\n-
181 {
\n-\n-
183
\n-
184 public:
\n-
186 typedef ct ctype;
\n-
187
\n-
189 static const int mydimension= mydim;
\n-
191 static const int coorddimension = cdim;
\n-
192
\n-
194 typedef FieldVector< ctype, mydimension > LocalCoordinate;
\n-
196 typedef FieldVector< ctype, coorddimension > GlobalCoordinate;
\n-
198 typedef ctype Volume;
\n-
199
\n-
201 typedef FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed;
\n-
202
\n-\n-
205
\n-
207 typedef FieldMatrix< ctype, coorddimension, mydimension > Jacobian;
\n-
208
\n-
210 typedef FieldMatrix< ctype, mydimension, coorddimension > JacobianInverse;
\n-
211
\n-
212 protected:
\n-
213
\n-\n-
215
\n-
216 public:
\n-
217
\n-\n-
220
\n-
221 private:
\n-
222 static const bool hasSingleGeometryType = Traits::template hasSingleGeometryType< mydimension >::v;
\n-
223
\n-
224 protected:
\n-
225 typedef typename Traits::MatrixHelper MatrixHelper;
\n-
226 typedef typename std::conditional< hasSingleGeometryType, std::integral_constant< unsigned int, Traits::template hasSingleGeometryType< mydimension >::topologyId >, unsigned int >::type TopologyId;
\n-
227
\n-
228 public:
\n-
238 template< class Corners >
\n-
\n-\n-
240 const Corners &corners )
\n-
241 : refElement_( refElement ),
\n-
242 corners_( corners )
\n-
243 {}
\n-
\n-
244
\n-
254 template< class Corners >
\n-
\n-\n-
256 const Corners &corners )
\n-
257 : refElement_( ReferenceElements::general( gt ) ),
\n-
258 corners_( corners )
\n-
259 {}
\n-
\n-
260
\n-
\n-
262 bool affine () const
\n-
263 {
\n-\n-
265 return affine( jt );
\n-
266 }
\n-
\n-
267
\n-
269 Dune::GeometryType type () const { return GeometryType( toUnsignedInt(topologyId()), mydimension ); }
\n-
270
\n-
272 int corners () const { return refElement().size( mydimension ); }
\n-
273
\n-
\n-
275 GlobalCoordinate corner ( int i ) const
\n-
276 {
\n-
277 assert( (i >= 0) && (i < corners()) );
\n-
278 return std::cref(corners_).get()[ i ];
\n-
279 }
\n-
\n-
280
\n-
282 GlobalCoordinate center () const { return global( refElement().position( 0, 0 ) ); }
\n-
283
\n-
\n-\n-
291 {
\n-
292 using std::begin;
\n-
293
\n-
294 auto cit = begin(std::cref(corners_).get());
\n-\n-
296 global< false >( topologyId(), std::integral_constant< int, mydimension >(), cit, ctype( 1 ), local, ctype( 1 ), y );
\n-
297 return y;
\n-
298 }
\n-
\n-
299
\n-
\n-
312 LocalCoordinate local ( const GlobalCoordinate &globalCoord ) const
\n-
313 {
\n-
314 const ctype tolerance = Traits::tolerance();
\n-
315 LocalCoordinate x = refElement().position( 0, 0 );
\n-\n-
317 const bool affineMapping = this->affine();
\n-
318 do
\n-
319 {
\n-
320 // Newton's method: DF^n dx^n = F^n, x^{n+1} -= dx^n
\n-
321 const GlobalCoordinate dglobal = (*this).global( x ) - globalCoord;
\n-
322 const bool invertible =
\n-
323 MatrixHelper::template xTRightInvA< mydimension, coorddimension >( jacobianTransposed( x ), dglobal, dx );
\n-
324 if( ! invertible )
\n-
325 return LocalCoordinate( std::numeric_limits< ctype > :: max() );
\n-
326
\n-
327 // update x with correction
\n-
328 x -= dx;
\n-
329
\n-
330 // for affine mappings only one iteration is needed
\n-
331 if ( affineMapping ) break;
\n-
332 } while( dx.two_norm2() > tolerance );
\n-
333 return x;
\n-
334 }
\n-
\n-
335
\n-
\n-\n-
351 {
\n-
352 return MatrixHelper::template sqrtDetAAT< mydimension, coorddimension >( jacobianTransposed( local ) );
\n-
353 }
\n-
\n-
354
\n-
\n-
363 Volume volume () const
\n-
364 {
\n-
365 return integrationElement( refElement().position( 0, 0 ) ) * refElement().volume();
\n-
366 }
\n-
\n-
367
\n-
\n-\n-
378 {
\n-
379 using std::begin;
\n-
380
\n-\n-
382 auto cit = begin(std::cref(corners_).get());
\n-
383 jacobianTransposed< false >( topologyId(), std::integral_constant< int, mydimension >(), cit, ctype( 1 ), local, ctype( 1 ), jt );
\n-
384 return jt;
\n-
385 }
\n-
\n-
386
\n-
\n-
393 JacobianInverseTransposed jacobianInverseTransposed ( const LocalCoordinate &local ) const;
\n-
394
\n-
\n-\n-
396 {
\n-
397 return geometry.refElement();
\n-
398 }
\n-
\n-
399
\n-
400
\n-
\n-\n-
408 {
\n-
409 return jacobianTransposed(local).transposed();
\n-
410 }
\n-
\n-
411
\n-
\n-\n-
419 {
\n-
420 return jacobianInverseTransposed(local).transposed();
\n-
421 }
\n-
\n-
422
\n-
423 protected:
\n-
424
\n-
\n-\n-
426 {
\n-
427 return refElement_;
\n-
428 }
\n-
\n-
429
\n-
\n-\n-
431 {
\n-
432 return topologyId( std::integral_constant< bool, hasSingleGeometryType >() );
\n-
433 }
\n-
\n-
434
\n-
435 template< bool add, int dim, class CornerIterator >
\n-
\n-
436 static void global ( TopologyId topologyId, std::integral_constant< int, dim >,
\n-
437 CornerIterator &cit, const ctype &df, const LocalCoordinate &x,
\n-
438 const ctype &rf, GlobalCoordinate &y );
\n-
439 template< bool add, class CornerIterator >
\n-
\n-
440 static void global ( TopologyId topologyId, std::integral_constant< int, 0 >,
\n-
441 CornerIterator &cit, const ctype &df, const LocalCoordinate &x,
\n-
442 const ctype &rf, GlobalCoordinate &y );
\n-
443
\n-
444 template< bool add, int rows, int dim, class CornerIterator >
\n-
\n-
445 static void jacobianTransposed ( TopologyId topologyId, std::integral_constant< int, dim >,
\n-
446 CornerIterator &cit, const ctype &df, const LocalCoordinate &x,
\n-
447 const ctype &rf, FieldMatrix< ctype, rows, cdim > &jt );
\n-
448 template< bool add, int rows, class CornerIterator >
\n-
\n-
449 static void jacobianTransposed ( TopologyId topologyId, std::integral_constant< int, 0 >,
\n-
450 CornerIterator &cit, const ctype &df, const LocalCoordinate &x,
\n-
451 const ctype &rf, FieldMatrix< ctype, rows, cdim > &jt );
\n-
452
\n-
453 template< int dim, class CornerIterator >
\n-
\n-
454 static bool affine ( TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, JacobianTransposed &jt );
\n-
455 template< class CornerIterator >
\n-
\n-
456 static bool affine ( TopologyId topologyId, std::integral_constant< int, 0 >, CornerIterator &cit, JacobianTransposed &jt );
\n-
457
\n-
\n-
458 bool affine ( JacobianTransposed &jacobianT ) const
\n-
459 {
\n-
460 using std::begin;
\n-
461
\n-
462 auto cit = begin(std::cref(corners_).get());
\n-
463 return affine( topologyId(), std::integral_constant< int, mydimension >(), cit, jacobianT );
\n-
464 }
\n-
\n-
465
\n-
466 private:
\n-
467 // The following methods are needed to convert the return type of topologyId to
\n-
468 // unsigned int with g++-4.4. It has problems casting integral_constant to the
\n-
469 // integral type.
\n-
470 static unsigned int toUnsignedInt(unsigned int i) { return i; }
\n-
471 template<unsigned int v>
\n-
472 static unsigned int toUnsignedInt(std::integral_constant<unsigned int,v> ) { return v; }
\n-
473 TopologyId topologyId ( std::integral_constant< bool, true > ) const { return TopologyId(); }
\n-
474 unsigned int topologyId ( std::integral_constant< bool, false > ) const { return refElement().type().id(); }
\n-
475
\n-
476 ReferenceElement refElement_;
\n-
477 typename Traits::template CornerStorage< mydimension, coorddimension >::Type corners_;
\n-
478 };
\n-
479
\n-
480
\n-
481
\n-
482 // MultiLinearGeometry::JacobianInverseTransposed
\n-
483 // ----------------------------------------------
\n-
484
\n-
485 template< class ct, int mydim, int cdim, class Traits >
\n-
\n-
486 class MultiLinearGeometry< ct, mydim, cdim, Traits >::JacobianInverseTransposed
\n-
487 : public FieldMatrix< ctype, coorddimension, mydimension >
\n-
488 {
\n-
489 typedef FieldMatrix< ctype, coorddimension, mydimension > Base;
\n-
490
\n-
491 public:
\n-
\n-
492 void setup ( const JacobianTransposed &jt )
\n-
493 {
\n-
494 detInv_ = MatrixHelper::template rightInvA< mydimension, coorddimension >( jt, static_cast< Base & >( *this ) );
\n-
495 }
\n-
\n-
496
\n-
\n-\n-
498 {
\n-
499 detInv_ = MatrixHelper::template sqrtDetAAT< mydimension, coorddimension >( jt );
\n-
500 }
\n-
\n-
501
\n-
502 ctype det () const { return ctype( 1 ) / detInv_; }
\n-
503 ctype detInv () const { return detInv_; }
\n-
504
\n-
505 private:
\n-
506 ctype detInv_;
\n-
507 };
\n-
\n-
508
\n-
509
\n-
510
\n-
523 template< class ct, int mydim, int cdim, class Traits = MultiLinearGeometryTraits< ct > >
\n-
\n-\n-
525 : public MultiLinearGeometry< ct, mydim, cdim, Traits >
\n-
526 {
\n-\n-\n-
529
\n-
530 protected:
\n-\n-
532
\n-
533 public:
\n-\n-
535
\n-
536 typedef typename Base::ctype ctype;
\n-
537
\n-
538 using Base::mydimension;
\n-\n-
540
\n-\n-\n-
543 typedef typename Base::Volume Volume;
\n-
544
\n-\n-\n-
547 typedef typename Base::Jacobian Jacobian;
\n-\n-
549
\n-
550 template< class CornerStorage >
\n-
\n-
551 CachedMultiLinearGeometry ( const ReferenceElement &referenceElement, const CornerStorage &cornerStorage )
\n-
552 : Base( referenceElement, cornerStorage ),
\n-
553 affine_( Base::affine( jacobianTransposed_ ) ),
\n-
554 jacobianInverseTransposedComputed_( false ),
\n-
555 integrationElementComputed_( false )
\n-
556 {}
\n-
\n-
557
\n-
558 template< class CornerStorage >
\n-
\n-
559 CachedMultiLinearGeometry ( Dune::GeometryType gt, const CornerStorage &cornerStorage )
\n-
560 : Base( gt, cornerStorage ),
\n-
561 affine_( Base::affine( jacobianTransposed_ ) ),
\n-
562 jacobianInverseTransposedComputed_( false ),
\n-
563 integrationElementComputed_( false )
\n-
564 {}
\n-
\n-
565
\n-
567 bool affine () const { return affine_; }
\n-
568
\n-
569 using Base::corner;
\n-
570
\n-
572 GlobalCoordinate center () const { return global( refElement().position( 0, 0 ) ); }
\n-
573
\n-
\n-\n-
581 {
\n-
582 if( affine() )
\n-
583 {
\n-\n-
585 jacobianTransposed_.umtv( local, global );
\n-
586 return global;
\n-
587 }
\n-
588 else
\n-
589 return Base::global( local );
\n-
590 }
\n-
\n-
591
\n-
\n-\n-
605 {
\n-
606 if( affine() )
\n-
607 {
\n-\n-
609 if( jacobianInverseTransposedComputed_ )
\n-
610 jacobianInverseTransposed_.mtv( global - corner( 0 ), local );
\n-
611 else
\n-
612 MatrixHelper::template xTRightInvA< mydimension, coorddimension >( jacobianTransposed_, global - corner( 0 ), local );
\n-
613 return local;
\n-
614 }
\n-
615 else
\n-
616 return Base::local( global );
\n-
617 }
\n-
\n-
618
\n-
\n-\n-
634 {
\n-
635 if( affine() )
\n-
636 {
\n-
637 if( !integrationElementComputed_ )
\n-
638 {
\n-
639 jacobianInverseTransposed_.setupDeterminant( jacobianTransposed_ );
\n-
640 integrationElementComputed_ = true;
\n-
641 }
\n-
642 return jacobianInverseTransposed_.detInv();
\n-
643 }
\n-
644 else
\n-\n-
646 }
\n-
\n-
647
\n-
\n-
649 Volume volume () const
\n-
650 {
\n-
651 if( affine() )
\n-
652 return integrationElement( refElement().position( 0, 0 ) ) * refElement().volume();
\n-
653 else
\n-
654 return Base::volume();
\n-
655 }
\n-
\n-
656
\n-
\n-\n-
667 {
\n-
668 if( affine() )
\n-
669 return jacobianTransposed_;
\n-
670 else
\n-\n-
672 }
\n-
\n-
673
\n-
\n-\n-
681 {
\n-
682 if( affine() )
\n-
683 {
\n-
684 if( !jacobianInverseTransposedComputed_ )
\n-
685 {
\n-
686 jacobianInverseTransposed_.setup( jacobianTransposed_ );
\n-
687 jacobianInverseTransposedComputed_ = true;
\n-
688 integrationElementComputed_ = true;
\n-
689 }
\n-
690 return jacobianInverseTransposed_;
\n-
691 }
\n-
692 else
\n-\n-
694 }
\n-
\n-
695
\n-
\n-\n-
703 {
\n-
704 return jacobianTransposed(local).transposed();
\n-
705 }
\n-
\n-
706
\n-
\n-\n-
714 {
\n-
715 return jacobianInverseTransposed(local).transposed();
\n-
716 }
\n-
\n-
717
\n-
718 protected:
\n-
719 using Base::refElement;
\n-
720
\n-
721 private:
\n-
722 mutable JacobianTransposed jacobianTransposed_;
\n-
723 mutable JacobianInverseTransposed jacobianInverseTransposed_;
\n-
724
\n-
725 mutable bool affine_ : 1;
\n-
726
\n-
727 mutable bool jacobianInverseTransposedComputed_ : 1;
\n-
728 mutable bool integrationElementComputed_ : 1;
\n-
729 };
\n-
\n-
730
\n-
731
\n-
732
\n-
733 // Implementation of MultiLinearGeometry
\n-
734 // -------------------------------------
\n-
735
\n-
736 template< class ct, int mydim, int cdim, class Traits >
\n-
737 inline typename MultiLinearGeometry< ct, mydim, cdim, Traits >::JacobianInverseTransposed
\n-
\n-\n-
739 {
\n-\n-
741 jit.setup( jacobianTransposed( local ) );
\n-
742 return jit;
\n-
743 }
\n-
\n-
744
\n-
745
\n-
746 template< class ct, int mydim, int cdim, class Traits >
\n-
747 template< bool add, int dim, class CornerIterator >
\n-\n-
\n-
749 ::global ( TopologyId topologyId, std::integral_constant< int, dim >,
\n-
750 CornerIterator &cit, const ctype &df, const LocalCoordinate &x,
\n-
751 const ctype &rf, GlobalCoordinate &y )
\n-
752 {
\n-
753 const ctype xn = df*x[ dim-1 ];
\n-
754 const ctype cxn = ctype( 1 ) - xn;
\n-
755
\n-
756 if( Impl::isPrism( toUnsignedInt(topologyId), mydimension, mydimension-dim ) )
\n-
757 {
\n-
758 // apply (1-xn) times mapping for bottom
\n-
759 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, rf*cxn, y );
\n-
760 // apply xn times mapping for top
\n-
761 global< true >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, rf*xn, y );
\n-
762 }
\n-
763 else
\n-
764 {
\n-
765 assert( Impl::isPyramid( toUnsignedInt(topologyId), mydimension, mydimension-dim ) );
\n-
766 // apply (1-xn) times mapping for bottom (with argument x/(1-xn))
\n-
767 if( cxn > Traits::tolerance() || cxn < -Traits::tolerance() )
\n-
768 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df/cxn, x, rf*cxn, y );
\n-
769 else
\n-
770 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, ctype( 0 ), y );
\n-
771 // apply xn times the tip
\n-
772 y.axpy( rf*xn, *cit );
\n-
773 ++cit;
\n-
774 }
\n-
775 }
\n-
\n-
776
\n-
777 template< class ct, int mydim, int cdim, class Traits >
\n-
778 template< bool add, class CornerIterator >
\n-\n-
\n-
780 ::global ( TopologyId, std::integral_constant< int, 0 >,
\n-
781 CornerIterator &cit, const ctype &, const LocalCoordinate &,
\n-
782 const ctype &rf, GlobalCoordinate &y )
\n-
783 {
\n-
784 const GlobalCoordinate &origin = *cit;
\n-
785 ++cit;
\n-
786 for( int i = 0; i < coorddimension; ++i )
\n-
787 y[ i ] = (add ? y[ i ] + rf*origin[ i ] : rf*origin[ i ]);
\n-
788 }
\n-
\n-
789
\n-
790
\n-
791 template< class ct, int mydim, int cdim, class Traits >
\n-
792 template< bool add, int rows, int dim, class CornerIterator >
\n-\n-
\n-
794 ::jacobianTransposed ( TopologyId topologyId, std::integral_constant< int, dim >,
\n-
795 CornerIterator &cit, const ctype &df, const LocalCoordinate &x,
\n-
796 const ctype &rf, FieldMatrix< ctype, rows, cdim > &jt )
\n-
797 {
\n-
798 assert( rows >= dim );
\n-
799
\n-
800 const ctype xn = df*x[ dim-1 ];
\n-
801 const ctype cxn = ctype( 1 ) - xn;
\n-
802
\n-
803 auto cit2( cit );
\n-
804 if( Impl::isPrism( toUnsignedInt(topologyId), mydimension, mydimension-dim ) )
\n-
805 {
\n-
806 // apply (1-xn) times Jacobian for bottom
\n-
807 jacobianTransposed< add >( topologyId, std::integral_constant< int, dim-1 >(), cit2, df, x, rf*cxn, jt );
\n-
808 // apply xn times Jacobian for top
\n-
809 jacobianTransposed< true >( topologyId, std::integral_constant< int, dim-1 >(), cit2, df, x, rf*xn, jt );
\n-
810 // compute last row as difference between top value and bottom value
\n-
811 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, -rf, jt[ dim-1 ] );
\n-
812 global< true >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, rf, jt[ dim-1 ] );
\n-
813 }
\n-
814 else
\n-
815 {
\n-
816 assert( Impl::isPyramid( toUnsignedInt(topologyId), mydimension, mydimension-dim ) );
\n-
817 /*
\n-
818 * In the pyramid case, we need a transformation Tb: B -> R^n for the
\n-
819 * base B \\subset R^{n-1}. The pyramid transformation is then defined as
\n-
820 * T: P \\subset R^n -> R^n
\n-
821 * (x, xn) |-> (1-xn) Tb(x*) + xn t (x \\in R^{n-1}, xn \\in R)
\n-
822 * with the tip of the pyramid mapped to t and x* = x/(1-xn)
\n-
823 * the projection of (x,xn) onto the base.
\n-
824 *
\n-
825 * For the Jacobi matrix DT we get
\n-
826 * DT = ( A | b )
\n-
827 * with A = DTb(x*) (n x n-1 matrix)
\n-
828 * and b = dT/dxn (n-dim column vector).
\n-
829 * Furthermore
\n-
830 * b = -Tb(x*) + t + \\sum_i dTb/dx_i(x^*) x_i/(1-xn)
\n-
831 *
\n-
832 * Note that both A and b are not defined in the pyramid tip (x=0, xn=1)!
\n-
833 * Indeed for B the unit square, Tb mapping B to the quadrilateral given
\n-
834 * by the vertices (0,0,0), (2,0,0), (0,1,0), (1,1,0) and t=(0,0,1), we get
\n-
835 *
\n-
836 * T(x,y,xn) = ( x(2-y/(1-xn)), y, xn )
\n-
837 * / 2-y/(1-xn) -x 0 \\
\n-
838 * DT(x,y,xn) = | 0 1 0 |
\n-
839 * \\ 0 0 1 /
\n-
840 * which is not continuous for xn -> 1, choose for example
\n-
841 * x=0, y=1-xn, xn -> 1 --> DT -> diag(1,1,1)
\n-
842 * x=1-xn, y=0, xn -> 1 --> DT -> diag(2,1,1)
\n-
843 *
\n-
844 * However, for Tb affine-linear, Tb(y) = My + y0, DTb = M:
\n-
845 * A = M
\n-
846 * b = -M x* - y0 + t + \\sum_i M_i x_i/(1-xn)
\n-
847 * = -M x* - y0 + t + M x*
\n-
848 * = -y0 + t
\n-
849 * which is continuous for xn -> 1. Note that this b is also given by
\n-
850 * b = -Tb(0) + t + \\sum_i dTb/dx_i(0) x_i/1
\n-
851 * that is replacing x* by 1 and 1-xn by 1 in the formular above.
\n-
852 *
\n-
853 * For xn -> 1, we can thus set x*=0, "1-xn"=1 (or anything != 0) and get
\n-
854 * the right result in case Tb is affine-linear.
\n-
855 */
\n-
856
\n-
857 /* The second case effectively results in x* = 0 */
\n-
858 ctype dfcxn = (cxn > Traits::tolerance() || cxn < -Traits::tolerance()) ? ctype(df / cxn) : ctype(0);
\n-
859
\n-
860 // initialize last row
\n-
861 // b = -Tb(x*)
\n-
862 // (b = -Tb(0) = -y0 in case xn -> 1 and Tb affine-linear)
\n-
863 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, dfcxn, x, -rf, jt[ dim-1 ] );
\n-
864 // b += t
\n-
865 jt[ dim-1 ].axpy( rf, *cit );
\n-
866 ++cit;
\n-
867 // apply Jacobian for bottom (with argument x/(1-xn)) and correct last row
\n-
868 if( add )
\n-
869 {
\n-
870 FieldMatrix< ctype, dim-1, coorddimension > jt2;
\n-
871 // jt2 = dTb/dx_i(x*)
\n-
872 jacobianTransposed< false >( topologyId, std::integral_constant< int, dim-1 >(), cit2, dfcxn, x, rf, jt2 );
\n-
873 // A = dTb/dx_i(x*) (jt[j], j=0..dim-1)
\n-
874 // b += \\sum_i dTb/dx_i(x*) x_i/(1-xn) (jt[dim-1])
\n-
875 // (b += 0 in case xn -> 1)
\n-
876 for( int j = 0; j < dim-1; ++j )
\n-
877 {
\n-
878 jt[ j ] += jt2[ j ];
\n-
879 jt[ dim-1 ].axpy( dfcxn*x[ j ], jt2[ j ] );
\n-
880 }
\n-
881 }
\n-
882 else
\n-
883 {
\n-
884 // jt = dTb/dx_i(x*)
\n-
885 jacobianTransposed< false >( topologyId, std::integral_constant< int, dim-1 >(), cit2, dfcxn, x, rf, jt );
\n-
886 // b += \\sum_i dTb/dx_i(x*) x_i/(1-xn)
\n-
887 for( int j = 0; j < dim-1; ++j )
\n-
888 jt[ dim-1 ].axpy( dfcxn*x[ j ], jt[ j ] );
\n-
889 }
\n-
890 }
\n-
891 }
\n-
\n-
892
\n-
893 template< class ct, int mydim, int cdim, class Traits >
\n-
894 template< bool add, int rows, class CornerIterator >
\n-\n-
\n-
896 ::jacobianTransposed ( TopologyId, std::integral_constant< int, 0 >,
\n-
897 CornerIterator &cit, const ctype &, const LocalCoordinate &,
\n-
898 const ctype &, FieldMatrix< ctype, rows, cdim > & )
\n-
899 {
\n-
900 ++cit;
\n-
901 }
\n-
\n-
902
\n-
903
\n-
904
\n-
905 template< class ct, int mydim, int cdim, class Traits >
\n-
906 template< int dim, class CornerIterator >
\n-\n-
\n-
908 ::affine ( TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, JacobianTransposed &jt )
\n-
909 {
\n-
910 const GlobalCoordinate &orgBottom = *cit;
\n-
911 if( !affine( topologyId, std::integral_constant< int, dim-1 >(), cit, jt ) )
\n-
912 return false;
\n-
913 const GlobalCoordinate &orgTop = *cit;
\n-
914
\n-
915 if( Impl::isPrism( toUnsignedInt(topologyId), mydimension, mydimension-dim ) )
\n-
916 {
\n-
917 JacobianTransposed jtTop;
\n-
918 if( !affine( topologyId, std::integral_constant< int, dim-1 >(), cit, jtTop ) )
\n-
919 return false;
\n-
920
\n-
921 // check whether both jacobians are identical
\n-
922 ctype norm( 0 );
\n-
923 for( int i = 0; i < dim-1; ++i )
\n-
924 norm += (jtTop[ i ] - jt[ i ]).two_norm2();
\n-
925 if( norm >= Traits::tolerance() )
\n-
926 return false;
\n-
927 }
\n-
928 else
\n-
929 ++cit;
\n-
930 jt[ dim-1 ] = orgTop - orgBottom;
\n-
931 return true;
\n-
932 }
\n-
\n-
933
\n-
934 template< class ct, int mydim, int cdim, class Traits >
\n-
935 template< class CornerIterator >
\n-\n-
\n-
937 ::affine ( TopologyId, std::integral_constant< int, 0 >, CornerIterator &cit, JacobianTransposed & )
\n-
938 {
\n-
939 ++cit;
\n-
940 return true;
\n-
941 }
\n-
\n-
\n-
942
\n-
943} // namespace Dune
\n-
944
\n-
945#endif // #ifndef DUNE_GEOMETRY_MULTILINEARGEOMETRY_HH
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-\n-
An implementation of the Geometry interface for affine geometries.
\n-
A unique label for each type of element that can occur in a grid.
\n+
155 public:
\n+
\n+
156 const Index &dereference() const {
\n+
157 return order->vertexOrder[order->refelem.subEntity(subEntity, codim,
\n+
158 vertex, dim)];
\n+
159 }
\n+
\n+
\n+
160 const Index &elementAt(std::ptrdiff_t n) const {
\n+
161 return order->vertexOrder[order->refelem.subEntity(subEntity, codim,
\n+
162 vertex+n, dim)];
\n+
163 }
\n+
\n+
\n+
164 bool equals(const iterator &other) const {
\n+
165 return order == other.order && codim == other.codim &&
\n+
166 subEntity == other.subEntity && vertex == other.vertex;
\n+
167 }
\n+
\n+
168 void increment() { ++vertex; }
\n+
169 void decrement() { --vertex; }
\n+
170 void advance(std::ptrdiff_t n) { vertex += n; }
\n+
\n+
171 std::ptrdiff_t distanceTo(const iterator &other) const {
\n+
172 // make sure we reference the same container
\n+
173 assert(order == other.order && codim == other.codim &&
\n+
174 subEntity == other.subEntity);
\n+
175 if(vertex < other.vertex) return other.vertex - vertex;
\n+
176 else return -static_cast<std::ptrdiff_t>(vertex - other.vertex);
\n+
177 }
\n+
\n+
178
\n+
179 friend class GeneralVertexOrder<dim, Index>;
\n+
180
\n+
182
\n+\n+
188 };
\n+
\n+
189} // namespace Dune
\n+
190
\n+
191#endif // DUNE_GEOMETRY_GENERALVERTEXORDER_HH
\n+\n+
A unique label for each type of element that can occur in a grid.
\n
Definition affinegeometry.hh:21
\n+
void reduceOrder(const InIterator &inBegin, const InIterator &inEnd, OutIterator outIt)
Algorithm to reduce vertex order information.
Definition generalvertexorder.hh:40
\n
Class providing access to the singletons of the reference elements.
Definition referenceelements.hh:170
\n
typename Container::ReferenceElement ReferenceElement
The reference element type.
Definition referenceelements.hh:188
\n-
default traits class for MultiLinearGeometry
Definition multilineargeometry.hh:39
\n-
Impl::FieldMatrixHelper< ct > MatrixHelper
helper structure containing some matrix routines
Definition multilineargeometry.hh:58
\n-
static ct tolerance()
tolerance to numerical algorithms
Definition multilineargeometry.hh:61
\n-
template specifying the storage for the corners
Definition multilineargeometry.hh:129
\n-
std::vector< FieldVector< ct, cdim > > Type
Definition multilineargeometry.hh:130
\n-
will there be only one geometry type for a dimension?
Definition multilineargeometry.hh:148
\n-
static const unsigned int topologyId
Definition multilineargeometry.hh:150
\n-
static const bool v
Definition multilineargeometry.hh:149
\n-
generic geometry implementation based on corner coordinates
Definition multilineargeometry.hh:181
\n-
static void global(TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, GlobalCoordinate &y)
Definition multilineargeometry.hh:749
\n-
static const int mydimension
geometry dimension
Definition multilineargeometry.hh:189
\n-
Dune::GeometryType type() const
obtain the name of the reference element
Definition multilineargeometry.hh:269
\n-
Traits::MatrixHelper MatrixHelper
Definition multilineargeometry.hh:225
\n-
FieldVector< ctype, coorddimension > GlobalCoordinate
type of global coordinates
Definition multilineargeometry.hh:196
\n-
static void jacobianTransposed(TopologyId topologyId, std::integral_constant< int, 0 >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, FieldMatrix< ctype, rows, cdim > &jt)
Definition multilineargeometry.hh:896
\n-
JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const
obtain the transposed of the Jacobian
Definition multilineargeometry.hh:377
\n-
ReferenceElement refElement() const
Definition multilineargeometry.hh:425
\n-
GlobalCoordinate global(const LocalCoordinate &local) const
evaluate the mapping
Definition multilineargeometry.hh:290
\n-
GlobalCoordinate center() const
obtain the centroid of the mapping's image
Definition multilineargeometry.hh:282
\n-
GlobalCoordinate corner(int i) const
obtain coordinates of the i-th corner
Definition multilineargeometry.hh:275
\n-
Dune::ReferenceElements< ctype, mydimension > ReferenceElements
Definition multilineargeometry.hh:214
\n-
ct ctype
coordinate type
Definition multilineargeometry.hh:186
\n-
static void jacobianTransposed(TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, FieldMatrix< ctype, rows, cdim > &jt)
Definition multilineargeometry.hh:794
\n-
static const int coorddimension
coordinate dimension
Definition multilineargeometry.hh:191
\n-
int corners() const
obtain number of corners of the corresponding reference element
Definition multilineargeometry.hh:272
\n-
TopologyId topologyId() const
Definition multilineargeometry.hh:430
\n-
friend ReferenceElement referenceElement(const MultiLinearGeometry &geometry)
Definition multilineargeometry.hh:395
\n-
LocalCoordinate local(const GlobalCoordinate &globalCoord) const
evaluate the inverse mapping
Definition multilineargeometry.hh:312
\n-
static void global(TopologyId topologyId, std::integral_constant< int, 0 >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, GlobalCoordinate &y)
Definition multilineargeometry.hh:780
\n-
Volume volume() const
obtain the volume of the mapping's image
Definition multilineargeometry.hh:363
\n-
FieldVector< ctype, mydimension > LocalCoordinate
type of local coordinates
Definition multilineargeometry.hh:194
\n-
MultiLinearGeometry(const ReferenceElement &refElement, const Corners &corners)
constructor
Definition multilineargeometry.hh:239
\n-
static bool affine(TopologyId topologyId, std::integral_constant< int, 0 >, CornerIterator &cit, JacobianTransposed &jt)
Definition multilineargeometry.hh:937
\n-
std::conditional< hasSingleGeometryType, std::integral_constant< unsignedint, Traits::templatehasSingleGeometryType< mydimension >::topologyId >, unsignedint >::type TopologyId
Definition multilineargeometry.hh:226
\n-
ctype Volume
type of volume
Definition multilineargeometry.hh:198
\n-
static bool affine(TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, JacobianTransposed &jt)
Definition multilineargeometry.hh:908
\n-
JacobianInverse jacobianInverse(const LocalCoordinate &local) const
Obtain the Jacobian's inverse.
Definition multilineargeometry.hh:418
\n-
MultiLinearGeometry(Dune::GeometryType gt, const Corners &corners)
constructor
Definition multilineargeometry.hh:255
\n-
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
type of jacobian transposed
Definition multilineargeometry.hh:201
\n-
ReferenceElements::ReferenceElement ReferenceElement
type of reference element
Definition multilineargeometry.hh:219
\n-
JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate &local) const
obtain the transposed of the Jacobian's inverse
Definition multilineargeometry.hh:738
\n-
FieldMatrix< ctype, coorddimension, mydimension > Jacobian
Type for the Jacobian matrix.
Definition multilineargeometry.hh:207
\n-
bool affine() const
is this mapping affine?
Definition multilineargeometry.hh:262
\n-
FieldMatrix< ctype, mydimension, coorddimension > JacobianInverse
Type for the inverse Jacobian matrix.
Definition multilineargeometry.hh:210
\n-
bool affine(JacobianTransposed &jacobianT) const
Definition multilineargeometry.hh:458
\n-
Volume integrationElement(const LocalCoordinate &local) const
obtain the integration element
Definition multilineargeometry.hh:350
\n-
Jacobian jacobian(const LocalCoordinate &local) const
Obtain the Jacobian.
Definition multilineargeometry.hh:407
\n-
Definition multilineargeometry.hh:488
\n-
void setup(const JacobianTransposed &jt)
Definition multilineargeometry.hh:492
\n-
ctype det() const
Definition multilineargeometry.hh:502
\n-
ctype detInv() const
Definition multilineargeometry.hh:503
\n-
void setupDeterminant(const JacobianTransposed &jt)
Definition multilineargeometry.hh:497
\n-
Implement a MultiLinearGeometry with additional caching.
Definition multilineargeometry.hh:526
\n-
GlobalCoordinate global(const LocalCoordinate &local) const
evaluate the mapping
Definition multilineargeometry.hh:580
\n-
Base::ReferenceElement ReferenceElement
Definition multilineargeometry.hh:534
\n-
bool affine() const
is this mapping affine?
Definition multilineargeometry.hh:567
\n-
CachedMultiLinearGeometry(const ReferenceElement &referenceElement, const CornerStorage &cornerStorage)
Definition multilineargeometry.hh:551
\n-
ReferenceElement refElement() const
Definition multilineargeometry.hh:425
\n-
LocalCoordinate local(const GlobalCoordinate &global) const
evaluate the inverse mapping
Definition multilineargeometry.hh:604
\n-
Base::MatrixHelper MatrixHelper
Definition multilineargeometry.hh:531
\n-
Base::LocalCoordinate LocalCoordinate
Definition multilineargeometry.hh:541
\n-
JacobianInverse jacobianInverse(const LocalCoordinate &local) const
Obtain the Jacobian's inverse.
Definition multilineargeometry.hh:713
\n-
JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const
obtain the transposed of the Jacobian
Definition multilineargeometry.hh:666
\n-
GlobalCoordinate corner(int i) const
obtain coordinates of the i-th corner
Definition multilineargeometry.hh:275
\n-
Volume volume() const
obtain the volume of the mapping's image
Definition multilineargeometry.hh:649
\n-
CachedMultiLinearGeometry(Dune::GeometryType gt, const CornerStorage &cornerStorage)
Definition multilineargeometry.hh:559
\n-
ctype integrationElement(const LocalCoordinate &local) const
obtain the integration element
Definition multilineargeometry.hh:633
\n-
Base::ctype ctype
Definition multilineargeometry.hh:536
\n-
Jacobian jacobian(const LocalCoordinate &local) const
Obtain the Jacobian.
Definition multilineargeometry.hh:702
\n-
Base::JacobianInverseTransposed JacobianInverseTransposed
Definition multilineargeometry.hh:546
\n-
Base::JacobianTransposed JacobianTransposed
Definition multilineargeometry.hh:545
\n-
Base::JacobianInverse JacobianInverse
Definition multilineargeometry.hh:548
\n-
Base::Jacobian Jacobian
Definition multilineargeometry.hh:547
\n-
Base::Volume Volume
Definition multilineargeometry.hh:543
\n-
Base::GlobalCoordinate GlobalCoordinate
Definition multilineargeometry.hh:542
\n-
GlobalCoordinate center() const
obtain the centroid of the mapping's image
Definition multilineargeometry.hh:572
\n-
JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate &local) const
obtain the transposed of the Jacobian's inverse
Definition multilineargeometry.hh:680
\n+
Class providing information on the ordering of vertices.
Definition generalvertexorder.hh:67
\n+
Index_ Index
Type of indices.
Definition generalvertexorder.hh:77
\n+
const GeometryType & type() const
get type of the entity's geometry
Definition generalvertexorder.hh:85
\n+
static const std::size_t dimension
export the dimension of the entity we provide information for
Definition generalvertexorder.hh:83
\n+
void getReduced(std::size_t codim, std::size_t subEntity, std::vector< Index > &order) const
get a vector of reduced indices for some sub-entity
Definition generalvertexorder.hh:128
\n+
iterator end(std::size_t codim, std::size_t subEntity) const
get end iterator for the vertex indices of some sub-entity
Definition generalvertexorder.hh:115
\n+
GeneralVertexOrder(const GeometryType &gt_, const InIterator &inBegin, const InIterator &inEnd)
construct a GeneralVertexOrder
Definition generalvertexorder.hh:97
\n+
iterator begin(std::size_t codim, std::size_t subEntity) const
get begin iterator for the vertex indices of some sub-entity
Definition generalvertexorder.hh:108
\n+
Iterate over the vertex indices of some sub-entity.
Definition generalvertexorder.hh:144
\n+
iterator()
public default constructor
Definition generalvertexorder.hh:187
\n+
void decrement()
Definition generalvertexorder.hh:169
\n+
void advance(std::ptrdiff_t n)
Definition generalvertexorder.hh:170
\n+
const Index & dereference() const
Definition generalvertexorder.hh:156
\n+
void increment()
Definition generalvertexorder.hh:168
\n+
bool equals(const iterator &other) const
Definition generalvertexorder.hh:164
\n+
std::ptrdiff_t distanceTo(const iterator &other) const
Definition generalvertexorder.hh:171
\n+
const Index & elementAt(std::ptrdiff_t n) const
Definition generalvertexorder.hh:160
\n
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,1022 +1,216 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-multilineargeometry.hh\n+generalvertexorder.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_MULTILINEARGEOMETRY_HH\n-6#define DUNE_GEOMETRY_MULTILINEARGEOMETRY_HH\n-7\n-8#include \n-9#include \n-10#include \n-11#include \n-12#include \n-13\n-14#include \n-15#include \n-16#include \n-17\n-18#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+5\n+6#ifndef DUNE_GEOMETRY_GENERALVERTEXORDER_HH\n+7#define DUNE_GEOMETRY_GENERALVERTEXORDER_HH\n+8\n+9#include \n+10#include \n+11#include \n+12#include \n+13#include \n+14\n+15#include \n+16\n+17#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n+18#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+19\n+20namespace _\bD_\bu_\bn_\be {\n 21\n-22namespace _\bD_\bu_\bn_\be\n-23{\n-24\n-25 // MultiLinearGeometryTraits\n-26 // -------------------------\n-27\n-37 template< class ct >\n-_\b3_\b8 struct _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs\n-39 {\n-_\b5_\b8 typedef Impl::FieldMatrixHelper< ct > _\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\be_\br;\n-59\n-_\b6_\b1 static ct _\bt_\bo_\bl_\be_\br_\ba_\bn_\bc_\be () { return ct( 16 ) * std::numeric_limits< ct >::\n-epsilon(); }\n-62\n-127 template< int mydim, int cdim >\n-_\b1_\b2_\b8 struct _\bC_\bo_\br_\bn_\be_\br_\bS_\bt_\bo_\br_\ba_\bg_\be\n-129 {\n-_\b1_\b3_\b0 typedef std::vector< FieldVector< ct, cdim > > _\bT_\by_\bp_\be;\n-131 };\n-132\n-146 template< int dim >\n-_\b1_\b4_\b7 struct _\bh_\ba_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-148 {\n-_\b1_\b4_\b9 static const bool _\bv = false;\n-_\b1_\b5_\b0 static const unsigned int _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd = ~0u;\n-151 };\n-152 };\n-153\n+39 template\n+_\b4_\b0 void _\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br(const InIterator& inBegin, const InIterator& inEnd,\n+41 OutIterator outIt)\n+42 {\n+43 for(InIterator inIt = inBegin; inIt != inEnd; ++inIt, ++outIt)\n+44 *outIt = std::count_if(inBegin, inEnd, [&](const auto& v)\n+45 {\n+46 return v < *inIt;\n+47 });\n+48 }\n+49\n+51\n+66 template\n+_\b6_\b7 class _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br {\n+68 typedef _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bd_\bi_\bm_\b> RefElems;\n+69 typedef typename _\bR_\be_\bf_\bE_\bl_\be_\bm_\bs_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt RefElem;\n+70\n+71 RefElem refelem;\n+72 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt;\n+73 std::vector vertexOrder;\n+74\n+75 public:\n+_\b7_\b7 typedef Index_ _\bI_\bn_\bd_\be_\bx;\n+78\n+80 class _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+81\n+_\b8_\b3 static const std::size_t _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dim;\n+_\b8_\b5 const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &_\bt_\by_\bp_\be() const { return gt; }\n+86\n+88\n+96 template\n+_\b9_\b7 _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt_, const InIterator &inBegin,\n+98 const InIterator &inEnd) :\n+99 refelem(RefElems::general(gt_)), gt(gt_),\n+100 vertexOrder(refelem.size(dim))\n+101 { _\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br(inBegin, inEnd, vertexOrder.begin()); }\n+102\n+104\n+_\b1_\b0_\b8 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn(std::size_t codim, std::size_t subEntity) const\n+109 { return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, codim, subEntity); }\n+111\n+_\b1_\b1_\b5 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd(std::size_t codim, std::size_t subEntity) const {\n+116 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, codim, subEntity,\n+117 refelem.size(subEntity, codim, dim));\n+118 }\n+119\n+121\n+_\b1_\b2_\b8 void _\bg_\be_\bt_\bR_\be_\bd_\bu_\bc_\be_\bd(std::size_t codim, std::size_t subEntity,\n+129 std::vector& order) const\n+130 {\n+131 order.resize(refelem.size(subEntity, codim, dim));\n+132 _\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br(_\bb_\be_\bg_\bi_\bn(codim, subEntity), _\be_\bn_\bd(codim, subEntity),\n+133 order.begin());\n+134 }\n+135 };\n+136\n+138\n+141 template\n+_\b1_\b4_\b2 class _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br::_\bi_\bt_\be_\br_\ba_\bt_\bo_\br :\n+143 public Dune::RandomAccessIteratorFacade\n+144 {\n+145 const _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br *order;\n+146 std::size_t codim;\n+147 std::size_t subEntity;\n+148 std::size_t vertex;\n+149\n+150 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br &order_, std::size_t codim_,\n+151 std::size_t subEntity_, std::size_t vertex_ = 0) :\n+152 order(&order_), codim(codim_), subEntity(subEntity_), vertex(vertex_)\n+153 { }\n 154\n-155\n-156 // MultiLinearGeometry\n-157 // -------------------\n-158\n-179 template< class ct, int mydim, int cdim, class Traits =\n-MultiLinearGeometryTraits< ct > >\n-_\b1_\b8_\b0 class _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-181 {\n-182 typedef _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b> This;\n-183\n-184 public:\n-_\b1_\b8_\b6 typedef ct _\bc_\bt_\by_\bp_\be;\n-187\n-_\b1_\b8_\b9 static const int _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn= mydim;\n-_\b1_\b9_\b1 static const int _\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = cdim;\n-192\n-_\b1_\b9_\b4 typedef FieldVector< ctype, mydimension > _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-_\b1_\b9_\b6 typedef FieldVector< ctype, coorddimension > _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-_\b1_\b9_\b8 typedef _\bc_\bt_\by_\bp_\be _\bV_\bo_\bl_\bu_\bm_\be;\n-199\n-_\b2_\b0_\b1 typedef FieldMatrix< ctype, mydimension, coorddimension >\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n-202\n-204 class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n-205\n-_\b2_\b0_\b7 typedef FieldMatrix< ctype, coorddimension, mydimension > _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n-208\n-_\b2_\b1_\b0 typedef FieldMatrix< ctype, mydimension, coorddimension > _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be;\n-211\n-212 protected:\n-213\n-_\b2_\b1_\b4 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b> _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs;\n-215\n-216 public:\n-217\n-_\b2_\b1_\b9 typedef typename _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n-220\n-221 private:\n-222 static const bool hasSingleGeometryType = Traits::template\n-hasSingleGeometryType< mydimension >::v;\n-223\n-224 protected:\n-_\b2_\b2_\b5 typedef typename Traits::MatrixHelper _\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\be_\br;\n-_\b2_\b2_\b6 typedef typename std::conditional< hasSingleGeometryType, std::\n-integral_constant< unsigned int, Traits::template hasSingleGeometryType<\n-mydimension >::topologyId >, unsigned int >_\b:_\b:_\bt_\by_\bp_\be _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd;\n-227\n-228 public:\n-238 template< class Corners >\n-_\b2_\b3_\b9 _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt &_\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt,\n-240 const Corners &_\bc_\bo_\br_\bn_\be_\br_\bs )\n-241 : refElement_( _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt ),\n-242 corners_( _\bc_\bo_\br_\bn_\be_\br_\bs )\n-243 {}\n-244\n-254 template< class Corners >\n-_\b2_\b5_\b5 _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt,\n-256 const Corners &_\bc_\bo_\br_\bn_\be_\br_\bs )\n-257 : refElement_( _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs::general( gt ) ),\n-258 corners_( _\bc_\bo_\br_\bn_\be_\br_\bs )\n-259 {}\n-260\n-_\b2_\b6_\b2 bool _\ba_\bf_\bf_\bi_\bn_\be () const\n-263 {\n-264 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jt;\n-265 return _\ba_\bf_\bf_\bi_\bn_\be( jt );\n-266 }\n-267\n-_\b2_\b6_\b9 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bt_\by_\bp_\be () const { return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be( toUnsignedInt\n-(_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd()), _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn ); }\n-270\n-_\b2_\b7_\b2 int _\bc_\bo_\br_\bn_\be_\br_\bs () const { return _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt().size( _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn ); }\n-273\n-_\b2_\b7_\b5 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bc_\bo_\br_\bn_\be_\br ( int i ) const\n-276 {\n-277 assert( (i >= 0) && (i < _\bc_\bo_\br_\bn_\be_\br_\bs()) );\n-278 return std::cref(corners_).get()[ i ];\n-279 }\n-280\n-_\b2_\b8_\b2 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bc_\be_\bn_\bt_\be_\br () const { return _\bg_\bl_\bo_\bb_\ba_\bl( _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt().position( 0,\n-0 ) ); }\n-283\n-_\b2_\b9_\b0 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bg_\bl_\bo_\bb_\ba_\bl ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl ) const\n-291 {\n-292 using std::begin;\n-293\n-294 auto cit = begin(std::cref(corners_).get());\n-295 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be y;\n-296 global< false >( _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd(), std::integral_constant< int, mydimension >\n-(), cit, _\bc_\bt_\by_\bp_\be( 1 ), _\bl_\bo_\bc_\ba_\bl, _\bc_\bt_\by_\bp_\be( 1 ), y );\n-297 return y;\n-298 }\n-299\n-_\b3_\b1_\b2 _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bl_\bo_\bc_\ba_\bl ( const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &globalCoord ) const\n-313 {\n-314 const _\bc_\bt_\by_\bp_\be tolerance = Traits::tolerance();\n-315 _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be x = _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt().position( 0, 0 );\n-316 _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be dx;\n-317 const bool affineMapping = this->_\ba_\bf_\bf_\bi_\bn_\be();\n-318 do\n-319 {\n-320 // Newton's method: DF^n dx^n = F^n, x^{n+1} -= dx^n\n-321 const GlobalCoordinate dglobal = (*this).global( x ) - globalCoord;\n-322 const bool invertible =\n-323 MatrixHelper::template xTRightInvA< mydimension, coorddimension >\n-( _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd( x ), dglobal, dx );\n-324 if( ! invertible )\n-325 return _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be( std::numeric_limits< ctype > :: max() );\n-326\n-327 // update x with correction\n-328 x -= dx;\n-329\n-330 // for affine mappings only one iteration is needed\n-331 if ( affineMapping ) break;\n-332 } while( dx.two_norm2() > tolerance );\n-333 return x;\n-334 }\n-335\n-_\b3_\b5_\b0 _\bV_\bo_\bl_\bu_\bm_\be _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl ) const\n-351 {\n-352 return MatrixHelper::template sqrtDetAAT< mydimension, coorddimension >\n-( _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd( _\bl_\bo_\bc_\ba_\bl ) );\n-353 }\n-354\n-_\b3_\b6_\b3 _\bV_\bo_\bl_\bu_\bm_\be _\bv_\bo_\bl_\bu_\bm_\be () const\n-364 {\n-365 return _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt( _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt().position( 0, 0 ) ) * _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt\n-().volume();\n-366 }\n-367\n-_\b3_\b7_\b7 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl )\n-const\n-378 {\n-379 using std::begin;\n-380\n-381 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jt;\n-382 auto cit = begin(std::cref(corners_).get());\n-383 jacobianTransposed< false >( _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd(), std::integral_constant< int,\n-mydimension >(), cit, _\bc_\bt_\by_\bp_\be( 1 ), _\bl_\bo_\bc_\ba_\bl, _\bc_\bt_\by_\bp_\be( 1 ), jt );\n-384 return jt;\n-385 }\n-386\n-_\b3_\b9_\b3 JacobianInverseTransposed _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-&_\bl_\bo_\bc_\ba_\bl ) const;\n-394\n-_\b3_\b9_\b5 friend _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt ( const _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-&geometry )\n-396 {\n-397 return geometry._\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt();\n-398 }\n-399\n-400\n-_\b4_\b0_\b7 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn (const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n-408 {\n-409 return _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd(_\bl_\bo_\bc_\ba_\bl).transposed();\n-410 }\n-411\n-_\b4_\b1_\b8 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be (const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n-419 {\n-420 return _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd(_\bl_\bo_\bc_\ba_\bl).transposed();\n-421 }\n-422\n-423 protected:\n-424\n-_\b4_\b2_\b5 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt () const\n-426 {\n-427 return refElement_;\n-428 }\n-429\n-_\b4_\b3_\b0 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd () const\n-431 {\n-432 return _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd( std::integral_constant< bool, hasSingleGeometryType >()\n-);\n-433 }\n-434\n-435 template< bool add, int dim, class CornerIterator >\n-_\b4_\b3_\b6 static void _\bg_\bl_\bo_\bb_\ba_\bl ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd, std::integral_constant< int,\n-dim >,\n-437 CornerIterator &cit, const _\bc_\bt_\by_\bp_\be &df, const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &x,\n-438 const _\bc_\bt_\by_\bp_\be &rf, _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &y );\n-439 template< bool add, class CornerIterator >\n-_\b4_\b4_\b0 static void _\bg_\bl_\bo_\bb_\ba_\bl ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd, std::integral_constant< int, 0\n->,\n-441 CornerIterator &cit, const _\bc_\bt_\by_\bp_\be &df, const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &x,\n-442 const _\bc_\bt_\by_\bp_\be &rf, _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &y );\n-443\n-444 template< bool add, int rows, int dim, class CornerIterator >\n-_\b4_\b4_\b5 static void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd, std::\n-integral_constant< int, dim >,\n-446 CornerIterator &cit, const _\bc_\bt_\by_\bp_\be &df, const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &x,\n-447 const _\bc_\bt_\by_\bp_\be &rf, FieldMatrix< ctype, rows, cdim > &jt );\n-448 template< bool add, int rows, class CornerIterator >\n-_\b4_\b4_\b9 static void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd, std::\n-integral_constant< int, 0 >,\n-450 CornerIterator &cit, const _\bc_\bt_\by_\bp_\be &df, const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &x,\n-451 const _\bc_\bt_\by_\bp_\be &rf, FieldMatrix< ctype, rows, cdim > &jt );\n-452\n-453 template< int dim, class CornerIterator >\n-_\b4_\b5_\b4 static bool _\ba_\bf_\bf_\bi_\bn_\be ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd, std::integral_constant< int,\n-dim >, CornerIterator &cit, _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jt );\n-455 template< class CornerIterator >\n-_\b4_\b5_\b6 static bool _\ba_\bf_\bf_\bi_\bn_\be ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd, std::integral_constant< int, 0\n->, CornerIterator &cit, _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jt );\n-457\n-_\b4_\b5_\b8 bool _\ba_\bf_\bf_\bi_\bn_\be ( _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jacobianT ) const\n-459 {\n-460 using std::begin;\n-461\n-462 auto cit = begin(std::cref(corners_).get());\n-463 return _\ba_\bf_\bf_\bi_\bn_\be( _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd(), std::integral_constant< int, mydimension >(),\n-cit, jacobianT );\n-464 }\n-465\n-466 private:\n-467 // The following methods are needed to convert the return type of\n-topologyId to\n-468 // unsigned int with g++-4.4. It has problems casting integral_constant to\n-the\n-469 // integral type.\n-470 static unsigned int toUnsignedInt(unsigned int i) { return i; }\n-471 template\n-472 static unsigned int toUnsignedInt(std::integral_constant )\n-{ return v; }\n-473 _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd ( std::integral_constant< bool, true > ) const\n-{ return _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd(); }\n-474 unsigned int _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd ( std::integral_constant< bool, false > ) const\n-{ return _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt().type().id(); }\n-475\n-476 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt refElement_;\n-477 typename Traits::template CornerStorage< mydimension, coorddimension >::\n-Type corners_;\n-478 };\n-479\n-480\n-481\n-482 // MultiLinearGeometry::JacobianInverseTransposed\n-483 // ----------------------------------------------\n-484\n-485 template< class ct, int mydim, int cdim, class Traits >\n-_\b4_\b8_\b6 class _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by< ct, mydim, cdim, Traits >::\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-487 : public FieldMatrix< ctype, coorddimension, mydimension >\n-488 {\n-489 typedef FieldMatrix< ctype, coorddimension, mydimension > Base;\n-490\n-491 public:\n-_\b4_\b9_\b2 void _\bs_\be_\bt_\bu_\bp ( const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jt )\n-493 {\n-494 detInv_ = MatrixHelper::template rightInvA< mydimension, coorddimension >\n-( jt, static_cast< Base & >( *this ) );\n-495 }\n-496\n-_\b4_\b9_\b7 void _\bs_\be_\bt_\bu_\bp_\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt ( const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jt )\n-498 {\n-499 detInv_ = MatrixHelper::template sqrtDetAAT< mydimension, coorddimension >\n-( jt );\n-500 }\n-501\n-_\b5_\b0_\b2 _\bc_\bt_\by_\bp_\be _\bd_\be_\bt () const { return _\bc_\bt_\by_\bp_\be( 1 ) / detInv_; }\n-_\b5_\b0_\b3 _\bc_\bt_\by_\bp_\be _\bd_\be_\bt_\bI_\bn_\bv () const { return detInv_; }\n-504\n-505 private:\n-506 _\bc_\bt_\by_\bp_\be detInv_;\n-507 };\n-508\n-509\n-510\n-523 template< class ct, int mydim, int cdim, class Traits =\n-MultiLinearGeometryTraits< ct > >\n-_\b5_\b2_\b4 class _\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-525 : public _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by< ct, mydim, cdim, Traits >\n-526 {\n-527 typedef _\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b> This;\n-528 typedef _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b> _\bB_\ba_\bs_\be;\n-529\n-530 protected:\n-_\b5_\b3_\b1 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\be_\br _\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\be_\br;\n-532\n-533 public:\n-_\b5_\b3_\b4 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n-535\n-_\b5_\b3_\b6 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bt_\by_\bp_\be _\bc_\bt_\by_\bp_\be;\n-537\n-538 using _\bB_\ba_\bs_\be_\b:_\b:_\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-539 using _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-540\n-_\b5_\b4_\b1 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-_\b5_\b4_\b2 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-_\b5_\b4_\b3 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bV_\bo_\bl_\bu_\bm_\be _\bV_\bo_\bl_\bu_\bm_\be;\n-544\n-_\b5_\b4_\b5 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n-_\b5_\b4_\b6 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n-_\b5_\b4_\b7 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n-_\b5_\b4_\b8 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be;\n-549\n-550 template< class CornerStorage >\n-_\b5_\b5_\b1 _\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt &_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt, const\n-CornerStorage &cornerStorage )\n-552 : _\bB_\ba_\bs_\be( _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt, cornerStorage ),\n-553 affine_( _\bB_\ba_\bs_\be::_\ba_\bf_\bf_\bi_\bn_\be( jacobianTransposed_ ) ),\n-554 jacobianInverseTransposedComputed_( false ),\n-555 integrationElementComputed_( false )\n-556 {}\n-557\n-558 template< class CornerStorage >\n-_\b5_\b5_\b9 _\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt, const CornerStorage\n-&cornerStorage )\n-560 : _\bB_\ba_\bs_\be( gt, cornerStorage ),\n-561 affine_( _\bB_\ba_\bs_\be::_\ba_\bf_\bf_\bi_\bn_\be( jacobianTransposed_ ) ),\n-562 jacobianInverseTransposedComputed_( false ),\n-563 integrationElementComputed_( false )\n-564 {}\n-565\n-_\b5_\b6_\b7 bool _\ba_\bf_\bf_\bi_\bn_\be () const { return affine_; }\n-568\n-569 using _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\br_\bn_\be_\br;\n-570\n-_\b5_\b7_\b2 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bc_\be_\bn_\bt_\be_\br () const { return _\bg_\bl_\bo_\bb_\ba_\bl( _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt().position( 0,\n-0 ) ); }\n-573\n-_\b5_\b8_\b0 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bg_\bl_\bo_\bb_\ba_\bl ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl ) const\n-581 {\n-582 if( _\ba_\bf_\bf_\bi_\bn_\be() )\n-583 {\n-584 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bg_\bl_\bo_\bb_\ba_\bl( _\bc_\bo_\br_\bn_\be_\br( 0 ) );\n-585 jacobianTransposed_.umtv( _\bl_\bo_\bc_\ba_\bl, _\bg_\bl_\bo_\bb_\ba_\bl );\n-586 return _\bg_\bl_\bo_\bb_\ba_\bl;\n-587 }\n-588 else\n-589 return _\bB_\ba_\bs_\be_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl( _\bl_\bo_\bc_\ba_\bl );\n-590 }\n-591\n-_\b6_\b0_\b4 _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bl_\bo_\bc_\ba_\bl ( const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bg_\bl_\bo_\bb_\ba_\bl ) const\n-605 {\n-606 if( _\ba_\bf_\bf_\bi_\bn_\be() )\n-607 {\n-608 _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bl_\bo_\bc_\ba_\bl;\n-609 if( jacobianInverseTransposedComputed_ )\n-610 jacobianInverseTransposed_.mtv( _\bg_\bl_\bo_\bb_\ba_\bl - _\bc_\bo_\br_\bn_\be_\br( 0 ), _\bl_\bo_\bc_\ba_\bl );\n-611 else\n-612 MatrixHelper::template xTRightInvA< mydimension, coorddimension >\n-( jacobianTransposed_, _\bg_\bl_\bo_\bb_\ba_\bl - _\bc_\bo_\br_\bn_\be_\br( 0 ), _\bl_\bo_\bc_\ba_\bl );\n-613 return _\bl_\bo_\bc_\ba_\bl;\n-614 }\n-615 else\n-616 return _\bB_\ba_\bs_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl( _\bg_\bl_\bo_\bb_\ba_\bl );\n-617 }\n-618\n-_\b6_\b3_\b3 _\bc_\bt_\by_\bp_\be _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl ) const\n-634 {\n-635 if( _\ba_\bf_\bf_\bi_\bn_\be() )\n-636 {\n-637 if( !integrationElementComputed_ )\n-638 {\n-639 jacobianInverseTransposed_._\bs_\be_\bt_\bu_\bp_\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt( jacobianTransposed_ );\n-640 integrationElementComputed_ = true;\n-641 }\n-642 return jacobianInverseTransposed_._\bd_\be_\bt_\bI_\bn_\bv();\n-643 }\n-644 else\n-645 return _\bB_\ba_\bs_\be_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt( _\bl_\bo_\bc_\ba_\bl );\n-646 }\n-647\n-_\b6_\b4_\b9 _\bV_\bo_\bl_\bu_\bm_\be _\bv_\bo_\bl_\bu_\bm_\be () const\n-650 {\n-651 if( _\ba_\bf_\bf_\bi_\bn_\be() )\n-652 return _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt( _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt().position( 0, 0 ) ) * _\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt\n-().volume();\n-653 else\n-654 return _\bB_\ba_\bs_\be_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be();\n-655 }\n-656\n-_\b6_\b6_\b6 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl )\n-const\n-667 {\n-668 if( _\ba_\bf_\bf_\bi_\bn_\be() )\n-669 return jacobianTransposed_;\n-670 else\n-671 return _\bB_\ba_\bs_\be_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd( _\bl_\bo_\bc_\ba_\bl );\n-672 }\n-673\n-_\b6_\b8_\b0 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-&_\bl_\bo_\bc_\ba_\bl ) const\n-681 {\n-682 if( _\ba_\bf_\bf_\bi_\bn_\be() )\n-683 {\n-684 if( !jacobianInverseTransposedComputed_ )\n-685 {\n-686 jacobianInverseTransposed_._\bs_\be_\bt_\bu_\bp( jacobianTransposed_ );\n-687 jacobianInverseTransposedComputed_ = true;\n-688 integrationElementComputed_ = true;\n-689 }\n-690 return jacobianInverseTransposed_;\n-691 }\n-692 else\n-693 return _\bB_\ba_\bs_\be_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd( _\bl_\bo_\bc_\ba_\bl );\n-694 }\n-695\n-_\b7_\b0_\b2 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn (const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n-703 {\n-704 return _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd(_\bl_\bo_\bc_\ba_\bl).transposed();\n-705 }\n-706\n-_\b7_\b1_\b3 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be (const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n-714 {\n-715 return _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd(_\bl_\bo_\bc_\ba_\bl).transposed();\n-716 }\n-717\n-718 protected:\n-719 using _\bB_\ba_\bs_\be_\b:_\b:_\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt;\n-720\n-721 private:\n-722 mutable _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jacobianTransposed_;\n-723 mutable _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jacobianInverseTransposed_;\n-724\n-725 mutable bool affine_ : 1;\n-726\n-727 mutable bool jacobianInverseTransposedComputed_ : 1;\n-728 mutable bool integrationElementComputed_ : 1;\n-729 };\n-730\n-731\n-732\n-733 // Implementation of MultiLinearGeometry\n-734 // -------------------------------------\n-735\n-736 template< class ct, int mydim, int cdim, class Traits >\n-737 inline typename MultiLinearGeometry< ct, mydim, cdim, Traits >::\n-JacobianInverseTransposed\n-_\b7_\b3_\b8 _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &local ) const\n-739 {\n-740 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jit;\n-741 jit._\bs_\be_\bt_\bu_\bp( jacobianTransposed( local ) );\n-742 return jit;\n-743 }\n-744\n-745\n-746 template< class ct, int mydim, int cdim, class Traits >\n-747 template< bool add, int dim, class CornerIterator >\n-748 inline void _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-_\b7_\b4_\b9_\b _\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd topologyId, std::integral_constant< int, dim >,\n-750 CornerIterator &cit, const _\bc_\bt_\by_\bp_\be &df, const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &x,\n-751 const _\bc_\bt_\by_\bp_\be &rf, _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &y )\n-752 {\n-753 const _\bc_\bt_\by_\bp_\be xn = df*x[ dim-1 ];\n-754 const _\bc_\bt_\by_\bp_\be cxn = _\bc_\bt_\by_\bp_\be( 1 ) - xn;\n-755\n-756 if( Impl::isPrism( toUnsignedInt(topologyId), mydimension, mydimension-dim\n-) )\n-757 {\n-758 // apply (1-xn) times mapping for bottom\n-759 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df,\n-x, rf*cxn, y );\n-760 // apply xn times mapping for top\n-761 global< true >( topologyId, std::integral_constant< int, dim-1 >(), cit,\n-df, x, rf*xn, y );\n-762 }\n-763 else\n-764 {\n-765 assert( Impl::isPyramid( toUnsignedInt(topologyId), mydimension,\n-mydimension-dim ) );\n-766 // apply (1-xn) times mapping for bottom (with argument x/(1-xn))\n-767 if( cxn > Traits::tolerance() || cxn < -Traits::tolerance() )\n-768 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df/\n-cxn, x, rf*cxn, y );\n-769 else\n-770 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df,\n-x, _\bc_\bt_\by_\bp_\be( 0 ), y );\n-771 // apply xn times the tip\n-772 y.axpy( rf*xn, *cit );\n-773 ++cit;\n-774 }\n-775 }\n-776\n-777 template< class ct, int mydim, int cdim, class Traits >\n-778 template< bool add, class CornerIterator >\n-779 inline void _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-_\b7_\b8_\b0_\b _\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd, std::integral_constant< int, 0 >,\n-781 CornerIterator &cit, const _\bc_\bt_\by_\bp_\be &, const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &,\n-782 const _\bc_\bt_\by_\bp_\be &rf, _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &y )\n-783 {\n-784 const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &origin = *cit;\n-785 ++cit;\n-786 for( int i = 0; i < coorddimension; ++i )\n-787 y[ i ] = (add ? y[ i ] + rf*origin[ i ] : rf*origin[ i ]);\n-788 }\n-789\n-790\n-791 template< class ct, int mydim, int cdim, class Traits >\n-792 template< bool add, int rows, int dim, class CornerIterator >\n-793 inline void _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-_\b7_\b9_\b4_\b _\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd topologyId, std::integral_constant< int,\n-dim >,\n-795 CornerIterator &cit, const _\bc_\bt_\by_\bp_\be &df, const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &x,\n-796 const _\bc_\bt_\by_\bp_\be &rf, FieldMatrix< ctype, rows, cdim > &jt )\n-797 {\n-798 assert( rows >= dim );\n-799\n-800 const _\bc_\bt_\by_\bp_\be xn = df*x[ dim-1 ];\n-801 const _\bc_\bt_\by_\bp_\be cxn = _\bc_\bt_\by_\bp_\be( 1 ) - xn;\n-802\n-803 auto cit2( cit );\n-804 if( Impl::isPrism( toUnsignedInt(topologyId), mydimension, mydimension-dim\n-) )\n-805 {\n-806 // apply (1-xn) times Jacobian for bottom\n-807 jacobianTransposed< add >( topologyId, std::integral_constant< int, dim-1 >\n-(), cit2, df, x, rf*cxn, jt );\n-808 // apply xn times Jacobian for top\n-809 jacobianTransposed< true >( topologyId, std::integral_constant< int, dim-\n-1 >(), cit2, df, x, rf*xn, jt );\n-810 // compute last row as difference between top value and bottom value\n-811 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df,\n-x, -rf, jt[ dim-1 ] );\n-812 global< true >( topologyId, std::integral_constant< int, dim-1 >(), cit,\n-df, x, rf, jt[ dim-1 ] );\n-813 }\n-814 else\n-815 {\n-816 assert( Impl::isPyramid( toUnsignedInt(topologyId), mydimension,\n-mydimension-dim ) );\n-817 /*\n-818 * In the pyramid case, we need a transformation Tb: B -> R^n for the\n-819 * base B \\subset R^{n-1}. The pyramid transformation is then defined as\n-820 * T: P \\subset R^n -> R^n\n-821 * (x, xn) |-> (1-xn) Tb(x*) + xn t (x \\in R^{n-1}, xn \\in R)\n-822 * with the tip of the pyramid mapped to t and x* = x/(1-xn)\n-823 * the projection of (x,xn) onto the base.\n-824 *\n-825 * For the Jacobi matrix DT we get\n-826 * DT = ( A | b )\n-827 * with A = DTb(x*) (n x n-1 matrix)\n-828 * and b = dT/dxn (n-dim column vector).\n-829 * Furthermore\n-830 * b = -Tb(x*) + t + \\sum_i dTb/dx_i(x^*) x_i/(1-xn)\n-831 *\n-832 * Note that both A and b are not defined in the pyramid tip (x=0, xn=1)!\n-833 * Indeed for B the unit square, Tb mapping B to the quadrilateral given\n-834 * by the vertices (0,0,0), (2,0,0), (0,1,0), (1,1,0) and t=(0,0,1), we get\n-835 *\n-836 * T(x,y,xn) = ( x(2-y/(1-xn)), y, xn )\n-837 * / 2-y/(1-xn) -x 0 \\\n-838 * DT(x,y,xn) = | 0 1 0 |\n-839 * \\ 0 0 1 /\n-840 * which is not continuous for xn -> 1, choose for example\n-841 * x=0, y=1-xn, xn -> 1 --> DT -> diag(1,1,1)\n-842 * x=1-xn, y=0, xn -> 1 --> DT -> diag(2,1,1)\n-843 *\n-844 * However, for Tb affine-linear, Tb(y) = My + y0, DTb = M:\n-845 * A = M\n-846 * b = -M x* - y0 + t + \\sum_i M_i x_i/(1-xn)\n-847 * = -M x* - y0 + t + M x*\n-848 * = -y0 + t\n-849 * which is continuous for xn -> 1. Note that this b is also given by\n-850 * b = -Tb(0) + t + \\sum_i dTb/dx_i(0) x_i/1\n-851 * that is replacing x* by 1 and 1-xn by 1 in the formular above.\n-852 *\n-853 * For xn -> 1, we can thus set x*=0, \"1-xn\"=1 (or anything != 0) and get\n-854 * the right result in case Tb is affine-linear.\n-855 */\n-856\n-857 /* The second case effectively results in x* = 0 */\n-858 _\bc_\bt_\by_\bp_\be dfcxn = (cxn > Traits::tolerance() || cxn < -Traits::tolerance()) ?\n-_\bc_\bt_\by_\bp_\be(df / cxn) : _\bc_\bt_\by_\bp_\be(0);\n-859\n-860 // initialize last row\n-861 // b = -Tb(x*)\n-862 // (b = -Tb(0) = -y0 in case xn -> 1 and Tb affine-linear)\n-863 global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit,\n-dfcxn, x, -rf, jt[ dim-1 ] );\n-864 // b += t\n-865 jt[ dim-1 ].axpy( rf, *cit );\n-866 ++cit;\n-867 // apply Jacobian for bottom (with argument x/(1-xn)) and correct last row\n-868 if( add )\n-869 {\n-870 FieldMatrix< _\bc_\bt_\by_\bp_\be, dim-1, coorddimension > jt2;\n-871 // jt2 = dTb/dx_i(x*)\n-872 jacobianTransposed< false >( topologyId, std::integral_constant< int, dim-\n-1 >(), cit2, dfcxn, x, rf, jt2 );\n-873 // A = dTb/dx_i(x*) (jt[j], j=0..dim-1)\n-874 // b += \\sum_i dTb/dx_i(x*) x_i/(1-xn) (jt[dim-1])\n-875 // (b += 0 in case xn -> 1)\n-876 for( int j = 0; j < dim-1; ++j )\n-877 {\n-878 jt[ j ] += jt2[ j ];\n-879 jt[ dim-1 ].axpy( dfcxn*x[ j ], jt2[ j ] );\n-880 }\n-881 }\n-882 else\n-883 {\n-884 // jt = dTb/dx_i(x*)\n-885 jacobianTransposed< false >( topologyId, std::integral_constant< int, dim-\n-1 >(), cit2, dfcxn, x, rf, jt );\n-886 // b += \\sum_i dTb/dx_i(x*) x_i/(1-xn)\n-887 for( int j = 0; j < dim-1; ++j )\n-888 jt[ dim-1 ].axpy( dfcxn*x[ j ], jt[ j ] );\n-889 }\n-890 }\n-891 }\n-892\n-893 template< class ct, int mydim, int cdim, class Traits >\n-894 template< bool add, int rows, class CornerIterator >\n-895 inline void _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-_\b8_\b9_\b6_\b _\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd, std::integral_constant< int, 0 >,\n-897 CornerIterator &cit, const _\bc_\bt_\by_\bp_\be &, const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &,\n-898 const _\bc_\bt_\by_\bp_\be &, FieldMatrix< ctype, rows, cdim > & )\n-899 {\n-900 ++cit;\n-901 }\n-902\n-903\n-904\n-905 template< class ct, int mydim, int cdim, class Traits >\n-906 template< int dim, class CornerIterator >\n-907 inline bool _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-_\b9_\b0_\b8_\b _\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd topologyId, std::integral_constant< int, dim >,\n-CornerIterator &cit, _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jt )\n-909 {\n-910 const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &orgBottom = *cit;\n-911 if( !affine( topologyId, std::integral_constant< int, dim-1 >(), cit, jt )\n-)\n-912 return false;\n-913 const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &orgTop = *cit;\n-914\n-915 if( Impl::isPrism( toUnsignedInt(topologyId), mydimension, mydimension-dim\n-) )\n-916 {\n-917 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jtTop;\n-918 if( !affine( topologyId, std::integral_constant< int, dim-1 >(), cit, jtTop\n-) )\n-919 return false;\n-920\n-921 // check whether both jacobians are identical\n-922 _\bc_\bt_\by_\bp_\be norm( 0 );\n-923 for( int i = 0; i < dim-1; ++i )\n-924 norm += (jtTop[ i ] - jt[ i ]).two_norm2();\n-925 if( norm >= Traits::tolerance() )\n-926 return false;\n-927 }\n-928 else\n-929 ++cit;\n-930 jt[ dim-1 ] = orgTop - orgBottom;\n-931 return true;\n-932 }\n-933\n-934 template< class ct, int mydim, int cdim, class Traits >\n-935 template< class CornerIterator >\n-936 inline bool _\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-_\b9_\b3_\b7_\b _\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be ( _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd, std::integral_constant< int, 0 >, CornerIterator\n-&cit, _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd & )\n-938 {\n-939 ++cit;\n-940 return true;\n-941 }\n-942\n-943} // namespace Dune\n-944\n-945#endif // #ifndef DUNE_GEOMETRY_MULTILINEARGEOMETRY_HH\n+155 public:\n+_\b1_\b5_\b6 const _\bI_\bn_\bd_\be_\bx &_\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be() const {\n+157 return order->vertexOrder[order->refelem.subEntity(subEntity, codim,\n+158 vertex, dim)];\n+159 }\n+_\b1_\b6_\b0 const _\bI_\bn_\bd_\be_\bx &_\be_\bl_\be_\bm_\be_\bn_\bt_\bA_\bt(std::ptrdiff_t n) const {\n+161 return order->vertexOrder[order->refelem.subEntity(subEntity, codim,\n+162 vertex+n, dim)];\n+163 }\n+_\b1_\b6_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bi_\bt_\be_\br_\ba_\bt_\bo_\br &other) const {\n+165 return order == other.order && codim == other.codim &&\n+166 subEntity == other.subEntity && vertex == other.vertex;\n+167 }\n+_\b1_\b6_\b8 void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt() { ++vertex; }\n+_\b1_\b6_\b9 void _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt() { --vertex; }\n+_\b1_\b7_\b0 void _\ba_\bd_\bv_\ba_\bn_\bc_\be(std::ptrdiff_t n) { vertex += n; }\n+_\b1_\b7_\b1 std::ptrdiff_t _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo(const _\bi_\bt_\be_\br_\ba_\bt_\bo_\br &other) const {\n+172 // make sure we reference the same container\n+173 assert(order == other.order && codim == other.codim &&\n+174 subEntity == other.subEntity);\n+175 if(vertex < other.vertex) return other.vertex - vertex;\n+176 else return -static_cast(vertex - other.vertex);\n+177 }\n+178\n+179 friend class _\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br;\n+180\n+182\n+_\b1_\b8_\b7 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br() { }\n+188 };\n+189} // namespace Dune\n+190\n+191#endif // DUNE_GEOMETRY_GENERALVERTEXORDER_HH\n _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n-_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh\n-An implementation of the Geometry interface for affine geometries.\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n+_\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bd_\bu_\bc_\be_\bO_\br_\bd_\be_\br\n+void reduceOrder(const InIterator &inBegin, const InIterator &inEnd,\n+OutIterator outIt)\n+Algorithm to reduce vertex order information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:40\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n Class providing access to the singletons of the reference elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:170\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n typename Container::ReferenceElement ReferenceElement\n The reference element type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs\n-default traits class for MultiLinearGeometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:39\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\be_\br\n-Impl::FieldMatrixHelper< ct > MatrixHelper\n-helper structure containing some matrix routines\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bt_\bo_\bl_\be_\br_\ba_\bn_\bc_\be\n-static ct tolerance()\n-tolerance to numerical algorithms\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bC_\bo_\br_\bn_\be_\br_\bS_\bt_\bo_\br_\ba_\bg_\be\n-template specifying the storage for the corners\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bC_\bo_\br_\bn_\be_\br_\bS_\bt_\bo_\br_\ba_\bg_\be_\b:_\b:_\bT_\by_\bp_\be\n-std::vector< FieldVector< ct, cdim > > Type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:130\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bh_\ba_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-will there be only one geometry type for a dimension?\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:148\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bh_\ba_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd\n-static const unsigned int topologyId\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:150\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bh_\ba_\bs_\bS_\bi_\bn_\bg_\bl_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bv\n-static const bool v\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:149\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-generic geometry implementation based on corner coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl\n-static void global(TopologyId topologyId, std::integral_constant< int, dim >,\n-CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype\n-&rf, GlobalCoordinate &y)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:749\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static const int mydimension\n-geometry dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:189\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bt_\by_\bp_\be\n-Dune::GeometryType type() const\n-obtain the name of the reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:269\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\be_\br\n-Traits::MatrixHelper MatrixHelper\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:225\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-FieldVector< ctype, coorddimension > GlobalCoordinate\n-type of global coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:196\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-static void jacobianTransposed(TopologyId topologyId, std::integral_constant<\n-int, 0 >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const\n-ctype &rf, FieldMatrix< ctype, rows, cdim > &jt)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:896\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const\n-obtain the transposed of the Jacobian\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:377\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt\n-ReferenceElement refElement() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:425\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl\n-GlobalCoordinate global(const LocalCoordinate &local) const\n-evaluate the mapping\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:290\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\be_\bn_\bt_\be_\br\n-GlobalCoordinate center() const\n-obtain the centroid of the mapping's image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:282\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br\n-GlobalCoordinate corner(int i) const\n-obtain coordinates of the i-th corner\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:275\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-Dune::ReferenceElements< ctype, mydimension > ReferenceElements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:214\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bt_\by_\bp_\be\n-ct ctype\n-coordinate type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:186\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-static void jacobianTransposed(TopologyId topologyId, std::integral_constant<\n-int, dim >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x,\n-const ctype &rf, FieldMatrix< ctype, rows, cdim > &jt)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:794\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static const int coorddimension\n-coordinate dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:191\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br_\bs\n-int corners() const\n-obtain number of corners of the corresponding reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:272\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd\n-TopologyId topologyId() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:430\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-friend ReferenceElement referenceElement(const MultiLinearGeometry &geometry)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:395\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bl_\bo_\bc_\ba_\bl\n-LocalCoordinate local(const GlobalCoordinate &globalCoord) const\n-evaluate the inverse mapping\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:312\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl\n-static void global(TopologyId topologyId, std::integral_constant< int, 0 >,\n-CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype\n-&rf, GlobalCoordinate &y)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:780\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n-Volume volume() const\n-obtain the volume of the mapping's image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:363\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-FieldVector< ctype, mydimension > LocalCoordinate\n-type of local coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:194\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-MultiLinearGeometry(const ReferenceElement &refElement, const Corners &corners)\n-constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:239\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be\n-static bool affine(TopologyId topologyId, std::integral_constant< int, 0 >,\n-CornerIterator &cit, JacobianTransposed &jt)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:937\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd\n-std::conditional< hasSingleGeometryType, std::integral_constant< unsignedint,\n-Traits::templatehasSingleGeometryType< mydimension >::topologyId >, unsignedint\n->::type TopologyId\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:226\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bV_\bo_\bl_\bu_\bm_\be\n-ctype Volume\n-type of volume\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:198\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be\n-static bool affine(TopologyId topologyId, std::integral_constant< int, dim >,\n-CornerIterator &cit, JacobianTransposed &jt)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:908\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n-JacobianInverse jacobianInverse(const LocalCoordinate &local) const\n-Obtain the Jacobian's inverse.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:418\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-MultiLinearGeometry(Dune::GeometryType gt, const Corners &corners)\n-constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:255\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed\n-type of jacobian transposed\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:201\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-ReferenceElements::ReferenceElement ReferenceElement\n-type of reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:219\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate\n-&local) const\n-obtain the transposed of the Jacobian's inverse\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:738\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-FieldMatrix< ctype, coorddimension, mydimension > Jacobian\n-Type for the Jacobian matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:207\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be\n-bool affine() const\n-is this mapping affine?\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:262\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n-FieldMatrix< ctype, mydimension, coorddimension > JacobianInverse\n-Type for the inverse Jacobian matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:210\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be\n-bool affine(JacobianTransposed &jacobianT) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:458\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt\n-Volume integrationElement(const LocalCoordinate &local) const\n-obtain the integration element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:350\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-Jacobian jacobian(const LocalCoordinate &local) const\n-Obtain the Jacobian.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:407\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:488\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd_\b:_\b:_\bs_\be_\bt_\bu_\bp\n-void setup(const JacobianTransposed &jt)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:492\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd_\b:_\b:_\bd_\be_\bt\n-ctype det() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:502\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd_\b:_\b:_\bd_\be_\bt_\bI_\bn_\bv\n-ctype detInv() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:503\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd_\b:_\b:_\bs_\be_\bt_\bu_\bp_\bD_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt\n-void setupDeterminant(const JacobianTransposed &jt)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:497\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Implement a MultiLinearGeometry with additional caching.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:526\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl\n-GlobalCoordinate global(const LocalCoordinate &local) const\n-evaluate the mapping\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:580\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-Base::ReferenceElement ReferenceElement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:534\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be\n-bool affine() const\n-is this mapping affine?\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:567\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-CachedMultiLinearGeometry(const ReferenceElement &referenceElement, const\n-CornerStorage &cornerStorage)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:551\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\br_\be_\bf_\bE_\bl_\be_\bm_\be_\bn_\bt\n-ReferenceElement refElement() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:425\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bl_\bo_\bc_\ba_\bl\n-LocalCoordinate local(const GlobalCoordinate &global) const\n-evaluate the inverse mapping\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:604\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\be_\br\n-Base::MatrixHelper MatrixHelper\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:531\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-Base::LocalCoordinate LocalCoordinate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:541\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n-JacobianInverse jacobianInverse(const LocalCoordinate &local) const\n-Obtain the Jacobian's inverse.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:713\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const\n-obtain the transposed of the Jacobian\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:666\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br\n-GlobalCoordinate corner(int i) const\n-obtain coordinates of the i-th corner\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:275\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n-Volume volume() const\n-obtain the volume of the mapping's image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:649\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-CachedMultiLinearGeometry(Dune::GeometryType gt, const CornerStorage\n-&cornerStorage)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:559\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt\n-ctype integrationElement(const LocalCoordinate &local) const\n-obtain the integration element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:633\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bt_\by_\bp_\be\n-Base::ctype ctype\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:536\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-Jacobian jacobian(const LocalCoordinate &local) const\n-Obtain the Jacobian.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:702\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-Base::JacobianInverseTransposed JacobianInverseTransposed\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:546\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-Base::JacobianTransposed JacobianTransposed\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:545\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n-Base::JacobianInverse JacobianInverse\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:548\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-Base::Jacobian Jacobian\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:547\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bV_\bo_\bl_\bu_\bm_\be\n-Base::Volume Volume\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:543\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-Base::GlobalCoordinate GlobalCoordinate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:542\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\be_\bn_\bt_\be_\br\n-GlobalCoordinate center() const\n-obtain the centroid of the mapping's image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:572\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate\n-&local) const\n-obtain the transposed of the Jacobian's inverse\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:680\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br\n+Class providing information on the ordering of vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx\n+Index_ Index\n+Type of indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:77\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bt_\by_\bp_\be\n+const GeometryType & type() const\n+get type of the entity's geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:85\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static const std::size_t dimension\n+export the dimension of the entity we provide information for\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:83\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bg_\be_\bt_\bR_\be_\bd_\bu_\bc_\be_\bd\n+void getReduced(std::size_t codim, std::size_t subEntity, std::vector< Index >\n+&order) const\n+get a vector of reduced indices for some sub-entity\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:128\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\be_\bn_\bd\n+iterator end(std::size_t codim, std::size_t subEntity) const\n+get end iterator for the vertex indices of some sub-entity\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:115\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br\n+GeneralVertexOrder(const GeometryType >_, const InIterator &inBegin, const\n+InIterator &inEnd)\n+construct a GeneralVertexOrder\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:97\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+iterator begin(std::size_t codim, std::size_t subEntity) const\n+get begin iterator for the vertex indices of some sub-entity\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:108\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+Iterate over the vertex indices of some sub-entity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:144\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+iterator()\n+public default constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:187\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt\n+void decrement()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:169\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bv_\ba_\bn_\bc_\be\n+void advance(std::ptrdiff_t n)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:170\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+const Index & dereference() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:156\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n+void increment()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:168\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const iterator &other) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:164\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo\n+std::ptrdiff_t distanceTo(const iterator &other) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:171\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bV_\be_\br_\bt_\be_\bx_\bO_\br_\bd_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\bA_\bt\n+const Index & elementAt(std::ptrdiff_t n) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn generalvertexorder.hh:160\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n Unique label for each type of entities that can occur in DUNE grids.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00197.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00197.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: dimension.hh File Reference\n+dune-geometry: virtualrefinement.cc File Reference\n \n \n \n \n \n \n \n@@ -71,36 +71,96 @@\n \n \n \n
\n \n-
dimension.hh File Reference
\n+Namespaces |\n+Macros |\n+Functions
\n+
virtualrefinement.cc File Reference
\n \n
\n-
#include <type_traits>
\n+\n+

This file contains the virtual wrapper around refinement. \n+More...

\n+
#include <cassert>
\n+#include <typeinfo>
\n+#include <dune/common/exceptions.hh>
\n+#include <dune/common/fvector.hh>
\n+#include <dune/common/iteratorfacades.hh>
\n+#include "type.hh"
\n+#include "refinement.hh"
\n
\n

Go to the source code of this file.

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

\n Classes

struct  Dune::Dim< dim >
 Static tag representing a dimension. More...
class  Dune::VirtualRefinementSubEntityIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::VirtualRefinementSubEntityIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::VirtualRefinement< dimension, CoordType >::Codim< codimension >
 
class  Dune::VirtualRefinementSubEntityIteratorBackSpecial< dimension, CoordType, dimension >
 
class  Dune::VirtualRefinementSubEntityIteratorBackSpecial< dimension, CoordType, 0 >
 
class  Dune::VirtualRefinement< dimension, CoordType >::SubEntityIteratorBack< dimension, CoordType >
 
class  Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >
 
class  Dune::VirtualRefinementImpSubEntityIteratorBackSpecial< topologyId, CoordType, coerceToId, dimension, dimension >
 
class  Dune::VirtualRefinementImpSubEntityIteratorBackSpecial< topologyId, CoordType, coerceToId, dimension, 0 >
 
struct  Dune::Codim< codim >
 Static tag representing a codimension. More...
class  Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >::SubEntityIteratorBack< codimension >
 
class  Dune::RefinementBuilder< dimension, CoordType >
 
class  Dune::RefinementBuilder< 1, CoordType >
 
class  Dune::RefinementBuilder< 3, CoordType >
 
\n \n \n \n+

\n Namespaces

namespace  Dune
 
\n+\n+\n+\n+

\n+Macros

#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
 
\n+\n+\n+\n+\n+\n

\n+Functions

template<int dimension, class CoordType >
VirtualRefinement< dimension, CoordType > & Dune::buildRefinement (GeometryType geometryType, GeometryType coerceTo)
 return a reference to the VirtualRefinement according to the parameters
 
\n+

Detailed Description

\n+

This file contains the virtual wrapper around refinement.

\n+

Macro Definition Documentation

\n+\n+

◆ DUNE_GEOMETRY_VIRTUALREFINEMENT_CC

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+
#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
\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,22 +1,74 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-dimension.hh File Reference\n-#include \n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+virtualrefinement.cc File Reference\n+This file contains the virtual wrapper around refinement. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n+#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm_\b<_\b _\bd_\bi_\bm_\b _\b>\n-\u00a0 Static tag representing a dimension. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\b _\b>\n-\u00a0 Static tag representing a codimension. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+ _\b0_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\b1_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+\u00a0\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\b3_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\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+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bV_\bI_\bR_\bT_\bU_\bA_\bL_\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bC_\bC\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt< dimension, CoordType > _\bD_\bu_\bn_\be_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+ &\u00a0 geometryType, _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be coerceTo)\n+ return a reference to the\n+\u00a0 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt according to the\n+ parameters\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+This file contains the virtual wrapper around refinement.\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_V\bVI\bIR\bRT\bTU\bUA\bAL\bLR\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n+#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00197_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00197_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: dimension.hh Source File\n+dune-geometry: virtualrefinement.cc Source File\n \n \n \n \n \n \n \n@@ -74,54 +74,817 @@\n \n
\n \n
\n
\n
\n-
dimension.hh
\n+
virtualrefinement.cc
\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_DIMENSION_HH
\n-
6#define DUNE_GEOMETRY_DIMENSION_HH
\n-
7
\n-
8#include <type_traits>
\n-
9
\n-
10namespace Dune {
\n-
11
\n-
13 template<int dim>
\n-
\n-
14 struct Dim
\n-
15 : public std::integral_constant<int,dim>
\n-
16 {
\n-
17 typedef Dim type;
\n-
18 };
\n-
\n-
19
\n-
21 template<int codim>
\n-
\n-
22 struct Codim
\n-
23 : public std::integral_constant<int,codim>
\n-
24 {
\n-
25 typedef Codim type;
\n-
26 };
\n-
\n-
27
\n-
28}
\n-
29
\n-
30#endif // DUNE_GEOMETRY_DIMENSION_HH
\n+
5
\n+
6#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
\n+
7#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
\n+
8
\n+
14#include <cassert>
\n+
15#include <typeinfo>
\n+
16
\n+
17#include <dune/common/exceptions.hh>
\n+
18#include <dune/common/fvector.hh>
\n+
19#include <dune/common/iteratorfacades.hh>
\n+
20
\n+
21#include "type.hh"
\n+
22#include "refinement.hh"
\n+
23
\n+
24namespace Dune
\n+
25{
\n+
26 // //////////////////////////////////////////
\n+
27 //
\n+
28 // The virtual base class and its iterators
\n+
29 //
\n+
30
\n+
31 //
\n+
32 // Refinement
\n+
33 //
\n+
34
\n+
35 template<int dimension, class CoordType>
\n+\n+
\n+\n+\n+
39 {
\n+
40 return VertexIterator(vBeginBack(tag));
\n+
41 }
\n+
\n+
42
\n+
43 template<int dimension, class CoordType>
\n+\n+
\n+\n+\n+
47 {
\n+
48 return VertexIterator(vEndBack(tag));
\n+
49 }
\n+
\n+
50
\n+
51 template<int dimension, class CoordType>
\n+\n+
\n+\n+\n+
55 {
\n+
56 return ElementIterator(eBeginBack(tag));
\n+
57 }
\n+
\n+
58
\n+
59 template<int dimension, class CoordType>
\n+\n+
\n+\n+\n+
63 {
\n+
64 return ElementIterator(eEndBack(tag));
\n+
65 }
\n+
\n+
66
\n+
67 //
\n+
68 // The iterators
\n+
69 //
\n+
70
\n+
71 template<int dimension, class CoordType, int codimension>
\n+\n+
73
\n+
74 // The iterator for vertices
\n+
75 template<int dimension, class CoordType>
\n+
\n+
76 class VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, dimension>
\n+
77 {};
\n+
\n+
78
\n+
79 // The iterator for elements
\n+
80 template<int dimension, class CoordType>
\n+
\n+
81 class VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, 0>
\n+
82 {
\n+
83 public:
\n+\n+
85 typedef typename Refinement::template Codim<0>::SubEntityIterator Common;
\n+
86 typedef typename Refinement::IndexVector IndexVector;
\n+
87
\n+
88 IndexVector vertexIndices() const;
\n+
89 };
\n+
\n+
90
\n+
91 template<int dimension, class CoordType>
\n+\n+
\n+\n+
94 vertexIndices() const
\n+
95 {
\n+
96 return static_cast<const Common *>(this)->backend->vertexIndices();
\n+
97 }
\n+
\n+
98
\n+
99 // The iterator common stuff
\n+
100 template<int dimension, class CoordType>
\n+
101 template<int codimension>
\n+
\n+
102 class VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n+
103 : public ForwardIteratorFacade<typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n+
104 public VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>
\n+
105 {
\n+
106 public:
\n+\n+
108 typedef typename Refinement::template Codim<codimension>::SubEntityIterator This;
\n+
109 typedef typename Refinement::template SubEntityIteratorBack<codimension> IteratorBack;
\n+
110 typedef typename Refinement::CoordVector CoordVector;
\n+
111
\n+\n+
113 SubEntityIterator(const This &other);
\n+\n+
115
\n+
116 This &operator=(const This &other);
\n+
117
\n+
118 bool equals(const This &other) const;
\n+
119 void increment();
\n+
120
\n+
121 int index() const;
\n+
122
\n+
123 // If you simply use an unqualified CoordVector here g++-4.2 chokes
\n+\n+
125 CoordVector coords() const;
\n+
126 private:
\n+
127 friend class VirtualRefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>;
\n+
128 IteratorBack *backend;
\n+
129 };
\n+
\n+
130
\n+
131#ifndef DOXYGEN
\n+
132 template<int dimension, class CoordType>
\n+
133 template<int codimension>
\n+\n+
135 SubEntityIterator(IteratorBack *backend_)
\n+
136 : backend(backend_)
\n+
137 {}
\n+
138
\n+
139 template<int dimension, class CoordType>
\n+
140 template<int codimension>
\n+\n+
142 SubEntityIterator(const This &other)
\n+
143 : backend(other.backend->clone())
\n+
144 {}
\n+
145
\n+
146 template<int dimension, class CoordType>
\n+
147 template<int codimension>
\n+
148 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
149 ~SubEntityIterator()
\n+
150 {
\n+
151 delete backend;
\n+
152 }
\n+
153
\n+
154 template<int dimension, class CoordType>
\n+
155 template<int codimension>
\n+
156 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator &
\n+
157 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
158 operator=(const This &other)
\n+
159 {
\n+
160 delete backend;
\n+
161 backend = other.backend->clone();
\n+
162 }
\n+
163
\n+
164 template<int dimension, class CoordType>
\n+
165 template<int codimension>
\n+
166 bool
\n+
167 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
168 equals(const This &other) const
\n+
169 { return *backend == *(other.backend); }
\n+
170
\n+
171 template<int dimension, class CoordType>
\n+
172 template<int codimension>
\n+
173 void
\n+
174 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
175 increment()
\n+
176 {
\n+
177 ++*backend;
\n+
178 }
\n+
179
\n+
180 template<int dimension, class CoordType>
\n+
181 template<int codimension>
\n+
182 int
\n+
183 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
184 index() const
\n+
185 { return backend->index(); }
\n+
186
\n+
187 template<int dimension, class CoordType>
\n+
188 template<int codimension>
\n+
189 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator::CoordVector
\n+
190 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
191 coords() const
\n+
192 { return backend->coords(); }
\n+
193#endif // DOXYGEN
\n+
194
\n+
195 //
\n+
196 // The iterator backend
\n+
197 //
\n+
198
\n+
199 template<int dimension, class CoordType, int codimension>
\n+\n+
201
\n+
202 // The iterator backend for vertices
\n+
203 template<int dimension, class CoordType>
\n+
\n+
204 class VirtualRefinementSubEntityIteratorBackSpecial<dimension, CoordType, dimension>
\n+
205 {
\n+
206 public:
\n+
207
\n+\n+
210 };
\n+
\n+
211
\n+
212 // The iterator backend for elements
\n+
213 template<int dimension, class CoordType>
\n+
\n+\n+
215 {
\n+
216 public:
\n+\n+
218 typedef typename Refinement::IndexVector IndexVector;
\n+
219
\n+
220 virtual IndexVector vertexIndices() const = 0;
\n+
221
\n+\n+
224 };
\n+
\n+
225
\n+
226 // The iterator backend common stuff
\n+
227 template<int dimension, class CoordType>
\n+
228 template<int codimension>
\n+
\n+
229 class VirtualRefinement<dimension, CoordType>::SubEntityIteratorBack
\n+
230 : public VirtualRefinementSubEntityIteratorBackSpecial<dimension, CoordType, codimension>
\n+
231 {
\n+
232 public:
\n+\n+
234 typedef typename Refinement::template SubEntityIteratorBack<codimension> This;
\n+
235 typedef typename Refinement::CoordVector CoordVector;
\n+
236
\n+\n+
238
\n+
239 virtual This *clone() const = 0;
\n+
240
\n+
241 virtual bool operator==(const This &other) const = 0;
\n+
242 virtual This &operator++() = 0;
\n+
243
\n+
244 virtual int index() const = 0;
\n+
245 virtual CoordVector coords() const = 0;
\n+
246 };
\n+
\n+
247
\n+
248 // /////////////////////////////////////////////////
\n+
249 //
\n+
250 // The derived classes and their iterator backends
\n+
251 //
\n+
252
\n+
253 //
\n+
254 // The refinement implementation
\n+
255 //
\n+
256
\n+
257 template<unsigned topologyId, class CoordType,
\n+
258 unsigned coerceToId, int dimension>
\n+
\n+\n+
260 : public Dune::VirtualRefinement<dimension, CoordType>
\n+
261 {
\n+
262 public:
\n+\n+\n+
265
\n+
266 template<int codimension>
\n+\n+
268
\n+
269 int nVertices(Dune::RefinementIntervals tag) const;
\n+
270
\n+
271 int nElements(Dune::RefinementIntervals tag) const;
\n+
272
\n+\n+
274 private:
\n+\n+
276
\n+\n+\n+\n+\n+
281 };
\n+
\n+
282
\n+
283 template<unsigned topologyId, class CoordType,
\n+
284 unsigned coerceToId, int dimension>
\n+
285 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension> &
\n+
\n+\n+
287 {
\n+
288 static VirtualRefinementImp instance_{};
\n+
289 return instance_;
\n+
290 }
\n+
\n+
291
\n+
292 template<unsigned topologyId, class CoordType,
\n+
293 unsigned coerceToId, int dimension>
\n+\n+
299
\n+
300 template<unsigned topologyId, class CoordType,
\n+
301 unsigned coerceToId, int dimension>
\n+\n+\n+\n+
305 {
\n+
306 return new SubEntityIteratorBack<dimension>(StaticRefinement::vBegin(tag));
\n+
307 }
\n+
308
\n+
309 template<unsigned topologyId, class CoordType,
\n+
310 unsigned coerceToId, int dimension>
\n+\n+
312 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::
\n+
313 vEndBack(Dune::RefinementIntervals tag) const
\n+
314 {
\n+
315 return new SubEntityIteratorBack<dimension>(StaticRefinement::vEnd(tag));
\n+
316 }
\n+
317
\n+
318 template<unsigned topologyId, class CoordType,
\n+
319 unsigned coerceToId, int dimension>
\n+\n+
324
\n+
325 template<unsigned topologyId, class CoordType,
\n+
326 unsigned coerceToId, int dimension>
\n+\n+\n+\n+
330 {
\n+
331 return new SubEntityIteratorBack<0>(StaticRefinement::eBegin(tag));
\n+
332 }
\n+
333
\n+
334 template<unsigned topologyId, class CoordType,
\n+
335 unsigned coerceToId, int dimension>
\n+\n+
337 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::
\n+
338 eEndBack(Dune::RefinementIntervals tag) const
\n+
339 {
\n+
340 return new SubEntityIteratorBack<0>(StaticRefinement::eEnd(tag));
\n+
341 }
\n+
342
\n+
343 //
\n+
344 // The iterator backend implementation
\n+
345 //
\n+
346
\n+
347 // The iterator backend implementation specialties
\n+
348 template<unsigned topologyId, class CoordType,
\n+
349 unsigned coerceToId, int dimension, int codimension>
\n+\n+
351
\n+
352 // The iterator backend implementation specialties for vertices
\n+
353 template<unsigned topologyId, class CoordType,
\n+
354 unsigned coerceToId, int dimension>
\n+
\n+
355 class VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, dimension>
\n+
356 : public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<dimension>
\n+
357 {};
\n+
\n+
358
\n+
359 // The iterator backend implementation specialties for elements
\n+
360
\n+
361 template<unsigned topologyId, class CoordType,
\n+
362 unsigned coerceToId, int dimension>
\n+
\n+
363 class VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, 0>
\n+
364 : public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<0>
\n+
365 {
\n+
366 public:
\n+\n+
368 typedef typename VirtualRefinementImp::template SubEntityIteratorBack<0> Common;
\n+\n+\n+
371 typedef typename RefinementBase::IndexVector IndexVector;
\n+
372
\n+
373 IndexVector vertexIndices() const;
\n+
374 };
\n+
\n+
375
\n+
376 template<unsigned topologyId, class CoordType,
\n+
377 unsigned coerceToId, int dimension>
\n+\n+
\n+\n+
380 vertexIndices() const
\n+
381 {
\n+
382 IndexVector vIndices;
\n+
383 vIndices.reserve(StaticRefinement::IndexVector::dimension);
\n+
384
\n+
385 typename StaticRefinement::IndexVector sIndices = static_cast<const Common *>(this)->backend.vertexIndices();
\n+
386 for(int i = 0; i < StaticRefinement::IndexVector::dimension; ++i)
\n+
387 vIndices.push_back(sIndices[i]);
\n+
388 return vIndices;
\n+
389 }
\n+
\n+
390
\n+
391 // The shared iterator backend implementation
\n+
392 template<unsigned topologyId, class CoordType,
\n+
393 unsigned coerceToId, int dimension>
\n+
394 template<int codimension>
\n+
\n+
395 class VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::SubEntityIteratorBack
\n+
396 : public VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, codimension>
\n+
397 {
\n+
398 public:
\n+
399 typedef typename StaticRefinement::template Codim<codimension>::SubEntityIterator BackendIterator;
\n+\n+
401 typedef typename VirtualRefinement::template SubEntityIteratorBack<codimension> Base;
\n+\n+
403
\n+\n+
405 SubEntityIteratorBack(const This &other);
\n+
406
\n+
407 Base *clone() const;
\n+
408
\n+
409 bool operator==(const Base &other) const;
\n+
410 Base &operator++();
\n+
411
\n+
412 int index() const;
\n+
413 CoordVector coords() const;
\n+
414
\n+
415 private:
\n+
416 friend class VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, codimension>;
\n+
417 BackendIterator backend;
\n+
418 };
\n+
\n+
419
\n+
420 template<unsigned topologyId, class CoordType,
\n+
421 unsigned coerceToId, int dimension>
\n+
422 template<int codimension>
\n+\n+
427
\n+
428 template<unsigned topologyId, class CoordType,
\n+
429 unsigned coerceToId, int dimension>
\n+
430 template<int codimension>
\n+
\n+\n+
432 SubEntityIteratorBack(const This &other)
\n+
433 : VirtualRefinementImpSubEntityIteratorBackSpecial<topologyId, CoordType, coerceToId, dimension, codimension>(other),
\n+
434 backend(other.backend)
\n+
435 {}
\n+
\n+
436
\n+
437 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n+
438 template<int codimension>
\n+\n+\n+
443
\n+
444 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n+
445 template<int codimension>
\n+
446 bool
\n+
\n+\n+
448 operator==(const Base &other) const
\n+
449 {
\n+
450 try {
\n+
451 return backend == dynamic_cast<const This &>(other).backend;
\n+
452 }
\n+
453 catch(const std::bad_cast&)
\n+
454 {
\n+
455 return false;
\n+
456 }
\n+
457 }
\n+
\n+
458
\n+
459 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n+
460 template<int codimension>
\n+\n+\n+
468
\n+
469 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n+
470 template<int codimension>
\n+
471 int
\n+\n+
475
\n+
476 template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
\n+
477 template<int codimension>
\n+\n+\n+
482
\n+
483 // ////////////////////////
\n+
484 //
\n+
485 // The refinement builder
\n+
486 //
\n+
487
\n+
488 template<int dimension, class CoordType>
\n+
489 class RefinementBuilder;
\n+
490
\n+
501 template<int dimension, class CoordType>
\n+\n+
\n+\n+
504 GeometryType geometryType,
\n+
506 GeometryType coerceTo)
\n+
507 {
\n+
508 // Check that the user used valid geometry types
\n+
509 assert(geometryType.dim() == dimension && coerceTo.dim() == dimension);
\n+
510 return RefinementBuilder<dimension, CoordType>::build( geometryType.id(), coerceTo.id() );
\n+
511 }
\n+
\n+
512
\n+
513 // In principle the trick with the class is no longer necessary,
\n+
514 // but I'm keeping it in here so it will be easier to specialize
\n+
515 // buildRefinement when someone implements pyramids and prisms
\n+
516 template<int dimension, class CoordType>
\n+
\n+\n+
518 {
\n+
519 public:
\n+
520 static
\n+\n+
\n+
522 build(unsigned topologyId, unsigned coerceToId)
\n+
523 {
\n+
524 topologyId &= ~1;
\n+
525 coerceToId &= ~1;
\n+
526
\n+
527 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
\n+
528 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;
\n+
529
\n+
530 switch( topologyId )
\n+
531 {
\n+
532 //case GeometryType::simplex:
\n+
533 case idSimplex :
\n+
534 //switch( coerceTo )
\n+
535 switch( coerceToId )
\n+
536 {
\n+
537 //case GeometryType::simplex:
\n+
538 case idSimplex :
\n+\n+
540 default :
\n+
541 break;
\n+
542 }
\n+
543 break;
\n+
544
\n+
545 //case GeometryType::cube:
\n+
546 case idCube :
\n+
547 switch( coerceToId )
\n+
548 {
\n+
549 case idSimplex :
\n+\n+
551 case idCube :
\n+\n+
553 default :
\n+
554 break;
\n+
555 }
\n+
556 break;
\n+
557
\n+
558 default :
\n+
559 break;
\n+
560 }
\n+
561 DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, "
\n+
562 << coerceToId << " >.");
\n+
563 }
\n+
\n+
564 };
\n+
\n+
565
\n+
566 template<class CoordType>
\n+
\n+
567 class RefinementBuilder<1, CoordType>
\n+
568 {
\n+
569 static const std::size_t dimension = 1;
\n+
570 public:
\n+
571 static
\n+\n+
\n+
573 build(unsigned topologyId, unsigned coerceToId)
\n+
574 {
\n+
575 topologyId &= ~1;
\n+
576 coerceToId &= ~1;
\n+
577
\n+
578 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
\n+
579
\n+
580 if (topologyId == 0 && coerceToId == 0)
\n+\n+
582
\n+
583 DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, "
\n+
584 << coerceToId << " >.");
\n+
585 }
\n+
\n+
586 };
\n+
\n+
587
\n+
588 template<class CoordType>
\n+
\n+
589 class RefinementBuilder<3, CoordType>
\n+
590 {
\n+
591 static const std::size_t dimension = 3;
\n+
592 public:
\n+
593 static
\n+\n+
\n+
595 build(unsigned topologyId, unsigned coerceToId)
\n+
596 {
\n+
597 topologyId &= ~1;
\n+
598 coerceToId &= ~1;
\n+
599
\n+
600 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
\n+
601 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;
\n+
602 constexpr unsigned idPrism = GeometryTypes::prism.id() & ~1;
\n+
603 constexpr unsigned idPyramid = GeometryTypes::pyramid.id() & ~1;
\n+
604
\n+
605 switch( topologyId )
\n+
606 {
\n+
607 //case GeometryType::simplex:
\n+
608 case idSimplex :
\n+
609 //switch( coerceTo )
\n+
610 switch( coerceToId )
\n+
611 {
\n+
612 //case GeometryType::simplex:
\n+
613 case idSimplex :
\n+\n+
615 default :
\n+
616 break;
\n+
617 }
\n+
618 break;
\n+
619
\n+
620 //case GeometryType::cube:
\n+
621 case idCube :
\n+
622 switch( coerceToId )
\n+
623 {
\n+
624 case idSimplex :
\n+\n+
626 case idCube :
\n+\n+
628 default :
\n+
629 break;
\n+
630 }
\n+
631 break;
\n+
632
\n+
633 //case GeometryType::prism:
\n+
634 case idPrism :
\n+
635 switch( coerceToId )
\n+
636 {
\n+
637 case idSimplex :
\n+\n+
639 default :
\n+
640 break;
\n+
641 }
\n+
642 break;
\n+
643
\n+
644 //case GeometryType::pyramid:
\n+
645 case idPyramid :
\n+
646 switch( coerceToId )
\n+
647 {
\n+
648 case idSimplex :
\n+\n+
650 default :
\n+
651 break;
\n+
652 }
\n+
653 break;
\n+
654
\n+
655 default :
\n+
656 break;
\n+
657 }
\n+
658 DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, "
\n+
659 << coerceToId << " >.");
\n+
660 }
\n+
\n+
661 };
\n+
\n+
662
\n+
663} // namespace Dune
\n+
664
\n+
665#endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
\n+
This file simply includes all Refinement implementations so you don't have to do them separately.
\n+
A unique label for each type of element that can occur in a grid.
\n
Definition affinegeometry.hh:21
\n-
Static tag representing a dimension.
Definition dimension.hh:16
\n-
Dim type
Definition dimension.hh:17
\n+
VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType geometryType, GeometryType coerceTo)
return a reference to the VirtualRefinement according to the parameters
Definition virtualrefinement.cc:503
\n
Static tag representing a codimension.
Definition dimension.hh:24
\n-
Codim type
Definition dimension.hh:25
\n+
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:94
\n+
Wrap each Refinement implementation to get a consistent interface.
Definition base.cc:141
\n+
static ElementIterator eEnd(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:247
\n+
static ElementIterator eBegin(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:237
\n+
static int nElements(Dune::RefinementIntervals tag)
Get the number of Elements.
Definition base.cc:227
\n+
static int nVertices(Dune::RefinementIntervals tag)
Get the number of Vertices.
Definition base.cc:197
\n+
static VertexIterator vBegin(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:207
\n+
typedef IndexVector
The IndexVector of the Refinement.
Definition base.cc:177
\n+
static VertexIterator vEnd(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:217
\n+
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n+
constexpr unsigned int dim() const
Return dimension of the type.
Definition type.hh:372
\n+
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
\n+
Definition virtualrefinement.cc:72
\n+
Refinement::template Codim< 0 >::SubEntityIterator Common
Definition virtualrefinement.cc:85
\n+
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:84
\n+
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:86
\n+
VirtualRefinement< dimension, CoordType >::template Codim< codimension >::SubEntityIterator::CoordVector coords() const
\n+\n+\n+\n+\n+\n+
Refinement::template SubEntityIteratorBack< codimension > IteratorBack
Definition virtualrefinement.cc:109
\n+
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:110
\n+
Refinement::template Codim< codimension >::SubEntityIterator This
Definition virtualrefinement.cc:108
\n+
bool equals(const This &other) const
\n+
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:107
\n+\n+
Definition virtualrefinement.cc:200
\n+
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:208
\n+\n+
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:217
\n+
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:218
\n+
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:222
\n+
Definition virtualrefinement.cc:231
\n+\n+
Refinement::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:234
\n+\n+
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:235
\n+
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:233
\n+
virtual bool operator==(const This &other) const =0
\n+
virtual CoordVector coords() const =0
\n+
virtual ~SubEntityIteratorBack()
Definition virtualrefinement.cc:237
\n+\n+
Definition virtualrefinement.cc:261
\n+
int nVertices(Dune::RefinementIntervals tag) const
Get the number of Vertices.
Definition virtualrefinement.cc:295
\n+
Dune::VirtualRefinement< dimension, CoordType > VirtualRefinement
Definition virtualrefinement.cc:264
\n+
int nElements(Dune::RefinementIntervals tag) const
Get the number of Elements.
Definition virtualrefinement.cc:320
\n+
static VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > & instance()
Definition virtualrefinement.cc:286
\n+
Dune::StaticRefinement< topologyId, CoordType, coerceToId, dimension > StaticRefinement
Definition virtualrefinement.cc:263
\n+
Definition virtualrefinement.cc:397
\n+
VirtualRefinement::template SubEntityIteratorBack< codimension > Base
Definition virtualrefinement.cc:401
\n+
VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:400
\n+
StaticRefinement::template Codim< codimension >::SubEntityIterator BackendIterator
Definition virtualrefinement.cc:399
\n+
VirtualRefinement::CoordVector CoordVector
Definition virtualrefinement.cc:402
\n+\n+
VirtualRefinementImp::template SubEntityIteratorBack< 0 > Common
Definition virtualrefinement.cc:368
\n+\n+
VirtualRefinement< dimension, CoordType > RefinementBase
Definition virtualrefinement.cc:370
\n+
Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > VirtualRefinementImp
Definition virtualrefinement.cc:367
\n+
VirtualRefinementImp::StaticRefinement StaticRefinement
Definition virtualrefinement.cc:369
\n+
Definition virtualrefinement.cc:518
\n+
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:522
\n+
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:573
\n+
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:595
\n+
VirtualRefinement base class.
Definition virtualrefinement.hh:294
\n+
SubEntityIteratorBack< dimension > VertexIteratorBack
Definition virtualrefinement.hh:318
\n+
VertexIterator vBegin(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:38
\n+
ElementIterator eBegin(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:54
\n+
ElementIterator eEnd(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:62
\n+
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the VirtualRefinement.
Definition virtualrefinement.hh:301
\n+
VertexIterator vEnd(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:46
\n+
FieldVector< CoordType, dimension > CoordVector
The CoordVector of the VirtualRefinement.
Definition virtualrefinement.hh:308
\n+
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the VirtualRefinement.
Definition virtualrefinement.hh:299
\n+
SubEntityIteratorBack< 0 > ElementIteratorBack
Definition virtualrefinement.hh:319
\n+
codim database of VirtualRefinement
Definition virtualrefinement.hh:378
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,53 +1,1002 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-dimension.hh\n+virtualrefinement.cc\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_DIMENSION_HH\n-6#define DUNE_GEOMETRY_DIMENSION_HH\n-7\n-8#include \n-9\n-10namespace _\bD_\bu_\bn_\be {\n-11\n-13 template\n-_\b1_\b4 struct _\bD_\bi_\bm\n-15 : public std::integral_constant\n-16 {\n-_\b1_\b7 typedef _\bD_\bi_\bm _\bt_\by_\bp_\be;\n-18 };\n-19\n-21 template\n-_\b2_\b2 struct _\bC_\bo_\bd_\bi_\bm\n-23 : public std::integral_constant\n-24 {\n-_\b2_\b5 typedef _\bC_\bo_\bd_\bi_\bm _\bt_\by_\bp_\be;\n-26 };\n-27\n-28}\n-29\n-30#endif // DUNE_GEOMETRY_DIMENSION_HH\n+5\n+6#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_CC\n+_\b7#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC\n+8\n+14#include \n+15#include \n+16\n+17#include \n+18#include \n+19#include \n+20\n+21#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n+22#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\"\n+23\n+24namespace _\bD_\bu_\bn_\be\n+25{\n+26 // //////////////////////////////////////////\n+27 //\n+28 // The virtual base class and its iterators\n+29 //\n+30\n+31 //\n+32 // Refinement\n+33 //\n+34\n+35 template\n+36 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b3_\b7 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+38_\b _\bv_\bB_\be_\bg_\bi_\bn(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+39 {\n+40 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(vBeginBack(tag));\n+41 }\n+42\n+43 template\n+44 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b4_\b5 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+46_\b _\bv_\bE_\bn_\bd(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+47 {\n+48 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(vEndBack(tag));\n+49 }\n+50\n+51 template\n+52 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b5_\b3 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+54_\b _\be_\bB_\be_\bg_\bi_\bn(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+55 {\n+56 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(eBeginBack(tag));\n+57 }\n+58\n+59 template\n+60 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b6_\b1 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+62_\b _\be_\bE_\bn_\bd(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+63 {\n+64 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(eEndBack(tag));\n+65 }\n+66\n+67 //\n+68 // The iterators\n+69 //\n+70\n+71 template\n+_\b7_\b2 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n+73\n+74 // The iterator for vertices\n+75 template\n+_\b7_\b6 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+77 {};\n+78\n+79 // The iterator for elements\n+80 template\n+_\b8_\b1 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+82 {\n+83 public:\n+_\b8_\b4 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b8_\b5 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bC_\bo_\bm_\bm_\bo_\bn;\n+_\b8_\b6 typedef typename Refinement::IndexVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+87\n+88 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n+89 };\n+90\n+91 template\n+92 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+_\b9_\b3 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+94_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n+95 {\n+96 return static_cast(this)->backend->vertexIndices();\n+97 }\n+98\n+99 // The iterator common stuff\n+100 template\n+101 template\n+_\b1_\b0_\b2 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::_\bC_\bo_\bd_\bi_\bm::\n+SubEntityIterator\n+103 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n+104 public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+105 {\n+106 public:\n+_\b1_\b0_\b7 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b1_\b0_\b8 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\bT_\bh_\bi_\bs;\n+_\b1_\b0_\b9 typedef typename Refinement::template _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>\n+_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n+_\b1_\b1_\b0 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+111\n+_\b1_\b1_\b2 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *backend);\n+_\b1_\b1_\b3 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bT_\bh_\bi_\bs &other);\n+_\b1_\b1_\b4 _\b~_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br();\n+115\n+_\b1_\b1_\b6 _\bT_\bh_\bi_\bs &_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs &other);\n+117\n+_\b1_\b1_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n+_\b1_\b1_\b9 void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt();\n+120\n+_\b1_\b2_\b1 int _\bi_\bn_\bd_\be_\bx() const;\n+122\n+123 // If you simply use an unqualified CoordVector here g++-4.2 chokes\n+124 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be\n+_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::\n+_\b1_\b2_\b5 CoordVector _\bc_\bo_\bo_\br_\bd_\bs() const;\n+126 private:\n+127 friend class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n+128 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *backend;\n+129 };\n+130\n+131#ifndef DOXYGEN\n+132 template\n+133 template\n+134 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n+135_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(IteratorBack *backend_)\n+136 : backend(backend_)\n+137 {}\n+138\n+139 template\n+140 template\n+141 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n+142_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const This &other)\n+143 : backend(other.backend->clone())\n+144 {}\n+145\n+146 template\n+147 template\n+148 VirtualRefinement::Codim::\n+SubEntityIterator::\n+149 ~SubEntityIterator()\n+150 {\n+151 delete backend;\n+152 }\n+153\n+154 template\n+155 template\n+156 typename VirtualRefinement::template\n+Codim::SubEntityIterator &\n+157 VirtualRefinement::Codim::\n+SubEntityIterator::\n+158 operator=(const This &other)\n+159 {\n+160 delete backend;\n+161 backend = other.backend->clone();\n+162 }\n+163\n+164 template\n+165 template\n+166 bool\n+167 VirtualRefinement::Codim::\n+SubEntityIterator::\n+168 equals(const This &other) const\n+169 { return *backend == *(other.backend); }\n+170\n+171 template\n+172 template\n+173 void\n+174 VirtualRefinement::Codim::\n+SubEntityIterator::\n+175 increment()\n+176 {\n+177 ++*backend;\n+178 }\n+179\n+180 template\n+181 template\n+182 int\n+183 VirtualRefinement::Codim::\n+SubEntityIterator::\n+184 index() const\n+185 { return backend->index(); }\n+186\n+187 template\n+188 template\n+189 typename VirtualRefinement::template\n+Codim::SubEntityIterator::CoordVector\n+190 VirtualRefinement::Codim::\n+SubEntityIterator::\n+191 coords() const\n+192 { return backend->coords(); }\n+193#endif // DOXYGEN\n+194\n+195 //\n+196 // The iterator backend\n+197 //\n+198\n+199 template\n+_\b2_\b0_\b0 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n+201\n+202 // The iterator backend for vertices\n+203 template\n+_\b2_\b0_\b4 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+205 {\n+206 public:\n+207\n+_\b2_\b0_\b8 virtual _\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl()\n+209 {}\n+210 };\n+211\n+212 // The iterator backend for elements\n+213 template\n+_\b2_\b1_\b4 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+215 {\n+216 public:\n+_\b2_\b1_\b7 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b1_\b8 typedef typename Refinement::IndexVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+219\n+_\b2_\b2_\b0 virtual _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const = 0;\n+221\n+_\b2_\b2_\b2 virtual _\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl()\n+223 {}\n+224 };\n+225\n+226 // The iterator backend common stuff\n+227 template\n+228 template\n+_\b2_\b2_\b9 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+230 : public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+231 {\n+232 public:\n+_\b2_\b3_\b3 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b3_\b4 typedef typename Refinement::template _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>\n+_\bT_\bh_\bi_\bs;\n+_\b2_\b3_\b5 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+236\n+_\b2_\b3_\b7 virtual _\b~_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk() {}\n+238\n+_\b2_\b3_\b9 virtual _\bT_\bh_\bi_\bs *_\bc_\bl_\bo_\bn_\be() const = 0;\n+240\n+_\b2_\b4_\b1 virtual bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bT_\bh_\bi_\bs &other) const = 0;\n+_\b2_\b4_\b2 virtual _\bT_\bh_\bi_\bs &_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+() = 0;\n+243\n+_\b2_\b4_\b4 virtual int _\bi_\bn_\bd_\be_\bx() const = 0;\n+_\b2_\b4_\b5 virtual _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bc_\bo_\bo_\br_\bd_\bs() const = 0;\n+246 };\n+247\n+248 // /////////////////////////////////////////////////\n+249 //\n+250 // The derived classes and their iterator backends\n+251 //\n+252\n+253 //\n+254 // The refinement implementation\n+255 //\n+256\n+257 template\n+_\b2_\b5_\b9 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+260 : public _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+261 {\n+262 public:\n+_\b2_\b6_\b3 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b6_\b4 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+265\n+266 template\n+267 class _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n+268\n+269 int nVertices(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+270\n+271 int nElements(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+272\n+273 static _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>\n+&instance();\n+274 private:\n+275 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp() {}\n+276\n+277 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *vBeginBack(_\bD_\bu_\bn_\be_\b:_\b:\n+_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+278 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *vEndBack(_\bD_\bu_\bn_\be_\b:_\b:\n+_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+279 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *eBeginBack(_\bD_\bu_\bn_\be_\b:_\b:\n+_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+280 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *eEndBack(_\bD_\bu_\bn_\be_\b:_\b:\n+_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n+281 };\n+282\n+283 template\n+285 VirtualRefinementImp &\n+_\b2_\b8_\b6 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be()\n+287 {\n+288 static _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp instance_{};\n+289 return instance_;\n+290 }\n+291\n+292 template\n+_\b2_\b9_\b4 int _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+295_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+296 {\n+297 return _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(tag);\n+298 }\n+299\n+300 template\n+302 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *\n+303 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+304_\b _\bv_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+305 {\n+306 return new SubEntityIteratorBack(_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn(tag));\n+307 }\n+308\n+309 template\n+311 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *\n+312 VirtualRefinementImp::\n+313 vEndBack(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+314 {\n+315 return new SubEntityIteratorBack(_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd(tag));\n+316 }\n+317\n+318 template\n+_\b3_\b2_\b0 int _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+321 {\n+322 return _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(tag);\n+323 }\n+324\n+325 template\n+327 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *\n+328 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+329_\b _\be_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+330 {\n+331 return new SubEntityIteratorBack<0>(_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn(tag));\n+332 }\n+333\n+334 template\n+336 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *\n+337 VirtualRefinementImp::\n+338 eEndBack(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n+339 {\n+340 return new SubEntityIteratorBack<0>(_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd(tag));\n+341 }\n+342\n+343 //\n+344 // The iterator backend implementation\n+345 //\n+346\n+347 // The iterator backend implementation specialties\n+348 template\n+_\b3_\b5_\b0 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n+351\n+352 // The iterator backend implementation specialties for vertices\n+353 template\n+_\b3_\b5_\b5 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+356 : public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::template\n+SubEntityIteratorBack\n+357 {};\n+358\n+359 // The iterator backend implementation specialties for elements\n+360\n+361 template\n+_\b3_\b6_\b3 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+364 : public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::template\n+SubEntityIteratorBack<0>\n+365 {\n+366 public:\n+_\b3_\b6_\b7 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp;\n+_\b3_\b6_\b8 typedef typename VirtualRefinementImp::template SubEntityIteratorBack<0>\n+_\bC_\bo_\bm_\bm_\bo_\bn;\n+_\b3_\b6_\b9 typedef typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b3_\b7_\b0 typedef _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\ba_\bs_\be;\n+_\b3_\b7_\b1 typedef typename RefinementBase::IndexVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+372\n+373 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n+374 };\n+375\n+376 template\n+378 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+_\b3_\b7_\b9 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b>_\b:_\b:\n+380_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n+381 {\n+382 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vIndices;\n+383 vIndices.reserve(StaticRefinement::IndexVector::dimension);\n+384\n+385 typename _\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br sIndices = static_cast(this)->backend.vertexIndices();\n+386 for(int i = 0; i < StaticRefinement::IndexVector::dimension; ++i)\n+387 vIndices.push_back(sIndices[i]);\n+388 return vIndices;\n+389 }\n+390\n+391 // The shared iterator backend implementation\n+392 template\n+394 template\n+_\b3_\b9_\b5 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+396 : public _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+397 {\n+398 public:\n+_\b3_\b9_\b9 typedef typename StaticRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b4_\b0_\b0 typedef typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bT_\bh_\bi_\bs;\n+_\b4_\b0_\b1 typedef typename VirtualRefinement::template\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bB_\ba_\bs_\be;\n+_\b4_\b0_\b2 typedef typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+403\n+404 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk(const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br &backend);\n+405 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk(const _\bT_\bh_\bi_\bs &other);\n+406\n+407 _\bB_\ba_\bs_\be *clone() const;\n+408\n+409 bool operator==(const _\bB_\ba_\bs_\be &other) const;\n+410 _\bB_\ba_\bs_\be &operator++();\n+411\n+412 int index() const;\n+_\b4_\b1_\b3 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+414\n+415 private:\n+416 friend class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n+417 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br backend;\n+418 };\n+419\n+420 template\n+422 template\n+_\b4_\b2_\b3 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+424_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk(const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br &backend_)\n+425 : backend(backend_)\n+426 {}\n+427\n+428 template\n+430 template\n+_\b4_\b3_\b1 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+432_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk(const _\bT_\bh_\bi_\bs &other)\n+433 : _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl(other),\n+434 backend(other.backend)\n+435 {}\n+436\n+437 template\n+438 template\n+439 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bB_\ba_\bs_\be *\n+_\b4_\b4_\b0 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+441_\b _\bc_\bl_\bo_\bn_\be() const\n+442 { return new _\bT_\bh_\bi_\bs(*this); }\n+443\n+444 template\n+445 template\n+446 bool\n+_\b4_\b4_\b7 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+448_\b _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bB_\ba_\bs_\be &other) const\n+449 {\n+450 try {\n+451 return backend == dynamic_cast(other).backend;\n+452 }\n+453 catch(const std::bad_cast&)\n+454 {\n+455 return false;\n+456 }\n+457 }\n+458\n+459 template\n+460 template\n+461 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bB_\ba_\bs_\be &\n+_\b4_\b6_\b2 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+463_\b _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+()\n+464 {\n+465 ++backend;\n+466 return *this;\n+467 }\n+468\n+469 template\n+470 template\n+471 int\n+_\b4_\b7_\b2 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+473_\b _\bi_\bn_\bd_\be_\bx() const\n+474 { return backend.index(); }\n+475\n+476 template\n+477 template\n+478 typename _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b4_\b7_\b9 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+480_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+481 { return backend.coords(); }\n+482\n+483 // ////////////////////////\n+484 //\n+485 // The refinement builder\n+486 //\n+487\n+488 template\n+489 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br;\n+490\n+501 template\n+502 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n+_\b5_\b0_\b3 _\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt(\n+504 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be geometryType,\n+506 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be coerceTo)\n+507 {\n+508 // Check that the user used valid geometry types\n+509 assert(geometryType._\bd_\bi_\bm() == dimension && coerceTo._\bd_\bi_\bm() == dimension);\n+510 return _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bb_\bu_\bi_\bl_\bd( geometryType._\bi_\bd(),\n+coerceTo._\bi_\bd() );\n+511 }\n+512\n+513 // In principle the trick with the class is no longer necessary,\n+514 // but I'm keeping it in here so it will be easier to specialize\n+515 // buildRefinement when someone implements pyramids and prisms\n+516 template\n+_\b5_\b1_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br\n+518 {\n+519 public:\n+520 static\n+521 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n+_\b5_\b2_\b2 _\bb_\bu_\bi_\bl_\bd(unsigned topologyId, unsigned coerceToId)\n+523 {\n+524 topologyId &= ~1;\n+525 coerceToId &= ~1;\n+526\n+527 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;\n+528 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;\n+529\n+530 switch( topologyId )\n+531 {\n+532 //case GeometryType::simplex:\n+533 case idSimplex :\n+534 //switch( coerceTo )\n+535 switch( coerceToId )\n+536 {\n+537 //case GeometryType::simplex:\n+538 case idSimplex :\n+539 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n+540 default :\n+541 break;\n+542 }\n+543 break;\n+544\n+545 //case GeometryType::cube:\n+546 case idCube :\n+547 switch( coerceToId )\n+548 {\n+549 case idSimplex :\n+550 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n+551 case idCube :\n+552 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n+553 default :\n+554 break;\n+555 }\n+556 break;\n+557\n+558 default :\n+559 break;\n+560 }\n+561 DUNE_THROW( NotImplemented, \"No Refinement<\" << topologyId << \", CoordType,\n+\"\n+562 << coerceToId << \" >.\");\n+563 }\n+564 };\n+565\n+566 template\n+_\b5_\b6_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br<1, CoordType>\n+568 {\n+569 static const std::size_t dimension = 1;\n+570 public:\n+571 static\n+572 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n+_\b5_\b7_\b3 _\bb_\bu_\bi_\bl_\bd(unsigned topologyId, unsigned coerceToId)\n+574 {\n+575 topologyId &= ~1;\n+576 coerceToId &= ~1;\n+577\n+578 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;\n+579\n+580 if (topologyId == 0 && coerceToId == 0)\n+581 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n+582\n+583 DUNE_THROW( NotImplemented, \"No Refinement<\" << topologyId << \", CoordType,\n+\"\n+584 << coerceToId << \" >.\");\n+585 }\n+586 };\n+587\n+588 template\n+_\b5_\b8_\b9 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br<3, CoordType>\n+590 {\n+591 static const std::size_t dimension = 3;\n+592 public:\n+593 static\n+594 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n+_\b5_\b9_\b5 _\bb_\bu_\bi_\bl_\bd(unsigned topologyId, unsigned coerceToId)\n+596 {\n+597 topologyId &= ~1;\n+598 coerceToId &= ~1;\n+599\n+600 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;\n+601 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;\n+602 constexpr unsigned idPrism = GeometryTypes::prism.id() & ~1;\n+603 constexpr unsigned idPyramid = GeometryTypes::pyramid.id() & ~1;\n+604\n+605 switch( topologyId )\n+606 {\n+607 //case GeometryType::simplex:\n+608 case idSimplex :\n+609 //switch( coerceTo )\n+610 switch( coerceToId )\n+611 {\n+612 //case GeometryType::simplex:\n+613 case idSimplex :\n+614 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n+615 default :\n+616 break;\n+617 }\n+618 break;\n+619\n+620 //case GeometryType::cube:\n+621 case idCube :\n+622 switch( coerceToId )\n+623 {\n+624 case idSimplex :\n+625 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n+626 case idCube :\n+627 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bC_\bu_\bb_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n+628 default :\n+629 break;\n+630 }\n+631 break;\n+632\n+633 //case GeometryType::prism:\n+634 case idPrism :\n+635 switch( coerceToId )\n+636 {\n+637 case idSimplex :\n+638 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bP_\br_\bi_\bs_\bm_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n+639 default :\n+640 break;\n+641 }\n+642 break;\n+643\n+644 //case GeometryType::pyramid:\n+645 case idPyramid :\n+646 switch( coerceToId )\n+647 {\n+648 case idSimplex :\n+649 return _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bi_\bd_\bP_\by_\br_\ba_\bm_\bi_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bi_\bd_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be();\n+650 default :\n+651 break;\n+652 }\n+653 break;\n+654\n+655 default :\n+656 break;\n+657 }\n+658 DUNE_THROW( NotImplemented, \"No Refinement<\" << topologyId << \", CoordType,\n+\"\n+659 << coerceToId << \" >.\");\n+660 }\n+661 };\n+662\n+663} // namespace Dune\n+664\n+665#endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_CC\n+_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n+This file simply includes all Refinement implementations so you don't have to\n+do them separately.\n+_\bt_\by_\bp_\be_\b._\bh_\bh\n+A unique label for each type of element that can occur in a grid.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm\n-Static tag representing a dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:16\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\bm_\b:_\b:_\bt_\by_\bp_\be\n-Dim type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType\n+geometryType, GeometryType coerceTo)\n+return a reference to the VirtualRefinement according to the parameters\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:503\n _\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n Static tag representing a codimension.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bt_\by_\bp_\be\n-Codim type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:25\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs\n+Holds the number of refined intervals per axis needed for virtual and static\n+refinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:94\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+Wrap each Refinement implementation to get a consistent interface.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:141\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd\n+static ElementIterator eEnd(Dune::RefinementIntervals tag)\n+Get an ElementIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:247\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n+static ElementIterator eBegin(Dune::RefinementIntervals tag)\n+Get an ElementIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:237\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+static int nElements(Dune::RefinementIntervals tag)\n+Get the number of Elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:227\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+static int nVertices(Dune::RefinementIntervals tag)\n+Get the number of Vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:197\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n+static VertexIterator vBegin(Dune::RefinementIntervals tag)\n+Get a VertexIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:207\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+typedef IndexVector\n+The IndexVector of the Refinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:177\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd\n+static VertexIterator vEnd(Dune::RefinementIntervals tag)\n+Get a VertexIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:217\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+Unique label for each type of entities that can occur in DUNE grids.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bd_\bi_\bm\n+constexpr unsigned int dim() const\n+Return dimension of the type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:372\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n+constexpr unsigned int id() const\n+Return the topology id of the type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:72\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:\n+_\bC_\bo_\bm_\bm_\bo_\bn\n+Refinement::template Codim< 0 >::SubEntityIterator Common\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:85\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:\n+_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+VirtualRefinement< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:84\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:\n+_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::IndexVector IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:86\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bs\n+VirtualRefinement< dimension, CoordType >::template Codim< codimension >::\n+SubEntityIterator::CoordVector coords() const\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+SubEntityIterator(const This &other)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+This & operator=(const This &other)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bi_\bn_\bd_\be_\bx\n+int index() const\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\b~_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+~SubEntityIterator()\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+SubEntityIterator(IteratorBack *backend)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+Refinement::template SubEntityIteratorBack< codimension > IteratorBack\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:109\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:110\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bT_\bh_\bi_\bs\n+Refinement::template Codim< codimension >::SubEntityIterator This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:108\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other) const\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+VirtualRefinement< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:107\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n+void increment()\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:200\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+virtual ~VirtualRefinementSubEntityIteratorBackSpecial()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:208\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0\n+_\b>_\b:_\b:_\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+virtual IndexVector vertexIndices() const =0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0\n+_\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+VirtualRefinement< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:217\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0\n+_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::IndexVector IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:218\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0\n+_\b>_\b:_\b:_\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+virtual ~VirtualRefinementSubEntityIteratorBackSpecial()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:222\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:231\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bi_\bn_\bd_\be_\bx\n+virtual int index() const =0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bT_\bh_\bi_\bs\n+Refinement::template SubEntityIteratorBack< codimension > This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:234\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual This * clone() const =0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:235\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+VirtualRefinement< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:233\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+virtual bool operator==(const This &other) const =0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bs\n+virtual CoordVector coords() const =0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\b~_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+virtual ~SubEntityIteratorBack()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:237\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n+virtual This & operator++()=0\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:261\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+int nVertices(Dune::RefinementIntervals tag) const\n+Get the number of Vertices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:295\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+Dune::VirtualRefinement< dimension, CoordType > VirtualRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:264\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+int nElements(Dune::RefinementIntervals tag) const\n+Get the number of Elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:320\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be\n+static VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > &\n+instance()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:286\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+Dune::StaticRefinement< topologyId, CoordType, coerceToId, dimension >\n+StaticRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:263\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:397\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bB_\ba_\bs_\be\n+VirtualRefinement::template SubEntityIteratorBack< codimension > Base\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:401\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bT_\bh_\bi_\bs\n+VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >::template\n+SubEntityIteratorBack< codimension > This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:400\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+StaticRefinement::template Codim< codimension >::SubEntityIterator\n+BackendIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:399\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+VirtualRefinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:402\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:350\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bm_\bm_\bo_\bn\n+VirtualRefinementImp::template SubEntityIteratorBack< 0 > Common\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:368\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+RefinementBase::IndexVector IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:371\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\ba_\bs_\be\n+VirtualRefinement< dimension, CoordType > RefinementBase\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:370\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >\n+VirtualRefinementImp\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:367\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bI_\bd_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bc_\bo_\be_\br_\bc_\be_\bT_\bo_\bI_\bd_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b0_\b _\b>_\b:_\b:_\bS_\bt_\ba_\bt_\bi_\bc_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+VirtualRefinementImp::StaticRefinement StaticRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:369\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:518\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b:_\b:_\bb_\bu_\bi_\bl_\bd\n+static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId,\n+unsigned coerceToId)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:522\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\b1_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bb_\bu_\bi_\bl_\bd\n+static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId,\n+unsigned coerceToId)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:573\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bB_\bu_\bi_\bl_\bd_\be_\br_\b<_\b _\b3_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bb_\bu_\bi_\bl_\bd\n+static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId,\n+unsigned coerceToId)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:595\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+VirtualRefinement base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:294\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+SubEntityIteratorBack< dimension > VertexIteratorBack\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:318\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n+VertexIterator vBegin(Dune::RefinementIntervals tag) const\n+Get an VertexIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:38\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n+ElementIterator eBegin(Dune::RefinementIntervals tag) const\n+Get an ElementIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:54\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd\n+ElementIterator eEnd(Dune::RefinementIntervals tag) const\n+Get an ElementIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< 0 >::SubEntityIterator ElementIterator\n+The ElementIterator of the VirtualRefinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:301\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd\n+VertexIterator vEnd(Dune::RefinementIntervals tag) const\n+Get an VertexIterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:46\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< CoordType, dimension > CoordVector\n+The CoordVector of the VirtualRefinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:308\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< dimension >::SubEntityIterator VertexIterator\n+The VertexIterator of the VirtualRefinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:299\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n+SubEntityIteratorBack< 0 > ElementIteratorBack\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:319\n+_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+codim database of VirtualRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:378\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00200.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00200.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: virtualrefinement.hh File Reference\n+dune-geometry: refinement.hh File Reference\n \n \n \n \n \n \n \n@@ -69,55 +69,30 @@\n \n
\n \n
\n \n
\n- \n-
virtualrefinement.hh File Reference
\n+
refinement.hh File Reference
\n
\n
\n \n-

This file contains the virtual wrapper around refinement. \n+

This file simply includes all Refinement implementations so you don't have to do them separately. \n More...

\n-
#include <vector>
\n-#include <dune/common/fvector.hh>
\n-#include "refinement.hh"
\n-#include "type.hh"
\n-#include "virtualrefinement.cc"
\n+\n

Go to the source code of this file.

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

\n-Classes

class  Dune::VirtualRefinement< dimension, CoordType >
 VirtualRefinement base class. More...
 
struct  Dune::VirtualRefinement< dimension, CoordType >::Codim< codimension >
 codim database of VirtualRefinement More...
 
\n-\n-\n-\n-

\n-Namespaces

namespace  Dune
 
\n-\n-\n-\n-\n-\n-

\n-Functions

template<int dimension, class CoordType >
VirtualRefinement< dimension, CoordType > & Dune::buildRefinement (GeometryType geometryType, GeometryType coerceTo)
 return a reference to the VirtualRefinement according to the parameters
 
\n

Detailed Description

\n-

This file contains the virtual wrapper around refinement.

\n+

This file simply includes all Refinement implementations so you don't have to do them separately.

\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,21 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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-virtualrefinement.hh File Reference\n-This file contains the virtual wrapper around refinement. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\"\n-#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n-#include \"_\bv_\bi_\br_\bt_\bu_\ba_\bl_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bc_\bc\"\n+refinement.hh File Reference\n+This file simply includes all _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementations so you don't have to\n+do them separately. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bh_\bc_\bu_\bb_\be_\b._\bc_\bc\"\n+#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n+#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bh_\bc_\bu_\bb_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\"\n+#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bp_\br_\bi_\bs_\bm_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\"\n+#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bp_\by_\br_\ba_\bm_\bi_\bd_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\"\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:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n-\u00a0 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt base class. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0 codim database of _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\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-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt< dimension, CoordType > _\bD_\bu_\bn_\be_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n- &\u00a0 geometryType, _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be coerceTo)\n- return a reference to the\n-\u00a0 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt according to the\n- parameters\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-This file contains the virtual wrapper around refinement.\n+This file simply includes all _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementations so you don't have to\n+do them separately.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00200_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00200_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: virtualrefinement.hh Source File\n+dune-geometry: refinement.hh Source File\n \n \n \n \n \n \n \n@@ -74,135 +74,42 @@\n \n
\n \n
\n
\n
\n-
virtualrefinement.hh
\n+
refinement.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_HH
\n-
6#define DUNE_GEOMETRY_VIRTUALREFINEMENT_HH
\n+
5#ifndef DUNE_GEOMETRY_REFINEMENT_HH
\n+
6#define DUNE_GEOMETRY_REFINEMENT_HH
\n
7
\n-
268#include <vector>
\n-
269
\n-
270#include <dune/common/fvector.hh>
\n-
271
\n-
272#include "refinement.hh"
\n-
273#include "type.hh"
\n-
274
\n-
275namespace Dune
\n-
276{
\n-
277 // //////////////////////////////////////////
\n-
278 //
\n-
279 // The virtual base class and its iterators
\n-
280 //
\n-
281
\n-
282 //
\n-
283 // Refinement
\n-
284 //
\n-
285
\n-
292 template<int dimension, class CoordType>
\n-
\n-\n-
294 {
\n-
295 public:
\n-
296 template<int codimension>
\n-
297 struct Codim;
\n-\n-\n-
302
\n-
308 typedef FieldVector<CoordType, dimension> CoordVector;
\n-
314 typedef std::vector<int> IndexVector;
\n-
315
\n-
316 template<int codimension>
\n-\n-\n-\n-
320
\n-
326 virtual int nVertices(Dune::RefinementIntervals tag) const = 0;
\n-
327
\n-\n-
334
\n-\n-
341
\n-
347 virtual int nElements(Dune::RefinementIntervals tag) const = 0;
\n-
348
\n-\n-
355
\n-\n-
362
\n-
\n-\n-
365 {}
\n-
\n-
366
\n-
367 protected:
\n-\n-\n-\n-\n-
372 };
\n-
\n-
373
\n-
375 template<int dimension, class CoordType>
\n-
376 template<int codimension>
\n-
\n-
377 struct VirtualRefinement<dimension, CoordType>::Codim
\n-
378 {
\n-
379 class SubEntityIterator;
\n-
380 };
\n-
\n-
381
\n-
382 // ////////////////////////
\n-
383 //
\n-
384 // The refinement builder
\n-
385 //
\n-
386
\n-
387 template<int dimension, class CoordType>
\n-\n-
389 buildRefinement(GeometryType geometryType, GeometryType coerceTo);
\n-
390
\n-
391} // namespace Dune
\n-
392
\n-
393#include "virtualrefinement.cc"
\n-
394
\n-
395#endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_HH
\n-
This file contains the virtual wrapper around refinement.
\n-
This file simply includes all Refinement implementations so you don't have to do them separately.
\n-
A unique label for each type of element that can occur in a grid.
\n-
Definition affinegeometry.hh:21
\n-
VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType geometryType, GeometryType coerceTo)
return a reference to the VirtualRefinement according to the parameters
Definition virtualrefinement.cc:503
\n-
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:94
\n-
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n-
Definition virtualrefinement.cc:231
\n-
VirtualRefinement base class.
Definition virtualrefinement.hh:294
\n-
SubEntityIteratorBack< dimension > VertexIteratorBack
Definition virtualrefinement.hh:318
\n-
virtual ElementIteratorBack * eEndBack(Dune::RefinementIntervals tag) const =0
\n-
VertexIterator vBegin(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:38
\n-
ElementIterator eBegin(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:54
\n-
virtual int nElements(Dune::RefinementIntervals tag) const =0
Get the number of Elements.
\n-
ElementIterator eEnd(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:62
\n-
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the VirtualRefinement.
Definition virtualrefinement.hh:301
\n-
virtual ~VirtualRefinement()
Destructor.
Definition virtualrefinement.hh:364
\n-
VertexIterator vEnd(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:46
\n-
FieldVector< CoordType, dimension > CoordVector
The CoordVector of the VirtualRefinement.
Definition virtualrefinement.hh:308
\n-
virtual int nVertices(Dune::RefinementIntervals tag) const =0
Get the number of Vertices.
\n-
std::vector< int > IndexVector
The IndexVector of the VirtualRefinement.
Definition virtualrefinement.hh:314
\n-
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the VirtualRefinement.
Definition virtualrefinement.hh:299
\n-
virtual VertexIteratorBack * vEndBack(Dune::RefinementIntervals tag) const =0
\n-
SubEntityIteratorBack< 0 > ElementIteratorBack
Definition virtualrefinement.hh:319
\n-
virtual ElementIteratorBack * eBeginBack(Dune::RefinementIntervals tag) const =0
\n-
virtual VertexIteratorBack * vBeginBack(Dune::RefinementIntervals tag) const =0
\n-
codim database of VirtualRefinement
Definition virtualrefinement.hh:378
\n+
250// The interface (template<...> class StaticRefinement) is not included here
\n+
251// since it derives from parts which I consider implementation. Look
\n+
252// into refinement/base.cc if the documentation is above is not enough.
\n+
253#include "refinement/base.cc"
\n+
254
\n+
255#include "refinement/hcube.cc"
\n+
256#include "refinement/simplex.cc"
\n+\n+\n+\n+
260
\n+
261#endif // DUNE_GEOMETRY_REFINEMENT_HH
\n+
This file contains the parts independent of a particular Refinement implementation.
\n+\n+\n+
This file contains the Refinement implementation for hypercubes (quadrilaterals, hexahedrons,...
\n+
This file contains the Refinement implementation for simplices (triangles, tetrahedrons....
\n+
This file contains the Refinement implementation for triangulating hypercubes (quadrilateral -> trian...
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,186 +1,44 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-virtualrefinement.hh\n+refinement.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_HH\n-6#define DUNE_GEOMETRY_VIRTUALREFINEMENT_HH\n+5#ifndef DUNE_GEOMETRY_REFINEMENT_HH\n+6#define DUNE_GEOMETRY_REFINEMENT_HH\n 7\n-268#include \n-269\n-270#include \n-271\n-272#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\"\n-273#include \"_\bt_\by_\bp_\be_\b._\bh_\bh\"\n-274\n-275namespace _\bD_\bu_\bn_\be\n-276{\n-277 // //////////////////////////////////////////\n-278 //\n-279 // The virtual base class and its iterators\n-280 //\n-281\n-282 //\n-283 // Refinement\n-284 //\n-285\n-292 template\n-_\b2_\b9_\b3 class _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-294 {\n-295 public:\n-296 template\n-297 struct _\bC_\bo_\bd_\bi_\bm;\n-_\b2_\b9_\b9 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b3_\b0_\b1 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-302\n-_\b3_\b0_\b8 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b3_\b1_\b4 typedef std::vector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-315\n-316 template\n-317 class _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n-_\b3_\b1_\b8 typedef _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n-_\b3_\b1_\b9 typedef _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk_\b<_\b0_\b> _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk;\n-320\n-_\b3_\b2_\b6 virtual int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const = 0;\n-327\n-333 _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-334\n-340 _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-341\n-_\b3_\b4_\b7 virtual int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const = 0;\n-348\n-354 _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-355\n-361 _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const;\n-362\n-_\b3_\b6_\b4 virtual _\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt()\n-365 {}\n-366\n-367 protected:\n-_\b3_\b6_\b8 virtual _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *_\bv_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-= 0;\n-_\b3_\b6_\b9 virtual _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *_\bv_\bE_\bn_\bd_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const =\n-0;\n-_\b3_\b7_\b0 virtual _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *_\be_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag)\n-const = 0;\n-_\b3_\b7_\b1 virtual _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk *_\be_\bE_\bn_\bd_\bB_\ba_\bc_\bk(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs tag) const\n-= 0;\n-372 };\n-373\n-375 template\n-376 template\n-_\b3_\b7_\b7 struct _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::_\bC_\bo_\bd_\bi_\bm\n-378 {\n-379 class SubEntityIterator;\n-380 };\n-381\n-382 // ////////////////////////\n-383 //\n-384 // The refinement builder\n-385 //\n-386\n-387 template\n-388 _\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> &\n-389 _\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt(_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be geometryType, _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be coerceTo);\n-390\n-391} // namespace Dune\n-392\n-393#include \"_\bv_\bi_\br_\bt_\bu_\ba_\bl_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bc_\bc\"\n-394\n-395#endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_HH\n-_\bv_\bi_\br_\bt_\bu_\ba_\bl_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bc_\bc\n-This file contains the virtual wrapper around refinement.\n-_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n-This file simply includes all Refinement implementations so you don't have to\n-do them separately.\n-_\bt_\by_\bp_\be_\b._\bh_\bh\n-A unique label for each type of element that can occur in a grid.\n-_\bD_\bu_\bn_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType\n-geometryType, GeometryType coerceTo)\n-return a reference to the VirtualRefinement according to the parameters\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:503\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs\n-Holds the number of refined intervals per axis needed for virtual and static\n-refinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.cc:94\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-Unique label for each type of entities that can occur in DUNE grids.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:231\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-VirtualRefinement base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:294\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-SubEntityIteratorBack< dimension > VertexIteratorBack\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:318\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd_\bB_\ba_\bc_\bk\n-virtual ElementIteratorBack * eEndBack(Dune::RefinementIntervals tag) const =0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n-VertexIterator vBegin(Dune::RefinementIntervals tag) const\n-Get an VertexIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:38\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n-ElementIterator eBegin(Dune::RefinementIntervals tag) const\n-Get an ElementIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:54\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-virtual int nElements(Dune::RefinementIntervals tag) const =0\n-Get the number of Elements.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bE_\bn_\bd\n-ElementIterator eEnd(Dune::RefinementIntervals tag) const\n-Get an ElementIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< 0 >::SubEntityIterator ElementIterator\n-The ElementIterator of the VirtualRefinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:301\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\b~_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-virtual ~VirtualRefinement()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:364\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd\n-VertexIterator vEnd(Dune::RefinementIntervals tag) const\n-Get an VertexIterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.cc:46\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< CoordType, dimension > CoordVector\n-The CoordVector of the VirtualRefinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:308\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-virtual int nVertices(Dune::RefinementIntervals tag) const =0\n-Get the number of Vertices.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< int > IndexVector\n-The IndexVector of the VirtualRefinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:314\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< dimension >::SubEntityIterator VertexIterator\n-The VertexIterator of the VirtualRefinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:299\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bE_\bn_\bd_\bB_\ba_\bc_\bk\n-virtual VertexIteratorBack * vEndBack(Dune::RefinementIntervals tag) const =0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bB_\ba_\bc_\bk\n-SubEntityIteratorBack< 0 > ElementIteratorBack\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:319\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk\n-virtual ElementIteratorBack * eBeginBack(Dune::RefinementIntervals tag) const\n-=0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn_\bB_\ba_\bc_\bk\n-virtual VertexIteratorBack * vBeginBack(Dune::RefinementIntervals tag) const =0\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\br_\bt_\bu_\ba_\bl_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-codim database of VirtualRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn virtualrefinement.hh:378\n+250// The interface (template<...> class StaticRefinement) is not included here\n+251// since it derives from parts which I consider implementation. Look\n+252// into refinement/base.cc if the documentation is above is not enough.\n+253#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+254\n+255#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bh_\bc_\bu_\bb_\be_\b._\bc_\bc\"\n+256#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n+257#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bh_\bc_\bu_\bb_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\"\n+258#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bp_\br_\bi_\bs_\bm_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\"\n+259#include \"_\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b/_\bp_\by_\br_\ba_\bm_\bi_\bd_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\"\n+260\n+261#endif // DUNE_GEOMETRY_REFINEMENT_HH\n+_\bb_\ba_\bs_\be_\b._\bc_\bc\n+This file contains the parts independent of a particular Refinement\n+implementation.\n+_\bp_\by_\br_\ba_\bm_\bi_\bd_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\n+_\bp_\br_\bi_\bs_\bm_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\n+_\bh_\bc_\bu_\bb_\be_\b._\bc_\bc\n+This file contains the Refinement implementation for hypercubes\n+(quadrilaterals, hexahedrons,...\n+_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\n+This file contains the Refinement implementation for simplices (triangles,\n+tetrahedrons....\n+_\bh_\bc_\bu_\bb_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bc\n+This file contains the Refinement implementation for triangulating hypercubes\n+(quadrilateral -> trian...\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00203.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00203.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: referenceelementimplementation.hh File Reference\n+dune-geometry: type.hh File Reference\n \n \n \n \n \n \n \n@@ -70,45 +70,57 @@\n
\n \n
\n
\n
\n \n-
referenceelementimplementation.hh File Reference
\n+Classes |\n+Namespaces |\n+Functions
\n+
type.hh File Reference
\n \n
\n+\n+

A unique label for each type of element that can occur in a grid. \n+More...

\n
#include <cassert>
\n-#include <algorithm>
\n-#include <limits>
\n-#include <tuple>
\n-#include <utility>
\n-#include <vector>
\n-#include <array>
\n-#include <bitset>
\n-#include <dune/common/fmatrix.hh>
\n-#include <dune/common/fvector.hh>
\n-#include <dune/common/hybridutilities.hh>
\n+#include <cstdint>
\n+#include <string>
\n+#include <type_traits>
\n+#include <dune/common/exceptions.hh>
\n+#include <dune/common/keywords.hh>
\n #include <dune/common/typetraits.hh>
\n-#include <dune/common/iteratorrange.hh>
\n-#include <dune/common/math.hh>
\n-#include <dune/geometry/referenceelement.hh>
\n-#include <dune/geometry/affinegeometry.hh>
\n-#include <dune/geometry/type.hh>
\n+#include <dune/common/unused.hh>
\n+#include <dune/geometry/deprecated_topology.hh>
\n
\n

Go to the source code of this file.

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

\n+Classes

class  Dune::GeometryType
 Unique label for each type of entities that can occur in DUNE grids. More...
 
\n \n \n \n-\n+\n+\n \n+

\n Namespaces

namespace  Dune
 
namespace  Dune::Geo
namespace  Dune::GeometryTypes
 Predefined GeometryTypes for common geometries.
 
\n+\n+\n+\n+\n

\n+Functions

std::ostream & Dune::operator<< (std::ostream &s, const GeometryType &a)
 Prints the type to an output stream.
 
\n-
\n+

Detailed Description

\n+

A unique label for each type of element that can occur in a grid.

\n+
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,38 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-referenceelementimplementation.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+type.hh File Reference\n+A unique label for each type of element that can occur in a grid. _\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 \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/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bd_\be_\bp_\br_\be_\bc_\ba_\bt_\be_\bd_\b__\bt_\bo_\bp_\bo_\bl_\bo_\bg_\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:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+\u00a0 Unique label for each type of entities that can occur in DUNE grids.\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:_\bG_\be_\bo\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bs\n+\u00a0 Predefined _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bs for common geometries.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::ostream &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b< (std::ostream &s, const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &a)\n+\u00a0 Prints the type to an output stream.\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+A unique label for each type of element that can occur in a grid.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00203_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00203_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: referenceelementimplementation.hh Source File\n+dune-geometry: type.hh Source File\n \n \n \n \n \n \n \n@@ -74,721 +74,496 @@\n \n
\n \n
\n \n
\n-
referenceelementimplementation.hh
\n+
type.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH
\n-
6#define DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH
\n+
5#ifndef DUNE_GEOMETRY_TYPE_HH
\n+
6#define DUNE_GEOMETRY_TYPE_HH
\n
7
\n-
8#include <cassert>
\n-
9
\n-
10#include <algorithm>
\n-
11#include <limits>
\n-
12#include <tuple>
\n-
13#include <utility>
\n-
14#include <vector>
\n-
15#include <array>
\n-
16#include <bitset>
\n+
12#include <cassert>
\n+
13#include <cstdint>
\n+
14
\n+
15#include <string>
\n+
16#include <type_traits>
\n
17
\n-
18#include <dune/common/fmatrix.hh>
\n-
19#include <dune/common/fvector.hh>
\n-
20#include <dune/common/hybridutilities.hh>
\n-
21#include <dune/common/typetraits.hh>
\n-
22#include <dune/common/iteratorrange.hh>
\n-
23#include <dune/common/math.hh>
\n-
24
\n-\n-\n-
27#include <dune/geometry/type.hh>
\n+
18#include <dune/common/exceptions.hh>
\n+
19#include <dune/common/keywords.hh>
\n+
20#include <dune/common/typetraits.hh>
\n+
21#include <dune/common/unused.hh>
\n+
22
\n+
23namespace Dune
\n+
24{
\n+
25
\n+
26 namespace Impl
\n+
27 {
\n
28
\n-
29namespace Dune
\n-
30{
\n-
31
\n-
32 namespace Geo
\n-
33 {
\n-
34
\n-
35#ifndef DOXYGEN
\n-
36
\n-
37 // Internal Forward Declarations
\n-
38 // -----------------------------
\n-
39
\n-
40 namespace Impl
\n-
41 {
\n-
42 template< class ctype, int dim >
\n-
43 class ReferenceElementContainer;
\n-
44 }
\n-
45
\n-
46 template< class ctype, int dim >
\n-
47 struct ReferenceElements;
\n-
48
\n-
49
\n-
50
\n-
51 namespace Impl
\n-
52 {
\n-
53
\n-
54 using Dune::Impl::isPrism;
\n-
55 using Dune::Impl::isPyramid;
\n-
56 using Dune::Impl::baseTopologyId;
\n-
57 using Dune::Impl::prismConstruction;
\n-
58 using Dune::Impl::pyramidConstruction;
\n-
59 using Dune::Impl::numTopologies;
\n-
60
\n-
62 unsigned int size ( unsigned int topologyId, int dim, int codim );
\n-
63
\n+
29 enum TopologyConstruction { pyramidConstruction = 0, prismConstruction = 1 };
\n+
30
\n+
31 // Dynamic Topology Properties
\n+
32 // ---------------------------
\n+
33
\n+
42 inline static unsigned int numTopologies ( int dim ) noexcept
\n+
43 {
\n+
44 return (1u << dim);
\n+
45 }
\n+
46
\n+
58 inline bool static isPyramid ( unsigned int topologyId, int dim, int codim = 0 ) noexcept
\n+
59 {
\n+
60 assert( (dim > 0) && (topologyId < numTopologies( dim )) );
\n+
61 assert( (0 <= codim) && (codim < dim) );
\n+
62 return (((topologyId & ~1) & (1u << (dim-codim-1))) == 0);
\n+
63 }
\n
64
\n-
65
\n-
73 unsigned int subTopologyId ( unsigned int topologyId, int dim, int codim, unsigned int i );
\n-
74
\n-
75
\n-
76
\n-
77 // subTopologyNumbering
\n-
78 // --------------------
\n-
79
\n-
80 void subTopologyNumbering ( unsigned int topologyId, int dim, int codim, unsigned int i, int subcodim,
\n-
81 unsigned int *beginOut, unsigned int *endOut );
\n+
76 inline static bool isPrism ( unsigned int topologyId, int dim, int codim = 0 ) noexcept
\n+
77 {
\n+
78 assert( (dim > 0) && (topologyId < numTopologies( dim )) );
\n+
79 assert( (0 <= codim) && (codim < dim) );
\n+
80 return (( (topologyId | 1) & (1u << (dim-codim-1))) != 0);
\n+
81 }
\n
82
\n-
83
\n-
84
\n-
85
\n-
86 // checkInside
\n-
87 // -----------
\n-
88
\n-
89 template< class ct, int cdim >
\n-
90 inline bool
\n-
91 checkInside ( unsigned int topologyId, int dim, const FieldVector< ct, cdim > &x, ct tolerance, ct factor = ct( 1 ) )
\n-
92 {
\n-
93 assert( (dim >= 0) && (dim <= cdim) );
\n-
94 assert( topologyId < numTopologies( dim ) );
\n-
95
\n-
96 if( dim > 0 )
\n-
97 {
\n-
98 const ct baseFactor = (isPrism( topologyId, dim ) ? factor : factor - x[ dim-1 ]);
\n-
99 if( (x[ dim-1 ] > -tolerance) && (factor - x[ dim-1 ] > -tolerance) )
\n-
100 return checkInside< ct, cdim >( baseTopologyId( topologyId, dim ), dim-1, x, tolerance, baseFactor );
\n-
101 else
\n-
102 return false;
\n-
103 }
\n-
104 else
\n-
105 return true;
\n-
106 }
\n-
107
\n-
108
\n+
90 inline static unsigned int baseTopologyId ( unsigned int topologyId, int dim, int codim = 1 ) noexcept
\n+
91 {
\n+
92 assert( (dim >= 0) && (topologyId < numTopologies( dim )) );
\n+
93 assert( (0 <= codim) && (codim <= dim) );
\n+
94 return topologyId & ((1u << (dim-codim)) - 1);
\n+
95 }
\n+
96
\n+
97 } // namespace Impl
\n+
98
\n+
99// the Topology classes are deprecated and will be removed for the 2.8.
\n+
100// Temporarily a header 'deprecated_topology.hh' is provided which will be removed after the 2.9 release.
\n+
101#if __GNUC__ >= 7
\n+
102# pragma GCC diagnostic push
\n+
103# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
\n+
104#endif
\n+\n+
106#if __GNUC__ >= 7
\n+
107# pragma GCC diagnostic pop
\n+
108#endif
\n
109
\n-
110 // referenceCorners
\n-
111 // ----------------
\n+
110 // GeometryType
\n+
111 // -------------
\n
112
\n-
113 template< class ct, int cdim >
\n-
114 inline unsigned int
\n-
115 referenceCorners ( unsigned int topologyId, int dim, FieldVector< ct, cdim > *corners )
\n-
116 {
\n-
117 assert( (dim >= 0) && (dim <= cdim) );
\n-
118 assert( topologyId < numTopologies( dim ) );
\n-
119
\n-
120 if( dim > 0 )
\n-
121 {
\n-
122 const unsigned int nBaseCorners
\n-
123 = referenceCorners( baseTopologyId( topologyId, dim ), dim-1, corners );
\n-
124 assert( nBaseCorners == size( baseTopologyId( topologyId, dim ), dim-1, dim-1 ) );
\n-
125 if( isPrism( topologyId, dim ) )
\n-
126 {
\n-
127 std::copy( corners, corners + nBaseCorners, corners + nBaseCorners );
\n-
128 for( unsigned int i = 0; i < nBaseCorners; ++i )
\n-
129 corners[ i+nBaseCorners ][ dim-1 ] = ct( 1 );
\n-
130 return 2*nBaseCorners;
\n-
131 }
\n-
132 else
\n-
133 {
\n-
134 corners[ nBaseCorners ] = FieldVector< ct, cdim >( ct( 0 ) );
\n-
135 corners[ nBaseCorners ][ dim-1 ] = ct( 1 );
\n-
136 return nBaseCorners+1;
\n-
137 }
\n-
138 }
\n-
139 else
\n-
140 {
\n-
141 *corners = FieldVector< ct, cdim >( ct( 0 ) );
\n-
142 return 1;
\n-
143 }
\n-
144 }
\n+
\n+\n+
126 {
\n+
127 public:
\n+
128
\n+
\n+
131 enum
\n+
132 BasicType {
\n+\n+\n+\n+\n+\n+
138 none
\n+
139 };
\n+
\n+
140
\n+
141 private:
\n+
142
\n+
144 unsigned char dim_;
\n
145
\n-
146
\n-
147
\n-
148 // referenceVolume
\n-
149 // ---------------
\n-
150
\n-
151 unsigned long referenceVolumeInverse ( unsigned int topologyId, int dim );
\n-
152
\n-
153 template< class ct >
\n-
154 inline ct referenceVolume ( unsigned int topologyId, int dim )
\n-
155 {
\n-
156 return ct( 1 ) / ct( referenceVolumeInverse( topologyId, dim ) );
\n-
157 }
\n-
158
\n-
159
\n+
147 bool none_;
\n+
148
\n+
150 unsigned int topologyId_;
\n+
151
\n+
152 // Internal type used for the Id. The exact nature of this type is kept
\n+
153 // as an implementation detail on purpose. We use a scoped enum here because scoped enums
\n+
154 // can be used as template parameters, but are not implicitly converted to other integral
\n+
155 // types by the compiler. That way, we avoid unfortunate implicit conversion chains, e.g.
\n+
156 // people trying to work with GlobalGeometryTypeIndex, but forgetting to actually call
\n+
157 // GlobalGeometryTypeIndex::index(gt) and just using gt directly.
\n+
158 enum class IdType : std::uint64_t
\n+
159 {};
\n
160
\n-
161 // referenceOrigins
\n-
162 // ----------------
\n-
163
\n-
164 template< class ct, int cdim >
\n-
165 inline unsigned int
\n-
166 referenceOrigins ( unsigned int topologyId, int dim, int codim, FieldVector< ct, cdim > *origins )
\n-
167 {
\n-
168 assert( (dim >= 0) && (dim <= cdim) );
\n-
169 assert( topologyId < numTopologies( dim ) );
\n-
170 assert( (codim >= 0) && (codim <= dim) );
\n-
171
\n-
172 if( codim > 0 )
\n-
173 {
\n-
174 const unsigned int baseId = baseTopologyId( topologyId, dim );
\n-
175 if( isPrism( topologyId, dim ) )
\n-
176 {
\n-
177 const unsigned int n = (codim < dim ? referenceOrigins( baseId, dim-1, codim, origins ) : 0);
\n-
178 const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins+n );
\n-
179 for( unsigned int i = 0; i < m; ++i )
\n-
180 {
\n-
181 origins[ n+m+i ] = origins[ n+i ];
\n-
182 origins[ n+m+i ][ dim-1 ] = ct( 1 );
\n-
183 }
\n-
184 return n+2*m;
\n-
185 }
\n-
186 else
\n-
187 {
\n-
188 const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins );
\n-
189 if( codim == dim )
\n-
190 {
\n-
191 origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) );
\n-
192 origins[ m ][ dim-1 ] = ct( 1 );
\n-
193 return m+1;
\n-
194 }
\n-
195 else
\n-
196 return m+referenceOrigins( baseId, dim-1, codim, origins+m );
\n-
197 }
\n-
198 }
\n-
199 else
\n-
200 {
\n-
201 origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );
\n-
202 return 1;
\n-
203 }
\n-
204 }
\n-
205
\n-
206
\n-
207
\n-
208 // referenceEmbeddings
\n-
209 // -------------------
\n-
210
\n-
211 template< class ct, int cdim, int mydim >
\n-
212 inline unsigned int
\n-
213 referenceEmbeddings ( unsigned int topologyId, int dim, int codim,
\n-
214 FieldVector< ct, cdim > *origins,
\n-
215 FieldMatrix< ct, mydim, cdim > *jacobianTransposeds )
\n-
216 {
\n-
217 assert( (0 <= codim) && (codim <= dim) && (dim <= cdim) );
\n-
218 assert( (dim - codim <= mydim) && (mydim <= cdim) );
\n-
219 assert( topologyId < numTopologies( dim ) );
\n-
220
\n-
221 if( codim > 0 )
\n-
222 {
\n-
223 const unsigned int baseId = baseTopologyId( topologyId, dim );
\n-
224 if( isPrism( topologyId, dim ) )
\n-
225 {
\n-
226 const unsigned int n = (codim < dim ? referenceEmbeddings( baseId, dim-1, codim, origins, jacobianTransposeds ) : 0);
\n-
227 for( unsigned int i = 0; i < n; ++i )
\n-
228 jacobianTransposeds[ i ][ dim-codim-1 ][ dim-1 ] = ct( 1 );
\n-
229
\n-
230 const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1, origins+n, jacobianTransposeds+n );
\n-
231 std::copy( origins+n, origins+n+m, origins+n+m );
\n-
232 std::copy( jacobianTransposeds+n, jacobianTransposeds+n+m, jacobianTransposeds+n+m );
\n-
233 for( unsigned int i = 0; i < m; ++i )
\n-
234 origins[ n+m+i ][ dim-1 ] = ct( 1 );
\n-
235
\n-
236 return n+2*m;
\n-
237 }
\n-
238 else
\n-
239 {
\n-
240 const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1, origins, jacobianTransposeds );
\n-
241 if( codim == dim )
\n-
242 {
\n-
243 origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) );
\n-
244 origins[ m ][ dim-1 ] = ct( 1 );
\n-
245 jacobianTransposeds[ m ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) );
\n-
246 return m+1;
\n-
247 }
\n-
248 else
\n-
249 {
\n-
250 const unsigned int n = referenceEmbeddings( baseId, dim-1, codim, origins+m, jacobianTransposeds+m );
\n-
251 for( unsigned int i = 0; i < n; ++i )
\n-
252 {
\n-
253 for( int k = 0; k < dim-1; ++k )
\n-
254 jacobianTransposeds[ m+i ][ dim-codim-1 ][ k ] = -origins[ m+i ][ k ];
\n-
255 jacobianTransposeds[ m+i ][ dim-codim-1 ][ dim-1 ] = ct( 1 );
\n-
256 }
\n-
257 return m+n;
\n-
258 }
\n-
259 }
\n-
260 }
\n-
261 else
\n-
262 {
\n-
263 origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );
\n-
264 jacobianTransposeds[ 0 ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) );
\n-
265 for( int k = 0; k < dim; ++k )
\n-
266 jacobianTransposeds[ 0 ][ k ][ k ] = ct( 1 );
\n-
267 return 1;
\n-
268 }
\n-
269 }
\n-
270
\n-
271
\n-
272
\n-
273 // referenceIntegrationOuterNormals
\n-
274 // --------------------------------
\n-
275
\n-
276 template< class ct, int cdim >
\n-
277 inline unsigned int
\n-
278 referenceIntegrationOuterNormals ( unsigned int topologyId, int dim,
\n-
279 const FieldVector< ct, cdim > *origins,
\n-
280 FieldVector< ct, cdim > *normals )
\n-
281 {
\n-
282 assert( (dim > 0) && (dim <= cdim) );
\n-
283 assert( topologyId < numTopologies( dim ) );
\n+
161 public:
\n+
162
\n+
193 using Id = IdType;
\n+
194
\n+
\n+
202 constexpr operator Id() const
\n+
203 {
\n+
204 // recreate the exact storage layout that this class is using, making conversion
\n+
205 // extremely cheap
\n+
206 std::uint64_t id = dim_ | (std::uint64_t(none_) << 8) | (std::uint64_t(topologyId_) << 32);
\n+
207 return static_cast<Id>(id);
\n+
208 }
\n+
\n+
209
\n+
\n+
222 constexpr Id toId() const
\n+
223 {
\n+
224 return static_cast<Id>(*this);
\n+
225 }
\n+
\n+
226
\n+
\n+
234 constexpr GeometryType(Id id)
\n+
235 : dim_(static_cast<std::uint64_t>(id) & 0xFF)
\n+
236 , none_(static_cast<std::uint64_t>(id) & 0x100)
\n+
237 , topologyId_(static_cast<std::uint64_t>(id) >> 32)
\n+
238 {}
\n+
\n+
239
\n+
242
\n+
\n+
244 constexpr GeometryType ()
\n+
245 : dim_(0), none_(true), topologyId_(0)
\n+
246 {}
\n+
\n+
247
\n+
\n+
254 constexpr GeometryType(unsigned int topologyId, unsigned int dim, bool isNone)
\n+
255 : dim_(dim), none_(isNone), topologyId_(topologyId)
\n+
256 {}
\n+
\n+
257
\n+
\n+
263 constexpr GeometryType(unsigned int topologyId, unsigned int dim)
\n+
264 : dim_(dim), none_(false), topologyId_(topologyId)
\n+
265 {}
\n+
\n+
266
\n+
277 template<class TopologyType,
\n+
278 class = std::void_t<decltype(TopologyType::dimension), decltype(TopologyType::id)>>
\n+
\n+
279 explicit GeometryType(TopologyType t)
\n+
280 : dim_(TopologyType::dimension), none_(false), topologyId_(TopologyType::id)
\n+
281 {
\n+
282 DUNE_UNUSED_PARAMETER(t);
\n+
283 }
\n+
\n
284
\n-
285 if( dim > 1 )
\n-
286 {
\n-
287 const unsigned int baseId = baseTopologyId( topologyId, dim );
\n-
288 if( isPrism( topologyId, dim ) )
\n-
289 {
\n-
290 const unsigned int numBaseFaces
\n-
291 = referenceIntegrationOuterNormals( baseId, dim-1, origins, normals );
\n-
292
\n-
293 for( unsigned int i = 0; i < 2; ++i )
\n-
294 {
\n-
295 normals[ numBaseFaces+i ] = FieldVector< ct, cdim >( ct( 0 ) );
\n-
296 normals[ numBaseFaces+i ][ dim-1 ] = ct( 2*int( i )-1 );
\n-
297 }
\n-
298
\n-
299 return numBaseFaces+2;
\n-
300 }
\n-
301 else
\n-
302 {
\n-
303 normals[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );
\n-
304 normals[ 0 ][ dim-1 ] = ct( -1 );
\n-
305
\n-
306 const unsigned int numBaseFaces
\n-
307 = referenceIntegrationOuterNormals( baseId, dim-1, origins+1, normals+1 );
\n-
308 for( unsigned int i = 1; i <= numBaseFaces; ++i )
\n-
309 normals[ i ][ dim-1 ] = normals[ i ]*origins[ i ];
\n-
310
\n-
311 return numBaseFaces+1;
\n-
312 }
\n-
313 }
\n-
314 else
\n-
315 {
\n-
316 for( unsigned int i = 0; i < 2; ++i )
\n-
317 {
\n-
318 normals[ i ] = FieldVector< ct, cdim >( ct( 0 ) );
\n-
319 normals[ i ][ 0 ] = ct( 2*int( i )-1 );
\n-
320 }
\n-
321
\n-
322 return 2;
\n-
323 }
\n-
324 }
\n-
325
\n-
326 template< class ct, int cdim >
\n-
327 inline unsigned int
\n-
328 referenceIntegrationOuterNormals ( unsigned int topologyId, int dim,
\n-
329 FieldVector< ct, cdim > *normals )
\n-
330 {
\n-
331 assert( (dim > 0) && (dim <= cdim) );
\n-
332
\n-
333 FieldVector< ct, cdim > *origins
\n-
334 = new FieldVector< ct, cdim >[ size( topologyId, dim, 1 ) ];
\n-
335 referenceOrigins( topologyId, dim, 1, origins );
\n-
336
\n-
337 const unsigned int numFaces
\n-
338 = referenceIntegrationOuterNormals( topologyId, dim, origins, normals );
\n-
339 assert( numFaces == size( topologyId, dim, 1 ) );
\n-
340
\n-
341 delete[] origins;
\n-
342
\n-
343 return numFaces;
\n-
344 }
\n-
345
\n-
346 } // namespace Impl
\n-
347
\n-
348
\n-
349
\n-
350 // ReferenceElement
\n-
351 // ----------------
\n+
\n+
291 constexpr bool isVertex() const {
\n+
292 return dim_==0;
\n+
293 }
\n+
\n+
294
\n+
\n+
296 constexpr bool isLine() const {
\n+
297 return dim_==1;
\n+
298 }
\n+
\n+
299
\n+
\n+
301 constexpr bool isTriangle() const {
\n+
302 return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0001;
\n+
303 }
\n+
\n+
304
\n+
\n+
306 constexpr bool isQuadrilateral() const {
\n+
307 return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0011;
\n+
308 }
\n+
\n+
309
\n+
\n+
311 constexpr bool isTetrahedron() const {
\n+
312 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0001;
\n+
313 }
\n+
\n+
314
\n+
\n+
316 constexpr bool isPyramid() const {
\n+
317 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0011;
\n+
318 }
\n+
\n+
319
\n+
\n+
321 constexpr bool isPrism() const {
\n+
322 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0101;
\n+
323 }
\n+
\n+
324
\n+
\n+
326 constexpr bool isHexahedron() const {
\n+
327 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0111;
\n+
328 }
\n+
\n+
329
\n+
\n+
331 constexpr bool isSimplex() const {
\n+
332 return ! none_ && (topologyId_ | 1) == 1;
\n+
333 }
\n+
\n+
334
\n+
\n+
336 constexpr bool isCube() const {
\n+
337 return ! none_ && ((topologyId_ ^ ((1 << dim_)-1)) >> 1 == 0);
\n+
338 }
\n+
\n+
339
\n+
\n+
341 constexpr bool isConical() const {
\n+
342 return ! none_ && (((topologyId_ & ~1) & (1u << (dim_-1))) == 0);
\n+
343 }
\n+
\n+
344
\n+
\n+
349 constexpr bool isConical(const int& step) const {
\n+
350 return ! none_ && (((topologyId_ & ~1) & (1u << step)) == 0);
\n+
351 }
\n+
\n
352
\n-
371 template< class ctype_, int dim >
\n-
372 class ReferenceElementImplementation
\n-
373 {
\n-
374
\n-
375 public:
\n-
376
\n-
378 using ctype = ctype_;
\n-
379
\n-
381 using CoordinateField = ctype;
\n-
382
\n-
384 using Coordinate = Dune::FieldVector<ctype,dim>;
\n-
385
\n-
387 static constexpr int dimension = dim;
\n-
388
\n-
390 typedef ctype Volume;
\n-
391
\n-
392 private:
\n-
393
\n-
394 friend class Impl::ReferenceElementContainer< ctype, dim >;
\n-
395
\n-
396 struct SubEntityInfo;
\n+
\n+
354 constexpr bool isPrismatic() const {
\n+
355 return ! none_ && (( (topologyId_ | 1) & (1u << (dim_-1))) != 0);
\n+
356 }
\n+
\n+
357
\n+
\n+
362 constexpr bool isPrismatic(const int& step) const {
\n+
363 return ! none_ && (( (topologyId_ | 1) & (1u << step)) != 0);
\n+
364 }
\n+
\n+
365
\n+
\n+
367 constexpr bool isNone() const {
\n+
368 return none_;
\n+
369 }
\n+
\n+
370
\n+
\n+
372 constexpr unsigned int dim() const {
\n+
373 return dim_;
\n+
374 }
\n+
\n+
375
\n+
\n+
377 constexpr unsigned int id() const {
\n+
378 return topologyId_;
\n+
379 }
\n+
\n+
380
\n+
\n+
388 constexpr bool operator==(const GeometryType& other) const {
\n+
389 return ( ( none_ == other.none_ )
\n+
390 && ( ( none_ == true )
\n+
391 || ( ( dim_ == other.dim_ )
\n+
392 && ( (topologyId_ >> 1) == (other.topologyId_ >> 1) )
\n+
393 )
\n+
394 )
\n+
395 );
\n+
396 }
\n+
\n
397
\n-
398 template< int codim > struct CreateGeometries;
\n-
399
\n-
400 public:
\n-
402 template< int codim >
\n-
403 struct Codim
\n-
404 {
\n-
406 typedef AffineGeometry< ctype, dim-codim, dim > Geometry;
\n-
407 };
\n-
408
\n-
409 // ReferenceElement cannot be copied.
\n-
410 ReferenceElementImplementation ( const ReferenceElementImplementation& ) = delete;
\n-
411
\n-
412 // ReferenceElementImplementation cannot be copied.
\n-
413 ReferenceElementImplementation& operator= ( const ReferenceElementImplementation& ) = delete;
\n-
414
\n-
415 // ReferenceElementImplementation is default-constructible (required for storage in std::array)
\n-
416 ReferenceElementImplementation () = default;
\n-
417
\n-
422 int size ( int c ) const
\n-
423 {
\n-
424 assert( (c >= 0) && (c <= dim) );
\n-
425 return info_[ c ].size();
\n-
426 }
\n-
427
\n-
439 int size ( int i, int c, int cc ) const
\n-
440 {
\n-
441 assert( (i >= 0) && (i < size( c )) );
\n-
442 return info_[ c ][ i ].size( cc );
\n-
443 }
\n-
444
\n-
458 int subEntity ( int i, int c, int ii, int cc ) const
\n-
459 {
\n-
460 assert( (i >= 0) && (i < size( c )) );
\n-
461 return info_[ c ][ i ].number( ii, cc );
\n-
462 }
\n-
463
\n-
479 auto subEntities ( int i, int c, int cc ) const
\n-
480 {
\n-
481 assert( (i >= 0) && (i < size( c )) );
\n-
482 return info_[ c ][ i ].numbers( cc );
\n-
483 }
\n-
484
\n-
493 const GeometryType &type ( int i, int c ) const
\n-
494 {
\n-
495 assert( (i >= 0) && (i < size( c )) );
\n-
496 return info_[ c ][ i ].type();
\n-
497 }
\n+
\n+
399 constexpr bool operator!=(const GeometryType& other) const {
\n+
400 return ! ((*this)==other);
\n+
401 }
\n+
\n+
402
\n+
\n+
404 constexpr bool operator < (const GeometryType& other) const {
\n+
405 return ( ( none_ < other.none_ )
\n+
406 || ( !( other.none_ < none_ )
\n+
407 && ( ( dim_ < other.dim_ )
\n+
408 || ( (other.dim_ == dim_)
\n+
409 && ((topologyId_ >> 1) < (other.topologyId_ >> 1) )
\n+
410 )
\n+
411 )
\n+
412 )
\n+
413 );
\n+
414 }
\n+
\n+
415
\n+
418 };
\n+
\n+
419
\n+
\n+
421 inline std::ostream& operator<< (std::ostream& s, const GeometryType& a)
\n+
422 {
\n+
423 if (a.isSimplex())
\n+
424 {
\n+
425 s << "(simplex, " << a.dim() << ")";
\n+
426 return s;
\n+
427 }
\n+
428 if (a.isCube())
\n+
429 {
\n+
430 s << "(cube, " << a.dim() << ")";
\n+
431 return s;
\n+
432 }
\n+
433 if (a.isPyramid())
\n+
434 {
\n+
435 s << "(pyramid, 3)";
\n+
436 return s;
\n+
437 }
\n+
438 if (a.isPrism())
\n+
439 {
\n+
440 s << "(prism, 3)";
\n+
441 return s;
\n+
442 }
\n+
443 if (a.isNone())
\n+
444 {
\n+
445 s << "(none, " << a.dim() << ")";
\n+
446 return s;
\n+
447 }
\n+
448 s << "(other [" << a.id() << "], " << a.dim() << ")";
\n+
449 return s;
\n+
450 }
\n+
\n+
451
\n+
452
\n+
454
\n+
\n+
458 namespace GeometryTypes {
\n+
459
\n+
461
\n+
464 inline constexpr GeometryType simplex(unsigned int dim)
\n+
465 {
\n+
466 return GeometryType(0,dim,false);
\n+
467 }
\n+
468
\n+
470
\n+
473 inline constexpr GeometryType cube(unsigned int dim)
\n+
474 {
\n+
475 return GeometryType(((dim>1) ? ((1 << dim) - 1) : 0),dim,false);
\n+
476 }
\n+
477
\n+
479
\n+
482 inline constexpr GeometryType none(unsigned int dim)
\n+
483 {
\n+
484 return GeometryType(0,dim,true);
\n+
485 }
\n+
486
\n+
488 inline constexpr GeometryType conicalExtension(const GeometryType& gt)
\n+
489 {
\n+
490 return GeometryType(gt.id(), gt.dim()+1, gt.isNone());
\n+
491 }
\n+
492
\n+
494 inline constexpr GeometryType prismaticExtension(const GeometryType& gt)
\n+
495 {
\n+
496 return GeometryType(gt.id() | ((1 << gt.dim())), gt.dim()+1, gt.isNone());
\n+
497 }
\n
498
\n-
500 const GeometryType &type () const { return type( 0, 0 ); }
\n-
501
\n-
511 const Coordinate &position( int i, int c ) const
\n-
512 {
\n-
513 assert( (c >= 0) && (c <= dim) );
\n-
514 return baryCenters_[ c ][ i ];
\n-
515 }
\n+
499#ifndef __cpp_inline_variables
\n+
500 namespace {
\n+
501#endif
\n+
502
\n+
504
\n+
507 DUNE_INLINE_VARIABLE constexpr GeometryType vertex = GeometryType(0,0,false);
\n+
508
\n+
510
\n+
513 DUNE_INLINE_VARIABLE constexpr GeometryType line = GeometryType(0,1,false);
\n+
514
\n
516
\n-
524 bool checkInside ( const Coordinate &local ) const
\n-
525 {
\n-
526 const ctype tolerance = ctype( 64 ) * std::numeric_limits< ctype >::epsilon();
\n-
527 return Impl::template checkInside< ctype, dim >( type().id(), dim, local, tolerance );
\n-
528 }
\n-
529
\n-
541 template< int codim >
\n-
542 typename Codim< codim >::Geometry geometry ( int i ) const
\n-
543 {
\n-
544 return std::get< codim >( geometries_ )[ i ];
\n-
545 }
\n+
519 DUNE_INLINE_VARIABLE constexpr GeometryType triangle = simplex(2);
\n+
520
\n+
522
\n+
525 DUNE_INLINE_VARIABLE constexpr GeometryType quadrilateral = cube(2);
\n+
526
\n+
528
\n+
531 DUNE_INLINE_VARIABLE constexpr GeometryType tetrahedron = simplex(3);
\n+
532
\n+
534
\n+
537 DUNE_INLINE_VARIABLE constexpr GeometryType pyramid = GeometryType(0b0011,3,false);
\n+
538
\n+
540
\n+
543 DUNE_INLINE_VARIABLE constexpr GeometryType prism = GeometryType(0b0101,3,false);
\n+
544
\n
546
\n-
548 Volume volume () const
\n-
549 {
\n-
550 return volume_;
\n-
551 }
\n-
552
\n-
560 const Coordinate &integrationOuterNormal ( int face ) const
\n-
561 {
\n-
562 assert( (face >= 0) && (face < int( integrationNormals_.size() )) );
\n-
563 return integrationNormals_[ face ];
\n-
564 }
\n+
549 DUNE_INLINE_VARIABLE constexpr GeometryType hexahedron = cube(3);
\n+
550
\n+
551#ifndef __cpp_inline_variables
\n+
552 }
\n+
553#endif
\n+
554
\n+
555 }
\n+
\n+
556
\n+
557 namespace Impl
\n+
558 {
\n+
559
\n+
561 inline constexpr GeometryType getBase(const GeometryType& gt) {
\n+
562 return GeometryType(gt.id() & ((1 << (gt.dim()-1))-1), gt.dim()-1, gt.isNone());
\n+
563 }
\n+
564
\n
565
\n-
566 private:
\n-
567 void initialize ( unsigned int topologyId )
\n-
568 {
\n-
569 assert( topologyId < Impl::numTopologies( dim ) );
\n-
570
\n-
571 // set up subentities
\n-
572 for( int codim = 0; codim <= dim; ++codim )
\n-
573 {
\n-
574 const unsigned int size = Impl::size( topologyId, dim, codim );
\n-
575 info_[ codim ].resize( size );
\n-
576 for( unsigned int i = 0; i < size; ++i )
\n-
577 info_[ codim ][ i ].initialize( topologyId, codim, i );
\n-
578 }
\n-
579
\n-
580 // compute corners
\n-
581 const unsigned int numVertices = size( dim );
\n-
582 baryCenters_[ dim ].resize( numVertices );
\n-
583 Impl::referenceCorners( topologyId, dim, &(baryCenters_[ dim ][ 0 ]) );
\n+
566 // IfGeometryType
\n+
567 // ----------
\n+
568
\n+
569 template< template< GeometryType::Id > class Operation, int dim, GeometryType::Id geometryId = GeometryTypes::vertex >
\n+
570 struct IfGeometryType
\n+
571 {
\n+
572 static constexpr GeometryType geometry = geometryId;
\n+
573 template< class... Args >
\n+
574 static auto apply ( GeometryType gt, Args &&... args )
\n+
575 {
\n+
576 GeometryType lowerGeometry(gt.id() >>1 , gt.dim()-1, gt.isNone());
\n+
577
\n+
578 if( gt.id() & 1 )
\n+
579 return IfGeometryType< Operation, dim-1, GeometryTypes::prismaticExtension(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... );
\n+
580 else
\n+
581 return IfGeometryType< Operation, dim-1, GeometryTypes::conicalExtension(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... );
\n+
582 }
\n+
583 };
\n
584
\n-
585 // compute barycenters
\n-
586 for( int codim = 0; codim < dim; ++codim )
\n-
587 {
\n-
588 baryCenters_[ codim ].resize( size(codim) );
\n-
589 for( int i = 0; i < size( codim ); ++i )
\n-
590 {
\n-
591 baryCenters_[ codim ][ i ] = Coordinate( ctype( 0 ) );
\n-
592 const unsigned int numCorners = size( i, codim, dim );
\n-
593 for( unsigned int j = 0; j < numCorners; ++j )
\n-
594 baryCenters_[ codim ][ i ] += baryCenters_[ dim ][ subEntity( i, codim, j, dim ) ];
\n-
595 baryCenters_[ codim ][ i ] *= ctype( 1 ) / ctype( numCorners );
\n-
596 }
\n-
597 }
\n-
598
\n-
599 // compute reference element volume
\n-
600 volume_ = Impl::template referenceVolume< ctype >( topologyId, dim );
\n-
601
\n-
602 // compute integration outer normals
\n-
603 if( dim > 0 )
\n-
604 {
\n-
605 integrationNormals_.resize( size( 1 ) );
\n-
606 Impl::referenceIntegrationOuterNormals( topologyId, dim, &(integrationNormals_[ 0 ]) );
\n-
607 }
\n-
608
\n-
609 // set up geometries
\n-
610 Hybrid::forEach( std::make_index_sequence< dim+1 >{}, [ & ]( auto i ){ CreateGeometries< i >::apply( *this, geometries_ ); } );
\n-
611 }
\n-
612
\n-
613 template< int... codim >
\n-
614 static std::tuple< std::vector< typename Codim< codim >::Geometry >... >
\n-
615 makeGeometryTable ( std::integer_sequence< int, codim... > );
\n-
616
\n-
618 typedef decltype( makeGeometryTable( std::make_integer_sequence< int, dim+1 >() ) ) GeometryTable;
\n-
619
\n-
621 ctype volume_;
\n-
622
\n-
623 std::vector< Coordinate > baryCenters_[ dim+1 ];
\n-
624 std::vector< Coordinate > integrationNormals_;
\n-
625
\n-
627 GeometryTable geometries_;
\n-
628
\n-
629 std::vector< SubEntityInfo > info_[ dim+1 ];
\n-
630 };
\n-
631
\n-
633 template< class ctype, int dim >
\n-
634 struct ReferenceElementImplementation< ctype, dim >::SubEntityInfo
\n-
635 {
\n-
636 // Compute upper bound for the number of subsentities.
\n-
637 // If someone knows an explicit formal feel free to
\n-
638 // implement it here.
\n-
639 static constexpr std::size_t maxSubEntityCount()
\n-
640 {
\n-
641 std::size_t maxCount=0;
\n-
642 for(std::size_t codim=0; codim<=dim; ++codim)
\n-
643 maxCount = std::max(maxCount, binomial(std::size_t(dim),codim)*(1 << codim));
\n-
644 return maxCount;
\n-
645 }
\n-
646
\n-
647 using SubEntityFlags = std::bitset<maxSubEntityCount()>;
\n-
648
\n-
649 class SubEntityRange
\n-
650 : public Dune::IteratorRange<const unsigned int*>
\n-
651 {
\n-
652 using Base = typename Dune::IteratorRange<const unsigned int*>;
\n-
653
\n-
654 public:
\n-
655
\n-
656 using iterator = Base::iterator;
\n-
657 using const_iterator = Base::const_iterator;
\n-
658
\n-
659 SubEntityRange(const iterator& begin, const iterator& end, const SubEntityFlags& contains) :
\n-
660 Base(begin, end),
\n-
661 containsPtr_(&contains),
\n-
662 size_(end-begin)
\n-
663 {}
\n-
664
\n-
665 SubEntityRange() :
\n-
666 Base(),
\n-
667 containsPtr_(nullptr),
\n-
668 size_(0)
\n-
669 {}
\n-
670
\n-
671 std::size_t size() const
\n-
672 {
\n-
673 return size_;
\n-
674 }
\n-
675
\n-
676 bool contains(std::size_t i) const
\n-
677 {
\n-
678 return (*containsPtr_)[i];
\n-
679 }
\n-
680
\n-
681 private:
\n-
682 const SubEntityFlags* containsPtr_;
\n-
683 std::size_t size_;
\n-
684 std::size_t offset_;
\n-
685 };
\n-
686
\n-
687 using NumberRange = typename Dune::IteratorRange<const unsigned int*>;
\n-
688
\n-
689 SubEntityInfo ()
\n-
690 : numbering_( nullptr )
\n-
691 {
\n-
692 std::fill( offset_.begin(), offset_.end(), 0 );
\n-
693 }
\n-
694
\n-
695 SubEntityInfo ( const SubEntityInfo &other )
\n-
696 : offset_( other.offset_ ),
\n-
697 type_( other.type_ ),
\n-
698 containsSubentity_( other.containsSubentity_ )
\n-
699 {
\n-
700 numbering_ = allocate();
\n-
701 std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ );
\n-
702 }
\n-
703
\n-
704 ~SubEntityInfo () { deallocate( numbering_ ); }
\n-
705
\n-
706 const SubEntityInfo &operator= ( const SubEntityInfo &other )
\n-
707 {
\n-
708 type_ = other.type_;
\n-
709 offset_ = other.offset_;
\n-
710
\n-
711 deallocate( numbering_ );
\n-
712 numbering_ = allocate();
\n-
713 std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ );
\n-
714
\n-
715 containsSubentity_ = other.containsSubentity_;
\n-
716
\n-
717 return *this;
\n-
718 }
\n-
719
\n-
720 int size ( int cc ) const
\n-
721 {
\n-
722 assert( (cc >= 0) && (cc <= dim) );
\n-
723 return (offset_[ cc+1 ] - offset_[ cc ]);
\n-
724 }
\n-
725
\n-
726 int number ( int ii, int cc ) const
\n-
727 {
\n-
728 assert( (ii >= 0) && (ii < size( cc )) );
\n-
729 return numbering_[ offset_[ cc ] + ii ];
\n-
730 }
\n-
731
\n-
732 auto numbers ( int cc ) const
\n-
733 {
\n-
734 return SubEntityRange( numbering_ + offset_[ cc ], numbering_ + offset_[ cc+1 ], containsSubentity_[cc]);
\n-
735 }
\n-
736
\n-
737 const GeometryType &type () const { return type_; }
\n-
738
\n-
739 void initialize ( unsigned int topologyId, int codim, unsigned int i )
\n-
740 {
\n-
741 const unsigned int subId = Impl::subTopologyId( topologyId, dim, codim, i );
\n-
742 type_ = GeometryType( subId, dim-codim );
\n-
743
\n-
744 // compute offsets
\n-
745 for( int cc = 0; cc <= codim; ++cc )
\n-
746 offset_[ cc ] = 0;
\n-
747 for( int cc = codim; cc <= dim; ++cc )
\n-
748 offset_[ cc+1 ] = offset_[ cc ] + Impl::size( subId, dim-codim, cc-codim );
\n-
749
\n-
750 // compute subnumbering
\n-
751 deallocate( numbering_ );
\n-
752 numbering_ = allocate();
\n-
753 for( int cc = codim; cc <= dim; ++cc )
\n-
754 Impl::subTopologyNumbering( topologyId, dim, codim, i, cc-codim, numbering_+offset_[ cc ], numbering_+offset_[ cc+1 ] );
\n-
755
\n-
756 // initialize containsSubentity lookup-table
\n-
757 for(std::size_t cc=0; cc<= dim; ++cc)
\n-
758 {
\n-
759 containsSubentity_[cc].reset();
\n-
760 for(std::size_t idx=0; idx<std::size_t(size(cc)); ++idx)
\n-
761 containsSubentity_[cc][number(idx,cc)] = true;
\n-
762 }
\n-
763 }
\n-
764
\n-
765 protected:
\n-
766 int codim () const { return dim - type().dim(); }
\n-
767
\n-
768 unsigned int *allocate () { return (capacity() != 0 ? new unsigned int[ capacity() ] : nullptr); }
\n-
769 void deallocate ( unsigned int *ptr ) { delete[] ptr; }
\n-
770 unsigned int capacity () const { return offset_[ dim+1 ]; }
\n-
771
\n-
772 private:
\n-
773 unsigned int *numbering_;
\n-
774 std::array< unsigned int, dim+2 > offset_;
\n-
775 GeometryType type_;
\n-
776 std::array< SubEntityFlags, dim+1> containsSubentity_;
\n-
777 };
\n-
778
\n-
779
\n-
780 template< class ctype, int dim >
\n-
781 template< int codim >
\n-
782 struct ReferenceElementImplementation< ctype, dim >::CreateGeometries
\n-
783 {
\n-
784 template< int cc >
\n-
785 static typename ReferenceElements< ctype, dim-cc >::ReferenceElement
\n-
786 subRefElement( const ReferenceElementImplementation< ctype, dim > &refElement, int i, std::integral_constant< int, cc > )
\n-
787 {
\n-
788 return ReferenceElements< ctype, dim-cc >::general( refElement.type( i, cc ) );
\n-
789 }
\n-
790
\n-\n-
792 subRefElement(const ReferenceElementImplementation< ctype, dim > &refElement,
\n-
793 [[maybe_unused]] int i, std::integral_constant<int, 0>)
\n-
794 {
\n-
795 return refElement;
\n-
796 }
\n-
797
\n-
798 static void apply ( const ReferenceElementImplementation< ctype, dim > &refElement, GeometryTable &geometries )
\n-
799 {
\n-
800 const int size = refElement.size( codim );
\n-
801 std::vector< FieldVector< ctype, dim > > origins( size );
\n-
802 std::vector< FieldMatrix< ctype, dim - codim, dim > > jacobianTransposeds( size );
\n-
803 Impl::referenceEmbeddings( refElement.type().id(), dim, codim, &(origins[ 0 ]), &(jacobianTransposeds[ 0 ]) );
\n-
804
\n-
805 std::get< codim >( geometries ).reserve( size );
\n-
806 for( int i = 0; i < size; ++i )
\n-
807 {
\n-
808 typename Codim< codim >::Geometry geometry( subRefElement( refElement, i, std::integral_constant< int, codim >() ), origins[ i ], jacobianTransposeds[ i ] );
\n-
809 std::get< codim >( geometries ).push_back( geometry );
\n-
810 }
\n-
811 }
\n-
812 };
\n-
813
\n-
814#endif // DOXYGEN
\n-
815
\n-
816 } // namespace Geo
\n-
817
\n-
818} // namespace Dune
\n-
819
\n-
820#endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH
\n-\n-
An implementation of the Geometry interface for affine geometries.
\n-
A unique label for each type of element that can occur in a grid.
\n+
585 template< template< GeometryType::Id > class Operation, GeometryType::Id geometryId >
\n+
586 struct IfGeometryType< Operation, 0, geometryId>
\n+
587 {
\n+
588 template< class... Args >
\n+
589 static auto apply ([[maybe_unused]] GeometryType gt, Args &&... args )
\n+
590 {
\n+
591 return Operation< geometryId >::apply( std::forward< Args >( args )... );
\n+
592 }
\n+
593 };
\n+
594 } // namespace Impl
\n+
595} // namespace Dune
\n+
596
\n+
597#endif // DUNE_GEOMETRY_TYPE_HH
\n+\n
Definition affinegeometry.hh:21
\n-
@ size
Definition quadraturerules.hh:145
\n-
int binomial(int upper, int lower)
calculate
Definition simplex.cc:305
\n-
typename Container::ReferenceElement ReferenceElement
The reference element type.
Definition referenceelements.hh:188
\n-
static const ReferenceElement & general(const GeometryType &type)
get general reference elements
Definition referenceelements.hh:198
\n+
std::ostream & operator<<(std::ostream &s, const GeometryType &a)
Prints the type to an output stream.
Definition type.hh:421
\n+
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n+
constexpr GeometryType(unsigned int topologyId, unsigned int dim)
Constructor, using the topologyId (integer) and the dimension.
Definition type.hh:263
\n+
constexpr bool operator<(const GeometryType &other) const
less-than operation for use with maps
Definition type.hh:404
\n+
constexpr bool operator!=(const GeometryType &other) const
Check for inequality.
Definition type.hh:399
\n+
constexpr bool isPyramid() const
Return true if entity is a pyramid.
Definition type.hh:316
\n+
constexpr bool isTetrahedron() const
Return true if entity is a tetrahedron.
Definition type.hh:311
\n+
constexpr bool isPrism() const
Return true if entity is a prism.
Definition type.hh:321
\n+
constexpr bool isVertex() const
Return true if entity is a vertex.
Definition type.hh:291
\n+
constexpr bool operator==(const GeometryType &other) const
Check for equality. This method knows that in dimension 0 and 1 all BasicTypes are equal.
Definition type.hh:388
\n+
constexpr Id toId() const
Create an Id representation of this GeometryType.
Definition type.hh:222
\n+
constexpr bool isConical(const int &step) const
Return true if entity was constructed with a conical product in the chosen step.
Definition type.hh:349
\n+
constexpr unsigned int dim() const
Return dimension of the type.
Definition type.hh:372
\n+
constexpr bool isPrismatic(const int &step) const
Return true if entity was constructed with a prismatic product in the chosen step.
Definition type.hh:362
\n+
constexpr bool isTriangle() const
Return true if entity is a triangle.
Definition type.hh:301
\n+
GeometryType(TopologyType t)
Constructor from static TopologyType class.
Definition type.hh:279
\n+
constexpr GeometryType(unsigned int topologyId, unsigned int dim, bool isNone)
Constructor, using the topologyId (integer), the dimension and a flag for type none.
Definition type.hh:254
\n+
BasicType
Each entity can be tagged by one of these basic types plus its space dimension.
Definition type.hh:132
\n+
@ cube
Cube element in any nonnegative dimension.
Definition type.hh:134
\n+
@ simplex
Simplicial element in any nonnegative dimension.
Definition type.hh:133
\n+
@ pyramid
Four sided pyramid in three dimensions.
Definition type.hh:135
\n+
@ extended
Other, more general topology, representable as topologyId.
Definition type.hh:137
\n+
@ none
Even more general topology, cannot be specified by a topologyId. Two GeometryTypes with 'none' type a...
Definition type.hh:138
\n+
@ prism
Prism element in three dimensions.
Definition type.hh:136
\n+
constexpr GeometryType(Id id)
Reconstruct a Geometry type from a GeometryType::Id.
Definition type.hh:234
\n+
constexpr bool isCube() const
Return true if entity is a cube of any dimension.
Definition type.hh:336
\n+
constexpr GeometryType()
Default constructor, not initializing anything.
Definition type.hh:244
\n+
constexpr bool isConical() const
Return true if entity was constructed with a conical product in the last step.
Definition type.hh:341
\n+
constexpr bool isLine() const
Return true if entity is a line segment.
Definition type.hh:296
\n+
constexpr bool isQuadrilateral() const
Return true if entity is a quadrilateral.
Definition type.hh:306
\n+
constexpr bool isPrismatic() const
Return true if entity was constructed with a prismatic product in the last step.
Definition type.hh:354
\n+
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
\n+
constexpr bool isNone() const
Return true if entity is a singular of any dimension.
Definition type.hh:367
\n+
constexpr bool isHexahedron() const
Return true if entity is a hexahedron.
Definition type.hh:326
\n+
constexpr bool isSimplex() const
Return true if entity is a simplex of any dimension.
Definition type.hh:331
\n+
IdType Id
An integral id representing a GeometryType.
Definition type.hh:193
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,767 +1,564 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-referenceelementimplementation.hh\n+type.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH\n-6#define DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH\n+5#ifndef DUNE_GEOMETRY_TYPE_HH\n+6#define DUNE_GEOMETRY_TYPE_HH\n 7\n-8#include \n-9\n-10#include \n-11#include \n-12#include \n-13#include \n-14#include \n-15#include \n-16#include \n+12#include \n+13#include \n+14\n+15#include \n+16#include \n 17\n-18#include \n-19#include \n-20#include \n-21#include \n-22#include \n-23#include \n-24\n-25#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh>\n-26#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n-27#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+18#include \n+19#include \n+20#include \n+21#include \n+22\n+23namespace _\bD_\bu_\bn_\be\n+24{\n+25\n+26 namespace Impl\n+27 {\n 28\n-29namespace _\bD_\bu_\bn_\be\n-30{\n-31\n-32 namespace Geo\n-33 {\n-34\n-35#ifndef DOXYGEN\n-36\n-37 // Internal Forward Declarations\n-38 // -----------------------------\n-39\n-40 namespace Impl\n-41 {\n-42 template< class ctype, int dim >\n-43 class ReferenceElementContainer;\n-44 }\n-45\n-46 template< class ctype, int dim >\n-47 struct ReferenceElements;\n-48\n-49\n-50\n-51 namespace Impl\n-52 {\n-53\n-54 using Dune::Impl::isPrism;\n-55 using Dune::Impl::isPyramid;\n-56 using Dune::Impl::baseTopologyId;\n-57 using Dune::Impl::prismConstruction;\n-58 using Dune::Impl::pyramidConstruction;\n-59 using Dune::Impl::numTopologies;\n-60\n-62 unsigned int _\bs_\bi_\bz_\be ( unsigned int topologyId, int dim, int codim );\n-63\n+29 enum TopologyConstruction { pyramidConstruction = 0, prismConstruction = 1\n+};\n+30\n+31 // Dynamic Topology Properties\n+32 // ---------------------------\n+33\n+42 inline static unsigned int numTopologies ( int dim ) noexcept\n+43 {\n+44 return (1u << dim);\n+45 }\n+46\n+58 inline bool static isPyramid ( unsigned int topologyId, int dim, int codim =\n+0 ) noexcept\n+59 {\n+60 assert( (dim > 0) && (topologyId < numTopologies( dim )) );\n+61 assert( (0 <= codim) && (codim < dim) );\n+62 return (((topologyId & ~1) & (1u << (dim-codim-1))) == 0);\n+63 }\n 64\n-65\n-73 unsigned int subTopologyId ( unsigned int topologyId, int dim, int codim,\n-unsigned int i );\n-74\n-75\n-76\n-77 // subTopologyNumbering\n-78 // --------------------\n-79\n-80 void subTopologyNumbering ( unsigned int topologyId, int dim, int codim,\n-unsigned int i, int subcodim,\n-81 unsigned int *beginOut, unsigned int *endOut );\n+76 inline static bool isPrism ( unsigned int topologyId, int dim, int codim = 0\n+) noexcept\n+77 {\n+78 assert( (dim > 0) && (topologyId < numTopologies( dim )) );\n+79 assert( (0 <= codim) && (codim < dim) );\n+80 return (( (topologyId | 1) & (1u << (dim-codim-1))) != 0);\n+81 }\n 82\n-83\n-84\n-85\n-86 // checkInside\n-87 // -----------\n-88\n-89 template< class ct, int cdim >\n-90 inline bool\n-91 checkInside ( unsigned int topologyId, int dim, const FieldVector< ct, cdim\n-> &x, ct tolerance, ct factor = ct( 1 ) )\n-92 {\n-93 assert( (dim >= 0) && (dim <= cdim) );\n-94 assert( topologyId < numTopologies( dim ) );\n-95\n-96 if( dim > 0 )\n-97 {\n-98 const ct baseFactor = (isPrism( topologyId, dim ) ? factor : factor - x\n-[ dim-1 ]);\n-99 if( (x[ dim-1 ] > -tolerance) && (factor - x[ dim-1 ] > -tolerance) )\n-100 return checkInside< ct, cdim >( baseTopologyId( topologyId, dim ), dim-1,\n-x, tolerance, baseFactor );\n-101 else\n-102 return false;\n-103 }\n-104 else\n-105 return true;\n-106 }\n-107\n-108\n+90 inline static unsigned int baseTopologyId ( unsigned int topologyId, int\n+dim, int codim = 1 ) noexcept\n+91 {\n+92 assert( (dim >= 0) && (topologyId < numTopologies( dim )) );\n+93 assert( (0 <= codim) && (codim <= dim) );\n+94 return topologyId & ((1u << (dim-codim)) - 1);\n+95 }\n+96\n+97 } // namespace Impl\n+98\n+99// the Topology classes are deprecated and will be removed for the 2.8.\n+100// Temporarily a header 'deprecated_topology.hh' is provided which will be\n+removed after the 2.9 release.\n+101#if __GNUC__ >= 7\n+102# pragma GCC diagnostic push\n+103# pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n+104#endif\n+105#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bd_\be_\bp_\br_\be_\bc_\ba_\bt_\be_\bd_\b__\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\b._\bh_\bh>\n+106#if __GNUC__ >= 7\n+107# pragma GCC diagnostic pop\n+108#endif\n 109\n-110 // referenceCorners\n-111 // ----------------\n+110 // GeometryType\n+111 // -------------\n 112\n-113 template< class ct, int cdim >\n-114 inline unsigned int\n-115 referenceCorners ( unsigned int topologyId, int dim, FieldVector< ct, cdim\n-> *corners )\n-116 {\n-117 assert( (dim >= 0) && (dim <= cdim) );\n-118 assert( topologyId < numTopologies( dim ) );\n-119\n-120 if( dim > 0 )\n-121 {\n-122 const unsigned int nBaseCorners\n-123 = referenceCorners( baseTopologyId( topologyId, dim ), dim-1, corners );\n-124 assert( nBaseCorners == _\bs_\bi_\bz_\be( baseTopologyId( topologyId, dim ), dim-1,\n-dim-1 ) );\n-125 if( isPrism( topologyId, dim ) )\n+_\b1_\b2_\b5 class _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n 126 {\n-127 std::copy( corners, corners + nBaseCorners, corners + nBaseCorners );\n-128 for( unsigned int i = 0; i < nBaseCorners; ++i )\n-129 corners[ i+nBaseCorners ][ dim-1 ] = ct( 1 );\n-130 return 2*nBaseCorners;\n-131 }\n-132 else\n-133 {\n-134 corners[ nBaseCorners ] = FieldVector< ct, cdim >( ct( 0 ) );\n-135 corners[ nBaseCorners ][ dim-1 ] = ct( 1 );\n-136 return nBaseCorners+1;\n-137 }\n-138 }\n-139 else\n-140 {\n-141 *corners = FieldVector< ct, cdim >( ct( 0 ) );\n-142 return 1;\n-143 }\n-144 }\n+127 public:\n+128\n+_\b1_\b3_\b1 enum\n+132 _\bB_\ba_\bs_\bi_\bc_\bT_\by_\bp_\be {\n+_\b1_\b3_\b3 _\bs_\bi_\bm_\bp_\bl_\be_\bx,\n+_\b1_\b3_\b4 _\bc_\bu_\bb_\be,\n+_\b1_\b3_\b5 _\bp_\by_\br_\ba_\bm_\bi_\bd,\n+_\b1_\b3_\b6 _\bp_\br_\bi_\bs_\bm,\n+_\b1_\b3_\b7 _\be_\bx_\bt_\be_\bn_\bd_\be_\bd,\n+138 _\bn_\bo_\bn_\be\n+_\b1_\b3_\b9 };\n+140\n+141 private:\n+142\n+144 unsigned char dim_;\n 145\n-146\n-147\n-148 // referenceVolume\n-149 // ---------------\n-150\n-151 unsigned long referenceVolumeInverse ( unsigned int topologyId, int dim );\n-152\n-153 template< class ct >\n-154 inline ct referenceVolume ( unsigned int topologyId, int dim )\n-155 {\n-156 return ct( 1 ) / ct( referenceVolumeInverse( topologyId, dim ) );\n-157 }\n-158\n-159\n+147 bool none_;\n+148\n+150 unsigned int topologyId_;\n+151\n+152 // Internal type used for the Id. The exact nature of this type is kept\n+153 // as an implementation detail on purpose. We use a scoped enum here\n+because scoped enums\n+154 // can be used as template parameters, but are not implicitly converted to\n+other integral\n+155 // types by the compiler. That way, we avoid unfortunate implicit\n+conversion chains, e.g.\n+156 // people trying to work with GlobalGeometryTypeIndex, but forgetting to\n+actually call\n+157 // GlobalGeometryTypeIndex::index(gt) and just using gt directly.\n+158 enum class IdType : std::uint64_t\n+159 {};\n 160\n-161 // referenceOrigins\n-162 // ----------------\n-163\n-164 template< class ct, int cdim >\n-165 inline unsigned int\n-166 referenceOrigins ( unsigned int topologyId, int dim, int codim,\n-FieldVector< ct, cdim > *origins )\n-167 {\n-168 assert( (dim >= 0) && (dim <= cdim) );\n-169 assert( topologyId < numTopologies( dim ) );\n-170 assert( (codim >= 0) && (codim <= dim) );\n-171\n-172 if( codim > 0 )\n-173 {\n-174 const unsigned int baseId = baseTopologyId( topologyId, dim );\n-175 if( isPrism( topologyId, dim ) )\n-176 {\n-177 const unsigned int n = (codim < dim ? referenceOrigins( baseId, dim-1,\n-codim, origins ) : 0);\n-178 const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins+n\n-);\n-179 for( unsigned int i = 0; i < m; ++i )\n-180 {\n-181 origins[ n+m+i ] = origins[ n+i ];\n-182 origins[ n+m+i ][ dim-1 ] = ct( 1 );\n-183 }\n-184 return n+2*m;\n-185 }\n-186 else\n-187 {\n-188 const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins );\n-189 if( codim == dim )\n-190 {\n-191 origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) );\n-192 origins[ m ][ dim-1 ] = ct( 1 );\n-193 return m+1;\n-194 }\n-195 else\n-196 return m+referenceOrigins( baseId, dim-1, codim, origins+m );\n-197 }\n-198 }\n-199 else\n-200 {\n-201 origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );\n-202 return 1;\n-203 }\n-204 }\n-205\n-206\n-207\n-208 // referenceEmbeddings\n-209 // -------------------\n-210\n-211 template< class ct, int cdim, int mydim >\n-212 inline unsigned int\n-213 referenceEmbeddings ( unsigned int topologyId, int dim, int codim,\n-214 FieldVector< ct, cdim > *origins,\n-215 FieldMatrix< ct, mydim, cdim > *jacobianTransposeds )\n-216 {\n-217 assert( (0 <= codim) && (codim <= dim) && (dim <= cdim) );\n-218 assert( (dim - codim <= mydim) && (mydim <= cdim) );\n-219 assert( topologyId < numTopologies( dim ) );\n-220\n-221 if( codim > 0 )\n-222 {\n-223 const unsigned int baseId = baseTopologyId( topologyId, dim );\n-224 if( isPrism( topologyId, dim ) )\n-225 {\n-226 const unsigned int n = (codim < dim ? referenceEmbeddings( baseId, dim-1,\n-codim, origins, jacobianTransposeds ) : 0);\n-227 for( unsigned int i = 0; i < n; ++i )\n-228 jacobianTransposeds[ i ][ dim-codim-1 ][ dim-1 ] = ct( 1 );\n-229\n-230 const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1,\n-origins+n, jacobianTransposeds+n );\n-231 std::copy( origins+n, origins+n+m, origins+n+m );\n-232 std::copy( jacobianTransposeds+n, jacobianTransposeds+n+m,\n-jacobianTransposeds+n+m );\n-233 for( unsigned int i = 0; i < m; ++i )\n-234 origins[ n+m+i ][ dim-1 ] = ct( 1 );\n-235\n-236 return n+2*m;\n-237 }\n-238 else\n-239 {\n-240 const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1,\n-origins, jacobianTransposeds );\n-241 if( codim == dim )\n-242 {\n-243 origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) );\n-244 origins[ m ][ dim-1 ] = ct( 1 );\n-245 jacobianTransposeds[ m ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) );\n-246 return m+1;\n-247 }\n-248 else\n-249 {\n-250 const unsigned int n = referenceEmbeddings( baseId, dim-1, codim,\n-origins+m, jacobianTransposeds+m );\n-251 for( unsigned int i = 0; i < n; ++i )\n-252 {\n-253 for( int k = 0; k < dim-1; ++k )\n-254 jacobianTransposeds[ m+i ][ dim-codim-1 ][ k ] = -origins[ m+i ][ k ];\n-255 jacobianTransposeds[ m+i ][ dim-codim-1 ][ dim-1 ] = ct( 1 );\n-256 }\n-257 return m+n;\n-258 }\n-259 }\n-260 }\n-261 else\n-262 {\n-263 origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );\n-264 jacobianTransposeds[ 0 ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) );\n-265 for( int k = 0; k < dim; ++k )\n-266 jacobianTransposeds[ 0 ][ k ][ k ] = ct( 1 );\n-267 return 1;\n-268 }\n-269 }\n-270\n-271\n-272\n-273 // referenceIntegrationOuterNormals\n-274 // --------------------------------\n-275\n-276 template< class ct, int cdim >\n-277 inline unsigned int\n-278 referenceIntegrationOuterNormals ( unsigned int topologyId, int dim,\n-279 const FieldVector< ct, cdim > *origins,\n-280 FieldVector< ct, cdim > *normals )\n+161 public:\n+162\n+_\b1_\b9_\b3 using Id = IdType;\n+194\n+_\b2_\b0_\b2 constexpr operator _\bI_\bd() const\n+203 {\n+204 // recreate the exact storage layout that this class is using, making\n+conversion\n+205 // extremely cheap\n+206 std::uint64_t id = dim_ | (std::uint64_t(none_) << 8) | (std::uint64_t\n+(topologyId_) << 32);\n+207 return static_cast(_\bi_\bd);\n+208 }\n+209\n+_\b2_\b2_\b2 constexpr Id _\bt_\bo_\bI_\bd() const\n+223 {\n+224 return static_cast(*this);\n+225 }\n+226\n+_\b2_\b3_\b4 constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(Id id)\n+235 : dim_(static_cast(_\bi_\bd) & 0xFF)\n+236 , none_(static_cast(_\bi_\bd) & 0x100)\n+237 , topologyId_(static_cast(_\bi_\bd) >> 32)\n+238 {}\n+239\n+242\n+_\b2_\b4_\b4 constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be ()\n+245 : dim_(0), none_(true), topologyId_(0)\n+246 {}\n+247\n+_\b2_\b5_\b4 constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(unsigned int topologyId, unsigned int _\bd_\bi_\bm, bool\n+_\bi_\bs_\bN_\bo_\bn_\be)\n+255 : dim_(_\bd_\bi_\bm), none_(_\bi_\bs_\bN_\bo_\bn_\be), topologyId_(topologyId)\n+256 {}\n+257\n+_\b2_\b6_\b3 constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(unsigned int topologyId, unsigned int _\bd_\bi_\bm)\n+264 : dim_(_\bd_\bi_\bm), none_(false), topologyId_(topologyId)\n+265 {}\n+266\n+277 template>\n+_\b2_\b7_\b9 explicit _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(TopologyType t)\n+280 : dim_(TopologyType::dimension), none_(false), topologyId_(TopologyType::\n+_\bi_\bd)\n 281 {\n-282 assert( (dim > 0) && (dim <= cdim) );\n-283 assert( topologyId < numTopologies( dim ) );\n+282 DUNE_UNUSED_PARAMETER(t);\n+283 }\n 284\n-285 if( dim > 1 )\n-286 {\n-287 const unsigned int baseId = baseTopologyId( topologyId, dim );\n-288 if( isPrism( topologyId, dim ) )\n-289 {\n-290 const unsigned int numBaseFaces\n-291 = referenceIntegrationOuterNormals( baseId, dim-1, origins, normals );\n-292\n-293 for( unsigned int i = 0; i < 2; ++i )\n-294 {\n-295 normals[ numBaseFaces+i ] = FieldVector< ct, cdim >( ct( 0 ) );\n-296 normals[ numBaseFaces+i ][ dim-1 ] = ct( 2*int( i )-1 );\n-297 }\n-298\n-299 return numBaseFaces+2;\n-300 }\n-301 else\n-302 {\n-303 normals[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) );\n-304 normals[ 0 ][ dim-1 ] = ct( -1 );\n-305\n-306 const unsigned int numBaseFaces\n-307 = referenceIntegrationOuterNormals( baseId, dim-1, origins+1, normals+1 );\n-308 for( unsigned int i = 1; i <= numBaseFaces; ++i )\n-309 normals[ i ][ dim-1 ] = normals[ i ]*origins[ i ];\n-310\n-311 return numBaseFaces+1;\n-312 }\n+_\b2_\b9_\b1 constexpr bool _\bi_\bs_\bV_\be_\br_\bt_\be_\bx() const {\n+292 return dim_==0;\n+293 }\n+294\n+_\b2_\b9_\b6 constexpr bool _\bi_\bs_\bL_\bi_\bn_\be() const {\n+297 return dim_==1;\n+298 }\n+299\n+_\b3_\b0_\b1 constexpr bool _\bi_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be() const {\n+302 return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0001;\n+303 }\n+304\n+_\b3_\b0_\b6 constexpr bool _\bi_\bs_\bQ_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl() const {\n+307 return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0011;\n+308 }\n+309\n+_\b3_\b1_\b1 constexpr bool _\bi_\bs_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn() const {\n+312 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0001;\n 313 }\n-314 else\n-315 {\n-316 for( unsigned int i = 0; i < 2; ++i )\n-317 {\n-318 normals[ i ] = FieldVector< ct, cdim >( ct( 0 ) );\n-319 normals[ i ][ 0 ] = ct( 2*int( i )-1 );\n-320 }\n-321\n-322 return 2;\n+314\n+_\b3_\b1_\b6 constexpr bool _\bi_\bs_\bP_\by_\br_\ba_\bm_\bi_\bd() const {\n+317 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0011;\n+318 }\n+319\n+_\b3_\b2_\b1 constexpr bool _\bi_\bs_\bP_\br_\bi_\bs_\bm() const {\n+322 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0101;\n 323 }\n-324 }\n-325\n-326 template< class ct, int cdim >\n-327 inline unsigned int\n-328 referenceIntegrationOuterNormals ( unsigned int topologyId, int dim,\n-329 FieldVector< ct, cdim > *normals )\n-330 {\n-331 assert( (dim > 0) && (dim <= cdim) );\n-332\n-333 FieldVector< ct, cdim > *origins\n-334 = new FieldVector< ct, cdim >[ _\bs_\bi_\bz_\be( topologyId, dim, 1 ) ];\n-335 referenceOrigins( topologyId, dim, 1, origins );\n-336\n-337 const unsigned int numFaces\n-338 = referenceIntegrationOuterNormals( topologyId, dim, origins, normals );\n-339 assert( numFaces == _\bs_\bi_\bz_\be( topologyId, dim, 1 ) );\n-340\n-341 delete[] origins;\n-342\n-343 return numFaces;\n-344 }\n-345\n-346 } // namespace Impl\n-347\n-348\n-349\n-350 // ReferenceElement\n-351 // ----------------\n+324\n+_\b3_\b2_\b6 constexpr bool _\bi_\bs_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn() const {\n+327 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0111;\n+328 }\n+329\n+_\b3_\b3_\b1 constexpr bool _\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx() const {\n+332 return ! none_ && (topologyId_ | 1) == 1;\n+333 }\n+334\n+_\b3_\b3_\b6 constexpr bool _\bi_\bs_\bC_\bu_\bb_\be() const {\n+337 return ! none_ && ((topologyId_ ^ ((1 << dim_)-1)) >> 1 == 0);\n+338 }\n+339\n+_\b3_\b4_\b1 constexpr bool _\bi_\bs_\bC_\bo_\bn_\bi_\bc_\ba_\bl() const {\n+342 return ! none_ && (((topologyId_ & ~1) & (1u << (dim_-1))) == 0);\n+343 }\n+344\n+_\b3_\b4_\b9 constexpr bool _\bi_\bs_\bC_\bo_\bn_\bi_\bc_\ba_\bl(const int& step) const {\n+350 return ! none_ && (((topologyId_ & ~1) & (1u << step)) == 0);\n+351 }\n 352\n-371 template< class ctype_, int dim >\n-372 class ReferenceElementImplementation\n-373 {\n-374\n-375 public:\n-376\n-378 using ctype = ctype_;\n-379\n-381 using CoordinateField = ctype;\n-382\n-384 using Coordinate = Dune::FieldVector;\n-385\n-387 static constexpr int dimension = dim;\n-388\n-390 typedef ctype Volume;\n-391\n-392 private:\n-393\n-394 friend class Impl::ReferenceElementContainer< ctype, dim >;\n-395\n-396 struct SubEntityInfo;\n+_\b3_\b5_\b4 constexpr bool _\bi_\bs_\bP_\br_\bi_\bs_\bm_\ba_\bt_\bi_\bc() const {\n+355 return ! none_ && (( (topologyId_ | 1) & (1u << (dim_-1))) != 0);\n+356 }\n+357\n+_\b3_\b6_\b2 constexpr bool _\bi_\bs_\bP_\br_\bi_\bs_\bm_\ba_\bt_\bi_\bc(const int& step) const {\n+363 return ! none_ && (( (topologyId_ | 1) & (1u << step)) != 0);\n+364 }\n+365\n+_\b3_\b6_\b7 constexpr bool _\bi_\bs_\bN_\bo_\bn_\be() const {\n+368 return none_;\n+369 }\n+370\n+_\b3_\b7_\b2 constexpr unsigned int _\bd_\bi_\bm() const {\n+373 return dim_;\n+374 }\n+375\n+_\b3_\b7_\b7 constexpr unsigned int _\bi_\bd() const {\n+378 return topologyId_;\n+379 }\n+380\n+_\b3_\b8_\b8 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& other) const {\n+389 return ( ( none_ == other.none_ )\n+390 && ( ( none_ == true )\n+391 || ( ( dim_ == other.dim_ )\n+392 && ( (topologyId_ >> 1) == (other.topologyId_ >> 1) )\n+393 )\n+394 )\n+395 );\n+396 }\n 397\n-398 template< int codim > struct CreateGeometries;\n-399\n-400 public:\n-402 template< int codim >\n-403 struct Codim\n-404 {\n-406 typedef AffineGeometry< ctype, dim-codim, dim > Geometry;\n-407 };\n-408\n-409 // ReferenceElement cannot be copied.\n-410 ReferenceElementImplementation ( const ReferenceElementImplementation& ) =\n-delete;\n-411\n-412 // ReferenceElementImplementation cannot be copied.\n-413 ReferenceElementImplementation& operator= ( const\n-ReferenceElementImplementation& ) = delete;\n-414\n-415 // ReferenceElementImplementation is default-constructible (required for\n-storage in std::array)\n-416 ReferenceElementImplementation () = default;\n-417\n-422 int _\bs_\bi_\bz_\be ( int c ) const\n-423 {\n-424 assert( (c >= 0) && (c <= dim) );\n-425 return info_[ c ].size();\n-426 }\n-427\n-439 int _\bs_\bi_\bz_\be ( int i, int c, int cc ) const\n-440 {\n-441 assert( (i >= 0) && (i < _\bs_\bi_\bz_\be( c )) );\n-442 return info_[ c ][ i ].size( cc );\n-443 }\n-444\n-458 int subEntity ( int i, int c, int ii, int cc ) const\n-459 {\n-460 assert( (i >= 0) && (i < _\bs_\bi_\bz_\be( c )) );\n-461 return info_[ c ][ i ].number( ii, cc );\n-462 }\n-463\n-479 auto subEntities ( int i, int c, int cc ) const\n-480 {\n-481 assert( (i >= 0) && (i < _\bs_\bi_\bz_\be( c )) );\n-482 return info_[ c ][ i ].numbers( cc );\n-483 }\n-484\n-493 const GeometryType &type ( int i, int c ) const\n-494 {\n-495 assert( (i >= 0) && (i < _\bs_\bi_\bz_\be( c )) );\n-496 return info_[ c ][ i ].type();\n+_\b3_\b9_\b9 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& other) const {\n+400 return ! ((*this)==other);\n+401 }\n+402\n+_\b4_\b0_\b4 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b<_\b (const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& other) const {\n+405 return ( ( none_ < other.none_ )\n+406 || ( !( other.none_ < none_ )\n+407 && ( ( dim_ < other.dim_ )\n+408 || ( (other.dim_ == dim_)\n+409 && ((topologyId_ >> 1) < (other.topologyId_ >> 1) )\n+410 )\n+411 )\n+412 )\n+413 );\n+414 }\n+415\n+418 };\n+419\n+_\b4_\b2_\b1 inline std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b (std::ostream& s, const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& a)\n+422 {\n+423 if (a._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx())\n+424 {\n+425 s << \"(simplex, \" << a._\bd_\bi_\bm() << \")\";\n+426 return s;\n+427 }\n+428 if (a._\bi_\bs_\bC_\bu_\bb_\be())\n+429 {\n+430 s << \"(cube, \" << a._\bd_\bi_\bm() << \")\";\n+431 return s;\n+432 }\n+433 if (a._\bi_\bs_\bP_\by_\br_\ba_\bm_\bi_\bd())\n+434 {\n+435 s << \"(pyramid, 3)\";\n+436 return s;\n+437 }\n+438 if (a._\bi_\bs_\bP_\br_\bi_\bs_\bm())\n+439 {\n+440 s << \"(prism, 3)\";\n+441 return s;\n+442 }\n+443 if (a._\bi_\bs_\bN_\bo_\bn_\be())\n+444 {\n+445 s << \"(none, \" << a._\bd_\bi_\bm() << \")\";\n+446 return s;\n+447 }\n+448 s << \"(other [\" << a._\bi_\bd() << \"], \" << a._\bd_\bi_\bm() << \")\";\n+449 return s;\n+450 }\n+451\n+452\n+454\n+_\b4_\b5_\b8 namespace GeometryTypes {\n+459\n+461\n+464 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be simplex(unsigned int dim)\n+465 {\n+466 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(0,dim,false);\n+467 }\n+468\n+470\n+473 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be cube(unsigned int dim)\n+474 {\n+475 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(((dim>1) ? ((1 << dim) - 1) : 0),dim,false);\n+476 }\n+477\n+479\n+482 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be none(unsigned int dim)\n+483 {\n+484 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(0,dim,true);\n+485 }\n+486\n+488 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be conicalExtension(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt)\n+489 {\n+490 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(gt._\bi_\bd(), gt._\bd_\bi_\bm()+1, gt._\bi_\bs_\bN_\bo_\bn_\be());\n+491 }\n+492\n+494 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be prismaticExtension(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt)\n+495 {\n+496 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(gt._\bi_\bd() | ((1 << gt._\bd_\bi_\bm())), gt._\bd_\bi_\bm()+1, gt._\bi_\bs_\bN_\bo_\bn_\be());\n 497 }\n 498\n-500 const GeometryType &type () const { return type( 0, 0 ); }\n-501\n-511 const Coordinate &position( int i, int c ) const\n-512 {\n-513 assert( (c >= 0) && (c <= dim) );\n-514 return baryCenters_[ c ][ i ];\n-515 }\n+499#ifndef __cpp_inline_variables\n+500 namespace {\n+501#endif\n+502\n+504\n+507 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be vertex = _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+(0,0,false);\n+508\n+510\n+513 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be line = _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(0,1,false);\n+514\n 516\n-524 bool checkInside ( const Coordinate &local ) const\n-525 {\n-526 const ctype tolerance = ctype( 64 ) * std::numeric_limits< ctype >::epsilon\n-();\n-527 return Impl::template checkInside< ctype, dim >( type().id(), dim, local,\n-tolerance );\n-528 }\n-529\n-541 template< int codim >\n-542 typename Codim< codim >::Geometry geometry ( int i ) const\n-543 {\n-544 return std::get< codim >( geometries_ )[ i ];\n-545 }\n+519 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be triangle = simplex(2);\n+520\n+522\n+525 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be quadrilateral = cube(2);\n+526\n+528\n+531 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be tetrahedron = simplex(3);\n+532\n+534\n+537 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be pyramid = _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+(0b0011,3,false);\n+538\n+540\n+543 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be prism = _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+(0b0101,3,false);\n+544\n 546\n-548 Volume volume () const\n-549 {\n-550 return volume_;\n-551 }\n-552\n-560 const Coordinate &integrationOuterNormal ( int face ) const\n-561 {\n-562 assert( (face >= 0) && (face < int( integrationNormals_.size() )) );\n-563 return integrationNormals_[ face ];\n-564 }\n+549 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be hexahedron = cube(3);\n+550\n+551#ifndef __cpp_inline_variables\n+552 }\n+553#endif\n+554\n+555 }\n+556\n+557 namespace Impl\n+558 {\n+559\n+561 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be getBase(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt) {\n+562 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(gt._\bi_\bd() & ((1 << (gt._\bd_\bi_\bm()-1))-1), gt._\bd_\bi_\bm()-1,\n+gt._\bi_\bs_\bN_\bo_\bn_\be());\n+563 }\n+564\n 565\n-566 private:\n-567 void initialize ( unsigned int topologyId )\n-568 {\n-569 assert( topologyId < Impl::numTopologies( dim ) );\n-570\n-571 // set up subentities\n-572 for( int codim = 0; codim <= dim; ++codim )\n-573 {\n-574 const unsigned int _\bs_\bi_\bz_\be = Impl::size( topologyId, dim, codim );\n-575 info_[ codim ].resize( size );\n-576 for( unsigned int i = 0; i < _\bs_\bi_\bz_\be; ++i )\n-577 info_[ codim ][ i ].initialize( topologyId, codim, i );\n-578 }\n-579\n-580 // compute corners\n-581 const unsigned int numVertices = _\bs_\bi_\bz_\be( dim );\n-582 baryCenters_[ dim ].resize( numVertices );\n-583 Impl::referenceCorners( topologyId, dim, &(baryCenters_[ dim ][ 0 ]) );\n+566 // IfGeometryType\n+567 // ----------\n+568\n+569 template< template< GeometryType::Id > class Operation, int dim,\n+_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bI_\bd geometryId = GeometryTypes::vertex >\n+570 struct IfGeometryType\n+571 {\n+572 static constexpr GeometryType geometry = geometryId;\n+573 template< class... Args >\n+574 static auto apply ( GeometryType gt, Args &&... args )\n+575 {\n+576 GeometryType lowerGeometry(gt.id() >>1 , gt.dim()-1, gt.isNone());\n+577\n+578 if( gt.id() & 1 )\n+579 return IfGeometryType< Operation, dim-1, GeometryTypes::prismaticExtension\n+(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... );\n+580 else\n+581 return IfGeometryType< Operation, dim-1, GeometryTypes::conicalExtension\n+(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... );\n+582 }\n+583 };\n 584\n-585 // compute barycenters\n-586 for( int codim = 0; codim < dim; ++codim )\n+585 template< template< GeometryType::Id > class Operation, _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bI_\bd\n+geometryId >\n+586 struct IfGeometryType< Operation, 0, geometryId>\n 587 {\n-588 baryCenters_[ codim ].resize( _\bs_\bi_\bz_\be(codim) );\n-589 for( int i = 0; i < _\bs_\bi_\bz_\be( codim ); ++i )\n+588 template< class... Args >\n+589 static auto apply ([[maybe_unused]] GeometryType gt, Args &&... args )\n 590 {\n-591 baryCenters_[ codim ][ i ] = Coordinate( ctype( 0 ) );\n-592 const unsigned int numCorners = _\bs_\bi_\bz_\be( i, codim, dim );\n-593 for( unsigned int j = 0; j < numCorners; ++j )\n-594 baryCenters_[ codim ][ i ] += baryCenters_[ dim ][ subEntity( i, codim, j,\n-dim ) ];\n-595 baryCenters_[ codim ][ i ] *= ctype( 1 ) / ctype( numCorners );\n-596 }\n-597 }\n-598\n-599 // compute reference element volume\n-600 volume_ = Impl::template referenceVolume< ctype >( topologyId, dim );\n-601\n-602 // compute integration outer normals\n-603 if( dim > 0 )\n-604 {\n-605 integrationNormals_.resize( _\bs_\bi_\bz_\be( 1 ) );\n-606 Impl::referenceIntegrationOuterNormals( topologyId, dim, &\n-(integrationNormals_[ 0 ]) );\n-607 }\n-608\n-609 // set up geometries\n-610 Hybrid::forEach( std::make_index_sequence< dim+1 >{}, [ & ]( auto i )\n-{ CreateGeometries< i >::apply( *this, geometries_ ); } );\n-611 }\n-612\n-613 template< int... codim >\n-614 static std::tuple< std::vector< typename Codim< codim >::Geometry >... >\n-615 makeGeometryTable ( std::integer_sequence< int, codim... > );\n-616\n-618 typedef decltype( makeGeometryTable( std::make_integer_sequence< int, dim+1\n->() ) ) GeometryTable;\n-619\n-621 ctype volume_;\n-622\n-623 std::vector< Coordinate > baryCenters_[ dim+1 ];\n-624 std::vector< Coordinate > integrationNormals_;\n-625\n-627 GeometryTable geometries_;\n-628\n-629 std::vector< SubEntityInfo > info_[ dim+1 ];\n-630 };\n-631\n-633 template< class ctype, int dim >\n-634 struct ReferenceElementImplementation< ctype, dim >::SubEntityInfo\n-635 {\n-636 // Compute upper bound for the number of subsentities.\n-637 // If someone knows an explicit formal feel free to\n-638 // implement it here.\n-639 static constexpr std::size_t maxSubEntityCount()\n-640 {\n-641 std::size_t maxCount=0;\n-642 for(std::size_t codim=0; codim<=dim; ++codim)\n-643 maxCount = std::max(maxCount, _\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl(std::size_t(dim),codim)*(1 <<\n-codim));\n-644 return maxCount;\n-645 }\n-646\n-647 using SubEntityFlags = std::bitset;\n-648\n-649 class SubEntityRange\n-650 : public Dune::IteratorRange\n-651 {\n-652 using Base = typename Dune::IteratorRange;\n-653\n-654 public:\n-655\n-656 using iterator = Base::iterator;\n-657 using const_iterator = Base::const_iterator;\n-658\n-659 SubEntityRange(const iterator& begin, const iterator& end, const\n-SubEntityFlags& contains) :\n-660 Base(begin, end),\n-661 containsPtr_(&contains),\n-662 size_(end-begin)\n-663 {}\n-664\n-665 SubEntityRange() :\n-666 Base(),\n-667 containsPtr_(nullptr),\n-668 size_(0)\n-669 {}\n-670\n-671 std::size_t _\bs_\bi_\bz_\be() const\n-672 {\n-673 return size_;\n-674 }\n-675\n-676 bool contains(std::size_t i) const\n-677 {\n-678 return (*containsPtr_)[i];\n-679 }\n-680\n-681 private:\n-682 const SubEntityFlags* containsPtr_;\n-683 std::size_t size_;\n-684 std::size_t offset_;\n-685 };\n-686\n-687 using NumberRange = typename Dune::IteratorRange;\n-688\n-689 SubEntityInfo ()\n-690 : numbering_( nullptr )\n-691 {\n-692 std::fill( offset_.begin(), offset_.end(), 0 );\n-693 }\n-694\n-695 SubEntityInfo ( const SubEntityInfo &other )\n-696 : offset_( other.offset_ ),\n-697 type_( other.type_ ),\n-698 containsSubentity_( other.containsSubentity_ )\n-699 {\n-700 numbering_ = allocate();\n-701 std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ );\n-702 }\n-703\n-704 ~SubEntityInfo () { deallocate( numbering_ ); }\n-705\n-706 const SubEntityInfo &operator= ( const SubEntityInfo &other )\n-707 {\n-708 type_ = other.type_;\n-709 offset_ = other.offset_;\n-710\n-711 deallocate( numbering_ );\n-712 numbering_ = allocate();\n-713 std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ );\n-714\n-715 containsSubentity_ = other.containsSubentity_;\n-716\n-717 return *this;\n-718 }\n-719\n-720 int _\bs_\bi_\bz_\be ( int cc ) const\n-721 {\n-722 assert( (cc >= 0) && (cc <= dim) );\n-723 return (offset_[ cc+1 ] - offset_[ cc ]);\n-724 }\n-725\n-726 int number ( int ii, int cc ) const\n-727 {\n-728 assert( (ii >= 0) && (ii < _\bs_\bi_\bz_\be( cc )) );\n-729 return numbering_[ offset_[ cc ] + ii ];\n-730 }\n-731\n-732 auto numbers ( int cc ) const\n-733 {\n-734 return SubEntityRange( numbering_ + offset_[ cc ], numbering_ + offset_\n-[ cc+1 ], containsSubentity_[cc]);\n-735 }\n-736\n-737 const GeometryType &type () const { return type_; }\n-738\n-739 void initialize ( unsigned int topologyId, int codim, unsigned int i )\n-740 {\n-741 const unsigned int subId = Impl::subTopologyId( topologyId, dim, codim, i\n-);\n-742 type_ = GeometryType( subId, dim-codim );\n-743\n-744 // compute offsets\n-745 for( int cc = 0; cc <= codim; ++cc )\n-746 offset_[ cc ] = 0;\n-747 for( int cc = codim; cc <= dim; ++cc )\n-748 offset_[ cc+1 ] = offset_[ cc ] + Impl::size( subId, dim-codim, cc-codim );\n-749\n-750 // compute subnumbering\n-751 deallocate( numbering_ );\n-752 numbering_ = allocate();\n-753 for( int cc = codim; cc <= dim; ++cc )\n-754 Impl::subTopologyNumbering( topologyId, dim, codim, i, cc-codim,\n-numbering_+offset_[ cc ], numbering_+offset_[ cc+1 ] );\n-755\n-756 // initialize containsSubentity lookup-table\n-757 for(std::size_t cc=0; cc<= dim; ++cc)\n-758 {\n-759 containsSubentity_[cc].reset();\n-760 for(std::size_t idx=0; idx offset_;\n-775 GeometryType type_;\n-776 std::array< SubEntityFlags, dim+1> containsSubentity_;\n-777 };\n-778\n-779\n-780 template< class ctype, int dim >\n-781 template< int codim >\n-782 struct ReferenceElementImplementation< ctype, dim >::CreateGeometries\n-783 {\n-784 template< int cc >\n-785 static typename ReferenceElements< ctype, dim-cc >::ReferenceElement\n-786 subRefElement( const ReferenceElementImplementation< ctype, dim >\n-&refElement, int i, std::integral_constant< int, cc > )\n-787 {\n-788 return _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b-_\bc_\bc_\b _\b>_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl( refElement.type( i, cc\n-) );\n-789 }\n-790\n-791 static typename _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b _\b>_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-792 subRefElement(const ReferenceElementImplementation< ctype, dim >\n-&refElement,\n-793 [[maybe_unused]] int i, std::integral_constant)\n-794 {\n-795 return refElement;\n-796 }\n-797\n-798 static void apply ( const ReferenceElementImplementation< ctype, dim >\n-&refElement, GeometryTable &geometries )\n-799 {\n-800 const int _\bs_\bi_\bz_\be = refElement.size( codim );\n-801 std::vector< FieldVector< ctype, dim > > origins( size );\n-802 std::vector< FieldMatrix< ctype, dim - codim, dim > > jacobianTransposeds\n-( size );\n-803 Impl::referenceEmbeddings( refElement.type().id(), dim, codim, &(origins[ 0\n-]), &(jacobianTransposeds[ 0 ]) );\n-804\n-805 std::get< codim >( geometries ).reserve( size );\n-806 for( int i = 0; i < _\bs_\bi_\bz_\be; ++i )\n-807 {\n-808 typename Codim< codim >::Geometry geometry( subRefElement( refElement, i,\n-std::integral_constant< int, codim >() ), origins[ i ], jacobianTransposeds[ i\n-] );\n-809 std::get< codim >( geometries ).push_back( geometry );\n-810 }\n-811 }\n-812 };\n-813\n-814#endif // DOXYGEN\n-815\n-816 } // namespace Geo\n-817\n-818} // namespace Dune\n-819\n-820#endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH\n-_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\b._\bh_\bh\n-_\ba_\bf_\bf_\bi_\bn_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh\n-An implementation of the Geometry interface for affine geometries.\n-_\bt_\by_\bp_\be_\b._\bh_\bh\n-A unique label for each type of element that can occur in a grid.\n+591 return Operation< geometryId >::apply( std::forward< Args >( args )... );\n+592 }\n+593 };\n+594 } // namespace Impl\n+595} // namespace Dune\n+596\n+597#endif // DUNE_GEOMETRY_TYPE_HH\n+_\bd_\be_\bp_\br_\be_\bc_\ba_\bt_\be_\bd_\b__\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\b._\bh_\bh\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bz_\be\n-@ size\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:145\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl\n-int binomial(int upper, int lower)\n-calculate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:305\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-typename Container::ReferenceElement ReferenceElement\n-The reference element type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bl\n-static const ReferenceElement & general(const GeometryType &type)\n-get general reference elements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:198\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+std::ostream & operator<<(std::ostream &s, const GeometryType &a)\n+Prints the type to an output stream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:421\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+Unique label for each type of entities that can occur in DUNE grids.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+constexpr GeometryType(unsigned int topologyId, unsigned int dim)\n+Constructor, using the topologyId (integer) and the dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:263\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<\n+constexpr bool operator<(const GeometryType &other) const\n+less-than operation for use with maps\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:404\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n+constexpr bool operator!=(const GeometryType &other) const\n+Check for inequality.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:399\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\by_\br_\ba_\bm_\bi_\bd\n+constexpr bool isPyramid() const\n+Return true if entity is a pyramid.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:316\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn\n+constexpr bool isTetrahedron() const\n+Return true if entity is a tetrahedron.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:311\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\br_\bi_\bs_\bm\n+constexpr bool isPrism() const\n+Return true if entity is a prism.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:321\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bV_\be_\br_\bt_\be_\bx\n+constexpr bool isVertex() const\n+Return true if entity is a vertex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:291\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+constexpr bool operator==(const GeometryType &other) const\n+Check for equality. This method knows that in dimension 0 and 1 all BasicTypes\n+are equal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:388\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bt_\bo_\bI_\bd\n+constexpr Id toId() const\n+Create an Id representation of this GeometryType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:222\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bi_\bc_\ba_\bl\n+constexpr bool isConical(const int &step) const\n+Return true if entity was constructed with a conical product in the chosen\n+step.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:349\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bd_\bi_\bm\n+constexpr unsigned int dim() const\n+Return dimension of the type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:372\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\br_\bi_\bs_\bm_\ba_\bt_\bi_\bc\n+constexpr bool isPrismatic(const int &step) const\n+Return true if entity was constructed with a prismatic product in the chosen\n+step.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:362\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be\n+constexpr bool isTriangle() const\n+Return true if entity is a triangle.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:301\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+GeometryType(TopologyType t)\n+Constructor from static TopologyType class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:279\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+constexpr GeometryType(unsigned int topologyId, unsigned int dim, bool isNone)\n+Constructor, using the topologyId (integer), the dimension and a flag for type\n+none.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:254\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bc_\bT_\by_\bp_\be\n+BasicType\n+Each entity can be tagged by one of these basic types plus its space dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:132\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bc_\bu_\bb_\be\n+@ cube\n+Cube element in any nonnegative dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:134\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx\n+@ simplex\n+Simplicial element in any nonnegative dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:133\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bp_\by_\br_\ba_\bm_\bi_\bd\n+@ pyramid\n+Four sided pyramid in three dimensions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:135\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\be_\bx_\bt_\be_\bn_\bd_\be_\bd\n+@ extended\n+Other, more general topology, representable as topologyId.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:137\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bn_\bo_\bn_\be\n+@ none\n+Even more general topology, cannot be specified by a topologyId. Two\n+GeometryTypes with 'none' type a...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:138\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bp_\br_\bi_\bs_\bm\n+@ prism\n+Prism element in three dimensions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:136\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+constexpr GeometryType(Id id)\n+Reconstruct a Geometry type from a GeometryType::Id.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:234\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bC_\bu_\bb_\be\n+constexpr bool isCube() const\n+Return true if entity is a cube of any dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:336\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+constexpr GeometryType()\n+Default constructor, not initializing anything.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:244\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bi_\bc_\ba_\bl\n+constexpr bool isConical() const\n+Return true if entity was constructed with a conical product in the last step.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:341\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bL_\bi_\bn_\be\n+constexpr bool isLine() const\n+Return true if entity is a line segment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:296\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bQ_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl\n+constexpr bool isQuadrilateral() const\n+Return true if entity is a quadrilateral.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:306\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\br_\bi_\bs_\bm_\ba_\bt_\bi_\bc\n+constexpr bool isPrismatic() const\n+Return true if entity was constructed with a prismatic product in the last\n+step.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:354\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n+constexpr unsigned int id() const\n+Return the topology id of the type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bN_\bo_\bn_\be\n+constexpr bool isNone() const\n+Return true if entity is a singular of any dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:367\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn\n+constexpr bool isHexahedron() const\n+Return true if entity is a hexahedron.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:326\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx\n+constexpr bool isSimplex() const\n+Return true if entity is a simplex of any dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:331\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bI_\bd\n+IdType Id\n+An integral id representing a GeometryType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:193\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00206.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00206.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: hcube.cc File Reference\n+dune-geometry: typefromvertexcount.hh File Reference\n \n \n \n \n \n \n \n@@ -65,88 +65,39 @@\n \n \n \n \n \n \n \n
\n \n-
hcube.cc File Reference
\n+Functions
\n+
typefromvertexcount.hh File Reference
\n \n
\n-\n-

This file contains the Refinement implementation for hypercubes (quadrilaterals, hexahedrons, etc.). \n-More...

\n-
#include <cassert>
\n-#include <dune/common/fvector.hh>
\n-#include <dune/common/iteratorfacades.hh>
\n-#include <dune/geometry/referenceelements.hh>
\n-#include <dune/geometry/axisalignedcubegeometry.hh>
\n-#include "base.cc"
\n+
#include <dune/geometry/type.hh>
\n
\n

Go to the source code of this file.

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

\n-Classes

class  Dune::RefinementImp::HCube::RefinementImp< dimension_, CoordType >
 Refinement implementation for hypercubes More...
 
struct  Dune::RefinementImp::HCube::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::RefinementImp::HCube::RefinementSubEntityIteratorSpecial< dimension, CoordType, codimension >
 SubEntityIterator base class for hypercube refinement. More...
 
class  Dune::RefinementImp::HCube::RefinementSubEntityIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::RefinementImp::HCube::RefinementSubEntityIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::RefinementImp::HCube::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
\n \n \n \n-\n-\n-\n-\n-\n-\n

\n Namespaces

namespace  Dune
 
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 
namespace  Dune::RefinementImp::HCube
 This namespace contains the Refinement implementation for hypercubes (GeometryType::cube).
 
\n-\n-\n-\n+\n+\n+\n+\n

\n-Macros

#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
 

\n+Functions

GeometryType Dune::geometryTypeFromVertexCount (unsigned int dim, unsigned int vertices)
 Utitlity function to construct the correct geometry type given the dimension and the number of vertices.
 
\n-

Detailed Description

\n-

This file contains the Refinement implementation for hypercubes (quadrilaterals, hexahedrons, etc.).

\n-

See Refinement implementation for hypercubes.

\n-

Macro Definition Documentation

\n-\n-

◆ DUNE_GEOMETRY_REFINEMENT_HCUBE_CC

\n-\n-
\n-
\n- \n- \n- \n- \n-
#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
\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,60 +1,22 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\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-hcube.cc File Reference\n-This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for hypercubes\n-(quadrilaterals, hexahedrons, etc.). _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bx_\bi_\bs_\ba_\bl_\bi_\bg_\bn_\be_\bd_\bc_\bu_\bb_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n-#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+ * _\bu_\bt_\bi_\bl_\bi_\bt_\by\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+typefromvertexcount.hh File Reference\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\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- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n-\u00a0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for hypercubes _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:\n- _\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0 SubEntityIterator base class for hypercube refinement. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:\n- _\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\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:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be\n-\u00a0 This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for\n- hypercubes (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bc_\bu_\bb_\be).\n-\u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bH_\bC_\bU_\bB_\bE_\b__\bC_\bC\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bu_\bn_\bt (unsigned int dim, unsigned int\n+ vertices)\n+\u00a0 Utitlity function to construct the correct geometry type given\n+ the dimension and the number of vertices.\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-This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for hypercubes\n-(quadrilaterals, hexahedrons, etc.).\n-See _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b _\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bf_\bo_\br_\b _\bh_\by_\bp_\be_\br_\bc_\bu_\bb_\be_\bs.\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_H\bHC\bCU\bUB\bBE\bE_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n-#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00206_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00206_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: hcube.cc Source File\n+dune-geometry: typefromvertexcount.hh Source File\n \n \n \n \n \n \n \n@@ -70,477 +70,77 @@\n
\n \n \n \n \n \n \n
\n-
hcube.cc
\n+
typefromvertexcount.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
\n-
6#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
\n+
5#ifndef DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH
\n+
6#define DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH
\n
7
\n-
42#include <cassert>
\n-
43
\n-
44#include <dune/common/fvector.hh>
\n-
45#include <dune/common/iteratorfacades.hh>
\n-
46
\n-\n-\n-
49
\n-
50#include "base.cc" // for RefinementTraits
\n-
51
\n-
52namespace Dune
\n-
53{
\n-
54 namespace RefinementImp
\n-
55 {
\n-
\n-
62 namespace HCube
\n-
63 {
\n-
73 template<int dimension_, class CoordType>
\n-
\n-\n-
75 {
\n-
76 public:
\n-
78 constexpr static int dimension = dimension_;
\n-
79 //- Know yourself
\n-\n-
81
\n-
82 template<int codimension>
\n-
83 struct Codim;
\n-\n-
85 typedef FieldVector<CoordType, dimension> CoordVector;
\n-\n-
87 typedef FieldVector<int, (1<<dimension)> IndexVector;
\n-
88
\n-
89 static unsigned nVertices(unsigned nIntervals);
\n-
90 static VertexIterator vBegin(unsigned nIntervals);
\n-
91 static VertexIterator vEnd(unsigned nIntervals);
\n-
92
\n-
93 static unsigned nElements(unsigned nIntervals);
\n-
94 static ElementIterator eBegin(unsigned nIntervals);
\n-
95 static ElementIterator eEnd(unsigned nIntervals);
\n-
96 };
\n-
\n-
97
\n-
98 template<int dimension, class CoordType>
\n-
99 template<int codimension>
\n-
\n-
100 struct RefinementImp<dimension, CoordType>::Codim
\n-
101 {
\n-
102 class SubEntityIterator;
\n-\n-
104 };
\n-
\n-
105
\n-
106 template<int dimension, class CoordType>
\n-
107 unsigned
\n-
\n-\n-
109 nVertices(unsigned nIntervals)
\n-
110 {
\n-
111 // return (nIntervals + 1)^dim
\n-
112 return Dune::power(nIntervals+1u, unsigned(dimension));
\n-
113 }
\n-
\n-
114
\n-
115 template<int dimension, class CoordType>
\n-\n-
\n-\n-
118 vBegin(unsigned nIntervals)
\n-
119 {
\n-
120 return VertexIterator(0,nIntervals);
\n-
121 }
\n-
\n-
122
\n-
123 template<int dimension, class CoordType>
\n-\n-
\n-\n-
126 vEnd(unsigned nIntervals)
\n-
127 {
\n-
128 return VertexIterator(nVertices(nIntervals),nIntervals);
\n-
129 }
\n-
\n-
130
\n-
131 template<int dimension, class CoordType>
\n-
132 unsigned
\n-
\n-\n-
134 nElements(unsigned nIntervals)
\n-
135 {
\n-
136 static_assert(dimension >= 0,
\n-
137 "Negative dimension given, what the heck is that supposed to mean?");
\n-
138 // return nIntervals^dim
\n-
139 return Dune::power(nIntervals, unsigned(dimension));
\n-
140 }
\n-
\n-
141
\n-
142 template<int dimension, class CoordType>
\n-\n-
\n-\n-
145 eBegin(unsigned nIntervals)
\n-
146 {
\n-
147 return ElementIterator(0,nIntervals);
\n-
148 }
\n-
\n-
149
\n-
150 template<int dimension, class CoordType>
\n-\n-
\n-\n-
153 eEnd(unsigned nIntervals)
\n-
154 {
\n-
155 return ElementIterator(nElements(nIntervals),nIntervals);
\n-
156 }
\n+\n+
9
\n+
10namespace Dune {
\n+
11
\n+
16 inline
\n+
\n+
17 GeometryType geometryTypeFromVertexCount(unsigned int dim, unsigned int vertices)
\n+
18 {
\n+
19 switch (dim)
\n+
20 {
\n+
21 case 0 :
\n+
22 return GeometryTypes::vertex;
\n+
23 case 1 :
\n+
24 return GeometryTypes::line;
\n+
25 case 2 :
\n+
26 switch (vertices) {
\n+
27 case 3 :
\n+
28 return GeometryTypes::triangle;
\n+
29 case 4 :
\n+
30 return GeometryTypes::quadrilateral;
\n+
31 default :
\n+
32 DUNE_THROW(NotImplemented, "2d elements with " << vertices << " corners are not supported!");
\n+
33 }
\n+
34 case 3 :
\n+
35 switch (vertices) {
\n+
36 case 4 :
\n+
37 return GeometryTypes::tetrahedron;
\n+
38 case 5 :
\n+
39 return GeometryTypes::pyramid;
\n+
40 case 6 :
\n+
41 return GeometryTypes::prism;
\n+
42 case 8 :
\n+
43 return GeometryTypes::hexahedron;
\n+
44 default :
\n+
45 DUNE_THROW(NotImplemented, "3d elements with " << vertices << " corners are not supported!");
\n+
46 }
\n+
47 default :
\n+
48 DUNE_THROW(NotImplemented, "geometryTypeFromVertexCount works only up to dim=3");
\n+
49 }
\n+
50 }
\n
\n-
157
\n-
158 //
\n-
159 // The iterators
\n-
160 //
\n-
161
\n-
162#ifdef DOXYGEN
\n-
174 template<int dimension, class CoordType, int codimension>
\n-\n-
176#else
\n-
177 template<int dimension, class CoordType, int codimension>
\n-\n-
179#endif //DOXYGEN
\n-
180
\n-
181 // for vertices
\n-
182
\n-
183 template<int dimension, class CoordType>
\n-
\n-
184 class RefinementSubEntityIteratorSpecial<dimension, CoordType, dimension>
\n-
185 {
\n-
186 public:
\n-\n-
188 typedef typename Refinement::template Codim<dimension>::SubEntityIterator Common;
\n-
189 typedef typename Refinement::CoordVector CoordVector;
\n-
190
\n-
191 CoordVector coords() const;
\n-
192
\n-
193 private:
\n-
194 const Common & asCommon() const
\n-
195 {
\n-
196 return *static_cast<const Common*>(this);
\n-
197 }
\n-
198 };
\n-
\n-
199
\n-
200 template<int dimension, class CoordType>
\n-
201 typename RefinementSubEntityIteratorSpecial<dimension, CoordType, dimension>::CoordVector
\n-
\n-\n-
203 coords() const
\n-
204 {
\n-
205 std::array<unsigned int, dimension> v(asCommon().vertexCoord());
\n-
206 CoordVector c;
\n-
207 for (int d = 0; d < dimension; d++)
\n-
208 {
\n-
209 c[d] = v[d]*1.0 / asCommon()._nIntervals;
\n-
210 }
\n-
211 return c;
\n-
212 }
\n-
\n-
213
\n-
214 // for elements
\n-
215
\n-
216 template<int dimension, class CoordType>
\n-
\n-
217 class RefinementSubEntityIteratorSpecial<dimension, CoordType, 0>
\n-
218 {
\n-
219 public:
\n-\n-
221 typedef typename Refinement::template Codim<0>::SubEntityIterator Common;
\n-
222 typedef typename Refinement::IndexVector IndexVector;
\n-
223 typedef typename Refinement::CoordVector CoordVector;
\n-
224
\n-
225 IndexVector vertexIndices() const;
\n-
226 CoordVector coords() const;
\n-
227
\n-
228 private:
\n-
229 const Common & asCommon() const
\n-
230 {
\n-
231 return *static_cast<const Common*>(this);
\n-
232 }
\n-
233 };
\n-
\n-
234
\n-
235 template<int dimension, class CoordType>
\n-
236 typename RefinementSubEntityIteratorSpecial<dimension, CoordType, 0>::IndexVector
\n-
\n-\n-
238 vertexIndices() const
\n-
239 {
\n-
240 constexpr static int nIndices = 1 << dimension;
\n-
241
\n-
242 // cell index tuple
\n-
243 std::array<unsigned int, dimension> e(asCommon().cellCoord());
\n-
244
\n-
245 // vertices
\n-
246 IndexVector vec;
\n-
247 for(int i = 0; i < nIndices; ++i)
\n-
248 {
\n-
249 int base = 1;
\n-
250 std::array<unsigned int, dimension> alpha(asCommon().idx2multiidx(i));
\n-
251 for (int d = 0; d < dimension; d++) {
\n-
252 vec[i] += (alpha[d] + e[d]) * base;
\n-
253 base *= asCommon()._nIntervals+1;
\n-
254 }
\n-
255 }
\n-
256 return vec;
\n-
257 }
\n-
\n-
258
\n-
259 template<int dimension, class CoordType>
\n-\n-
\n-\n-
262 coords() const
\n-
263 {
\n-
264 std::array<unsigned int, dimension> v(asCommon().cellCoord());
\n-
265 CoordVector c;
\n-
266 for (int d=0; d<dimension; d++)
\n-
267 {
\n-
268 c[d] = (v[d]*1.0 + 0.5) / asCommon()._nIntervals;
\n-
269 }
\n-
270 return c;
\n-
271 }
\n-
\n-
272
\n-
273 // common
\n-
274 template<int dimension, class CoordType>
\n-
275 template<int codimension>
\n-
\n-
276 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n-
277 : public ForwardIteratorFacade<typename RefinementImp<dimension,
\n-
278 CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n-
279 public RefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>
\n-
280 {
\n-
281 public:
\n-\n-
283 typedef typename Refinement::template Codim<codimension>::SubEntityIterator This;
\n-
284
\n-
285 SubEntityIterator(unsigned int index, unsigned int nIntervals);
\n-
286
\n-
287 bool equals(const This &other) const;
\n-
288 void increment();
\n-
289
\n-
290 int index() const;
\n-
291 Geometry geometry () const;
\n-
292 private:
\n-
293 friend class RefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>;
\n-
294 unsigned int _index;
\n-
295 unsigned int _nIntervals;
\n-
296
\n-
297 std::array<unsigned int, dimension>
\n-
298 cellCoord(unsigned int idx) const
\n-
299 {
\n-
300 return idx2coord(idx, _nIntervals);
\n-
301 }
\n-
302
\n-
303 std::array<unsigned int, dimension>
\n-
304 vertexCoord(unsigned int idx) const
\n-
305 {
\n-
306 return idx2coord(idx, _nIntervals+1u);
\n-
307 }
\n-
308
\n-
309 std::array<unsigned int, dimension>
\n-
310 cellCoord() const
\n-
311 {
\n-
312 return cellCoord(_index);
\n-
313 }
\n-
314
\n-
315 std::array<unsigned int, dimension>
\n-
316 vertexCoord() const
\n-
317 {
\n-
318 return vertexCoord(_index);
\n-
319 }
\n-
320
\n-
321 std::array<unsigned int, dimension>
\n-
322 idx2coord(unsigned int idx, unsigned int w) const
\n-
323 {
\n-
324 std::array<unsigned int, dimension> c;
\n-
325 for (unsigned int d = 0; d < dimension; d++)
\n-
326 {
\n-
327 c[d] = idx%w;
\n-
328 idx = idx/w;
\n-
329 }
\n-
330 return c;
\n-
331 }
\n-
332
\n-
333 unsigned int
\n-
334 coord2idx(std::array<unsigned int, dimension> c, unsigned int w) const
\n-
335 {
\n-
336 unsigned int i = 0;
\n-
337 for (unsigned int d = dimension; d > 0; d--)
\n-
338 {
\n-
339 i *= w;
\n-
340 i += c[d-1];
\n-
341 }
\n-
342 return i;
\n-
343 }
\n-
344
\n-
345 std::array<unsigned int, dimension>
\n-
346 idx2multiidx(unsigned int idx) const
\n-
347 {
\n-
348 std::array<unsigned int, dimension> alpha;
\n-
349 for (unsigned int i = 0; i < dimension; ++i)
\n-
350 alpha[i] = (idx >> i) & 1u;
\n-
351 return alpha;
\n-
352 }
\n-
353 };
\n-
\n-
354
\n-
355#ifndef DOXYGEN
\n-
356 template<int dimension, class CoordType>
\n-
357 template<int codimension>
\n-
358 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
359 SubEntityIterator(unsigned int index, unsigned int nIntervals)
\n-
360 : _index(index), _nIntervals(nIntervals)
\n-
361 {}
\n-
362
\n-
363 template<int dimension, class CoordType>
\n-
364 template<int codimension>
\n-
365 bool
\n-
366 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
367 equals(const This &other) const
\n-
368 {
\n-
369 return ((_index == other._index) && (_nIntervals == other._nIntervals));
\n-
370 }
\n-
371
\n-
372 template<int dimension, class CoordType>
\n-
373 template<int codimension>
\n-
374 void
\n-
375 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
376 increment()
\n-
377 {
\n-
378 ++_index;
\n-
379 }
\n-
380
\n-
381 template<int dimension, class CoordType>
\n-
382 template<int codimension>
\n-
383 int
\n-
384 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n-
385 index() const
\n-
386 {
\n-
387 return _index;
\n-
388 }
\n-
389
\n-
390 template<int dimension, class CoordType>
\n-
391 template<int codimension>
\n-
392 typename RefinementImp<dimension, CoordType>::template Codim<codimension>::Geometry
\n-
393 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::geometry () const
\n-
394 {
\n-
395 std::array<unsigned int,dimension> intCoords = idx2coord(_index,_nIntervals);
\n-
396
\n-
397 Dune::FieldVector<CoordType,dimension> lower;
\n-
398 Dune::FieldVector<CoordType,dimension> upper;
\n-
399
\n-
400 assert(codimension == 0 or codimension == dimension);
\n-
401
\n-
402 if constexpr (codimension == 0) {
\n-
403 for (size_t j = 0; j < dimension; j++)
\n-
404 {
\n-
405 lower[j] = double(intCoords[j]) / double(_nIntervals);
\n-
406 upper[j] = double(intCoords[j] + 1) / double(_nIntervals);
\n-
407 }
\n-
408
\n-
409 return typename RefinementImp<dimension,
\n-
410 CoordType>::template Codim<codimension>::Geometry(lower,upper);
\n-
411 } else {
\n-
412 for (size_t j = 0; j < dimension; j++)
\n-
413 lower[j] = upper[j] = double(intCoords[j]) / double(_nIntervals);
\n-
414
\n-
415 return typename RefinementImp<dimension,
\n-
416 CoordType>::template Codim<codimension>::Geometry(lower,upper,std::bitset<dimension>(0));
\n-
417 }
\n-
418 }
\n-
419
\n-
420#endif // DOXYGEN
\n-
421
\n-
422 } // namespace HCube
\n-
\n-
423
\n-
424 // ///////////////////////
\n-
425 //
\n-
426 // The refinement traits
\n-
427 //
\n-
428
\n-
429#ifndef DOXYGEN
\n-
430 template<unsigned topologyId, class CoordType, unsigned coerceToId,
\n-
431 int dim>
\n-
432 struct Traits<
\n-
433 topologyId, CoordType, coerceToId, dim,
\n-
434 typename std::enable_if<
\n-
435 (dim >= 2 &&
\n-
436 (GeometryTypes::cube(dim).id() >> 1) ==
\n-
437 (topologyId >> 1) &&
\n-
438 (GeometryTypes::cube(dim).id() >> 1) ==
\n-
439 (coerceToId >> 1)
\n-
440 )>::type
\n-
441 >
\n-
442 {
\n-
443 typedef HCube::RefinementImp<dim, CoordType> Imp;
\n-
444 };
\n-
445#endif
\n-
446
\n-
447 } // namespace RefinementImp
\n-
448
\n-
449} // namespace Dune
\n-
450
\n-
451#endif // DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
\n-\n-
This file contains the parts independent of a particular Refinement implementation.
\n-
A geometry implementation for axis-aligned hypercubes.
\n+
51
\n+
52}
\n+
53
\n+
54#endif // DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH
\n+
A unique label for each type of element that can occur in a grid.
\n
Definition affinegeometry.hh:21
\n-
A geometry implementation for axis-aligned hypercubes.
Definition axisalignedcubegeometry.hh:50
\n-
Static tag representing a codimension.
Definition dimension.hh:24
\n-
Refinement implementation for hypercubes
Definition hcube.cc:75
\n-
Codim< 0 >::SubEntityIterator ElementIterator
Definition hcube.cc:86
\n-
static ElementIterator eEnd(unsigned nIntervals)
Definition hcube.cc:153
\n-
static unsigned nVertices(unsigned nIntervals)
Definition hcube.cc:109
\n-
static VertexIterator vEnd(unsigned nIntervals)
Definition hcube.cc:126
\n-
FieldVector< int,(1<< dimension)> IndexVector
Definition hcube.cc:87
\n-
Codim< dimension >::SubEntityIterator VertexIterator
Definition hcube.cc:84
\n-
FieldVector< CoordType, dimension > CoordVector
Definition hcube.cc:85
\n-
static unsigned nElements(unsigned nIntervals)
Definition hcube.cc:134
\n-
RefinementImp< dimension, CoordType > Refinement
Definition hcube.cc:80
\n-
static ElementIterator eBegin(unsigned nIntervals)
Definition hcube.cc:145
\n-
static constexpr int dimension
Know your own dimension.
Definition hcube.cc:78
\n-
static VertexIterator vBegin(unsigned nIntervals)
Definition hcube.cc:118
\n-\n-
Dune::AxisAlignedCubeGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition hcube.cc:103
\n-
SubEntityIterator base class for hypercube refinement.
Definition hcube.cc:175
\n-\n-
Refinement::template Codim< dimension >::SubEntityIterator Common
Definition hcube.cc:188
\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition hcube.cc:220
\n-
Refinement::template Codim< 0 >::SubEntityIterator Common
Definition hcube.cc:221
\n-\n-\n-
SubEntityIterator(unsigned int index, unsigned int nIntervals)
\n-\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition hcube.cc:282
\n-\n-\n-
Refinement::template Codim< codimension >::SubEntityIterator This
Definition hcube.cc:283
\n+
GeometryType geometryTypeFromVertexCount(unsigned int dim, unsigned int vertices)
Utitlity function to construct the correct geometry type given the dimension and the number of vertic...
Definition typefromvertexcount.hh:17
\n+
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,527 +1,79 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-hcube.cc\n+ * _\bu_\bt_\bi_\bl_\bi_\bt_\by\n+typefromvertexcount.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBE_CC\n-_\b6#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC\n+5#ifndef DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH\n+6#define DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH\n 7\n-42#include \n-43\n-44#include \n-45#include \n-46\n-47#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-48#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bx_\bi_\bs_\ba_\bl_\bi_\bg_\bn_\be_\bd_\bc_\bu_\bb_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n-49\n-50#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\" // for RefinementTraits\n+8#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+9\n+10namespace _\bD_\bu_\bn_\be {\n+11\n+16 inline\n+_\b1_\b7 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bu_\bn_\bt(unsigned int dim, unsigned int\n+vertices)\n+18 {\n+19 switch (dim)\n+20 {\n+21 case 0 :\n+22 return GeometryTypes::vertex;\n+23 case 1 :\n+24 return GeometryTypes::line;\n+25 case 2 :\n+26 switch (vertices) {\n+27 case 3 :\n+28 return GeometryTypes::triangle;\n+29 case 4 :\n+30 return GeometryTypes::quadrilateral;\n+31 default :\n+32 DUNE_THROW(NotImplemented, \"2d elements with \" << vertices << \" corners are\n+not supported!\");\n+33 }\n+34 case 3 :\n+35 switch (vertices) {\n+36 case 4 :\n+37 return GeometryTypes::tetrahedron;\n+38 case 5 :\n+39 return GeometryTypes::pyramid;\n+40 case 6 :\n+41 return GeometryTypes::prism;\n+42 case 8 :\n+43 return GeometryTypes::hexahedron;\n+44 default :\n+45 DUNE_THROW(NotImplemented, \"3d elements with \" << vertices << \" corners are\n+not supported!\");\n+46 }\n+47 default :\n+48 DUNE_THROW(NotImplemented, \"geometryTypeFromVertexCount works only up to\n+dim=3\");\n+49 }\n+50 }\n 51\n-52namespace _\bD_\bu_\bn_\be\n-53{\n-54 namespace RefinementImp\n-55 {\n-_\b6_\b2 namespace HCube\n-63 {\n-73 template\n-_\b7_\b4 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-75 {\n-76 public:\n-_\b7_\b8 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n-79 //- Know yourself\n-_\b8_\b0 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-81\n-82 template\n-83 struct _\bC_\bo_\bd_\bi_\bm;\n-_\b8_\b4 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b8_\b5 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b8_\b6 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b8_\b7 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-88\n-89 static unsigned _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(unsigned nIntervals);\n-90 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(unsigned nIntervals);\n-91 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(unsigned nIntervals);\n-92\n-93 static unsigned _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(unsigned nIntervals);\n-94 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(unsigned nIntervals);\n-95 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(unsigned nIntervals);\n-96 };\n-97\n-98 template\n-99 template\n-_\b1_\b0_\b0 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n-101 {\n-102 class SubEntityIterator;\n-_\b1_\b0_\b3 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-104 };\n-105\n-106 template\n-107 unsigned\n-_\b1_\b0_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-109_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(unsigned nIntervals)\n-110 {\n-111 // return (nIntervals + 1)^dim\n-112 return Dune::power(nIntervals+1u, unsigned(dimension));\n-113 }\n-114\n-115 template\n-116 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b1_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-118_\b _\bv_\bB_\be_\bg_\bi_\bn(unsigned nIntervals)\n-119 {\n-120 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(0,nIntervals);\n-121 }\n-122\n-123 template\n-124 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b2_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-126_\b _\bv_\bE_\bn_\bd(unsigned nIntervals)\n-127 {\n-128 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nVertices(nIntervals),nIntervals);\n-129 }\n-130\n-131 template\n-132 unsigned\n-_\b1_\b3_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-134_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(unsigned nIntervals)\n-135 {\n-136 static_assert(dimension >= 0,\n-137 \"Negative dimension given, what the heck is that supposed to mean?\");\n-138 // return nIntervals^dim\n-139 return Dune::power(nIntervals, unsigned(dimension));\n-140 }\n-141\n-142 template\n-143 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b4_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-145_\b _\be_\bB_\be_\bg_\bi_\bn(unsigned nIntervals)\n-146 {\n-147 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(0,nIntervals);\n-148 }\n-149\n-150 template\n-151 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b5_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-153_\b _\be_\bE_\bn_\bd(unsigned nIntervals)\n-154 {\n-155 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nElements(nIntervals),nIntervals);\n-156 }\n-157\n-158 //\n-159 // The iterators\n-160 //\n-161\n-162#ifdef DOXYGEN\n-174 template\n-_\b1_\b7_\b5 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl {};\n-176#else\n-177 template\n-178 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-179#endif //DOXYGEN\n-180\n-181 // for vertices\n-182\n-183 template\n-_\b1_\b8_\b4 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-185 {\n-186 public:\n-_\b1_\b8_\b7 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b1_\b8_\b8 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\bC_\bo_\bm_\bm_\bo_\bn;\n-_\b1_\b8_\b9 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-190\n-191 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-192\n-193 private:\n-194 const _\bC_\bo_\bm_\bm_\bo_\bn & asCommon() const\n-195 {\n-196 return *static_cast(this);\n-197 }\n-198 };\n-199\n-200 template\n-201 typename RefinementSubEntityIteratorSpecial::CoordVector\n-_\b2_\b0_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-203_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-204 {\n-205 std::array v(asCommon().vertexCoord());\n-206 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br c;\n-207 for (int d = 0; d < dimension; d++)\n-208 {\n-209 c[d] = v[d]*1.0 / asCommon()._nIntervals;\n-210 }\n-211 return c;\n-212 }\n-213\n-214 // for elements\n-215\n-216 template\n-_\b2_\b1_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-218 {\n-219 public:\n-_\b2_\b2_\b0 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b2_\b1 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bC_\bo_\bm_\bm_\bo_\bn;\n-_\b2_\b2_\b2 typedef typename Refinement::IndexVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-_\b2_\b2_\b3 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-224\n-225 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n-226 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-227\n-228 private:\n-229 const _\bC_\bo_\bm_\bm_\bo_\bn & asCommon() const\n-230 {\n-231 return *static_cast(this);\n-232 }\n-233 };\n-234\n-235 template\n-236 typename RefinementSubEntityIteratorSpecial::\n-IndexVector\n-_\b2_\b3_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-238_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n-239 {\n-240 constexpr static int nIndices = 1 << dimension;\n-241\n-242 // cell index tuple\n-243 std::array e(asCommon().cellCoord());\n-244\n-245 // vertices\n-246 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vec;\n-247 for(int i = 0; i < nIndices; ++i)\n-248 {\n-249 int base = 1;\n-250 std::array alpha(asCommon().idx2multiidx(i));\n-251 for (int d = 0; d < dimension; d++) {\n-252 vec[i] += (alpha[d] + e[d]) * base;\n-253 base *= asCommon()._nIntervals+1;\n-254 }\n-255 }\n-256 return vec;\n-257 }\n-258\n-259 template\n-260 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b2_\b6_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-262_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-263 {\n-264 std::array v(asCommon().cellCoord());\n-265 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br c;\n-266 for (int d=0; d\n-275 template\n-_\b2_\b7_\b6 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n-SubEntityIterator\n-277 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n-279 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-280 {\n-281 public:\n-_\b2_\b8_\b2 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b8_\b3 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\bT_\bh_\bi_\bs;\n-284\n-_\b2_\b8_\b5 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(unsigned int index, unsigned int nIntervals);\n-286\n-_\b2_\b8_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n-_\b2_\b8_\b8 void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt();\n-289\n-_\b2_\b9_\b0 int _\bi_\bn_\bd_\be_\bx() const;\n-_\b2_\b9_\b1 Geometry _\bg_\be_\bo_\bm_\be_\bt_\br_\by () const;\n-292 private:\n-293 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType,\n-codimension>;\n-294 unsigned int _index;\n-295 unsigned int _nIntervals;\n-296\n-297 std::array\n-298 cellCoord(unsigned int idx) const\n-299 {\n-300 return idx2coord(idx, _nIntervals);\n-301 }\n-302\n-303 std::array\n-304 vertexCoord(unsigned int idx) const\n-305 {\n-306 return idx2coord(idx, _nIntervals+1u);\n-307 }\n-308\n-309 std::array\n-310 cellCoord() const\n-311 {\n-312 return cellCoord(_index);\n-313 }\n-314\n-315 std::array\n-316 vertexCoord() const\n-317 {\n-318 return vertexCoord(_index);\n-319 }\n-320\n-321 std::array\n-322 idx2coord(unsigned int idx, unsigned int w) const\n-323 {\n-324 std::array c;\n-325 for (unsigned int d = 0; d < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; d++)\n-326 {\n-327 c[d] = idx%w;\n-328 idx = idx/w;\n-329 }\n-330 return c;\n-331 }\n-332\n-333 unsigned int\n-334 coord2idx(std::array c, unsigned int w) const\n-335 {\n-336 unsigned int i = 0;\n-337 for (unsigned int d = _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; d > 0; d--)\n-338 {\n-339 i *= w;\n-340 i += c[d-1];\n-341 }\n-342 return i;\n-343 }\n-344\n-345 std::array\n-346 idx2multiidx(unsigned int idx) const\n-347 {\n-348 std::array alpha;\n-349 for (unsigned int i = 0; i < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; ++i)\n-350 alpha[i] = (idx >> i) & 1u;\n-351 return alpha;\n-352 }\n-353 };\n-354\n-355#ifndef DOXYGEN\n-356 template\n-357 template\n-358 RefinementImp::Codim::\n-SubEntityIterator::\n-359 SubEntityIterator(unsigned int index, unsigned int nIntervals)\n-360 : _index(index), _nIntervals(nIntervals)\n-361 {}\n-362\n-363 template\n-364 template\n-365 bool\n-366 RefinementImp::Codim::\n-SubEntityIterator::\n-367 equals(const This &other) const\n-368 {\n-369 return ((_index == other._index) && (_nIntervals == other._nIntervals));\n-370 }\n-371\n-372 template\n-373 template\n-374 void\n-375 RefinementImp::Codim::\n-SubEntityIterator::\n-376 increment()\n-377 {\n-378 ++_index;\n-379 }\n-380\n-381 template\n-382 template\n-383 int\n-384 RefinementImp::Codim::\n-SubEntityIterator::\n-385 index() const\n-386 {\n-387 return _index;\n-388 }\n-389\n-390 template\n-391 template\n-392 typename RefinementImp::template Codim::\n-Geometry\n-393 RefinementImp::Codim::\n-SubEntityIterator::geometry () const\n-394 {\n-395 std::array intCoords = idx2coord\n-(_index,_nIntervals);\n-396\n-397 Dune::FieldVector lower;\n-398 Dune::FieldVector upper;\n-399\n-400 assert(codimension == 0 or codimension == _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n-401\n-402 if constexpr (codimension == 0) {\n-403 for (size_t j = 0; j < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; j++)\n-404 {\n-405 lower[j] = double(intCoords[j]) / double(_nIntervals);\n-406 upper[j] = double(intCoords[j] + 1) / double(_nIntervals);\n-407 }\n-408\n-409 return typename RefinementImp<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn,\n-410 CoordType>::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by(lower,upper);\n-411 } else {\n-412 for (size_t j = 0; j < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; j++)\n-413 lower[j] = upper[j] = double(intCoords[j]) / double(_nIntervals);\n-414\n-415 return typename RefinementImp<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn,\n-416 CoordType>::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by(lower,upper,std::\n-bitset(0));\n-417 }\n-418 }\n-419\n-420#endif // DOXYGEN\n-421\n-422 } // namespace HCube\n-423\n-424 // ///////////////////////\n-425 //\n-426 // The refinement traits\n-427 //\n-428\n-429#ifndef DOXYGEN\n-430 template\n-432 struct Traits<\n-433 topologyId, CoordType, coerceToId, dim,\n-434 typename std::enable_if<\n-435 (dim >= 2 &&\n-436 (GeometryTypes::cube(dim).id() >> 1) ==\n-437 (topologyId >> 1) &&\n-438 (GeometryTypes::cube(dim).id() >> 1) ==\n-439 (coerceToId >> 1)\n-440 )>::type\n-441 >\n-442 {\n-443 typedef HCube::RefinementImp Imp;\n-444 };\n-445#endif\n-446\n-447 } // namespace RefinementImp\n-448\n-449} // namespace Dune\n-450\n-451#endif // DUNE_GEOMETRY_REFINEMENT_HCUBE_CC\n-_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n-_\bb_\ba_\bs_\be_\b._\bc_\bc\n-This file contains the parts independent of a particular Refinement\n-implementation.\n-_\ba_\bx_\bi_\bs_\ba_\bl_\bi_\bg_\bn_\be_\bd_\bc_\bu_\bb_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh\n-A geometry implementation for axis-aligned hypercubes.\n+52}\n+53\n+54#endif // DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH\n+_\bt_\by_\bp_\be_\b._\bh_\bh\n+A unique label for each type of element that can occur in a grid.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-A geometry implementation for axis-aligned hypercubes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-Static tag representing a codimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-Refinement implementation for hypercubes\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< 0 >::SubEntityIterator ElementIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:86\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n-static ElementIterator eEnd(unsigned nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:153\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-static unsigned nVertices(unsigned nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:109\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n-static VertexIterator vEnd(unsigned nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< int,(1<< dimension)> IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< dimension >::SubEntityIterator VertexIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:84\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< CoordType, dimension > CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:85\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-static unsigned nElements(unsigned nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:134\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:80\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n-static ElementIterator eBegin(unsigned nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:145\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static constexpr int dimension\n-Know your own dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n-static VertexIterator vBegin(unsigned nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:118\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:101\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Dune::AxisAlignedCubeGeometry< CoordType, dimension-codimension, dimension >\n-Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:103\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-SubEntityIterator base class for hypercube refinement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:175\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:189\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bm_\bm_\bo_\bn\n-Refinement::template Codim< dimension >::SubEntityIterator Common\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:187\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:220\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bm_\bm_\bo_\bn\n-Refinement::template Codim< 0 >::SubEntityIterator Common\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:221\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:223\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::IndexVector IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:222\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SubEntityIterator(unsigned int index, unsigned int nIntervals)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other) const\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-Geometry geometry() const\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:282\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bi_\bn_\bd_\be_\bx\n-int index() const\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n-void increment()\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bT_\bh_\bi_\bs\n-Refinement::template Codim< codimension >::SubEntityIterator This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:283\n+_\bD_\bu_\bn_\be_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bF_\br_\bo_\bm_\bV_\be_\br_\bt_\be_\bx_\bC_\bo_\bu_\bn_\bt\n+GeometryType geometryTypeFromVertexCount(unsigned int dim, unsigned int\n+vertices)\n+Utitlity function to construct the correct geometry type given the dimension\n+and the number of vertic...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typefromvertexcount.hh:17\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+Unique label for each type of entities that can occur in DUNE grids.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00209.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00209.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: hcubetriangulation.cc File Reference\n+dune-geometry: topologyfactory.hh File Reference\n \n \n \n \n \n \n \n@@ -65,82 +65,49 @@\n
\n \n \n \n \n \n \n
\n \n-
hcubetriangulation.cc File Reference
\n+Namespaces
\n+
topologyfactory.hh File Reference
\n \n
\n-\n-

This file contains the Refinement implementation for triangulating hypercubes (quadrilateral -> triangle, hexahedron -> tetrahedron) \n-More...

\n-
#include <dune/geometry/referenceelements.hh>
\n-#include <dune/geometry/type.hh>
\n-#include "base.cc"
\n-#include "simplex.cc"
\n+
#include <cassert>
\n+#include <array>
\n+#include <map>
\n+#include <memory>
\n+#include <type_traits>
\n+#include <vector>
\n+#include <dune/geometry/type.hh>
\n+#include <dune/geometry/typeindex.hh>
\n
\n

Go to the source code of this file.

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

\n Classes

class  Dune::RefinementImp::HCubeTriangulation::RefinementImp< dimension_, CoordType >
 
struct  Dune::RefinementImp::HCubeTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::RefinementImp::HCubeTriangulation::RefinementIteratorSpecial< dimension, CoordType, dimension >
struct  Dune::TopologyFactory< Traits >
 Provide a factory over the generic topologies. More...
 
class  Dune::RefinementImp::HCubeTriangulation::RefinementIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::RefinementImp::HCubeTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
struct  Dune::TopologySingletonFactory< Factory >
 A wrapper for a TopologyFactory providing singleton storage. Same usage as TopologyFactory but with empty release method an internal storage. More...
 
\n \n \n \n-\n-\n-\n-\n-\n-\n-

\n Namespaces

namespace  Dune
 
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 
namespace  Dune::RefinementImp::HCubeTriangulation
 This namespace contains the Refinement implementation for triangulating hypercubes (GeometryType::cube -> GeometryType::simplex)
 
\n-\n-\n-\n

\n-Macros

#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
 
\n-

Detailed Description

\n-

This file contains the Refinement implementation for triangulating hypercubes (quadrilateral -> triangle, hexahedron -> tetrahedron)

\n-

See Refinement implementation for triangulating hypercubes.

\n-

Macro Definition Documentation

\n-\n-

◆ DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC

\n-\n-
\n-
\n- \n- \n- \n- \n-
#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
\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,55 +1,31 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\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-hcubetriangulation.cc File Reference\n-This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for triangulating hypercubes\n-(quadrilateral -> triangle, hexahedron -> tetrahedron) _\bM_\bo_\br_\be_\b._\b._\b.\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+topologyfactory.hh File Reference\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n-#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\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:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 Provide a factory over the generic topologies. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bF_\ba_\bc_\bt_\bo_\br_\by_\b _\b>\n+ A wrapper for a _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by providing singleton storage. Same\n+\u00a0 usage as _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by but with empty release method an internal\n+ storage. _\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:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn\n- This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for\n-\u00a0 triangulating hypercubes (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bc_\bu_\bb_\be -> _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:\n- _\bs_\bi_\bm_\bp_\bl_\be_\bx)\n-\u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bH_\bC_\bU_\bB_\bE_\bT_\bR_\bI_\bA_\bN_\bG_\bU_\bL_\bA_\bT_\bI_\bO_\bN_\b__\bC_\bC\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-This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for triangulating hypercubes\n-(quadrilateral -> triangle, hexahedron -> tetrahedron)\n-See _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b _\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bf_\bo_\br_\b _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\b _\bh_\by_\bp_\be_\br_\bc_\bu_\bb_\be_\bs.\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_H\bHC\bCU\bUB\bBE\bET\bTR\bRI\bIA\bAN\bNG\bGU\bUL\bLA\bAT\bTI\bIO\bON\bN_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n-#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00209_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00209_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: hcubetriangulation.cc Source File\n+dune-geometry: topologyfactory.hh Source File\n \n \n \n \n \n \n \n@@ -70,508 +70,198 @@\n
\n \n \n \n \n \n \n
\n-
hcubetriangulation.cc
\n+
topologyfactory.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
\n-
6#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
\n+
5#ifndef DUNE_GEOMETRY_TOPOLOGYFACTORY_HH
\n+
6#define DUNE_GEOMETRY_TOPOLOGYFACTORY_HH
\n
7
\n-\n-
30#include <dune/geometry/type.hh>
\n-
31
\n-
32#include "base.cc"
\n-
33#include "simplex.cc"
\n-
34
\n-
35namespace Dune
\n-
36{
\n-
37 namespace RefinementImp
\n-
38 {
\n-
\n-
46 namespace HCubeTriangulation {
\n-
47
\n-
48 // ////////////
\n-
49 //
\n-
50 // Utilities
\n-
51 //
\n-
52
\n-\n-\n-
55
\n-
56 // ////////////////////////////////////
\n-
57 //
\n-
58 // Refine a hypercube with simplices
\n-
59 //
\n-
60
\n-
61 // forward declaration of the iterator base
\n-
62 template<int dimension, class CoordType, int codimension>
\n-\n-
64
\n-
65 template<int dimension_, class CoordType>
\n-
\n-\n-
67 {
\n-
68 public:
\n-
69 constexpr static int dimension = dimension_;
\n-
70
\n-
71 typedef CoordType ctype;
\n-
72
\n-
73 template<int codimension>
\n-
74 struct Codim;
\n-\n-
76 typedef FieldVector<CoordType, dimension> CoordVector;
\n-\n-
78 typedef FieldVector<int, dimension+1> IndexVector;
\n-
79
\n-
80 static int nVertices(int nIntervals);
\n-
81 static VertexIterator vBegin(int nIntervals);
\n-
82 static VertexIterator vEnd(int nIntervals);
\n-
83
\n-
84 static int nElements(int nIntervals);
\n-
85 static ElementIterator eBegin(int nIntervals);
\n-
86 static ElementIterator eEnd(int nIntervals);
\n-
87 private:
\n-
88 friend class RefinementIteratorSpecial<dimension, CoordType, 0>;
\n-
89 friend class RefinementIteratorSpecial<dimension, CoordType, dimension>;
\n-
90
\n-\n-
92 };
\n-
\n-
93
\n-
94 template<int dimension, class CoordType>
\n-
95 template<int codimension>
\n-
\n-
96 struct RefinementImp<dimension, CoordType>::Codim
\n-
97 {
\n-
98 class SubEntityIterator;
\n-
99 typedef Dune::MultiLinearGeometry<CoordType,dimension-codimension,dimension> Geometry;
\n-
100 };
\n-
\n-
101
\n-
102 template<int dimension, class CoordType>
\n-
103 int
\n-
\n-\n-
105 nVertices(int nIntervals)
\n-
106 {
\n-
107 return BackendRefinement::nVertices(nIntervals) * factorial(int(dimension));
\n-
108 }
\n-
\n-
109
\n-
110 template<int dimension, class CoordType>
\n-\n-
\n-\n-
113 vBegin(int nIntervals)
\n-
114 {
\n-
115 return VertexIterator(nIntervals);
\n-
116 }
\n-
\n-
117
\n-
118 template<int dimension, class CoordType>
\n-\n-
\n-\n-
121 vEnd(int nIntervals)
\n-
122 {
\n-
123 return VertexIterator(nIntervals, true);
\n-
124 }
\n-
\n-
125
\n-
126 template<int dimension, class CoordType>
\n-
127 int
\n-
\n-\n-
129 nElements(int nIntervals)
\n-
130 {
\n-
131 return BackendRefinement::nElements(nIntervals) * factorial(int(dimension));
\n-
132 }
\n-
\n-
133
\n-
134 template<int dimension, class CoordType>
\n-\n-
\n-\n-
137 eBegin(int nIntervals)
\n-
138 {
\n-
139 return ElementIterator(nIntervals);
\n-
140 }
\n-
\n-
141
\n-
142 template<int dimension, class CoordType>
\n-\n-
\n-\n-
145 eEnd(int nIntervals)
\n-
146 {
\n-
147 return ElementIterator(nIntervals, true);
\n-
148 }
\n-
\n-
149
\n-
150 // //////////////
\n-
151 //
\n-
152 // The iterator
\n-
153 //
\n-
154
\n-
155 // vertices
\n-
156 template<int dimension, class CoordType>
\n-
\n-
157 class RefinementIteratorSpecial<dimension, CoordType, dimension>
\n-
158 {
\n-
159 public:
\n-\n-
161 typedef typename Refinement::CoordVector CoordVector;
\n-
162 typedef typename Refinement::template Codim<dimension>::Geometry Geometry;
\n-
163
\n-
164 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n+
8#include <cassert>
\n+
9
\n+
10#include <array>
\n+
11#include <map>
\n+
12#include <memory>
\n+
13#include <type_traits>
\n+
14#include <vector>
\n+
15
\n+
16#include <dune/geometry/type.hh>
\n+\n+
18
\n+
19namespace Dune
\n+
20{
\n+
21
\n+
40 template <class Traits>
\n+
\n+\n+
42 {
\n+
43 // extract types from Traits class
\n+
44 static const unsigned int dimension = Traits::dimension;
\n+
45 typedef typename Traits::Key Key;
\n+
46 typedef typename Traits::Object Object;
\n+
47 typedef typename Traits::Factory Factory;
\n+
48
\n+
\n+
50 static Object *create ( const Dune::GeometryType &gt, const Key &key )
\n+
51 {
\n+
52 return Impl::toGeometryTypeIdConstant<dimension>(gt, [&](auto id) {
\n+
53 return create<decltype(id)::value>(key);
\n+
54 });
\n+
55 }
\n+
\n+
57 template< GeometryType::Id geometryId >
\n+
\n+
58 static Object *create ( const Key &key )
\n+
59 {
\n+
60 return Factory::template createObject< geometryId >( key );
\n+
61 }
\n+
\n+
62
\n+
64 template< class Topology >
\n+
\n+
65 static Object *create ( const Key &key )
\n+
66 {
\n+
67 return Factory::template createObject< Topology >( key );
\n+
68 }
\n+
\n+
69
\n+
71 static void release( Object *object ) { delete object; }
\n+
72 };
\n+
\n+
73
\n+
74
\n+
75
\n+
80 template <class Factory>
\n+
\n+\n+
82 {
\n+
83 static const unsigned int dimension = Factory::dimension;
\n+
84 typedef typename Factory::Key Key;
\n+
85 typedef const typename Factory::Object Object;
\n+
86
\n+
\n+
88 static Object *create ( const Dune::GeometryType &gt, const Key &key )
\n+
89 {
\n+
90 assert( gt.id() < numTopologies );
\n+
91 return instance().getObject( gt, key );
\n+
92 }
\n+
\n+
94 template< GeometryType::Id geometryId >
\n+
\n+
95 static auto create ( const Key &key )
\n+
96 -> std::enable_if_t< static_cast<GeometryType>(geometryId).dim() == dimension, Object * >
\n+
97 {
\n+
98 return instance().template getObject< geometryId >( key );
\n+
99 }
\n+
\n+
100
\n+
102 template< class Topology >
\n+
\n+
103 static auto create ( const Key &key )
\n+
104 -> std::enable_if_t< Topology::dimension == dimension, Object * >
\n+
105 {
\n+
106 return instance().template getObject< Topology >( key );
\n+
107 }
\n+
\n+
108
\n+
\n+
110 static void release ( Object *object )
\n+
111 {}
\n+
\n+
112
\n+
113 private:
\n+
114 struct ObjectDeleter
\n+
115 {
\n+
116 void operator() ( Object *ptr ) const { Factory::release( ptr ); }
\n+
117 };
\n+
118
\n+
119 static TopologySingletonFactory &instance ()
\n+
120 {
\n+
121 static TopologySingletonFactory instance;
\n+
122 return instance;
\n+
123 }
\n+
124
\n+
125 static const unsigned int numTopologies = (1 << dimension);
\n+
126 typedef std::array< std::unique_ptr< Object, ObjectDeleter >, numTopologies > Array;
\n+
127 typedef std::map< Key, Array > Storage;
\n+
128
\n+
129 TopologySingletonFactory () = default;
\n+
130
\n+
131 std::unique_ptr< Object, ObjectDeleter > &find ( const unsigned int topologyId, const Key &key )
\n+
132 {
\n+
133 return storage_[ key ][ topologyId ];
\n+
134 }
\n+
135
\n+
136 Object *getObject ( const Dune::GeometryType &gt, const Key &key )
\n+
137 {
\n+
138 auto &object = find( gt.id(), key );
\n+
139 if( !object )
\n+
140 object.reset( Factory::create( gt, key ) );
\n+
141 return object.get();
\n+
142 }
\n+
143
\n+
144 template< GeometryType::Id geometryId >
\n+
145 Object *getObject ( const Key &key )
\n+
146 {
\n+
147 static constexpr GeometryType geometry = geometryId;
\n+
148 auto &object = find( geometry.id(), key );
\n+
149 if( !object )
\n+
150 object.reset( Factory::template create< geometry >( key ) );
\n+
151 return object.get();
\n+
152 }
\n+
153
\n+
154 template< class Topology >
\n+
155 Object *getObject ( const Key &key )
\n+
156 {
\n+
157 auto &object = find( Topology::id, key );
\n+
158 if( !object )
\n+
159 object.reset( Factory::template create< Topology >( key ) );
\n+
160 return object.get();
\n+
161 }
\n+
162
\n+
163 Storage storage_;
\n+
164 };
\n+
\n
165
\n-
166 void increment();
\n+
166}
\n
167
\n-
168 CoordVector coords() const;
\n-
169
\n-
170 Geometry geometry() const;
\n-
171
\n-
172 int index() const;
\n-
173 protected:
\n-
174 typedef typename Refinement::BackendRefinement BackendRefinement;
\n-
175 typedef typename BackendRefinement::template Codim<dimension>::SubEntityIterator BackendIterator;
\n-
176 constexpr static int nKuhnSimplices = factorial(int(dimension));
\n-
177
\n-\n-
179
\n-\n-\n-\n-
183 };
\n-
\n-
184
\n-
185 template<int dimension, class CoordType>
\n-
\n-\n-
187 RefinementIteratorSpecial(int nIntervals, bool end)
\n-
188 : nIntervals_(nIntervals), kuhnIndex(0),
\n-
189 backend(BackendRefinement::vBegin(nIntervals_)),
\n-
190 backendEnd(BackendRefinement::vEnd(nIntervals_))
\n-
191 {
\n-
192 if (end)
\n-
193 kuhnIndex = nKuhnSimplices;
\n-
194 }
\n-
\n-
195
\n-
196 template<int dimension, class CoordType>
\n-
197 void
\n-
\n-\n-\n-
200 {
\n-
201 ++backend;
\n-
202 if (backend == backendEnd)
\n-
203 {
\n-
204 backend = BackendRefinement::vBegin(nIntervals_);
\n-
205 ++kuhnIndex;
\n-
206 }
\n-
207 }
\n-
\n-
208
\n-
209 template<int dimension, class CoordType>
\n-\n-
\n-\n-
212 coords() const
\n-
213 {
\n-
214 return referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
\n-
215 }
\n-
\n-
216
\n-
217 template<int dimension, class CoordType>
\n-\n-
\n-\n-
220 {
\n-
221 std::vector<CoordVector> corners(1);
\n-
222 corners[0] = referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
\n-
223 return Geometry(GeometryTypes::vertex, corners);
\n-
224 }
\n-
\n-
225
\n-
226 template<int dimension, class CoordType>
\n-
227 int
\n-
\n-\n-
229 index() const
\n-
230 {
\n-
231 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index();
\n-
232 }
\n-
\n-
233
\n-
234 // elements
\n-
235 template<int dimension, class CoordType>
\n-
\n-
236 class RefinementIteratorSpecial<dimension, CoordType, 0>
\n-
237 {
\n-
238 public:
\n-\n-\n-\n-
242 typedef typename Refinement::template Codim<0>::Geometry Geometry;
\n-
243
\n-
244 RefinementIteratorSpecial(int nIntervals_, bool end = false);
\n-\n-
246
\n-
247 void increment();
\n-
248
\n-
249 IndexVector vertexIndices() const;
\n-
250 int index() const;
\n-
251 CoordVector coords() const;
\n-
252
\n-
253 Geometry geometry() const;
\n-
254
\n-
255 private:
\n-
256 CoordVector global(const CoordVector &local) const;
\n-
257
\n-
258 protected:
\n-\n-
260 typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator;
\n-
261 constexpr static int nKuhnSimplices = factorial(dimension);
\n-
262
\n-\n-
264
\n-\n-\n-\n-
268 };
\n-
\n-
269
\n-
270 template<int dimension, class CoordType>
\n-
\n-\n-
272 RefinementIteratorSpecial(int nIntervals, bool end)
\n-
273 : nIntervals_(nIntervals), kuhnIndex(0),
\n-
274 backend(BackendRefinement::eBegin(nIntervals_)),
\n-
275 backendEnd(BackendRefinement::eEnd(nIntervals_))
\n-
276 {
\n-
277 if (end)
\n-
278 kuhnIndex = nKuhnSimplices;
\n-
279 }
\n-
\n-
280 template<int dimension, class CoordType>
\n-
\n-\n-\n-
283 : nIntervals_(other.nIntervals_), kuhnIndex(other.kuhnIndex),
\n-
284 backend(other.backend),
\n-
285 backendEnd(other.backendEnd)
\n-
286 {}
\n-
\n-
287
\n-
288 template<int dimension, class CoordType>
\n-
289 void
\n-
\n-\n-\n-
292 {
\n-
293 ++backend;
\n-
294 if (backend == backendEnd)
\n-
295 {
\n-
296 backend = BackendRefinement::eBegin(nIntervals_);
\n-
297 ++kuhnIndex;
\n-
298 }
\n-
299 }
\n-
\n-
300
\n-
301 template<int dimension, class CoordType>
\n-\n-
\n-\n-
304 vertexIndices() const
\n-
305 {
\n-
306 IndexVector indices = backend.vertexIndices();
\n-
307
\n-
308 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);
\n-
309 indices += base;
\n-
310
\n-
311 return indices;
\n-
312 }
\n-
\n-
313
\n-
314 template<int dimension, class CoordType>
\n-
315 int
\n-
\n-\n-
317 index() const
\n-
318 {
\n-
319 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index();
\n-
320 }
\n-
\n-
321
\n-
322 template<int dimension, class CoordType>
\n-\n-
\n-\n-
325 coords() const
\n-
326 {
\n-
327 return global(backend.coords());
\n-
328 }
\n-
\n-
329
\n-
330 template<int dimension, class CoordType>
\n-\n-
\n-\n-
333 {
\n-
334 const typename BackendIterator::Geometry &bgeo =
\n-
335 backend.geometry();
\n-
336 std::vector<CoordVector> corners(dimension+1);
\n-
337 for(int i = 0; i <= dimension; ++i)
\n-
338 corners[i] = global(bgeo.corner(i));
\n-
339
\n-
340 return Geometry(bgeo.type(), corners);
\n-
341 }
\n-
\n-
342
\n-
343 template<int dimension, class CoordType>
\n-\n-\n-
346 global(const CoordVector &local) const
\n-
347 {
\n-
348 return referenceToKuhn(local, getPermutation<dimension>(kuhnIndex));
\n-
349 }
\n-
350
\n-
351 // common
\n-
352 template<int dimension, class CoordType>
\n-
353 template<int codimension>
\n-
\n-
354 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n-
355 : public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n-
356 public RefinementIteratorSpecial<dimension, CoordType, codimension>
\n-
357 {
\n-
358 public:
\n-\n-
360 typedef SubEntityIterator This;
\n-
361
\n-
362 SubEntityIterator(int nIntervals, bool end = false);
\n-
363
\n-
364 bool equals(const This &other) const;
\n-
365 protected:
\n-
366 using RefinementIteratorSpecial<dimension, CoordType, codimension>::kuhnIndex;
\n-
367 using RefinementIteratorSpecial<dimension, CoordType, codimension>::backend;
\n-
368 };
\n-
\n-
369
\n-
370#ifndef DOXYGEN
\n-
371 template<int dimension, class CoordType>
\n-
372 template<int codimension>
\n-\n-
374 SubEntityIterator(int nIntervals, bool end)
\n-
375 : RefinementIteratorSpecial<dimension, CoordType, codimension>(nIntervals, end)
\n-
376 {}
\n-
377
\n-
378 template<int dimension, class CoordType>
\n-
379 template<int codimension>
\n-
380 bool
\n-\n-
382 equals(const This &other) const
\n-
383 { return kuhnIndex == other.kuhnIndex && backend == other.backend; }
\n-
384
\n-
385#endif // DOXYGEN
\n-
386
\n-
387 } // namespace HCubeTriangulation
\n-
\n-
388 } // namespace RefinementImp
\n-
389
\n-
390 namespace RefinementImp
\n-
391 {
\n-
392 // ///////////////////////
\n-
393 //
\n-
394 // The refinement traits
\n-
395 //
\n-
396
\n-
397#ifndef DOXYGEN
\n-
398 template<unsigned topologyId, class CoordType, unsigned coerceToId,
\n-
399 int dim>
\n-
400 struct Traits<
\n-
401 topologyId, CoordType, coerceToId, dim,
\n-
402 typename std::enable_if<
\n-
403 (dim >= 2 &&
\n-
404 (GeometryTypes::cube(dim).id() >> 1) ==
\n-
405 (topologyId >> 1) &&
\n-
406 (GeometryTypes::simplex(dim).id() >> 1) ==
\n-
407 (coerceToId >> 1)
\n-
408 )>::type
\n-
409 >
\n-
410 {
\n-
411 typedef HCubeTriangulation::RefinementImp<dim, CoordType> Imp;
\n-
412 };
\n-
413#endif
\n-
414
\n-
415 } // namespace RefinementImp
\n-
416} // namespace Dune
\n-
417
\n-
418#endif // DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
\n-\n-
This file contains the Refinement implementation for simplices (triangles, tetrahedrons....
\n-
This file contains the parts independent of a particular Refinement implementation.
\n-
A unique label for each type of element that can occur in a grid.
\n+
168#endif // #ifndef DUNE_GEOMETRY_TOPOLOGYFACTORY_HH
\n+
Helper classes to provide indices for geometrytypes for use in a vector.
\n+
A unique label for each type of element that can occur in a grid.
\n
Definition affinegeometry.hh:21
\n-
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:336
\n-
FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from the reference simplex to some Kuhn simplex.
Definition simplex.cc:394
\n-
Static tag representing a codimension.
Definition dimension.hh:24
\n-
generic geometry implementation based on corner coordinates
Definition multilineargeometry.hh:181
\n-\n-\n-
static VertexIterator vEnd(int nIntervals)
Definition hcubetriangulation.cc:121
\n-
static VertexIterator vBegin(int nIntervals)
Definition hcubetriangulation.cc:113
\n-
static int nElements(int nIntervals)
Definition hcubetriangulation.cc:129
\n-
FieldVector< CoordType, dimension > CoordVector
Definition hcubetriangulation.cc:76
\n-
CoordType ctype
Definition hcubetriangulation.cc:71
\n-
Codim< 0 >::SubEntityIterator ElementIterator
Definition hcubetriangulation.cc:77
\n-
FieldVector< int, dimension+1 > IndexVector
Definition hcubetriangulation.cc:78
\n-
static ElementIterator eBegin(int nIntervals)
Definition hcubetriangulation.cc:137
\n-
static ElementIterator eEnd(int nIntervals)
Definition hcubetriangulation.cc:145
\n-
static constexpr int dimension
Definition hcubetriangulation.cc:69
\n-
Codim< dimension >::SubEntityIterator VertexIterator
Definition hcubetriangulation.cc:75
\n-
static int nVertices(int nIntervals)
Definition hcubetriangulation.cc:105
\n-\n-
Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition hcubetriangulation.cc:99
\n-\n-\n-\n-
Refinement::template Codim< dimension >::Geometry Geometry
Definition hcubetriangulation.cc:162
\n-
BackendRefinement::template Codim< dimension >::SubEntityIterator BackendIterator
Definition hcubetriangulation.cc:175
\n-
Refinement::BackendRefinement BackendRefinement
Definition hcubetriangulation.cc:174
\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:160
\n-\n-
BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator
Definition hcubetriangulation.cc:260
\n-\n-
Refinement::CoordVector CoordVector
Definition hcubetriangulation.cc:241
\n-\n-\n-
Refinement::BackendRefinement BackendRefinement
Definition hcubetriangulation.cc:259
\n-\n-
Refinement::IndexVector IndexVector
Definition hcubetriangulation.cc:240
\n-
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:239
\n-
Refinement::template Codim< 0 >::Geometry Geometry
Definition hcubetriangulation.cc:242
\n-\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:359
\n-
SubEntityIterator This
Definition hcubetriangulation.cc:360
\n-\n+
Provide a factory over the generic topologies.
Definition topologyfactory.hh:42
\n+
Traits::Factory Factory
Definition topologyfactory.hh:47
\n+
static Object * create(const Dune::GeometryType &gt, const Key &key)
dynamically create objects
Definition topologyfactory.hh:50
\n+
static const unsigned int dimension
Definition topologyfactory.hh:44
\n+
static Object * create(const Key &key)
statically create objects
Definition topologyfactory.hh:58
\n+
static void release(Object *object)
release the object returned by the create methods
Definition topologyfactory.hh:71
\n+
Traits::Key Key
Definition topologyfactory.hh:45
\n+
Traits::Object Object
Definition topologyfactory.hh:46
\n+
A wrapper for a TopologyFactory providing singleton storage. Same usage as TopologyFactory but with e...
Definition topologyfactory.hh:82
\n+
static auto create(const Key &key) -> std::enable_if_t< Topology::dimension==dimension, Object * >
Definition topologyfactory.hh:103
\n+
static Object * create(const Dune::GeometryType &gt, const Key &key)
Definition topologyfactory.hh:88
\n+
static void release(Object *object)
release the object returned by the create methods
Definition topologyfactory.hh:110
\n+
const Factory::Object Object
Definition topologyfactory.hh:85
\n+
Factory::Key Key
Definition topologyfactory.hh:84
\n+
static auto create(const Key &key) -> std::enable_if_t< static_cast< GeometryType >(geometryId).dim()==dimension, Object * >
Definition topologyfactory.hh:95
\n+
static const unsigned int dimension
Definition topologyfactory.hh:83
\n+
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n+
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,588 +1,220 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-hcubetriangulation.cc\n+topologyfactory.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC\n-_\b6#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC\n+5#ifndef DUNE_GEOMETRY_TOPOLOGYFACTORY_HH\n+6#define DUNE_GEOMETRY_TOPOLOGYFACTORY_HH\n 7\n-29#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-30#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-31\n-32#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n-33#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n-34\n-35namespace _\bD_\bu_\bn_\be\n-36{\n-37 namespace RefinementImp\n-38 {\n-_\b4_\b6 namespace HCubeTriangulation {\n-47\n-48 // ////////////\n-49 //\n-50 // Utilities\n-51 //\n-52\n-53 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn;\n-54 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn;\n-55\n-56 // ////////////////////////////////////\n-57 //\n-58 // Refine a hypercube with simplices\n-59 //\n-60\n-61 // forward declaration of the iterator base\n-62 template\n-_\b6_\b3 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-64\n-65 template\n-_\b6_\b6 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-67 {\n-68 public:\n-_\b6_\b9 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n-70\n-_\b7_\b1 typedef CoordType _\bc_\bt_\by_\bp_\be;\n-72\n-73 template\n-74 struct _\bC_\bo_\bd_\bi_\bm;\n-_\b7_\b5 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b7_\b6 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b7_\b7 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b7_\b8 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-79\n-80 static int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals);\n-81 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals);\n-82 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(int nIntervals);\n-83\n-84 static int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals);\n-85 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(int nIntervals);\n-_\b8_\b6 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(int nIntervals);\n-87 private:\n-88 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, 0>;\n-89 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>;\n-90\n-91 typedef _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-92 };\n-93\n-94 template\n-95 template\n-_\b9_\b6 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n+8#include \n+9\n+10#include \n+11#include \n+12#include \n+13#include \n+14#include \n+15\n+16#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n+18\n+19namespace _\bD_\bu_\bn_\be\n+20{\n+21\n+40 template \n+_\b4_\b1 struct _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by\n+42 {\n+43 // extract types from Traits class\n+_\b4_\b4 static const unsigned int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = Traits::dimension;\n+_\b4_\b5 typedef typename Traits::Key _\bK_\be_\by;\n+_\b4_\b6 typedef typename Traits::Object _\bO_\bb_\bj_\be_\bc_\bt;\n+_\b4_\b7 typedef typename Traits::Factory _\bF_\ba_\bc_\bt_\bo_\br_\by;\n+48\n+_\b5_\b0 static _\bO_\bb_\bj_\be_\bc_\bt *_\bc_\br_\be_\ba_\bt_\be ( const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >, const _\bK_\be_\by &key )\n+51 {\n+52 return Impl::toGeometryTypeIdConstant(gt, [&](auto id) {\n+53 return create(key);\n+54 });\n+55 }\n+57 template< GeometryType::Id geometryId >\n+_\b5_\b8 static _\bO_\bb_\bj_\be_\bc_\bt *_\bc_\br_\be_\ba_\bt_\be ( const _\bK_\be_\by &key )\n+59 {\n+60 return Factory::template createObject< geometryId >( key );\n+61 }\n+62\n+64 template< class Topology >\n+_\b6_\b5 static _\bO_\bb_\bj_\be_\bc_\bt *_\bc_\br_\be_\ba_\bt_\be ( const _\bK_\be_\by &key )\n+66 {\n+67 return Factory::template createObject< Topology >( key );\n+68 }\n+69\n+_\b7_\b1 static void _\br_\be_\bl_\be_\ba_\bs_\be( _\bO_\bb_\bj_\be_\bc_\bt *object ) { delete object; }\n+72 };\n+73\n+74\n+75\n+80 template \n+_\b8_\b1 struct _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by\n+82 {\n+_\b8_\b3 static const unsigned int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = Factory::dimension;\n+_\b8_\b4 typedef typename Factory::Key _\bK_\be_\by;\n+_\b8_\b5 typedef const typename Factory::Object _\bO_\bb_\bj_\be_\bc_\bt;\n+86\n+_\b8_\b8 static _\bO_\bb_\bj_\be_\bc_\bt *_\bc_\br_\be_\ba_\bt_\be ( const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >, const _\bK_\be_\by &key )\n+89 {\n+90 assert( gt._\bi_\bd() < numTopologies );\n+91 return instance().getObject( gt, key );\n+92 }\n+94 template< GeometryType::Id geometryId >\n+_\b9_\b5 static auto _\bc_\br_\be_\ba_\bt_\be ( const _\bK_\be_\by &key )\n+96 -> std::enable_if_t< static_cast(geometryId).dim() ==\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bO_\bb_\bj_\be_\bc_\bt * >\n 97 {\n-98 class SubEntityIterator;\n-_\b9_\b9 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-100 };\n-101\n-102 template\n-103 int\n-_\b1_\b0_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-105_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals)\n-106 {\n-107 return BackendRefinement::nVertices(nIntervals) * factorial(int\n-(dimension));\n-108 }\n-109\n-110 template\n-111 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b1_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-113_\b _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals)\n-114 {\n-115 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n-116 }\n-117\n-118 template\n-119 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b2_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-121_\b _\bv_\bE_\bn_\bd(int nIntervals)\n-122 {\n-123 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n-124 }\n-125\n-126 template\n-127 int\n-_\b1_\b2_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-129_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals)\n-130 {\n-131 return BackendRefinement::nElements(nIntervals) * factorial(int\n-(dimension));\n-132 }\n-133\n-134 template\n-135 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b3_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-137_\b _\be_\bB_\be_\bg_\bi_\bn(int nIntervals)\n-138 {\n-139 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n-140 }\n-141\n-142 template\n-143 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b4_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-145_\b _\be_\bE_\bn_\bd(int nIntervals)\n+98 return instance().template getObject< geometryId >( key );\n+99 }\n+100\n+102 template< class Topology >\n+_\b1_\b0_\b3 static auto _\bc_\br_\be_\ba_\bt_\be ( const _\bK_\be_\by &key )\n+104 -> std::enable_if_t< Topology::dimension == dimension, Object * >\n+105 {\n+106 return instance().template getObject< Topology >( key );\n+107 }\n+108\n+_\b1_\b1_\b0 static void _\br_\be_\bl_\be_\ba_\bs_\be ( _\bO_\bb_\bj_\be_\bc_\bt *object )\n+111 {}\n+112\n+113 private:\n+114 struct ObjectDeleter\n+115 {\n+116 void operator() ( _\bO_\bb_\bj_\be_\bc_\bt *ptr ) const { Factory::release( ptr ); }\n+117 };\n+118\n+119 static TopologySingletonFactory &instance ()\n+120 {\n+121 static TopologySingletonFactory instance;\n+122 return instance;\n+123 }\n+124\n+125 static const unsigned int numTopologies = (1 << _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n+126 typedef std::array< std::unique_ptr< Object, ObjectDeleter >, numTopologies\n+> Array;\n+127 typedef std::map< Key, Array > Storage;\n+128\n+129 TopologySingletonFactory () = default;\n+130\n+131 std::unique_ptr< Object, ObjectDeleter > &find ( const unsigned int\n+topologyId, const _\bK_\be_\by &key )\n+132 {\n+133 return storage_[ key ][ topologyId ];\n+134 }\n+135\n+136 _\bO_\bb_\bj_\be_\bc_\bt *getObject ( const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >, const _\bK_\be_\by &key )\n+137 {\n+138 auto &object = find( gt._\bi_\bd(), key );\n+139 if( !object )\n+140 object.reset( Factory::create( gt, key ) );\n+141 return object.get();\n+142 }\n+143\n+144 template< GeometryType::Id geometryId >\n+145 _\bO_\bb_\bj_\be_\bc_\bt *getObject ( const _\bK_\be_\by &key )\n 146 {\n-147 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n-148 }\n-149\n-150 // //////////////\n-151 //\n-152 // The iterator\n-153 //\n-154\n-155 // vertices\n-156 template\n-_\b1_\b5_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-158 {\n-159 public:\n-_\b1_\b6_\b0 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b1_\b6_\b1 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b1_\b6_\b2 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-163\n-164 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n+147 static constexpr GeometryType geometry = geometryId;\n+148 auto &object = find( geometry.id(), key );\n+149 if( !object )\n+150 object.reset( Factory::template create< geometry >( key ) );\n+151 return object.get();\n+152 }\n+153\n+154 template< class Topology >\n+155 _\bO_\bb_\bj_\be_\bc_\bt *getObject ( const _\bK_\be_\by &key )\n+156 {\n+157 auto &object = find( Topology::id, key );\n+158 if( !object )\n+159 object.reset( Factory::template create< Topology >( key ) );\n+160 return object.get();\n+161 }\n+162\n+163 Storage storage_;\n+164 };\n 165\n-166 void increment();\n+166}\n 167\n-168 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-169\n-170 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry() const;\n-171\n-172 int index() const;\n-173 protected:\n-_\b1_\b7_\b4 typedef typename Refinement::BackendRefinement _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b1_\b7_\b5 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b1_\b7_\b6 constexpr static int nKuhnSimplices = factorial(int(dimension));\n-177\n-_\b1_\b7_\b8 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n-179\n-_\b1_\b8_\b0 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n-_\b1_\b8_\b1 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n-_\b1_\b8_\b2 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n-183 };\n-184\n-185 template\n-_\b1_\b8_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-187_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n-188 : nIntervals_(nIntervals), kuhnIndex(0),\n-189 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vBegin(nIntervals_)),\n-190 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vEnd(nIntervals_))\n-191 {\n-192 if (end)\n-193 kuhnIndex = nKuhnSimplices;\n-194 }\n-195\n-196 template\n-197 void\n-_\b1_\b9_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-199_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n-200 {\n-201 ++backend;\n-202 if (backend == backendEnd)\n-203 {\n-204 backend = BackendRefinement::vBegin(nIntervals_);\n-205 ++kuhnIndex;\n-206 }\n-207 }\n-208\n-209 template\n-210 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b2_\b1_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-212_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-213 {\n-214 return referenceToKuhn(backend.coords(), getPermutation\n-(kuhnIndex));\n-215 }\n-216\n-217 template\n-218 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-_\b2_\b1_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by ()\n-const\n-220 {\n-221 std::vector corners(1);\n-222 corners[0] = referenceToKuhn(backend.coords(), getPermutation\n-(kuhnIndex));\n-223 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(GeometryTypes::vertex, corners);\n-224 }\n-225\n-226 template\n-227 int\n-_\b2_\b2_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-229_\b _\bi_\bn_\bd_\be_\bx() const\n-230 {\n-231 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index\n-();\n-232 }\n-233\n-234 // elements\n-235 template\n-_\b2_\b3_\b6 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-237 {\n-238 public:\n-_\b2_\b3_\b9 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b4_\b0 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-_\b2_\b4_\b1 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b2_\b4_\b2 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-243\n-244 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals_, bool end = false);\n-245 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(const _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b> &other);\n-246\n-247 void increment();\n-248\n-249 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n-250 int index() const;\n-251 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-252\n-253 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry() const;\n-254\n-255 private:\n-256 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br global(const _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br &local) const;\n-257\n-258 protected:\n-_\b2_\b5_\b9 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b6_\b0 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b2_\b6_\b1 constexpr static int nKuhnSimplices = factorial(dimension);\n-262\n-_\b2_\b6_\b3 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n-264\n-_\b2_\b6_\b5 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n-_\b2_\b6_\b6 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n-_\b2_\b6_\b7 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n-268 };\n-269\n-270 template\n-_\b2_\b7_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-272_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n-273 : nIntervals_(nIntervals), kuhnIndex(0),\n-274 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eBegin(nIntervals_)),\n-275 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eEnd(nIntervals_))\n-276 {\n-277 if (end)\n-278 kuhnIndex = nKuhnSimplices;\n-279 }\n-280 template\n-_\b2_\b8_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-282_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(const _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b> &other)\n-283 : nIntervals_(other.nIntervals_), kuhnIndex(other.kuhnIndex),\n-284 backend(other.backend),\n-285 backendEnd(other.backendEnd)\n-286 {}\n-287\n-288 template\n-289 void\n-_\b2_\b9_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-291_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n-292 {\n-293 ++backend;\n-294 if (backend == backendEnd)\n-295 {\n-296 backend = BackendRefinement::eBegin(nIntervals_);\n-297 ++kuhnIndex;\n-298 }\n-299 }\n-300\n-301 template\n-302 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-_\b3_\b0_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-304_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n-305 {\n-306 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br indices = backend.vertexIndices();\n-307\n-308 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);\n-309 indices += base;\n-310\n-311 return indices;\n-312 }\n-313\n-314 template\n-315 int\n-_\b3_\b1_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-317_\b _\bi_\bn_\bd_\be_\bx() const\n-318 {\n-319 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index\n-();\n-320 }\n-321\n-322 template\n-323 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b3_\b2_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-325_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-326 {\n-327 return global(backend.coords());\n-328 }\n-329\n-330 template\n-331 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-_\b3_\b3_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by () const\n-333 {\n-334 const typename BackendIterator::Geometry &bgeo =\n-335 backend.geometry();\n-336 std::vector corners(dimension+1);\n-337 for(int i = 0; i <= dimension; ++i)\n-338 corners[i] = global(bgeo.corner(i));\n-339\n-340 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(bgeo.type(), corners);\n-341 }\n-342\n-343 template\n-344 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-345 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-346_\b _\bg_\bl_\bo_\bb_\ba_\bl(const CoordVector &local) const\n-347 {\n-348 return referenceToKuhn(local, getPermutation(kuhnIndex));\n-349 }\n-350\n-351 // common\n-352 template\n-353 template\n-_\b3_\b5_\b4 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n-SubEntityIterator\n-355 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n-356 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-357 {\n-358 public:\n-_\b3_\b5_\b9 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b3_\b6_\b0 typedef SubEntityIterator _\bT_\bh_\bi_\bs;\n-361\n-_\b3_\b6_\b2 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end = false);\n-363\n-_\b3_\b6_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n-365 protected:\n-366 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n-kuhnIndex;\n-367 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n-backend;\n-368 };\n-369\n-370#ifndef DOXYGEN\n-371 template\n-372 template\n-373 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n-374_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end)\n-375 : _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(nIntervals,\n-end)\n-376 {}\n-377\n-378 template\n-379 template\n-380 bool\n-381 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n-382_\b _\be_\bq_\bu_\ba_\bl_\bs(const This &other) const\n-383 { return kuhnIndex == other.kuhnIndex && backend == other.backend; }\n-384\n-385#endif // DOXYGEN\n-386\n-387 } // namespace HCubeTriangulation\n-388 } // namespace RefinementImp\n-389\n-390 namespace RefinementImp\n-391 {\n-392 // ///////////////////////\n-393 //\n-394 // The refinement traits\n-395 //\n-396\n-397#ifndef DOXYGEN\n-398 template\n-400 struct Traits<\n-401 topologyId, CoordType, coerceToId, dim,\n-402 typename std::enable_if<\n-403 (dim >= 2 &&\n-404 (GeometryTypes::cube(dim).id() >> 1) ==\n-405 (topologyId >> 1) &&\n-406 (GeometryTypes::simplex(dim).id() >> 1) ==\n-407 (coerceToId >> 1)\n-408 )>::type\n-409 >\n-410 {\n-411 typedef HCubeTriangulation::RefinementImp Imp;\n-412 };\n-413#endif\n-414\n-415 } // namespace RefinementImp\n-416} // namespace Dune\n-417\n-418#endif // DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC\n-_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n-_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\n-This file contains the Refinement implementation for simplices (triangles,\n-tetrahedrons....\n-_\bb_\ba_\bs_\be_\b._\bc_\bc\n-This file contains the parts independent of a particular Refinement\n-implementation.\n+168#endif // #ifndef DUNE_GEOMETRY_TOPOLOGYFACTORY_HH\n+_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n+Helper classes to provide indices for geometrytypes for use in a vector.\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn\n-FieldVector< int, n > getPermutation(int m)\n-Calculate permutation from it's index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:336\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn\n-FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType,\n-dimension > point, const FieldVector< int, dimension > &kuhn)\n-Map from the reference simplex to some Kuhn simplex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:394\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-Static tag representing a codimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-generic geometry implementation based on corner coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:63\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n-static VertexIterator vEnd(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:121\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n-static VertexIterator vBegin(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:113\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-static int nElements(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< CoordType, dimension > CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:76\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bc_\bt_\by_\bp_\be\n-CoordType ctype\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:71\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< 0 >::SubEntityIterator ElementIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:77\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< int, dimension+1 > IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n-static ElementIterator eBegin(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:137\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n-static ElementIterator eEnd(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:145\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static constexpr int dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:69\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< dimension >::SubEntityIterator VertexIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-static int nVertices(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:105\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:97\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension >\n-Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:99\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n-int nIntervals_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:178\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n-int kuhnIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:180\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:161\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Refinement::template Codim< dimension >::Geometry Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:162\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-BackendRefinement::template Codim< dimension >::SubEntityIterator\n-BackendIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:175\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-Refinement::BackendRefinement BackendRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:174\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n-BackendIterator backend\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:160\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n-const BackendIterator backendEnd\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:182\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:260\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n-BackendIterator backend\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:266\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:241\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n-const BackendIterator backendEnd\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:267\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n-int kuhnIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:265\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-Refinement::BackendRefinement BackendRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:259\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n-int nIntervals_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:263\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::IndexVector IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:240\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:239\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Refinement::template Codim< 0 >::Geometry Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:242\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other) const\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SubEntityIterator(int nIntervals, bool end=false)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:359\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\bT_\bh_\bi_\bs\n-SubEntityIterator This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:360\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:433\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by\n+Provide a factory over the generic topologies.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:42\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\by\n+Traits::Factory Factory\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:47\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n+static Object * create(const Dune::GeometryType >, const Key &key)\n+dynamically create objects\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static const unsigned int dimension\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:44\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n+static Object * create(const Key &key)\n+statically create objects\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bl_\be_\ba_\bs_\be\n+static void release(Object *object)\n+release the object returned by the create methods\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:71\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bK_\be_\by\n+Traits::Key Key\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:45\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bb_\bj_\be_\bc_\bt\n+Traits::Object Object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:46\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by\n+A wrapper for a TopologyFactory providing singleton storage. Same usage as\n+TopologyFactory but with e...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:82\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n+static auto create(const Key &key) -> std::enable_if_t< Topology::\n+dimension==dimension, Object * >\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:103\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n+static Object * create(const Dune::GeometryType >, const Key &key)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:88\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bl_\be_\ba_\bs_\be\n+static void release(Object *object)\n+release the object returned by the create methods\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:110\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bb_\bj_\be_\bc_\bt\n+const Factory::Object Object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:85\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bK_\be_\by\n+Factory::Key Key\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:84\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n+static auto create(const Key &key) -> std::enable_if_t< static_cast<\n+GeometryType >(geometryId).dim()==dimension, Object * >\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:95\n+_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static const unsigned int dimension\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:83\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+Unique label for each type of entities that can occur in DUNE grids.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n+constexpr unsigned int id() const\n+Return the topology id of the type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00212.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00212.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: prismtriangulation.cc File Reference\n+dune-geometry: axisalignedcubegeometry.hh File Reference\n \n \n \n \n \n \n \n@@ -65,86 +65,49 @@\n \n \n \n \n \n \n \n
\n \n-
prismtriangulation.cc File Reference
\n+Namespaces
\n+
axisalignedcubegeometry.hh File Reference
\n \n
\n-
#include <dune/common/fvector.hh>
\n-#include <dune/common/typetraits.hh>
\n-#include <dune/geometry/referenceelements.hh>
\n-#include <dune/geometry/type.hh>
\n-#include "base.cc"
\n-#include "simplex.cc"
\n+\n+

A geometry implementation for axis-aligned hypercubes. \n+More...

\n+
#include <bitset>
\n+#include <dune/common/fvector.hh>
\n+#include <dune/common/fmatrix.hh>
\n+#include <dune/common/diagonalmatrix.hh>
\n+#include <dune/geometry/referenceelements.hh>
\n+#include <dune/geometry/type.hh>
\n
\n

Go to the source code of this file.

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

\n Classes

class  Dune::RefinementImp::PrismTriangulation::RefinementImp< dimension_, CoordType >
 Implementation of the refinement of a prism into simplices. More...
 
struct  Dune::RefinementImp::PrismTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::RefinementImp::PrismTriangulation::RefinementIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::RefinementImp::PrismTriangulation::RefinementIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::RefinementImp::PrismTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
class  Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >
 A geometry implementation for axis-aligned hypercubes. More...
 
\n \n \n \n-\n-\n-\n-\n-\n-\n-

\n Namespaces

namespace  Dune
 
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 
namespace  Dune::RefinementImp::PrismTriangulation
 This namespace contains the Refinement implementation for triangulating prisms (GeometryType::prism -> GeometryType::simplex)
 
\n-\n-\n-\n-

\n-Macros

#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
 
\n-\n-\n-\n-\n

\n-Functions

template<int dimension, class CoordType >
FieldVector< CoordType, dimension > Dune::RefinementImp::PrismTriangulation::transformCoordinate (FieldVector< CoordType, dimension > point)
 
\n-

Macro Definition Documentation

\n-\n-

◆ DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC

\n-\n-
\n-
\n- \n- \n- \n- \n-
#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
\n-
\n-\n-
\n-
\n-
\n+

Detailed Description

\n+

A geometry implementation for axis-aligned hypercubes.

\n+
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,57 +1,27 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-prismtriangulation.cc File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+axisalignedcubegeometry.hh File Reference\n+A geometry implementation for axis-aligned hypercubes. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n #include \n-#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n-#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\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:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n-\u00a0 Implementation of the refinement of a prism into simplices. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b,_\b _\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\b _\b>\n+\u00a0 A geometry implementation for axis-aligned hypercubes. _\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:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn\n-\u00a0 This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for\n- triangulating prisms (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bp_\br_\bi_\bs_\bm -> _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx)\n-\u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bP_\bR_\bI_\bS_\bM_\bT_\bR_\bI_\bA_\bN_\bG_\bU_\bL_\bA_\bT_\bI_\bO_\bN_\b__\bC_\bC\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-FieldVector< CoordType, dimension >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n- _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be (FieldVector<\n- CoordType, dimension > point)\n-\u00a0\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_P\bPR\bRI\bIS\bSM\bMT\bTR\bRI\bIA\bAN\bNG\bGU\bUL\bLA\bAT\bTI\bIO\bON\bN_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n-#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC\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+A geometry implementation for axis-aligned hypercubes.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00212_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00212_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: prismtriangulation.cc Source File\n+dune-geometry: axisalignedcubegeometry.hh Source File\n \n \n \n \n \n \n \n@@ -70,520 +70,360 @@\n \n \n \n \n \n \n \n
\n-
prismtriangulation.cc
\n+
axisalignedcubegeometry.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
\n-
6#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
\n-
7
\n-
8#include <dune/common/fvector.hh>
\n-
9#include <dune/common/typetraits.hh>
\n-
10
\n-\n-
12#include <dune/geometry/type.hh>
\n-
13
\n-
14#include "base.cc"
\n-
15#include "simplex.cc"
\n-
16
\n-
17namespace Dune
\n-
18{
\n-
19 namespace RefinementImp
\n-
20 {
\n-
\n-
26 namespace PrismTriangulation
\n-
27 {
\n-
28 // ////////////
\n-
29 //
\n-
30 // Utilities
\n-
31 //
\n-
32
\n-\n-\n-
35
\n-
36 // ////////////////////////////////////
\n-
37 //
\n-
38 // Refine a prism with simplices
\n-
39 //
\n-
40
\n-
41 // forward declaration of the iterator base
\n-
42 template<int dimension, class CoordType, int codimension>
\n-\n-
44 /*
\n-
45 * The permutations 0,2 and 3 of the Kuhn-decomposition of a cube into simplices form a prism.
\n-
46 * The resulting prism is not oriented the same as the reference prism and so the Kuhn-coordinates
\n-
47 * have to be transformed using the method below.
\n-
48 */
\n-
49 template<int dimension, class CoordType> FieldVector<CoordType, dimension>
\n-
\n-
50 transformCoordinate(FieldVector<CoordType, dimension> point)
\n-
51 {
\n-
52 FieldVector<CoordType, dimension> transform;
\n-
53 transform[0] = point[1];
\n-
54 transform[1] = 1 - point[0];
\n-
55 transform[2] = point[2];
\n-
56 return transform;
\n-
57 }
\n-
\n-
58
\n-
65 template<int dimension_, class CoordType>
\n-
\n-\n-
67 {
\n-
68 public:
\n-
69 constexpr static int dimension = dimension_;
\n-
70
\n-
71 typedef CoordType ctype;
\n+
5
\n+
6#ifndef DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH
\n+
7#define DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH
\n+
8
\n+
13#include <bitset>
\n+
14
\n+
15#include <dune/common/fvector.hh>
\n+
16#include <dune/common/fmatrix.hh>
\n+
17#include <dune/common/diagonalmatrix.hh>
\n+
18
\n+\n+
20#include <dune/geometry/type.hh>
\n+
21
\n+
22
\n+
23namespace Dune {
\n+
24
\n+
48 template <class CoordType, unsigned int dim, unsigned int coorddim>
\n+
\n+\n+
50 {
\n+
51
\n+
52
\n+
53 public:
\n+
54
\n+
56 constexpr static int mydimension = dim;
\n+
57
\n+
59 constexpr static int coorddimension = coorddim;
\n+
60
\n+
62 typedef CoordType ctype;
\n+
63
\n+
65 typedef FieldVector<ctype,dim> LocalCoordinate;
\n+
66
\n+
68 typedef FieldVector<ctype,coorddim> GlobalCoordinate;
\n+
69
\n+
71 typedef ctype Volume;
\n
72
\n-
73 template<int codimension>
\n-
74 struct Codim;
\n-\n-
76 typedef FieldVector<CoordType, dimension> CoordVector;
\n-\n-
78 typedef FieldVector<int, dimension+1> IndexVector;
\n-
79
\n-
80 static int nVertices(int nIntervals);
\n-
81 static VertexIterator vBegin(int nIntervals);
\n-
82 static VertexIterator vEnd(int nIntervals);
\n-
83
\n-
84 static int nElements(int nIntervals);
\n-
85 static ElementIterator eBegin(int nIntervals);
\n-
86 static ElementIterator eEnd(int nIntervals);
\n-
87
\n-
88 private:
\n-
89 friend class RefinementIteratorSpecial<dimension, CoordType, 0>;
\n-
90 friend class RefinementIteratorSpecial<dimension, CoordType, dimension>;
\n-
91
\n-\n-
93 };
\n-
\n-
94
\n-
95 template<int dimension, class CoordType>
\n-
96 template<int codimension>
\n-
\n-
97 struct RefinementImp<dimension, CoordType>::Codim
\n-
98 {
\n-
99 class SubEntityIterator;
\n-\n-
101 };
\n-
\n-
102
\n-
103 template<int dimension, class CoordType>
\n-
104 int
\n-
\n-\n-
106 nVertices(int nIntervals)
\n-
107 {
\n-
108 return BackendRefinement::nVertices(nIntervals) * 3;
\n-
109 }
\n-
\n+
79 typedef typename std::conditional<dim==coorddim,
\n+
80 DiagonalMatrix<ctype,dim>,
\n+
81 FieldMatrix<ctype,dim,coorddim> >::type JacobianTransposed;
\n+
82
\n+
89 typedef typename std::conditional<dim==coorddim,
\n+
90 DiagonalMatrix<ctype,dim>,
\n+
91 FieldMatrix<ctype,coorddim,dim> >::type JacobianInverseTransposed;
\n+
92
\n+
100 using Jacobian = std::conditional_t<dim==coorddim, DiagonalMatrix<ctype,dim>, FieldMatrix<ctype,coorddim,dim> >;
\n+
101
\n+
109 using JacobianInverse = std::conditional_t<dim==coorddim, DiagonalMatrix<ctype,dim>, FieldMatrix<ctype,dim,coorddim> >;
\n
110
\n-
111 template<int dimension, class CoordType>
\n-\n-
\n-\n-
114 vBegin(int nIntervals)
\n-
115 {
\n-
116 return VertexIterator(nIntervals);
\n-
117 }
\n-
\n-
118
\n-
119 template<int dimension, class CoordType>
\n-\n-
\n-\n-
122 vEnd(int nIntervals)
\n-
123 {
\n-
124 return VertexIterator(nIntervals, true);
\n-
125 }
\n-
\n-
126
\n-
127 template<int dimension, class CoordType>
\n-
128 int
\n-
\n-\n-
130 nElements(int nIntervals)
\n-
131 {
\n-
132 return BackendRefinement::nElements(nIntervals) * 3;
\n-
133 }
\n-
\n-
134
\n-
135 template<int dimension, class CoordType>
\n-\n-
\n-\n-
138 eBegin(int nIntervals)
\n-
139 {
\n-
140 return ElementIterator(nIntervals);
\n-
141 }
\n-
\n-
142
\n-
143 template<int dimension, class CoordType>
\n-\n-
\n-\n-
146 eEnd(int nIntervals)
\n-
147 {
\n-
148 return ElementIterator(nIntervals, true);
\n-
149 }
\n-
\n-
150
\n-
151 // //////////////
\n-
152 //
\n-
153 // The iterator
\n-
154 //
\n-
155
\n-
156 // vertices
\n-
157 template<int dimension, class CoordType>
\n-
\n-
158 class RefinementIteratorSpecial<dimension, CoordType, dimension>
\n-
159 {
\n-
160 public:
\n-\n-
162 typedef typename Refinement::CoordVector CoordVector;
\n-
163 typedef typename Refinement::template Codim<dimension>::Geometry Geometry;
\n-
164
\n-
165 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n-
166
\n-
167 void increment();
\n-
168
\n-
169 CoordVector coords() const;
\n-
170 Geometry geometry () const;
\n-
171
\n-
172 int index() const;
\n-
173 protected:
\n-
174 typedef typename Refinement::BackendRefinement BackendRefinement;
\n-
175 typedef typename BackendRefinement::template Codim<dimension>::SubEntityIterator BackendIterator;
\n-
176 constexpr static int nKuhnSimplices = 3;
\n-
177
\n-\n-
179
\n-\n-\n-\n-
183 };
\n-
\n-
184
\n-
185 template<int dimension, class CoordType>
\n-
\n-\n-
187 RefinementIteratorSpecial(int nIntervals, bool end)
\n-
188 : nIntervals_(nIntervals), kuhnIndex(0),
\n-
189 backend(BackendRefinement::vBegin(nIntervals_)),
\n-
190 backendEnd(BackendRefinement::vEnd(nIntervals_))
\n-
191 {
\n-
192 if (end)
\n-
193 kuhnIndex = nKuhnSimplices;
\n-
194 }
\n-
\n-
195
\n-
196 template<int dimension, class CoordType>
\n-
197 void
\n-
\n-\n-\n-
200 {
\n-
201 ++backend;
\n-
202 if (backend == backendEnd)
\n-
203 {
\n-
204 backend = BackendRefinement::vBegin(nIntervals_);
\n-
205 ++kuhnIndex;
\n-
206 }
\n-
207 }
\n-
\n-
208
\n-
209 template<int dimension, class CoordType>
\n-\n-
\n-\n-
212 coords() const
\n-
213 {
\n-
214 // while the kuhnIndex runs from 0,1,2 the actual permutations we need are 0,2,3
\n-
215 return transformCoordinate(referenceToKuhn(backend.coords(),
\n-
216 getPermutation<dimension>((kuhnIndex + 2) % 4)));
\n-
217 }
\n+
\n+
115 AxisAlignedCubeGeometry(const Dune::FieldVector<ctype,coorddim> lower,
\n+
116 const Dune::FieldVector<ctype,coorddim> upper)
\n+
117 : lower_(lower),
\n+
118 upper_(upper),
\n+
119 axes_()
\n+
120 {
\n+
121 static_assert(dim==coorddim, "Use this constructor only if dim==coorddim!");
\n+
122 // all 'true', but is never actually used
\n+
123 axes_ = (1<<coorddim)-1;
\n+
124 }
\n+
\n+
125
\n+
\n+
133 AxisAlignedCubeGeometry(const Dune::FieldVector<ctype,coorddim> lower,
\n+
134 const Dune::FieldVector<ctype,coorddim> upper,
\n+
135 const std::bitset<coorddim>& axes)
\n+
136 : lower_(lower),
\n+
137 upper_(upper),
\n+
138 axes_(axes)
\n+
139 {
\n+
140 assert(axes.count()==dim);
\n+
141 for (size_t i=0; i<coorddim; i++)
\n+
142 if (not axes_[i])
\n+
143 upper_[i] = lower_[i];
\n+
144 }
\n+
\n+
145
\n+
\n+
150 AxisAlignedCubeGeometry(const Dune::FieldVector<ctype,coorddim> lower)
\n+
151 : lower_(lower)
\n+
152 {}
\n+
\n+
153
\n+
\n+\n+
156 {
\n+
157 return GeometryTypes::cube(dim);
\n+
158 }
\n+
\n+
159
\n+
\n+\n+
162 {
\n+
163 GlobalCoordinate result;
\n+
164 if (dim == coorddim) { // fast case
\n+
165 for (size_t i=0; i<coorddim; i++)
\n+
166 result[i] = lower_[i] + local[i]*(upper_[i] - lower_[i]);
\n+
167 } else if (dim == 0) { // a vertex -- the other fast case
\n+
168 result = lower_; // hope for named-return-type-optimization
\n+
169 } else { // slow case
\n+
170 size_t lc=0;
\n+
171 for (size_t i=0; i<coorddim; i++)
\n+
172 result[i] = (axes_[i])
\n+
173 ? lower_[i] + local[lc++]*(upper_[i] - lower_[i])
\n+
174 : lower_[i];
\n+
175 }
\n+
176 return result;
\n+
177 }
\n+
\n+
178
\n+
\n+\n+
181 {
\n+
182 LocalCoordinate result;
\n+
183 if (dim == coorddim) { // fast case
\n+
184 for (size_t i=0; i<dim; i++)
\n+
185 result[i] = (global[i] - lower_[i]) / (upper_[i] - lower_[i]);
\n+
186 } else if (dim != 0) { // slow case
\n+
187 size_t lc=0;
\n+
188 for (size_t i=0; i<coorddim; i++)
\n+
189 if (axes_[i])
\n+
190 result[lc++] = (global[i] - lower_[i]) / (upper_[i] - lower_[i]);
\n+
191 }
\n+
192 return result;
\n+
193 }
\n+
\n+
194
\n+
\n+\n+
197 {
\n+
198 JacobianTransposed result;
\n+
199
\n+
200 // Actually compute the result. Uses different methods depending
\n+
201 // on what kind of matrix JacobianTransposed is.
\n+
202 jacobianTransposed(result);
\n+
203
\n+
204 return result;
\n+
205 }
\n+
\n+
206
\n+
\n+\n+
209 {
\n+\n+
211
\n+
212 // Actually compute the result. Uses different methods depending
\n+
213 // on what kind of matrix JacobianTransposed is.
\n+\n+
215
\n+
216 return result;
\n+
217 }
\n
\n
218
\n-
219 template<int dimension, class CoordType>
\n-\n-
\n-\n-
222 {
\n-
223 std::vector<CoordVector> corners(1);
\n-
224 corners[0] = transformCoordinate(referenceToKuhn(backend.coords(),
\n-
225 getPermutation<dimension>((kuhnIndex + 2) % 4)));
\n-
226 return Geometry(GeometryTypes::vertex, corners);
\n-
227 }
\n-
\n-
228
\n-
229 template<int dimension, class CoordType>
\n-
230 int
\n-
\n-\n-
232 index() const
\n-
233 {
\n-
234 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index();
\n-
235 }
\n-
\n-
236
\n-
237 // elements
\n-
238 template<int dimension, class CoordType>
\n-
\n-
239 class RefinementIteratorSpecial<dimension, CoordType, 0>
\n-
240 {
\n-
241 public:
\n-\n-\n-\n-
245 typedef typename Refinement::template Codim<0>::Geometry Geometry;
\n-
246
\n-
247 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n-
248
\n-
249 void increment();
\n-
250
\n-
251 IndexVector vertexIndices() const;
\n-
252 int index() const;
\n-
253 CoordVector coords() const;
\n-
254
\n-
255 Geometry geometry () const;
\n-
256
\n-
257 private:
\n-
258 CoordVector global(const CoordVector &local) const;
\n-
259
\n-
260 protected:
\n-\n-
262 typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator;
\n-
263 constexpr static int nKuhnSimplices = 3;
\n-
264
\n-\n-
266
\n-\n-\n-\n-
270 };
\n-
\n-
271
\n-
272 template<int dimension, class CoordType>
\n-
\n-\n-
274 RefinementIteratorSpecial(int nIntervals, bool end)
\n-
275 : nIntervals_(nIntervals), kuhnIndex(0),
\n-
276 backend(BackendRefinement::eBegin(nIntervals_)),
\n-
277 backendEnd(BackendRefinement::eEnd(nIntervals_))
\n-
278 {
\n-
279 if (end)
\n-
280 kuhnIndex = nKuhnSimplices;
\n-
281 }
\n-
\n-
282
\n-
283 template<int dimension, class CoordType>
\n-
284 void
\n-
\n-\n-\n-
287 {
\n-
288 ++backend;
\n-
289 if (backend == backendEnd)
\n-
290 {
\n-
291 backend = BackendRefinement::eBegin(nIntervals_);
\n-
292 ++kuhnIndex;
\n-
293 }
\n-
294 }
\n-
\n-
295
\n-
296 template<int dimension, class CoordType>
\n-\n-
\n-\n-
299 vertexIndices() const
\n-
300 {
\n-
301 IndexVector indices = backend.vertexIndices();
\n-
302
\n-
303 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);
\n-
304 indices += base;
\n-
305
\n-
306 return indices;
\n-
307 }
\n-
\n-
308
\n-
309 template<int dimension, class CoordType>
\n-
310 int
\n-
\n-\n-
312 index() const
\n-
313 {
\n-
314 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index();
\n-
315 }
\n-
\n-
316
\n-
317 template<int dimension, class CoordType>
\n-\n-
\n-\n-
320 coords() const
\n-
321 {
\n-
322 return global(backend.coords());
\n-
323 }
\n-
\n-
324
\n-
325 template<int dimension, class CoordType>
\n-\n-
\n-\n-
328 {
\n-
329 const typename BackendIterator::Geometry &bgeo =
\n-
330 backend.geometry();
\n-
331 std::vector<CoordVector> corners(dimension+1);
\n-
332 for(int i = 0; i <= dimension; ++i)
\n-
333 corners[i] = global(bgeo.corner(i));
\n-
334
\n-
335 return Geometry(bgeo.type(), corners);
\n-
336 }
\n-
\n-
337
\n-
338 template<int dimension, class CoordType>
\n-\n-\n-
341 global(const CoordVector &local) const
\n-
342 {
\n-
343 // while the kuhnIndex runs from 0,1,2 the actual permutations we need are 0,2,3
\n-
344 return transformCoordinate(referenceToKuhn(local, getPermutation<dimension>((kuhnIndex+2)%4)));
\n-
345 }
\n-
346
\n-
347 // common
\n-
348 template<int dimension, class CoordType>
\n-
349 template<int codimension>
\n-
\n-
350 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n-
351 : public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n-
352 public RefinementIteratorSpecial<dimension, CoordType, codimension>
\n-
353 {
\n-
354 public:
\n-\n-
356 typedef SubEntityIterator This;
\n+
\n+
220 Jacobian jacobian([[maybe_unused]] const LocalCoordinate& local) const
\n+
221 {
\n+
222 return jacobianTransposed(local).transposed();
\n+
223 }
\n+
\n+
224
\n+
\n+\n+
227 {
\n+
228 return jacobianInverseTransposed(local).transposed();
\n+
229 }
\n+
\n+
230
\n+
\n+
234 Volume integrationElement([[maybe_unused]] const LocalCoordinate& local) const
\n+
235 {
\n+
236 return volume();
\n+
237 }
\n+
\n+
238
\n+
\n+\n+
241 {
\n+
242 GlobalCoordinate result;
\n+
243 if (dim==0)
\n+
244 result = lower_;
\n+
245 else {
\n+
246 // Since lower_==upper_ for unused coordinates, this always does the right thing
\n+
247 for (size_t i=0; i<coorddim; i++)
\n+
248 result[i] = CoordType(0.5) * (lower_[i] + upper_[i]);
\n+
249 }
\n+
250 return result;
\n+
251 }
\n+
\n+
252
\n+
\n+
254 int corners() const
\n+
255 {
\n+
256 return 1<<dim;
\n+
257 }
\n+
\n+
258
\n+
\n+\n+
261 {
\n+
262 GlobalCoordinate result;
\n+
263 if (dim == coorddim) { // fast case
\n+
264 for (size_t i=0; i<coorddim; i++)
\n+
265 result[i] = (k & (1<<i)) ? upper_[i] : lower_[i];
\n+
266 } else if (dim == 0) { // vertex
\n+
267 result = lower_; // rely on named return-type optimization
\n+
268 } else { // slow case
\n+
269 unsigned int mask = 1;
\n+
270
\n+
271 for (size_t i=0; i<coorddim; i++) {
\n+
272 if (not axes_[i])
\n+
273 result[i] = lower_[i];
\n+
274 else {
\n+
275 result[i] = (k & mask) ? upper_[i] : lower_[i];
\n+
276 mask = (mask<<1);
\n+
277 }
\n+
278 }
\n+
279 }
\n+
280
\n+
281
\n+
282 return result;
\n+
283 }
\n+
\n+
284
\n+
\n+\n+
287 {
\n+
288 ctype vol = 1;
\n+
289 if (dim == coorddim) { // fast case
\n+
290 for (size_t i=0; i<dim; i++)
\n+
291 vol *= upper_[i] - lower_[i];
\n+
292 // do nothing if dim == 0
\n+
293 } else if (dim != 0) { // slow case
\n+
294 for (size_t i=0; i<coorddim; i++)
\n+
295 if (axes_[i])
\n+
296 vol *= upper_[i] - lower_[i];
\n+
297 }
\n+
298 return vol;
\n+
299 }
\n+
\n+
300
\n+
\n+
302 bool affine() const
\n+
303 {
\n+
304 return true;
\n+
305 }
\n+
\n+
306
\n+
\n+
307 friend Dune::Transitional::ReferenceElement< ctype, Dim<dim> > referenceElement ( const AxisAlignedCubeGeometry & /* geometry */ )
\n+
308 {
\n+\n+
310 }
\n+
\n+
311
\n+
312 private:
\n+
313 // jacobianTransposed: fast case --> diagonal matrix
\n+
314 void jacobianTransposed ( DiagonalMatrix<ctype,dim> &jacobianTransposed ) const
\n+
315 {
\n+
316 for (size_t i=0; i<dim; i++)
\n+
317 jacobianTransposed.diagonal()[i] = upper_[i] - lower_[i];
\n+
318 }
\n+
319
\n+
320 // jacobianTransposed: slow case --> dense matrix
\n+
321 void jacobianTransposed ( FieldMatrix<ctype,dim,coorddim> &jacobianTransposed ) const
\n+
322 {
\n+
323 if (dim==0)
\n+
324 return;
\n+
325
\n+
326 size_t lc = 0;
\n+
327 for (size_t i=0; i<coorddim; i++)
\n+
328 if (axes_[i])
\n+
329 jacobianTransposed[lc++][i] = upper_[i] - lower_[i];
\n+
330 }
\n+
331
\n+
332 // jacobianInverseTransposed: fast case --> diagonal matrix
\n+
333 void jacobianInverseTransposed ( DiagonalMatrix<ctype,dim> &jacobianInverseTransposed ) const
\n+
334 {
\n+
335 for (size_t i=0; i<dim; i++)
\n+
336 jacobianInverseTransposed.diagonal()[i] = CoordType(1.0) / (upper_[i] - lower_[i]);
\n+
337 }
\n+
338
\n+
339 // jacobianInverseTransposed: slow case --> dense matrix
\n+
340 void jacobianInverseTransposed ( FieldMatrix<ctype,coorddim,dim> &jacobianInverseTransposed ) const
\n+
341 {
\n+
342 if (dim==0)
\n+
343 return;
\n+
344
\n+
345 size_t lc = 0;
\n+
346 for (size_t i=0; i<coorddim; i++)
\n+
347 if (axes_[i])
\n+
348 jacobianInverseTransposed[i][lc++] = CoordType(1.0) / (upper_[i] - lower_[i]);
\n+
349 }
\n+
350
\n+
351 Dune::FieldVector<ctype,coorddim> lower_;
\n+
352
\n+
353 Dune::FieldVector<ctype,coorddim> upper_;
\n+
354
\n+
355 std::bitset<coorddim> axes_;
\n+
356 };
\n+
\n
357
\n-
358 SubEntityIterator(int nIntervals, bool end = false);
\n-
359
\n-
360 bool equals(const This &other) const;
\n-
361 protected:
\n-
362 using RefinementIteratorSpecial<dimension, CoordType, codimension>::kuhnIndex;
\n-
363 using RefinementIteratorSpecial<dimension, CoordType, codimension>::backend;
\n-
364 };
\n-
\n-
365
\n-
366#ifndef DOXYGEN
\n-
367 template<int dimension, class CoordType>
\n-
368 template<int codimension>
\n-\n-
370 SubEntityIterator(int nIntervals, bool end)
\n-
371 : RefinementIteratorSpecial<dimension, CoordType, codimension>(nIntervals, end)
\n-
372 {}
\n-
373
\n-
374 template<int dimension, class CoordType>
\n-
375 template<int codimension>
\n-
376 bool
\n-\n-
378 equals(const This &other) const
\n-
379 {
\n-
380 return ((kuhnIndex == other.kuhnIndex) && (backend == other.backend));
\n-
381 }
\n-
382#endif
\n-
383
\n-
384 } // namespace PrismTriangulation
\n-
\n-
385 } // namespace RefinementImp
\n-
386
\n-
387 namespace RefinementImp
\n-
388 {
\n-
389 // ///////////////////////
\n-
390 //
\n-
391 // The refinement traits
\n-
392 //
\n-
393
\n-
394#ifndef DOXYGEN
\n-
395 template<unsigned topologyId, class CoordType, unsigned coerceToId>
\n-
396 struct Traits<
\n-
397 topologyId, CoordType, coerceToId, 3,
\n-
398 typename std::enable_if<
\n-
399 (GeometryTypes::prism.id() >> 1) ==
\n-
400 (topologyId >> 1) &&
\n-
401 (GeometryTypes::simplex(3).id() >> 1) ==
\n-
402 (coerceToId >> 1)
\n-
403 >::type>
\n-
404 {
\n-
405 typedef PrismTriangulation::RefinementImp<3, CoordType> Imp;
\n-
406 };
\n-
407#endif
\n-
408
\n-
409 } // namespace RefinementImp
\n-
410} // namespace Dune
\n-
411
\n-
412#endif // DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
\n-\n-
This file contains the Refinement implementation for simplices (triangles, tetrahedrons....
\n-
This file contains the parts independent of a particular Refinement implementation.
\n-
A unique label for each type of element that can occur in a grid.
\n+
358} // namespace Dune
\n+
359#endif
\n+\n+
A unique label for each type of element that can occur in a grid.
\n
Definition affinegeometry.hh:21
\n-
FieldVector< CoordType, dimension > transformCoordinate(FieldVector< CoordType, dimension > point)
Definition prismtriangulation.cc:50
\n-
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:336
\n-
FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from the reference simplex to some Kuhn simplex.
Definition simplex.cc:394
\n-
Static tag representing a codimension.
Definition dimension.hh:24
\n-
generic geometry implementation based on corner coordinates
Definition multilineargeometry.hh:181
\n-\n-
Implementation of the refinement of a prism into simplices.
Definition prismtriangulation.cc:67
\n-
static constexpr int dimension
Definition prismtriangulation.cc:69
\n-
CoordType ctype
Definition prismtriangulation.cc:71
\n-
static VertexIterator vEnd(int nIntervals)
Definition prismtriangulation.cc:122
\n-
FieldVector< int, dimension+1 > IndexVector
Definition prismtriangulation.cc:78
\n-
static ElementIterator eEnd(int nIntervals)
Definition prismtriangulation.cc:146
\n-
static int nVertices(int nIntervals)
Definition prismtriangulation.cc:106
\n-
FieldVector< CoordType, dimension > CoordVector
Definition prismtriangulation.cc:76
\n-
static int nElements(int nIntervals)
Definition prismtriangulation.cc:130
\n-
Codim< 0 >::SubEntityIterator ElementIterator
Definition prismtriangulation.cc:77
\n-
Codim< dimension >::SubEntityIterator VertexIterator
Definition prismtriangulation.cc:75
\n-
static ElementIterator eBegin(int nIntervals)
Definition prismtriangulation.cc:138
\n-
static VertexIterator vBegin(int nIntervals)
Definition prismtriangulation.cc:114
\n-\n-
Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition prismtriangulation.cc:100
\n-\n-
Refinement::template Codim< dimension >::Geometry Geometry
Definition prismtriangulation.cc:163
\n-
Refinement::BackendRefinement BackendRefinement
Definition prismtriangulation.cc:174
\n-
BackendRefinement::template Codim< dimension >::SubEntityIterator BackendIterator
Definition prismtriangulation.cc:175
\n-\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition prismtriangulation.cc:161
\n-\n-\n-\n-
Refinement::template Codim< 0 >::Geometry Geometry
Definition prismtriangulation.cc:245
\n-\n-
Refinement::IndexVector IndexVector
Definition prismtriangulation.cc:243
\n-
BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator
Definition prismtriangulation.cc:262
\n-\n-
Refinement::CoordVector CoordVector
Definition prismtriangulation.cc:244
\n-
RefinementImp< dimension, CoordType > Refinement
Definition prismtriangulation.cc:242
\n-\n-
Refinement::BackendRefinement BackendRefinement
Definition prismtriangulation.cc:261
\n-
SubEntityIterator This
Definition prismtriangulation.cc:356
\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition prismtriangulation.cc:355
\n-\n-\n+
static const ReferenceElement & cube()
get hypercube reference elements
Definition referenceelements.hh:210
\n+
A geometry implementation for axis-aligned hypercubes.
Definition axisalignedcubegeometry.hh:50
\n+
Volume volume() const
Return the element volume.
Definition axisalignedcubegeometry.hh:286
\n+
AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower, const Dune::FieldVector< ctype, coorddim > upper, const std::bitset< coorddim > &axes)
Constructor from a lower left and an upper right corner.
Definition axisalignedcubegeometry.hh:133
\n+
AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower, const Dune::FieldVector< ctype, coorddim > upper)
Constructor from a lower left and an upper right corner.
Definition axisalignedcubegeometry.hh:115
\n+
JacobianInverse jacobianInverse(const LocalCoordinate &local) const
Inverse Jacobian of the transformation from local to global coordinates.
Definition axisalignedcubegeometry.hh:226
\n+
JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate &local) const
Inverse Jacobian transposed of the transformation from local to global coordinates.
Definition axisalignedcubegeometry.hh:208
\n+
std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, dim, coorddim > >::type JacobianTransposed
Return type of jacobianTransposed.
Definition axisalignedcubegeometry.hh:81
\n+
AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower)
Constructor from a single point only.
Definition axisalignedcubegeometry.hh:150
\n+
static constexpr int mydimension
Dimension of the cube element.
Definition axisalignedcubegeometry.hh:56
\n+
static constexpr int coorddimension
Dimension of the world space that the cube element is embedded in.
Definition axisalignedcubegeometry.hh:59
\n+
GlobalCoordinate corner(int k) const
Return world coordinates of the k-th corner of the element.
Definition axisalignedcubegeometry.hh:260
\n+
ctype Volume
Type used for volume.
Definition axisalignedcubegeometry.hh:71
\n+
FieldVector< ctype, dim > LocalCoordinate
Type used for a vector of element coordinates.
Definition axisalignedcubegeometry.hh:65
\n+
friend Dune::Transitional::ReferenceElement< ctype, Dim< dim > > referenceElement(const AxisAlignedCubeGeometry &)
Definition axisalignedcubegeometry.hh:307
\n+
JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const
Jacobian transposed of the transformation from local to global coordinates.
Definition axisalignedcubegeometry.hh:196
\n+
FieldVector< ctype, coorddim > GlobalCoordinate
Type used for a vector of world coordinates.
Definition axisalignedcubegeometry.hh:68
\n+
LocalCoordinate local(const GlobalCoordinate &global) const
Map a point in global (world) coordinates to element coordinates.
Definition axisalignedcubegeometry.hh:180
\n+
CoordType ctype
Type used for single coordinate coefficients.
Definition axisalignedcubegeometry.hh:62
\n+
std::conditional_t< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, coorddim, dim > > Jacobian
Return type of jacobian.
Definition axisalignedcubegeometry.hh:100
\n+
GeometryType type() const
Type of the cube. Here: a hypercube of the correct dimension.
Definition axisalignedcubegeometry.hh:155
\n+
int corners() const
Return the number of corners of the element.
Definition axisalignedcubegeometry.hh:254
\n+
Jacobian jacobian(const LocalCoordinate &local) const
Jacobian of the transformation from local to global coordinates.
Definition axisalignedcubegeometry.hh:220
\n+
std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, coorddim, dim > >::type JacobianInverseTransposed
Return type of jacobianInverseTransposed.
Definition axisalignedcubegeometry.hh:91
\n+
Volume integrationElement(const LocalCoordinate &local) const
Return the integration element, i.e., the determinant term in the integral transformation formula.
Definition axisalignedcubegeometry.hh:234
\n+
GlobalCoordinate center() const
Return center of mass of the element.
Definition axisalignedcubegeometry.hh:240
\n+
bool affine() const
Return if the element is affine. Here: yes.
Definition axisalignedcubegeometry.hh:302
\n+
std::conditional_t< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, dim, coorddim > > JacobianInverse
Return type of jacobianInverse.
Definition axisalignedcubegeometry.hh:109
\n+
GlobalCoordinate global(const LocalCoordinate &local) const
Map a point in local (element) coordinates to world coordinates.
Definition axisalignedcubegeometry.hh:161
\n+
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,603 +1,429 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-prismtriangulation.cc\n+axisalignedcubegeometry.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC\n-_\b6#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC\n-7\n-8#include \n-9#include \n-10\n-11#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-12#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-13\n-14#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n-15#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n-16\n-17namespace _\bD_\bu_\bn_\be\n-18{\n-19 namespace RefinementImp\n-20 {\n-_\b2_\b6 namespace PrismTriangulation\n-27 {\n-28 // ////////////\n-29 //\n-30 // Utilities\n-31 //\n-32\n-33 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn;\n-34 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn;\n-35\n-36 // ////////////////////////////////////\n-37 //\n-38 // Refine a prism with simplices\n-39 //\n-40\n-41 // forward declaration of the iterator base\n-42 template\n-_\b4_\b3 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-44 /*\n-45 * The permutations 0,2 and 3 of the Kuhn-decomposition of a cube into\n-simplices form a prism.\n-46 * The resulting prism is not oriented the same as the reference prism and so\n-the Kuhn-coordinates\n-47 * have to be transformed using the method below.\n-48 */\n-49 template FieldVector\n-_\b5_\b0 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(FieldVector point)\n-51 {\n-52 FieldVector transform;\n-53 transform[0] = point[1];\n-54 transform[1] = 1 - point[0];\n-55 transform[2] = point[2];\n-56 return transform;\n-57 }\n-58\n-65 template\n-_\b6_\b6 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-67 {\n-68 public:\n-_\b6_\b9 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n-70\n-_\b7_\b1 typedef CoordType _\bc_\bt_\by_\bp_\be;\n+5\n+6#ifndef DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH\n+7#define DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH\n+8\n+13#include \n+14\n+15#include \n+16#include \n+17#include \n+18\n+19#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+21\n+22\n+23namespace _\bD_\bu_\bn_\be {\n+24\n+48 template \n+_\b4_\b9 class _\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+50 {\n+51\n+52\n+53 public:\n+54\n+_\b5_\b6 constexpr static int _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dim;\n+57\n+_\b5_\b9 constexpr static int _\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = coorddim;\n+60\n+_\b6_\b2 typedef CoordType _\bc_\bt_\by_\bp_\be;\n+63\n+_\b6_\b5 typedef FieldVector _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+66\n+_\b6_\b8 typedef FieldVector _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+69\n+_\b7_\b1 typedef _\bc_\bt_\by_\bp_\be _\bV_\bo_\bl_\bu_\bm_\be;\n 72\n-73 template\n-74 struct _\bC_\bo_\bd_\bi_\bm;\n-_\b7_\b5 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b7_\b6 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b7_\b7 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b7_\b8 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-79\n-80 static int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals);\n-81 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals);\n-82 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(int nIntervals);\n-83\n-84 static int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals);\n-85 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(int nIntervals);\n-_\b8_\b6 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(int nIntervals);\n-87\n-88 private:\n-89 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, 0>;\n-90 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>;\n-91\n-92 typedef _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-93 };\n-94\n-95 template\n-96 template\n-_\b9_\b7 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n-98 {\n-99 class SubEntityIterator;\n-_\b1_\b0_\b0 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-101 };\n-102\n-103 template\n-104 int\n-_\b1_\b0_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-106_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals)\n-107 {\n-108 return BackendRefinement::nVertices(nIntervals) * 3;\n-109 }\n+79 typedef typename std::conditional,\n+_\b8_\b1 FieldMatrix >_\b:_\b:_\bt_\by_\bp_\be _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n+82\n+89 typedef typename std::conditional,\n+_\b9_\b1 FieldMatrix >_\b:_\b:_\bt_\by_\bp_\be _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n+92\n+_\b1_\b0_\b0 using _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn = std::conditional_t, FieldMatrix >;\n+101\n+_\b1_\b0_\b9 using _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be = std::conditional_t, FieldMatrix >;\n 110\n-111 template\n-112 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b1_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-114_\b _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals)\n-115 {\n-116 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n-117 }\n-118\n-119 template\n-120 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b2_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-122_\b _\bv_\bE_\bn_\bd(int nIntervals)\n-123 {\n-124 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n-125 }\n-126\n-127 template\n-128 int\n-_\b1_\b2_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-130_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals)\n-131 {\n-132 return BackendRefinement::nElements(nIntervals) * 3;\n-133 }\n-134\n-135 template\n-136 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b3_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-138_\b _\be_\bB_\be_\bg_\bi_\bn(int nIntervals)\n+_\b1_\b1_\b5 _\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by(const Dune::FieldVector lower,\n+116 const Dune::FieldVector upper)\n+117 : lower_(lower),\n+118 upper_(upper),\n+119 axes_()\n+120 {\n+121 static_assert(dim==coorddim, \"Use this constructor only if\n+dim==coorddim!\");\n+122 // all 'true', but is never actually used\n+123 axes_ = (1< lower,\n+134 const Dune::FieldVector upper,\n+135 const std::bitset& axes)\n+136 : lower_(lower),\n+137 upper_(upper),\n+138 axes_(axes)\n 139 {\n-140 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n-141 }\n-142\n-143 template\n-144 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b4_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-146_\b _\be_\bE_\bn_\bd(int nIntervals)\n-147 {\n-148 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n-149 }\n-150\n-151 // //////////////\n-152 //\n-153 // The iterator\n-154 //\n-155\n-156 // vertices\n-157 template\n-_\b1_\b5_\b8 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-159 {\n-160 public:\n-_\b1_\b6_\b1 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b1_\b6_\b2 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b1_\b6_\b3 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-164\n-165 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n-166\n-167 void increment();\n-168\n-169 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-170 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry () const;\n-171\n-172 int index() const;\n-173 protected:\n-_\b1_\b7_\b4 typedef typename Refinement::BackendRefinement _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b1_\b7_\b5 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b1_\b7_\b6 constexpr static int nKuhnSimplices = 3;\n-177\n-_\b1_\b7_\b8 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n-179\n-_\b1_\b8_\b0 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n-_\b1_\b8_\b1 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n-_\b1_\b8_\b2 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n-183 };\n-184\n-185 template\n-_\b1_\b8_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-187_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n-188 : nIntervals_(nIntervals), kuhnIndex(0),\n-189 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vBegin(nIntervals_)),\n-190 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vEnd(nIntervals_))\n-191 {\n-192 if (end)\n-193 kuhnIndex = nKuhnSimplices;\n-194 }\n-195\n-196 template\n-197 void\n-_\b1_\b9_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-199_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n-200 {\n-201 ++backend;\n-202 if (backend == backendEnd)\n-203 {\n-204 backend = BackendRefinement::vBegin(nIntervals_);\n-205 ++kuhnIndex;\n-206 }\n-207 }\n-208\n-209 template\n-210 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b2_\b1_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-212_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-213 {\n-214 // while the kuhnIndex runs from 0,1,2 the actual permutations we need are\n-0,2,3\n-215 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(backend.coords(),\n-216 getPermutation((kuhnIndex + 2) % 4)));\n+140 assert(axes.count()==dim);\n+141 for (size_t i=0; i lower)\n+151 : lower_(lower)\n+152 {}\n+153\n+_\b1_\b5_\b5 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bt_\by_\bp_\be() const\n+156 {\n+157 return GeometryTypes::cube(dim);\n+158 }\n+159\n+_\b1_\b6_\b1 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bg_\bl_\bo_\bb_\ba_\bl(const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be& _\bl_\bo_\bc_\ba_\bl) const\n+162 {\n+163 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be result;\n+164 if (dim == coorddim) { // fast case\n+165 for (size_t i=0; i\n-220 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-_\b2_\b2_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by ()\n+_\b2_\b2_\b0 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be& _\bl_\bo_\bc_\ba_\bl) const\n+221 {\n+222 return _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd(_\bl_\bo_\bc_\ba_\bl).transposed();\n+223 }\n+224\n+_\b2_\b2_\b6 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be&\n+_\bl_\bo_\bc_\ba_\bl) const\n+227 {\n+228 return _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd(_\bl_\bo_\bc_\ba_\bl).transposed();\n+229 }\n+230\n+_\b2_\b3_\b4 _\bV_\bo_\bl_\bu_\bm_\be _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be& _\bl_\bo_\bc_\ba_\bl)\n const\n-222 {\n-223 std::vector corners(1);\n-224 corners[0] = _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(backend.coords(),\n-225 getPermutation((kuhnIndex + 2) % 4)));\n-226 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(GeometryTypes::vertex, corners);\n-227 }\n-228\n-229 template\n-230 int\n-_\b2_\b3_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-232_\b _\bi_\bn_\bd_\be_\bx() const\n-233 {\n-234 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index\n-();\n-235 }\n-236\n-237 // elements\n-238 template\n-_\b2_\b3_\b9 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-240 {\n-241 public:\n-_\b2_\b4_\b2 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b4_\b3 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-_\b2_\b4_\b4 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b2_\b4_\b5 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-246\n-247 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n-248\n-249 void increment();\n-250\n-251 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n-252 int index() const;\n-253 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-254\n-255 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry () const;\n-256\n-257 private:\n-258 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br global(const _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br &local) const;\n-259\n-260 protected:\n-_\b2_\b6_\b1 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b6_\b2 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b2_\b6_\b3 constexpr static int nKuhnSimplices = 3;\n-264\n-_\b2_\b6_\b5 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n-266\n-_\b2_\b6_\b7 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n-_\b2_\b6_\b8 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n-_\b2_\b6_\b9 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n-270 };\n-271\n-272 template\n-_\b2_\b7_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-274_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n-275 : nIntervals_(nIntervals), kuhnIndex(0),\n-276 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eBegin(nIntervals_)),\n-277 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eEnd(nIntervals_))\n-278 {\n-279 if (end)\n-280 kuhnIndex = nKuhnSimplices;\n-281 }\n-282\n-283 template\n-284 void\n-_\b2_\b8_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-286_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+235 {\n+236 return _\bv_\bo_\bl_\bu_\bm_\be();\n+237 }\n+238\n+_\b2_\b4_\b0 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bc_\be_\bn_\bt_\be_\br() const\n+241 {\n+242 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be result;\n+243 if (dim==0)\n+244 result = lower_;\n+245 else {\n+246 // Since lower_==upper_ for unused coordinates, this always does the right\n+thing\n+247 for (size_t i=0; i\n-297 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-_\b2_\b9_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-299_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n-300 {\n-301 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br indices = backend.vertexIndices();\n-302\n-303 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);\n-304 indices += base;\n-305\n-306 return indices;\n-307 }\n-308\n-309 template\n-310 int\n-_\b3_\b1_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-312_\b _\bi_\bn_\bd_\be_\bx() const\n-313 {\n-314 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index\n-();\n-315 }\n-316\n-317 template\n-318 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b3_\b1_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-320_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-321 {\n-322 return global(backend.coords());\n-323 }\n-324\n-325 template\n-326 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-_\b3_\b2_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by () const\n-328 {\n-329 const typename BackendIterator::Geometry &bgeo =\n-330 backend.geometry();\n-331 std::vector corners(dimension+1);\n-332 for(int i = 0; i <= dimension; ++i)\n-333 corners[i] = global(bgeo.corner(i));\n-334\n-335 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(bgeo.type(), corners);\n-336 }\n-337\n-338 template\n-339 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-340 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-341_\b _\bg_\bl_\bo_\bb_\ba_\bl(const CoordVector &local) const\n-342 {\n-343 // while the kuhnIndex runs from 0,1,2 the actual permutations we need are\n-0,2,3\n-344 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(local, getPermutation\n-((kuhnIndex+2)%4)));\n-345 }\n-346\n-347 // common\n-348 template\n-349 template\n-_\b3_\b5_\b0 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n-SubEntityIterator\n-351 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n-352 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-353 {\n-354 public:\n-_\b3_\b5_\b5 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b3_\b5_\b6 typedef SubEntityIterator _\bT_\bh_\bi_\bs;\n+288 _\bc_\bt_\by_\bp_\be vol = 1;\n+289 if (dim == coorddim) { // fast case\n+290 for (size_t i=0; i >\n+_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt ( const _\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by & /* geometry */ )\n+308 {\n+309 return _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b _\b>_\b:_\b:_\bc_\bu_\bb_\be();\n+310 }\n+311\n+312 private:\n+313 // jacobianTransposed: fast case --> diagonal matrix\n+314 void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( DiagonalMatrix &_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd )\n+const\n+315 {\n+316 for (size_t i=0; i dense matrix\n+321 void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( FieldMatrix\n+&_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ) const\n+322 {\n+323 if (dim==0)\n+324 return;\n+325\n+326 size_t lc = 0;\n+327 for (size_t i=0; i diagonal matrix\n+333 void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( DiagonalMatrix\n+&_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ) const\n+334 {\n+335 for (size_t i=0; i dense matrix\n+340 void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( FieldMatrix\n+&_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ) const\n+341 {\n+342 if (dim==0)\n+343 return;\n+344\n+345 size_t lc = 0;\n+346 for (size_t i=0; i lower_;\n+352\n+353 Dune::FieldVector upper_;\n+354\n+355 std::bitset axes_;\n+356 };\n 357\n-_\b3_\b5_\b8 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end = false);\n-359\n-_\b3_\b6_\b0 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n-361 protected:\n-362 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n-kuhnIndex;\n-363 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n-backend;\n-364 };\n-365\n-366#ifndef DOXYGEN\n-367 template\n-368 template\n-369 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n-370_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end)\n-371 : _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(nIntervals,\n-end)\n-372 {}\n-373\n-374 template\n-375 template\n-376 bool\n-377 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n-378_\b _\be_\bq_\bu_\ba_\bl_\bs(const This &other) const\n-379 {\n-380 return ((kuhnIndex == other.kuhnIndex) && (backend == other.backend));\n-381 }\n-382#endif\n-383\n-384 } // namespace PrismTriangulation\n-385 } // namespace RefinementImp\n-386\n-387 namespace RefinementImp\n-388 {\n-389 // ///////////////////////\n-390 //\n-391 // The refinement traits\n-392 //\n-393\n-394#ifndef DOXYGEN\n-395 template\n-396 struct Traits<\n-397 topologyId, CoordType, coerceToId, 3,\n-398 typename std::enable_if<\n-399 (GeometryTypes::prism.id() >> 1) ==\n-400 (topologyId >> 1) &&\n-401 (GeometryTypes::simplex(3).id() >> 1) ==\n-402 (coerceToId >> 1)\n-403 >::type>\n-404 {\n-405 typedef PrismTriangulation::RefinementImp<3, CoordType> Imp;\n-406 };\n-407#endif\n-408\n-409 } // namespace RefinementImp\n-410} // namespace Dune\n-411\n-412#endif // DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC\n+358} // namespace Dune\n+359#endif\n _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n-_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\n-This file contains the Refinement implementation for simplices (triangles,\n-tetrahedrons....\n-_\bb_\ba_\bs_\be_\b._\bc_\bc\n-This file contains the parts independent of a particular Refinement\n-implementation.\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-FieldVector< CoordType, dimension > transformCoordinate(FieldVector< CoordType,\n-dimension > point)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn\n-FieldVector< int, n > getPermutation(int m)\n-Calculate permutation from it's index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:336\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn\n-FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType,\n-dimension > point, const FieldVector< int, dimension > &kuhn)\n-Map from the reference simplex to some Kuhn simplex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:394\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-Static tag representing a codimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-generic geometry implementation based on corner coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:43\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-Implementation of the refinement of a prism into simplices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static constexpr int dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:69\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bc_\bt_\by_\bp_\be\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bc_\bu_\bb_\be\n+static const ReferenceElement & cube()\n+get hypercube reference elements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:210\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+A geometry implementation for axis-aligned hypercubes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n+Volume volume() const\n+Return the element volume.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:286\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower, const\n+Dune::FieldVector< ctype, coorddim > upper, const std::bitset< coorddim >\n+&axes)\n+Constructor from a lower left and an upper right corner.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:133\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower, const\n+Dune::FieldVector< ctype, coorddim > upper)\n+Constructor from a lower left and an upper right corner.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:115\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n+JacobianInverse jacobianInverse(const LocalCoordinate &local) const\n+Inverse Jacobian of the transformation from local to global coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:226\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n+JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate\n+&local) const\n+Inverse Jacobian transposed of the transformation from local to global\n+coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:208\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n+std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix<\n+ctype, dim, coorddim > >::type JacobianTransposed\n+Return type of jacobianTransposed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:81\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower)\n+Constructor from a single point only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:150\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static constexpr int mydimension\n+Dimension of the cube element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:56\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static constexpr int coorddimension\n+Dimension of the world space that the cube element is embedded in.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:59\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br\n+GlobalCoordinate corner(int k) const\n+Return world coordinates of the k-th corner of the element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:260\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bV_\bo_\bl_\bu_\bm_\be\n+ctype Volume\n+Type used for volume.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:71\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+FieldVector< ctype, dim > LocalCoordinate\n+Type used for a vector of element coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:65\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+friend Dune::Transitional::ReferenceElement< ctype, Dim< dim > >\n+referenceElement(const AxisAlignedCubeGeometry &)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:307\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n+JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const\n+Jacobian transposed of the transformation from local to global coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:196\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+FieldVector< ctype, coorddim > GlobalCoordinate\n+Type used for a vector of world coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bl_\bo_\bc_\ba_\bl\n+LocalCoordinate local(const GlobalCoordinate &global) const\n+Map a point in global (world) coordinates to element coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:180\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bt_\by_\bp_\be\n CoordType ctype\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:71\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n-static VertexIterator vEnd(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:122\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< int, dimension+1 > IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n-static ElementIterator eEnd(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:146\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-static int nVertices(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< CoordType, dimension > CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:76\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-static int nElements(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:130\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< 0 >::SubEntityIterator ElementIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:77\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< dimension >::SubEntityIterator VertexIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n-static ElementIterator eBegin(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:138\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n-static VertexIterator vBegin(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:114\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:98\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension >\n-Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n-int nIntervals_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:178\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Refinement::template Codim< dimension >::Geometry Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:163\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-Refinement::BackendRefinement BackendRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:174\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-BackendRefinement::template Codim< dimension >::SubEntityIterator\n-BackendIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:175\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:162\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n-const BackendIterator backendEnd\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:182\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:161\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n-BackendIterator backend\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n-int kuhnIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:180\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n-int nIntervals_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:265\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Refinement::template Codim< 0 >::Geometry Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:245\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n-BackendIterator backend\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:268\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::IndexVector IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:243\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:262\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n-int kuhnIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:267\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:244\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:242\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n-const BackendIterator backendEnd\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:269\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n-_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-Refinement::BackendRefinement BackendRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:261\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\bT_\bh_\bi_\bs\n-SubEntityIterator This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:356\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other) const\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:355\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SubEntityIterator(int nIntervals, bool end=false)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:433\n+Type used for single coordinate coefficients.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+std::conditional_t< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix<\n+ctype, coorddim, dim > > Jacobian\n+Return type of jacobian.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:100\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bt_\by_\bp_\be\n+GeometryType type() const\n+Type of the cube. Here: a hypercube of the correct dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:155\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br_\bs\n+int corners() const\n+Return the number of corners of the element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:254\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+Jacobian jacobian(const LocalCoordinate &local) const\n+Jacobian of the transformation from local to global coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:220\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n+std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix<\n+ctype, coorddim, dim > >::type JacobianInverseTransposed\n+Return type of jacobianInverseTransposed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:91\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt\n+Volume integrationElement(const LocalCoordinate &local) const\n+Return the integration element, i.e., the determinant term in the integral\n+transformation formula.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:234\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\be_\bn_\bt_\be_\br\n+GlobalCoordinate center() const\n+Return center of mass of the element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:240\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be\n+bool affine() const\n+Return if the element is affine. Here: yes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:302\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n+std::conditional_t< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix<\n+ctype, dim, coorddim > > JacobianInverse\n+Return type of jacobianInverse.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:109\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl\n+GlobalCoordinate global(const LocalCoordinate &local) const\n+Map a point in local (element) coordinates to world coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:161\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n+Unique label for each type of entities that can occur in DUNE grids.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00215.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00215.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: pyramidtriangulation.cc File Reference\n+dune-geometry: referenceelement.hh File Reference\n \n \n \n \n \n \n \n@@ -65,86 +65,44 @@\n
\n \n \n \n \n \n \n
\n \n-
pyramidtriangulation.cc File Reference
\n+Namespaces
\n+
referenceelement.hh File Reference
\n \n
\n-
#include <dune/common/fvector.hh>
\n-#include <dune/common/typetraits.hh>
\n-#include <dune/geometry/referenceelements.hh>
\n-#include <dune/geometry/type.hh>
\n-#include "base.cc"
\n-#include "simplex.cc"
\n+
#include <dune/geometry/type.hh>
\n
\n

Go to the source code of this file.

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

\n Classes

class  Dune::RefinementImp::PyramidTriangulation::RefinementImp< dimension_, CoordType >
 Implementation of the refinement of a pyramid into simplices. More...
class  Dune::Geo::ReferenceElement< Implementation >
 This class provides access to geometric and topological properties of a reference element. More...
 
struct  Dune::RefinementImp::PyramidTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::RefinementImp::PyramidTriangulation::RefinementIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::RefinementImp::PyramidTriangulation::RefinementIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::RefinementImp::PyramidTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
struct  Dune::Geo::ReferenceElement< Implementation >::Codim< codim >
 Collection of types depending on the codimension. More...
 
\n \n \n \n-\n-\n+\n \n-\n-\n-\n-

\n Namespaces

namespace  Dune
 
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
namespace  Dune::Geo
 
namespace  Dune::RefinementImp::PyramidTriangulation
 This namespace contains the Refinement implementation for triangulating pyramids (GeometryType::pyramid -> GeometryType::simplex)
 
\n-\n-\n-\n-

\n-Macros

#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
 
\n-\n-\n-\n-\n

\n-Functions

template<int dimension, class CoordType >
FieldVector< CoordType, dimension > Dune::RefinementImp::PyramidTriangulation::transformCoordinate (FieldVector< CoordType, dimension > point)
 
\n-

Macro Definition Documentation

\n-\n-

◆ DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC

\n-\n-
\n-
\n- \n- \n- \n- \n-
#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
\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,59 +1,25 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-pyramidtriangulation.cc File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+referenceelement.hh File Reference\n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n-#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\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:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n-\u00a0 Implementation of the refinement of a pyramid into simplices. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\b>\n+\u00a0 This class provides access to geometric and topological properties of\n+ a reference element. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n- _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\b _\b>\n+\u00a0 Collection of types depending on the codimension. _\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:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn\n- This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for\n-\u00a0 triangulating pyramids (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bp_\by_\br_\ba_\bm_\bi_\bd -> _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:\n- _\bs_\bi_\bm_\bp_\bl_\be_\bx)\n-\u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bP_\bY_\bR_\bA_\bM_\bI_\bD_\bT_\bR_\bI_\bA_\bN_\bG_\bU_\bL_\bA_\bT_\bI_\bO_\bN_\b__\bC_\bC\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-FieldVector< CoordType, dimension >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:\n- _\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n- (FieldVector< CoordType, dimension >\n- point)\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo\n \u00a0\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_P\bPY\bYR\bRA\bAM\bMI\bID\bDT\bTR\bRI\bIA\bAN\bNG\bGU\bUL\bLA\bAT\bTI\bIO\bON\bN_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n-#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00215_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00215_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: pyramidtriangulation.cc Source File\n+dune-geometry: referenceelement.hh Source File\n \n \n \n \n \n \n \n@@ -70,523 +70,264 @@\n
\n \n \n \n \n \n \n
\n-
pyramidtriangulation.cc
\n+
referenceelement.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
\n-
6#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
\n+
5#ifndef DUNE_GEOMETRY_REFERENCEELEMENT_HH
\n+
6#define DUNE_GEOMETRY_REFERENCEELEMENT_HH
\n
7
\n-
8#include <dune/common/fvector.hh>
\n-
9#include <dune/common/typetraits.hh>
\n-
10
\n-\n-
12#include <dune/geometry/type.hh>
\n-
13
\n-
14#include "base.cc"
\n-
15#include "simplex.cc"
\n-
16
\n-
17namespace Dune
\n-
18{
\n-
19 namespace RefinementImp
\n-
20 {
\n-
\n-
26 namespace PyramidTriangulation
\n-
27 {
\n-
28 // ////////////
\n-
29 //
\n-
30 // Utilities
\n-
31 //
\n-
32
\n-\n-\n-
35
\n-
36 // ////////////////////////////////////
\n-
37 //
\n-
38 // Refine a pyramid with simplices
\n-
39 //
\n-
40
\n-
41 // forward declaration of the iterator base
\n-
42 template<int dimension, class CoordType, int codimension>
\n-\n-
44
\n-
45 /*
\n-
46 * The permutations 0 and 1 of the Kuhn-decomposition of a cube into simplices form a pyramid.
\n-
47 * The resulting pyramid is not oriented the same as the reference pyramid and so the Kuhn-coordinates
\n-
48 * have to be transformed using the method below.
\n-
49 */
\n-
50 template<int dimension, class CoordType> FieldVector<CoordType, dimension>
\n-
\n-
51 transformCoordinate( FieldVector<CoordType, dimension> point)
\n-
52 {
\n-
53 FieldVector<CoordType, dimension> transform;
\n-
54 transform[0]=1-point[0];
\n-
55 transform[1]=1-point[1];
\n-
56 transform[2]=point[2];
\n-
57 return transform;
\n-
58 }
\n-
\n-
59
\n-
66 template<int dimension_, class CoordType>
\n-
\n-\n-
68 {
\n-
69 public:
\n-
70 constexpr static int dimension = dimension_;
\n+\n+
9
\n+
10namespace Dune {
\n+
11 namespace Geo {
\n+
12
\n+
13 namespace Impl {
\n+
14
\n+
15 // forward declaration for friend declaration
\n+
16 template<typename ctype, int dim>
\n+
17 class ReferenceElementContainer;
\n+
18
\n+
19 }
\n+
20
\n+
21 // forward declaration for constructing default reference element type
\n+
22 template<typename ctype, int dim>
\n+
23 class ReferenceElementImplementation;
\n+
24
\n+
25 // forward declaration for backwards compatibility conversion
\n+
26 template<typename ctype, int dim>
\n+
27 struct ReferenceElements;
\n+
28
\n+
29 // ReferenceElement
\n+
30 // ----------------
\n+
31
\n+
50 template<typename Implementation>
\n+
\n+\n+
52 {
\n+
53
\n+
54 public:
\n+
55
\n+
56#ifndef DOXYGEN
\n+
57
\n+
59 template<int codim>
\n+
60 using Codim = typename Implementation::template Codim<codim>;
\n+
61
\n+
62#else
\n+
63
\n+
65 template< int codim >
\n+
\n+
66 struct Codim
\n+
67 {
\n+
69 using Geometry = implementation-defined;
\n+
70 };
\n+
\n
71
\n-
72 typedef CoordType ctype;
\n+
72#endif // DOXYGEN
\n
73
\n-
74 template<int codimension>
\n-
75 struct Codim;
\n-\n-
77 typedef FieldVector<CoordType, dimension> CoordVector;
\n-\n-
79 typedef FieldVector<int, dimension+1> IndexVector;
\n-
80
\n-
81 static int nVertices(int nIntervals);
\n-
82 static VertexIterator vBegin(int nIntervals);
\n-
83 static VertexIterator vEnd(int nIntervals);
\n-
84
\n-
85 static int nElements(int nIntervals);
\n-
86 static ElementIterator eBegin(int nIntervals);
\n-
87 static ElementIterator eEnd(int nIntervals);
\n+
75 using ctype = typename Implementation::ctype;
\n+
76
\n+\n+
79
\n+
81 using Coordinate = typename Implementation::Coordinate;
\n+
82
\n+
84 typedef ctype Volume;
\n+
85
\n+
87 static constexpr int dimension = Implementation::dimension;
\n
88
\n-
89 private:
\n-
90 friend class RefinementIteratorSpecial<dimension, CoordType, 0>;
\n-
91 friend class RefinementIteratorSpecial<dimension, CoordType, dimension>;
\n-
92
\n-\n-
94
\n-
95 constexpr static int nKuhnSimplices = 2;
\n-
96 };
\n-
\n-
97
\n-
98 template<int dimension, class CoordType>
\n-
99 template<int codimension>
\n-
\n-
100 struct RefinementImp<dimension, CoordType>::Codim
\n-
101 {
\n-
102 class SubEntityIterator;
\n-\n-
104 };
\n-
\n-
105
\n-
106 template<int dimension, class CoordType>
\n-
107 int
\n-
\n-\n-
109 nVertices(int nIntervals)
\n-
110 {
\n-
111 return BackendRefinement::nVertices(nIntervals) * nKuhnSimplices;
\n-
112 }
\n-
\n-
113
\n-
114 template<int dimension, class CoordType>
\n-\n-
\n-\n-
117 vBegin(int nIntervals)
\n-
118 {
\n-
119 return VertexIterator(nIntervals);
\n-
120 }
\n-
\n-
121
\n-
122 template<int dimension, class CoordType>
\n-\n-
\n-\n-
125 vEnd(int nIntervals)
\n-
126 {
\n-
127 return VertexIterator(nIntervals, true);
\n-
128 }
\n-
\n-
129
\n-
130 template<int dimension, class CoordType>
\n-
131 int
\n-
\n-\n-
133 nElements(int nIntervals)
\n-
134 {
\n-
135 return BackendRefinement::nElements(nIntervals) * nKuhnSimplices;
\n-
136 }
\n-
\n-
137
\n-
138 template<int dimension, class CoordType>
\n-\n-
\n-\n-
141 eBegin(int nIntervals)
\n-
142 {
\n-
143 return ElementIterator(nIntervals);
\n-
144 }
\n-
\n-
145
\n-
146 template<int dimension, class CoordType>
\n-\n-
\n-\n-
149 eEnd(int nIntervals)
\n-
150 {
\n-
151 return ElementIterator(nIntervals, true);
\n-
152 }
\n-
\n-
153
\n-
154 // //////////////
\n-
155 //
\n-
156 // The iterator
\n-
157 //
\n+
89
\n+
\n+
94 int size(int c) const
\n+
95 {
\n+
96 return _impl->size(c);
\n+
97 }
\n+
\n+
98
\n+
99
\n+
\n+
111 int size(int i, int c, int cc) const
\n+
112 {
\n+
113 return _impl->size(i,c,cc);
\n+
114 }
\n+
\n+
115
\n+
116
\n+
\n+
130 int subEntity(int i, int c, int ii, int cc) const
\n+
131 {
\n+
132 return _impl->subEntity(i,c,ii,cc);
\n+
133 }
\n+
\n+
134
\n+
\n+
153 auto subEntities ( int i, int c, int cc ) const
\n+
154 {
\n+
155 return _impl->subEntities(i,c,cc);
\n+
156 }
\n+
\n+
157
\n
158
\n-
159 // vertices
\n-
160 template<int dimension, class CoordType>
\n-
\n-
161 class RefinementIteratorSpecial<dimension, CoordType, dimension>
\n-
162 {
\n-
163 public:
\n-\n-
165 typedef typename Refinement::CoordVector CoordVector;
\n-
166 typedef typename Refinement::template Codim<dimension>::Geometry Geometry;
\n-
167
\n-
168 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n-
169
\n-
170 void increment();
\n-
171
\n-
172 CoordVector coords() const;
\n-
173
\n-
174 Geometry geometry() const;
\n+
\n+
171 decltype(auto) type(int i, int c) const
\n+
172 {
\n+
173 return _impl->type(i,c);
\n+
174 }
\n+
\n
175
\n-
176 int index() const;
\n-
177 protected:
\n-
178 typedef typename Refinement::BackendRefinement BackendRefinement;
\n-
179 typedef typename BackendRefinement::template Codim<dimension>::SubEntityIterator BackendIterator;
\n-
180 constexpr static int nKuhnSimplices = 2;
\n-
181
\n-\n-
183
\n-\n-\n-\n-
187 };
\n+
176
\n+
\n+
184 decltype(auto) type() const
\n+
185 {
\n+
186 return _impl->type();
\n+
187 }
\n
\n
188
\n-
189 template<int dimension, class CoordType>
\n-
\n-\n-
191 RefinementIteratorSpecial(int nIntervals, bool end)
\n-
192 : nIntervals_(nIntervals), kuhnIndex(0),
\n-
193 backend(BackendRefinement::vBegin(nIntervals_)),
\n-
194 backendEnd(BackendRefinement::vEnd(nIntervals_))
\n-
195 {
\n-
196 if (end)
\n-
197 kuhnIndex = nKuhnSimplices;
\n-
198 }
\n-
\n-
199
\n-
200 template<int dimension, class CoordType>
\n-
201 void
\n-
\n-\n-\n+
189
\n+
\n+
203 decltype(auto) position(int i, int c) const
\n
204 {
\n-
205 ++backend;
\n-
206 if(backend == backendEnd)
\n-
207 {
\n-
208 backend = BackendRefinement::vBegin(nIntervals_);
\n-
209 ++kuhnIndex;
\n-
210 }
\n-
211 }
\n-
\n-
212
\n-
213 template<int dimension, class CoordType>
\n-\n-
\n-\n-
216 coords() const
\n+
205 return _impl->position(i,c);
\n+
206 }
\n+
\n+
207
\n+
208
\n+
\n+
216 bool checkInside(const Coordinate& local) const
\n
217 {
\n-
218 return transformCoordinate(referenceToKuhn(backend.coords(),
\n-
219 getPermutation<dimension>(kuhnIndex)));
\n-
220 }
\n+
218 return _impl->checkInside(local);
\n+
219 }
\n
\n+
220
\n
221
\n-
222 template<int dimension, class CoordType>
\n-\n-
\n-\n-
225 {
\n-
226 std::vector<CoordVector> corners(1);
\n-
227 corners[0] = referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
\n-
228 return Geometry(GeometryTypes::vertex, corners);
\n-
229 }
\n-
\n-
230
\n-
231 template<int dimension, class CoordType>
\n-
232 int
\n-
\n-\n-
234 index() const
\n+
233 template<int codim>
\n+
\n+
234 typename Codim<codim>::Geometry geometry(int i) const
\n
235 {
\n-
236 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index();
\n+
236 return _impl->template geometry<codim>(i);
\n
237 }
\n
\n
238
\n-
239 // elements
\n-
240 template<int dimension, class CoordType>
\n-
\n-
241 class RefinementIteratorSpecial<dimension, CoordType, 0>
\n-
242 {
\n-
243 public:
\n-\n-\n-\n-
247 typedef typename Refinement::template Codim<0>::Geometry Geometry;
\n-
248
\n-
249 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n-
250
\n-
251 void increment();
\n-
252
\n-
253 IndexVector vertexIndices() const;
\n-
254 int index() const;
\n-
255 CoordVector coords() const;
\n-
256
\n-
257 Geometry geometry() const;
\n-
258
\n-
259 private:
\n-
260 CoordVector global(const CoordVector &local) const;
\n-
261
\n-
262 protected:
\n-\n-
264 typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator;
\n-
265 constexpr static int nKuhnSimplices = 2;
\n-
266
\n-\n-
268
\n-\n-\n-\n-
272 };
\n-
\n-
273
\n-
274 template<int dimension, class CoordType>
\n-
\n-\n-
276 RefinementIteratorSpecial(int nIntervals, bool end)
\n-
277 : nIntervals_(nIntervals), kuhnIndex(0),
\n-
278 backend(BackendRefinement::eBegin(nIntervals_)),
\n-
279 backendEnd(BackendRefinement::eEnd(nIntervals_))
\n-
280 {
\n-
281 if (end)
\n-
282 kuhnIndex = nKuhnSimplices;
\n+
239
\n+
\n+\n+
242 {
\n+
243 return _impl->volume();
\n+
244 }
\n+
\n+
245
\n+
246
\n+
\n+
258 decltype(auto) integrationOuterNormal(int face) const
\n+
259 {
\n+
260 return _impl->integrationOuterNormal(face);
\n+
261 }
\n+
\n+
262
\n+
263
\n+
\n+\n+
272 : _impl(nullptr)
\n+
273 {}
\n+
\n+
274
\n+
\n+
280 const Implementation& impl() const
\n+
281 {
\n+
282 return *_impl;
\n
283 }
\n
\n
284
\n-
285 template<int dimension, class CoordType>
\n-
286 void
\n-
\n-\n-\n-
289 {
\n-
290 ++backend;
\n-
291 if (backend == backendEnd)
\n-
292 {
\n-
293 backend = BackendRefinement::eBegin(nIntervals_);
\n-
294 ++kuhnIndex;
\n-
295 }
\n-
296 }
\n-
\n-
297
\n-
298 template<int dimension, class CoordType>
\n-\n-
\n-\n-
301 vertexIndices() const
\n-
302 {
\n-
303 IndexVector indices = backend.vertexIndices();
\n+
\n+
286 bool operator==(const ReferenceElement& r) const
\n+
287 {
\n+
288 return _impl == r._impl;
\n+
289 }
\n+
\n+
290
\n+
\n+
292 bool operator!=(const ReferenceElement& r) const
\n+
293 {
\n+
294 return not (*this == r);
\n+
295 }
\n+
\n+
296
\n+
\n+
298 friend std::size_t hash_value(const ReferenceElement& r)
\n+
299 {
\n+
300 return reinterpret_cast<std::size_t>(r._impl);
\n+
301 }
\n+
\n+
302
\n+
303 private:
\n
304
\n-
305 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);
\n-
306 indices += base;
\n+
305 // The implementation must be a friend to construct a wrapper around itself.
\n+
306 friend Implementation;
\n
307
\n-
308 return indices;
\n-
309 }
\n-
\n+
308 // The reference container is a friend to be able to call setImplementation.
\n+
309 friend class Impl::ReferenceElementContainer<ctype,dimension>;
\n
310
\n-
311 template<int dimension, class CoordType>
\n-
312 int
\n-
\n-\n-
314 index() const
\n-
315 {
\n-
316 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index();
\n-
317 }
\n-
\n-
318
\n-
319 template<int dimension, class CoordType>
\n-\n-
\n-\n-
322 coords() const
\n-
323 {
\n-
324 return global(backend.coords());
\n-
325 }
\n+
311 // Constructor for wrapping an implementation reference (required internally by the default implementation)
\n+
312 ReferenceElement(const Implementation& impl)
\n+
313 : _impl(&impl)
\n+
314 {}
\n+
315
\n+
316 void setImplementation(const Implementation& impl)
\n+
317 {
\n+
318 _impl = &impl;
\n+
319 }
\n+
320
\n+
321 const Implementation* _impl;
\n+
322
\n+
323 };
\n
\n+
324
\n+
325 }
\n
326
\n-
327 template<int dimension, class CoordType>
\n-\n-
\n-\n-
330 geometry() const
\n-
331 {
\n-
332 const typename BackendIterator::Geometry &
\n-
333 bgeo = backend.geometry();
\n-
334 std::vector<CoordVector> corners(dimension+1);
\n-
335 for(int i = 0; i <= dimension; ++i)
\n-
336 corners[i] = global(bgeo.corner(i));
\n-
337
\n-
338 return Geometry(bgeo.type(), corners);
\n-
339 }
\n-
\n-
340
\n-
341 template<int dimension, class CoordType>
\n-\n-
343 CoordVector
\n-\n-
345 global(const CoordVector &local) const
\n-
346 {
\n-
347 return transformCoordinate(referenceToKuhn(local,
\n-
348 getPermutation<dimension>(kuhnIndex)));
\n-
349 }
\n-
350
\n-
351 // common
\n-
352 template<int dimension, class CoordType>
\n-
353 template<int codimension>
\n-
\n-
354 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n-
355 : public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n-
356 public RefinementIteratorSpecial<dimension, CoordType, codimension>
\n-
357 {
\n-
358 public:
\n-\n-
360 typedef SubEntityIterator This;
\n-
361
\n-
362 SubEntityIterator(int nIntervals, bool end = false);
\n-
363
\n-
364 bool equals(const This &other) const;
\n-
365 protected:
\n-
366 using RefinementIteratorSpecial<dimension, CoordType, codimension>::kuhnIndex;
\n-
367 using RefinementIteratorSpecial<dimension, CoordType, codimension>::backend;
\n-
368 };
\n-
\n-
369
\n-
370#ifndef DOXYGEN
\n-
371 template<int dimension, class CoordType>
\n-
372 template<int codimension>
\n-\n-
374 SubEntityIterator(int nIntervals, bool end)
\n-
375 : RefinementIteratorSpecial<dimension, CoordType, codimension>(nIntervals, end)
\n-
376 {}
\n-
377
\n-
378 template<int dimension, class CoordType>
\n-
379 template<int codimension>
\n-
380 bool
\n-\n-
382 equals(const This &other) const
\n-
383 {
\n-
384 return kuhnIndex == other.kuhnIndex && backend == other.backend;
\n-
385 }
\n-
386#endif
\n-
387
\n-
388 } // namespace PyramidTriangulation
\n-
\n-
389 } // namespace RefinementImp
\n-
390
\n-
391 namespace RefinementImp
\n-
392 {
\n-
393 // ///////////////////////
\n-
394 //
\n-
395 // The refinement traits
\n-
396 //
\n-
397#ifndef DOXYGEN
\n-
398 template<unsigned topologyId, class CoordType, unsigned coerceToId>
\n-
399 struct Traits<
\n-
400 topologyId, CoordType, coerceToId, 3,
\n-
401 typename std::enable_if<
\n-
402 (GeometryTypes::pyramid.id() >> 1) ==
\n-
403 (topologyId >> 1) &&
\n-
404 (GeometryTypes::simplex(3).id() >> 1) ==
\n-
405 (coerceToId >> 1)
\n-
406 >::type>
\n-
407 {
\n-
408 typedef PyramidTriangulation::RefinementImp<3, CoordType> Imp;
\n-
409 };
\n-
410#endif
\n-
411
\n-
412 } // namespace RefinementImp
\n-
413} // namespace Dune
\n-
414
\n-
415#endif // DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
\n-\n-
This file contains the Refinement implementation for simplices (triangles, tetrahedrons....
\n-
This file contains the parts independent of a particular Refinement implementation.
\n-
A unique label for each type of element that can occur in a grid.
\n+
327}
\n+
328
\n+
329
\n+
330#endif // DUNE_GEOMETRY_REFERENCEELEMENT_HH
\n+
A unique label for each type of element that can occur in a grid.
\n
Definition affinegeometry.hh:21
\n-
FieldVector< CoordType, dimension > transformCoordinate(FieldVector< CoordType, dimension > point)
Definition pyramidtriangulation.cc:51
\n-
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:336
\n-
FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from the reference simplex to some Kuhn simplex.
Definition simplex.cc:394
\n-
Static tag representing a codimension.
Definition dimension.hh:24
\n-
generic geometry implementation based on corner coordinates
Definition multilineargeometry.hh:181
\n-\n-
Implementation of the refinement of a pyramid into simplices.
Definition pyramidtriangulation.cc:68
\n-
FieldVector< CoordType, dimension > CoordVector
Definition pyramidtriangulation.cc:77
\n-
static int nVertices(int nIntervals)
Definition pyramidtriangulation.cc:109
\n-
static int nElements(int nIntervals)
Definition pyramidtriangulation.cc:133
\n-
CoordType ctype
Definition pyramidtriangulation.cc:72
\n-
Codim< dimension >::SubEntityIterator VertexIterator
Definition pyramidtriangulation.cc:76
\n-
Codim< 0 >::SubEntityIterator ElementIterator
Definition pyramidtriangulation.cc:78
\n-
static constexpr int dimension
Definition pyramidtriangulation.cc:70
\n-
static ElementIterator eBegin(int nIntervals)
Definition pyramidtriangulation.cc:141
\n-
static ElementIterator eEnd(int nIntervals)
Definition pyramidtriangulation.cc:149
\n-
FieldVector< int, dimension+1 > IndexVector
Definition pyramidtriangulation.cc:79
\n-
static VertexIterator vBegin(int nIntervals)
Definition pyramidtriangulation.cc:117
\n-
static VertexIterator vEnd(int nIntervals)
Definition pyramidtriangulation.cc:125
\n-\n-
Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition pyramidtriangulation.cc:103
\n-
RefinementImp< dimension, CoordType > Refinement
Definition pyramidtriangulation.cc:164
\n-
Refinement::template Codim< dimension >::Geometry Geometry
Definition pyramidtriangulation.cc:166
\n-
Refinement::BackendRefinement BackendRefinement
Definition pyramidtriangulation.cc:178
\n-\n-
BackendRefinement::template Codim< dimension >::SubEntityIterator BackendIterator
Definition pyramidtriangulation.cc:179
\n-\n-\n-\n-\n-\n-
Refinement::CoordVector CoordVector
Definition pyramidtriangulation.cc:246
\n-\n-
Refinement::template Codim< 0 >::Geometry Geometry
Definition pyramidtriangulation.cc:247
\n-
Refinement::IndexVector IndexVector
Definition pyramidtriangulation.cc:245
\n-
BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator
Definition pyramidtriangulation.cc:264
\n-\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition pyramidtriangulation.cc:244
\n-
Refinement::BackendRefinement BackendRefinement
Definition pyramidtriangulation.cc:263
\n-\n-
SubEntityIterator This
Definition pyramidtriangulation.cc:360
\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition pyramidtriangulation.cc:359
\n-\n+
This class provides access to geometric and topological properties of a reference element.
Definition referenceelement.hh:52
\n+
CoordinateField volume() const
obtain the volume of the reference element
Definition referenceelement.hh:241
\n+
ReferenceElement()
Constructs an empty reference element.
Definition referenceelement.hh:271
\n+
bool operator!=(const ReferenceElement &r) const
Compares for inequality with another reference element.
Definition referenceelement.hh:292
\n+
decltype(auto) type(int i, int c) const
obtain the type of subentity (i,c)
Definition referenceelement.hh:171
\n+
typename Implementation::Coordinate Coordinate
The coordinate type.
Definition referenceelement.hh:81
\n+
Codim< codim >::Geometry geometry(int i) const
obtain the embedding of subentity (i,codim) into the reference element
Definition referenceelement.hh:234
\n+
static constexpr int dimension
The dimension of the reference element.
Definition referenceelement.hh:87
\n+
int size(int i, int c, int cc) const
number of subentities of codimension cc of subentity (i,c)
Definition referenceelement.hh:111
\n+
int subEntity(int i, int c, int ii, int cc) const
obtain number of ii-th subentity with codim cc of (i,c)
Definition referenceelement.hh:130
\n+
typename Implementation::ctype ctype
The coordinate field type.
Definition referenceelement.hh:75
\n+
int size(int c) const
number of subentities of codimension c
Definition referenceelement.hh:94
\n+
decltype(auto) type() const
obtain the type of this reference element
Definition referenceelement.hh:184
\n+
const Implementation & impl() const
Returns a reference to the internal implementation object.
Definition referenceelement.hh:280
\n+
bool checkInside(const Coordinate &local) const
check if a coordinate is in the reference element
Definition referenceelement.hh:216
\n+
ctype CoordinateField
The coordinate field type.
Definition referenceelement.hh:78
\n+
bool operator==(const ReferenceElement &r) const
Compares for equality with another reference element.
Definition referenceelement.hh:286
\n+
decltype(auto) position(int i, int c) const
position of the barycenter of entity (i,c)
Definition referenceelement.hh:203
\n+
decltype(auto) integrationOuterNormal(int face) const
obtain the integration outer normal of the reference element
Definition referenceelement.hh:258
\n+
friend std::size_t hash_value(const ReferenceElement &r)
Yields a hash value suitable for storing the reference element a in hash table.
Definition referenceelement.hh:298
\n+
auto subEntities(int i, int c, int cc) const
Obtain the range of numbers of subentities with codim cc of (i,c)
Definition referenceelement.hh:153
\n+
ctype Volume
Type used for volume.
Definition referenceelement.hh:84
\n+
Collection of types depending on the codimension.
Definition referenceelement.hh:67
\n+
implementation-defined Geometry
type of geometry embedding a subentity into the reference element
Definition referenceelement.hh:69
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,604 +1,294 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-pyramidtriangulation.cc\n+referenceelement.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC\n-_\b6#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC\n+5#ifndef DUNE_GEOMETRY_REFERENCEELEMENT_HH\n+6#define DUNE_GEOMETRY_REFERENCEELEMENT_HH\n 7\n-8#include \n-9#include \n-10\n-11#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-12#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-13\n-14#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n-15#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n-16\n-17namespace _\bD_\bu_\bn_\be\n-18{\n-19 namespace RefinementImp\n-20 {\n-_\b2_\b6 namespace PyramidTriangulation\n-27 {\n-28 // ////////////\n-29 //\n-30 // Utilities\n-31 //\n-32\n-33 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn;\n-34 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn;\n-35\n-36 // ////////////////////////////////////\n-37 //\n-38 // Refine a pyramid with simplices\n-39 //\n-40\n-41 // forward declaration of the iterator base\n-42 template\n-_\b4_\b3 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-44\n-45 /*\n-46 * The permutations 0 and 1 of the Kuhn-decomposition of a cube into\n-simplices form a pyramid.\n-47 * The resulting pyramid is not oriented the same as the reference pyramid\n-and so the Kuhn-coordinates\n-48 * have to be transformed using the method below.\n-49 */\n-50 template FieldVector\n-_\b5_\b1 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be( FieldVector point)\n+8#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+9\n+10namespace _\bD_\bu_\bn_\be {\n+11 namespace Geo {\n+12\n+13 namespace Impl {\n+14\n+15 // forward declaration for friend declaration\n+16 template\n+17 class ReferenceElementContainer;\n+18\n+19 }\n+20\n+21 // forward declaration for constructing default reference element type\n+22 template\n+23 class ReferenceElementImplementation;\n+24\n+25 // forward declaration for backwards compatibility conversion\n+26 template\n+27 struct ReferenceElements;\n+28\n+29 // ReferenceElement\n+30 // ----------------\n+31\n+50 template\n+_\b5_\b1 class _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n 52 {\n-53 FieldVector transform;\n-54 transform[0]=1-point[0];\n-55 transform[1]=1-point[1];\n-56 transform[2]=point[2];\n-57 return transform;\n-58 }\n-59\n-66 template\n-_\b6_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-68 {\n-69 public:\n-_\b7_\b0 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n+53\n+54 public:\n+55\n+56#ifndef DOXYGEN\n+57\n+59 template\n+60 using _\bC_\bo_\bd_\bi_\bm = typename Implementation::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\b>;\n+61\n+62#else\n+63\n+65 template< int codim >\n+_\b6_\b6 struct _\bC_\bo_\bd_\bi_\bm\n+67 {\n+_\b6_\b9 using _\bG_\be_\bo_\bm_\be_\bt_\br_\by = implementation-defined;\n+70 };\n 71\n-_\b7_\b2 typedef CoordType _\bc_\bt_\by_\bp_\be;\n+72#endif // DOXYGEN\n 73\n-74 template\n-75 struct _\bC_\bo_\bd_\bi_\bm;\n-_\b7_\b6 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b7_\b7 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b7_\b8 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b7_\b9 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-80\n-81 static int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals);\n-82 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals);\n-83 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(int nIntervals);\n-84\n-85 static int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals);\n-86 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(int nIntervals);\n-_\b8_\b7 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(int nIntervals);\n+_\b7_\b5 using _\bc_\bt_\by_\bp_\be = typename Implementation::ctype;\n+76\n+_\b7_\b8 using _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd = _\bc_\bt_\by_\bp_\be;\n+79\n+_\b8_\b1 using _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be = typename Implementation::Coordinate;\n+82\n+_\b8_\b4 typedef _\bc_\bt_\by_\bp_\be _\bV_\bo_\bl_\bu_\bm_\be;\n+85\n+_\b8_\b7 static constexpr int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = Implementation::dimension;\n 88\n-89 private:\n-90 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, 0>;\n-91 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>;\n-92\n-93 typedef _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-94\n-95 constexpr static int nKuhnSimplices = 2;\n-96 };\n-97\n-98 template\n-99 template\n-_\b1_\b0_\b0 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n-101 {\n-102 class SubEntityIterator;\n-_\b1_\b0_\b3 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-104 };\n-105\n-106 template\n-107 int\n-_\b1_\b0_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-109_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals)\n-110 {\n-111 return BackendRefinement::nVertices(nIntervals) * nKuhnSimplices;\n-112 }\n-113\n-114 template\n-115 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b1_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-117_\b _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals)\n-118 {\n-119 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n-120 }\n-121\n-122 template\n-123 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b2_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-125_\b _\bv_\bE_\bn_\bd(int nIntervals)\n-126 {\n-127 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n-128 }\n-129\n-130 template\n-131 int\n-_\b1_\b3_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-133_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals)\n-134 {\n-135 return BackendRefinement::nElements(nIntervals) * nKuhnSimplices;\n-136 }\n-137\n-138 template\n-139 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b4_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-141_\b _\be_\bB_\be_\bg_\bi_\bn(int nIntervals)\n-142 {\n-143 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n-144 }\n-145\n-146 template\n-147 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b1_\b4_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-149_\b _\be_\bE_\bn_\bd(int nIntervals)\n-150 {\n-151 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n-152 }\n-153\n-154 // //////////////\n-155 //\n-156 // The iterator\n-157 //\n+89\n+_\b9_\b4 int _\bs_\bi_\bz_\be(int c) const\n+95 {\n+96 return _impl->size(c);\n+97 }\n+98\n+99\n+_\b1_\b1_\b1 int _\bs_\bi_\bz_\be(int i, int c, int cc) const\n+112 {\n+113 return _impl->size(i,c,cc);\n+114 }\n+115\n+116\n+_\b1_\b3_\b0 int _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by(int i, int c, int ii, int cc) const\n+131 {\n+132 return _impl->subEntity(i,c,ii,cc);\n+133 }\n+134\n+_\b1_\b5_\b3 auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\bi_\be_\bs ( int i, int c, int cc ) const\n+154 {\n+155 return _impl->subEntities(i,c,cc);\n+156 }\n+157\n 158\n-159 // vertices\n-160 template\n-_\b1_\b6_\b1 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-162 {\n-163 public:\n-_\b1_\b6_\b4 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b1_\b6_\b5 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b1_\b6_\b6 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-167\n-168 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n-169\n-170 void increment();\n-171\n-172 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-173\n-174 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry() const;\n+_\b1_\b7_\b1 decltype(auto) _\bt_\by_\bp_\be(int i, int c) const\n+172 {\n+173 return _impl->type(i,c);\n+174 }\n 175\n-176 int index() const;\n-177 protected:\n-_\b1_\b7_\b8 typedef typename Refinement::BackendRefinement _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b1_\b7_\b9 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b1_\b8_\b0 constexpr static int nKuhnSimplices = 2;\n-181\n-_\b1_\b8_\b2 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n-183\n-_\b1_\b8_\b4 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n-_\b1_\b8_\b5 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n-_\b1_\b8_\b6 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n-187 };\n+176\n+_\b1_\b8_\b4 decltype(auto) _\bt_\by_\bp_\be() const\n+185 {\n+186 return _impl->type();\n+187 }\n 188\n-189 template\n-_\b1_\b9_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-191_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n-192 : nIntervals_(nIntervals), kuhnIndex(0),\n-193 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vBegin(nIntervals_)),\n-194 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vEnd(nIntervals_))\n-195 {\n-196 if (end)\n-197 kuhnIndex = nKuhnSimplices;\n-198 }\n-199\n-200 template\n-201 void\n-_\b2_\b0_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-203_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+189\n+_\b2_\b0_\b3 decltype(auto) _\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn(int i, int c) const\n 204 {\n-205 ++backend;\n-206 if(backend == backendEnd)\n-207 {\n-208 backend = BackendRefinement::vBegin(nIntervals_);\n-209 ++kuhnIndex;\n-210 }\n-211 }\n-212\n-213 template\n-214 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b2_\b1_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-216_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+205 return _impl->position(i,c);\n+206 }\n+207\n+208\n+_\b2_\b1_\b6 bool _\bc_\bh_\be_\bc_\bk_\bI_\bn_\bs_\bi_\bd_\be(const _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be& local) const\n 217 {\n-218 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(backend.coords(),\n-219 getPermutation(kuhnIndex)));\n-220 }\n+218 return _impl->checkInside(local);\n+219 }\n+220\n 221\n-222 template\n-223 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-_\b2_\b2_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by ()\n-const\n-225 {\n-226 std::vector corners(1);\n-227 corners[0] = referenceToKuhn(backend.coords(), getPermutation\n-(kuhnIndex));\n-228 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(GeometryTypes::vertex, corners);\n-229 }\n-230\n-231 template\n-232 int\n-_\b2_\b3_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-234_\b _\bi_\bn_\bd_\be_\bx() const\n+233 template\n+_\b2_\b3_\b4 typename _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bg_\be_\bo_\bm_\be_\bt_\br_\by(int i) const\n 235 {\n-236 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index\n-();\n+236 return _impl->template geometry(i);\n 237 }\n 238\n-239 // elements\n-240 template\n-_\b2_\b4_\b1 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+239\n+_\b2_\b4_\b1 _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd _\bv_\bo_\bl_\bu_\bm_\be() const\n 242 {\n-243 public:\n-_\b2_\b4_\b4 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b4_\b5 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-_\b2_\b4_\b6 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b2_\b4_\b7 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-248\n-249 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n-250\n-251 void increment();\n-252\n-253 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n-254 int index() const;\n-255 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-256\n-257 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry() const;\n-258\n-259 private:\n-260 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br global(const _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br &local) const;\n-261\n-262 protected:\n-_\b2_\b6_\b3 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b2_\b6_\b4 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b2_\b6_\b5 constexpr static int nKuhnSimplices = 2;\n-266\n-_\b2_\b6_\b7 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n-268\n-_\b2_\b6_\b9 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n-_\b2_\b7_\b0 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n-_\b2_\b7_\b1 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n-272 };\n-273\n-274 template\n-_\b2_\b7_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-276_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n-277 : nIntervals_(nIntervals), kuhnIndex(0),\n-278 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eBegin(nIntervals_)),\n-279 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eEnd(nIntervals_))\n-280 {\n-281 if (end)\n-282 kuhnIndex = nKuhnSimplices;\n+243 return _impl->volume();\n+244 }\n+245\n+246\n+_\b2_\b5_\b8 decltype(auto) _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bO_\bu_\bt_\be_\br_\bN_\bo_\br_\bm_\ba_\bl(int face) const\n+259 {\n+260 return _impl->integrationOuterNormal(face);\n+261 }\n+262\n+263\n+_\b2_\b7_\b1 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt()\n+272 : _impl(nullptr)\n+273 {}\n+274\n+_\b2_\b8_\b0 const Implementation& _\bi_\bm_\bp_\bl() const\n+281 {\n+282 return *_impl;\n 283 }\n 284\n-285 template\n-286 void\n-_\b2_\b8_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-288_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n-289 {\n-290 ++backend;\n-291 if (backend == backendEnd)\n-292 {\n-293 backend = BackendRefinement::eBegin(nIntervals_);\n-294 ++kuhnIndex;\n+_\b2_\b8_\b6 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& r) const\n+287 {\n+288 return _impl == r._impl;\n+289 }\n+290\n+_\b2_\b9_\b2 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& r) const\n+293 {\n+294 return not (*this == r);\n 295 }\n-296 }\n-297\n-298 template\n-299 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-_\b3_\b0_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-301_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n-302 {\n-303 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br indices = backend.vertexIndices();\n+296\n+_\b2_\b9_\b8 friend std::size_t _\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be(const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& r)\n+299 {\n+300 return reinterpret_cast(r._impl);\n+301 }\n+302\n+303 private:\n 304\n-305 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);\n-306 indices += base;\n+305 // The implementation must be a friend to construct a wrapper around\n+itself.\n+306 friend Implementation;\n 307\n-308 return indices;\n-309 }\n+308 // The reference container is a friend to be able to call\n+setImplementation.\n+309 friend class Impl::ReferenceElementContainer<_\bc_\bt_\by_\bp_\be,_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>;\n 310\n-311 template\n-312 int\n-_\b3_\b1_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-314_\b _\bi_\bn_\bd_\be_\bx() const\n-315 {\n-316 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index\n-();\n-317 }\n-318\n-319 template\n-320 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b3_\b2_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-322_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-323 {\n-324 return global(backend.coords());\n+311 // Constructor for wrapping an implementation reference (required\n+internally by the default implementation)\n+312 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const Implementation& _\bi_\bm_\bp_\bl)\n+313 : _impl(&_\bi_\bm_\bp_\bl)\n+314 {}\n+315\n+316 void setImplementation(const Implementation& _\bi_\bm_\bp_\bl)\n+317 {\n+318 _impl = &_\bi_\bm_\bp_\bl;\n+319 }\n+320\n+321 const Implementation* _impl;\n+322\n+323 };\n+324\n 325 }\n 326\n-327 template\n-328 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-_\b3_\b2_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-330_\b _\bg_\be_\bo_\bm_\be_\bt_\br_\by() const\n-331 {\n-332 const typename BackendIterator::Geometry &\n-333 bgeo = backend.geometry();\n-334 std::vector corners(dimension+1);\n-335 for(int i = 0; i <= dimension; ++i)\n-336 corners[i] = global(bgeo.corner(i));\n-337\n-338 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(bgeo.type(), corners);\n-339 }\n-340\n-341 template\n-342 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>::\n-343 CoordVector\n-344 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-345_\b _\bg_\bl_\bo_\bb_\ba_\bl(const CoordVector &local) const\n-346 {\n-347 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(local,\n-348 getPermutation(kuhnIndex)));\n-349 }\n-350\n-351 // common\n-352 template\n-353 template\n-_\b3_\b5_\b4 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n-SubEntityIterator\n-355 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n-356 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-357 {\n-358 public:\n-_\b3_\b5_\b9 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b3_\b6_\b0 typedef SubEntityIterator _\bT_\bh_\bi_\bs;\n-361\n-_\b3_\b6_\b2 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end = false);\n-363\n-_\b3_\b6_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n-365 protected:\n-366 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n-kuhnIndex;\n-367 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n-backend;\n-368 };\n-369\n-370#ifndef DOXYGEN\n-371 template\n-372 template\n-373 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n-374_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end)\n-375 : _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(nIntervals,\n-end)\n-376 {}\n-377\n-378 template\n-379 template\n-380 bool\n-381 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n-382_\b _\be_\bq_\bu_\ba_\bl_\bs(const This &other) const\n-383 {\n-384 return kuhnIndex == other.kuhnIndex && backend == other.backend;\n-385 }\n-386#endif\n-387\n-388 } // namespace PyramidTriangulation\n-389 } // namespace RefinementImp\n-390\n-391 namespace RefinementImp\n-392 {\n-393 // ///////////////////////\n-394 //\n-395 // The refinement traits\n-396 //\n-397#ifndef DOXYGEN\n-398 template\n-399 struct Traits<\n-400 topologyId, CoordType, coerceToId, 3,\n-401 typename std::enable_if<\n-402 (GeometryTypes::pyramid.id() >> 1) ==\n-403 (topologyId >> 1) &&\n-404 (GeometryTypes::simplex(3).id() >> 1) ==\n-405 (coerceToId >> 1)\n-406 >::type>\n-407 {\n-408 typedef PyramidTriangulation::RefinementImp<3, CoordType> Imp;\n-409 };\n-410#endif\n-411\n-412 } // namespace RefinementImp\n-413} // namespace Dune\n-414\n-415#endif // DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC\n-_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n-_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\n-This file contains the Refinement implementation for simplices (triangles,\n-tetrahedrons....\n-_\bb_\ba_\bs_\be_\b._\bc_\bc\n-This file contains the parts independent of a particular Refinement\n-implementation.\n+327}\n+328\n+329\n+330#endif // DUNE_GEOMETRY_REFERENCEELEMENT_HH\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-FieldVector< CoordType, dimension > transformCoordinate(FieldVector< CoordType,\n-dimension > point)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:51\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn\n-FieldVector< int, n > getPermutation(int m)\n-Calculate permutation from it's index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:336\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn\n-FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType,\n-dimension > point, const FieldVector< int, dimension > &kuhn)\n-Map from the reference simplex to some Kuhn simplex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:394\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-Static tag representing a codimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-generic geometry implementation based on corner coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:43\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-Implementation of the refinement of a pyramid into simplices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< CoordType, dimension > CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:77\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-static int nVertices(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:109\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-static int nElements(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:133\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bc_\bt_\by_\bp_\be\n-CoordType ctype\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:72\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< dimension >::SubEntityIterator VertexIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:76\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< 0 >::SubEntityIterator ElementIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+This class provides access to geometric and topological properties of a\n+reference element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n+CoordinateField volume() const\n+obtain the volume of the reference element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:241\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+ReferenceElement()\n+Constructs an empty reference element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:271\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n+bool operator!=(const ReferenceElement &r) const\n+Compares for inequality with another reference element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:292\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bt_\by_\bp_\be\n+decltype(auto) type(int i, int c) const\n+obtain the type of subentity (i,c)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:171\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+typename Implementation::Coordinate Coordinate\n+The coordinate type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:81\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+Codim< codim >::Geometry geometry(int i) const\n+obtain the embedding of subentity (i,codim) into the reference element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:234\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n static constexpr int dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:70\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n-static ElementIterator eBegin(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:141\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n-static ElementIterator eEnd(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:149\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< int, dimension+1 > IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:79\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n-static VertexIterator vBegin(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:117\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n-static VertexIterator vEnd(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:125\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:101\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension >\n-Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:103\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:164\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Refinement::template Codim< dimension >::Geometry Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:166\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-Refinement::BackendRefinement BackendRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:178\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n-BackendIterator backend\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:185\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-BackendRefinement::template Codim< dimension >::SubEntityIterator\n-BackendIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:179\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n-int kuhnIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:184\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:165\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n-const BackendIterator backendEnd\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:186\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n-int nIntervals_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:182\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n-const BackendIterator backendEnd\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:271\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:246\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n-int nIntervals_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:267\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Refinement::template Codim< 0 >::Geometry Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:247\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::IndexVector IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:245\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:264\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n-int kuhnIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:269\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n-BackendIterator backend\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:270\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:244\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-Refinement::BackendRefinement BackendRefinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:263\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other) const\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-_\b>_\b:_\b:_\bT_\bh_\bi_\bs\n-SubEntityIterator This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:360\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SubEntityIterator(int nIntervals, bool end=false)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-_\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:359\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:433\n+The dimension of the reference element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:87\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n+int size(int i, int c, int cc) const\n+number of subentities of codimension cc of subentity (i,c)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:111\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by\n+int subEntity(int i, int c, int ii, int cc) const\n+obtain number of ii-th subentity with codim cc of (i,c)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:130\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bc_\bt_\by_\bp_\be\n+typename Implementation::ctype ctype\n+The coordinate field type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n+int size(int c) const\n+number of subentities of codimension c\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:94\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bt_\by_\bp_\be\n+decltype(auto) type() const\n+obtain the type of this reference element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:184\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bi_\bm_\bp_\bl\n+const Implementation & impl() const\n+Returns a reference to the internal implementation object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:280\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bI_\bn_\bs_\bi_\bd_\be\n+bool checkInside(const Coordinate &local) const\n+check if a coordinate is in the reference element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:216\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd\n+ctype CoordinateField\n+The coordinate field type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const ReferenceElement &r) const\n+Compares for equality with another reference element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:286\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn\n+decltype(auto) position(int i, int c) const\n+position of the barycenter of entity (i,c)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:203\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bO_\bu_\bt_\be_\br_\bN_\bo_\br_\bm_\ba_\bl\n+decltype(auto) integrationOuterNormal(int face) const\n+obtain the integration outer normal of the reference element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:258\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be\n+friend std::size_t hash_value(const ReferenceElement &r)\n+Yields a hash value suitable for storing the reference element a in hash table.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:298\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\bi_\be_\bs\n+auto subEntities(int i, int c, int cc) const\n+Obtain the range of numbers of subentities with codim cc of (i,c)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:153\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\bo_\bl_\bu_\bm_\be\n+ctype Volume\n+Type used for volume.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:84\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+Collection of types depending on the codimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+implementation-defined Geometry\n+type of geometry embedding a subentity into the reference element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:69\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00218.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00218.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: simplex.cc File Reference\n+dune-geometry: deprecated_topology.hh File Reference\n \n \n \n \n \n \n \n@@ -65,111 +65,23 @@\n
\n
\n
\n
\n \n \n
\n
\n- \n-
simplex.cc File Reference
\n+
deprecated_topology.hh File Reference
\n
\n
\n \n-

This file contains the Refinement implementation for simplices (triangles, tetrahedrons...) \n-More...

\n-
#include <algorithm>
\n-#include <dune/common/fvector.hh>
\n-#include <dune/common/math.hh>
\n-#include <dune/geometry/multilineargeometry.hh>
\n-#include <dune/geometry/referenceelements.hh>
\n-#include <dune/geometry/type.hh>
\n-#include "base.cc"
\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::RefinementImp::Simplex::RefinementImp< dimension_, CoordType >
 
struct  Dune::RefinementImp::Simplex::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::RefinementImp::Simplex::RefinementIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::RefinementImp::Simplex::RefinementIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::RefinementImp::Simplex::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Namespaces

namespace  Dune
 
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 
namespace  Dune::RefinementImp::Simplex
 This namespace contains the Refinement implementation for simplices (triangles, tetrahedrons...)
 
\n-\n-\n-\n-

\n-Macros

#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
 
\n-\n-\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

Utilities
int Dune::RefinementImp::Simplex::factorial (int n)
 Calculate n!
 
int Dune::RefinementImp::Simplex::binomial (int upper, int lower)
 calculate \"$\\left({upper}\\atop{lower}\\right)$\"
 
template<int dimension>
int Dune::RefinementImp::Simplex::pointIndex (const FieldVector< int, dimension > &point)
 calculate the index of a given gridpoint within a Kuhn0 simplex
 
template<int n>
FieldVector< int, n > Dune::RefinementImp::Simplex::getPermutation (int m)
 Calculate permutation from it's index.
 
template<int dimension, class CoordType >
FieldVector< CoordType, dimension > Dune::RefinementImp::Simplex::referenceToKuhn (FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
 Map from the reference simplex to some Kuhn simplex.
 
template<int dimension, class CoordType >
FieldVector< CoordType, dimension > Dune::RefinementImp::Simplex::kuhnToReference (FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
 Map from some Kuhn simplex to the reference simplex.
 
\n-

Detailed Description

\n-

This file contains the Refinement implementation for simplices (triangles, tetrahedrons...)

\n-

See Refinement implementation for simplices.

\n-

Macro Definition Documentation

\n-\n-

◆ DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC

\n-\n-
\n-
\n- \n- \n- \n- \n-
#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
\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,95 +1,10 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\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-simplex.cc File Reference\n-This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for simplices (triangles,\n-tetrahedrons...) _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\ba_\br_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+deprecated_topology.hh File Reference\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:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:\n- _\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n- _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:\n- _\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\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:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx\n-\u00a0 This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for simplices\n- (triangles, tetrahedrons...)\n-\u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bR_\bI_\bD_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bS_\bI_\bM_\bP_\bL_\bE_\bX_\b__\bC_\bC\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-Utilities\n- int\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl\n- (int n)\n-\u00a0 Calculate n!\n-\u00a0\n- int\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl\n- (int upper, int lower)\n-\u00a0 calculate[$\\left({upper}\\atop\n- {lower}\\right)$]\n-\u00a0\n-template\n- int\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx\n- (const FieldVector< int, dimension >\n- &point)\n-\u00a0 calculate the index of a given gridpoint\n- within a Kuhn0 simplex\n-\u00a0\n-template\n- FieldVector< int, n >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:\n- _\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn (int m)\n-\u00a0 Calculate permutation from it's index.\n-\u00a0\n-template\n-FieldVector< CoordType, dimension >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:\n- _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn (FieldVector< CoordType,\n- dimension > point, const FieldVector< int,\n- dimension > &kuhn)\n-\u00a0 Map from the reference simplex to some\n- Kuhn simplex.\n-\u00a0\n-template\n-FieldVector< CoordType, dimension >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:\n- _\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be (FieldVector< CoordType,\n- dimension > point, const FieldVector< int,\n- dimension > &kuhn)\n-\u00a0 Map from some Kuhn simplex to the\n- reference simplex.\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-This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for simplices (triangles,\n-tetrahedrons...)\n-See _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b _\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bf_\bo_\br_\b _\bs_\bi_\bm_\bp_\bl_\bi_\bc_\be_\bs.\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGR\bRI\bID\bD_\b_C\bCO\bOM\bMM\bMO\bON\bN_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_S\bSI\bIM\bMP\bPL\bLE\bEX\bX_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n-#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00218_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00218_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: simplex.cc Source File\n+dune-geometry: deprecated_topology.hh Source File\n \n \n \n \n \n \n \n@@ -70,676 +70,180 @@\n \n \n \n \n \n \n \n
\n-
simplex.cc
\n+
deprecated_topology.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
\n-
6#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
\n+
5#ifndef DUNE_DEPRECATED_TOPOLOGY_HH
\n+
6#define DUNE_DEPRECATED_TOPOLOGY_HH
\n
7
\n-
8// This file is part of DUNE, a Distributed and Unified Numerics Environment
\n-
9// This file is copyright (C) 2005 Jorrit Fahlke <jorrit@jorrit.de>
\n-
10// This file is licensed under version 2 of the GNU General Public License,
\n-
11// with a special "runtime exception." See COPYING at the top of the source
\n-
12// tree for the full licence.
\n+
8 namespace Impl
\n+
9 {
\n+
10
\n+
11 // Basic Topology Types
\n+
12 // --------------------
\n
13
\n-
251#include <algorithm>
\n-
252
\n-
253#include <dune/common/fvector.hh>
\n-
254#include <dune/common/math.hh>
\n-
255
\n-\n-\n-
258#include <dune/geometry/type.hh>
\n-
259
\n-
260#include "base.cc"
\n-
261
\n-
262namespace Dune {
\n-
263
\n-
264 namespace RefinementImp {
\n-
265
\n-
\n-
272 namespace Simplex {
\n-
273
\n-
274 // //////////////////
\n-
275 //
\n-
277 //
\n-
278
\n-
280
\n-
288 [[deprecated("Use factorial from dune-common's math.hh")]]
\n-
\n-
289 inline int factorial(int n)
\n-
290 {
\n-
291 int prod = 1;
\n-
292 for(int i = 1; i <= n; ++i)
\n-
293 prod *= i;
\n-
294 return prod;
\n-
295 }
\n-
\n-
296
\n-
304 [[deprecated("Use binomial from dune-common's math.hh")]]
\n-
\n-
305 inline int binomial(int upper, int lower)
\n-
306 {
\n-
307 lower = std::min( lower, upper - lower );
\n-
308 if(lower < 0)
\n-
309 return 0;
\n-
310 int prod = 1;
\n-
311 for(int i = upper - lower; i < upper; ++i)
\n-
312 prod *= (i+1);
\n-
313 return prod / Dune::factorial(lower);
\n-
314 }
\n-
\n-
315
\n-
322 template<int dimension>
\n-
\n-
323 int pointIndex(const FieldVector<int, dimension> &point)
\n-
324 {
\n-
325 int index = 0;
\n-
326 for(int i = 0; i < dimension; ++i)
\n-
327 index += Dune::binomial(dimension-i + point[i]-1, dimension-i);
\n-
328 return index;
\n-
329 }
\n-
\n-
330
\n-
335 template<int n>
\n-
\n-
336 FieldVector<int, n> getPermutation(int m)
\n-
337 {
\n-
338 FieldVector<int, n> perm;
\n-
339 for(int i = 0; i < n; ++i)
\n-
340 perm[i] = i;
\n-
341
\n-
342 int base = 1;
\n-
343 for(int i = 1; i <= n; ++i)
\n-
344 base *= i;
\n-
345
\n-
346 for(int i = n; i > 0; --i) {
\n-
347 base /= i;
\n-
348 int d = m / base;
\n-
349 m %= base;
\n-
350 int t = perm[i-1]; perm[i-1] = perm[i-1-d]; perm[i-1-d] = t;
\n-
351 }
\n-
352 return perm;
\n-
353 }
\n-
\n-
354
\n-
355#if 0
\n-
356 Has to be checked
\n-
357 // calculate the index of a permutation
\n-
358 template<int n>
\n-
359 int getPermIndex(const FieldVector<int, n>& test) // O(n^2)
\n-
360 {
\n-
361 int m = 0;
\n-
362 FieldVector<int, n> perm;
\n-
363 for(int i = 0; i < n; ++i)
\n-
364 perm[i] = i;
\n-
365
\n-
366 int base = 1;
\n-
367 for(int i = 1; i <= n; ++i)
\n-
368 base *= i;
\n-
369
\n-
370 for(int i = n; i > 0; --i) {
\n-
371 base /= i;
\n-
372 int d;
\n-
373 for(d = 0; d < i; ++d)
\n-
374 if(test[i-1] == perm[i-1-d])
\n-
375 break;
\n-
376 m += d * base;
\n-
377 int d = m / base;
\n-
378 m %= base;
\n-
379 perm[i-1-d] = perm[i-1];
\n-
380 }
\n-
381 }
\n-
382#endif
\n-
383
\n-
384 // map between the reference simplex and some arbitrary kuhn simplex (denoted by it's permutation)
\n-
392 template<int dimension, class CoordType>
\n-
393 FieldVector<CoordType, dimension>
\n-
\n-\n-
395 FieldVector<CoordType, dimension> point,
\n-
397 const FieldVector<int, dimension> &kuhn)
\n-
398 {
\n-
399 for(int i = dimension - 1; i > 0; --i)
\n-
400 point[kuhn[i-1]] += point[kuhn[i]];
\n-
401 return point;
\n-
402 }
\n-
\n-
403
\n-
411 template<int dimension, class CoordType>
\n-
412 FieldVector<CoordType, dimension>
\n-
\n-\n-
414 FieldVector<CoordType, dimension> point,
\n-
416 const FieldVector<int, dimension> &kuhn)
\n-
417 {
\n-
418 for(int i = 0; i < dimension - 1; ++i)
\n-
419 point[kuhn[i]] -= point[kuhn[i+1]];
\n-
420 return point;
\n-
421 }
\n-
\n-
422
\n-
423
\n-
425
\n-
426 // /////////////////////////////////////////
\n-
427 //
\n-
428 // refinement implementation for simplices
\n-
429 //
\n-
430
\n-
431 template<int dimension_, class CoordType>
\n-
\n-\n-
433 {
\n-
434 public:
\n-
435 constexpr static int dimension = dimension_;
\n-
436 typedef CoordType ctype;
\n-
437
\n-
438 template<int codimension>
\n-
439 struct Codim;
\n-\n-
441 typedef FieldVector<CoordType, dimension> CoordVector;
\n-\n-
443 typedef FieldVector<int, dimension+1> IndexVector;
\n-
444
\n-
445 static int nVertices(int nIntervals);
\n-
446 static VertexIterator vBegin(int nIntervals);
\n-
447 static VertexIterator vEnd(int nIntervals);
\n-
448
\n-
449 static int nElements(int nIntervals);
\n-
450 static ElementIterator eBegin(int nIntervals);
\n-
451 static ElementIterator eEnd(int nIntervals);
\n-
452 };
\n-
\n-
453
\n-
454 template<int dimension, class CoordType>
\n-
455 template<int codimension>
\n-
\n-
456 struct RefinementImp<dimension, CoordType>::Codim
\n-
457 {
\n-
458 class SubEntityIterator;
\n-
459 // We don't need the caching, but the uncached MultiLinearGeometry has bug FS#1209
\n-\n-
461 };
\n-
\n-
462
\n-
463 template<int dimension, class CoordType>
\n-
464 int
\n-
\n-\n-
466 nVertices(int nIntervals)
\n-
467 {
\n-
468 return Dune::binomial(dimension + nIntervals, (int)dimension);
\n-
469 }
\n-
\n-
470
\n-
471 template<int dimension, class CoordType>
\n-\n-
\n-\n-
474 vBegin(int nIntervals)
\n-
475 {
\n-
476 return VertexIterator(nIntervals);
\n-
477 }
\n-
\n-
478
\n-
479 template<int dimension, class CoordType>
\n-\n-
\n-\n-
482 vEnd(int nIntervals)
\n-
483 {
\n-
484 return VertexIterator(nIntervals, true);
\n-
485 }
\n-
\n-
486
\n-
487 template<int dimension, class CoordType>
\n-
488 int
\n-
\n-\n-
490 nElements(int nIntervals)
\n-
491 {
\n-
492 return Dune::power(nIntervals, int(dimension));
\n-
493 }
\n-
\n-
494
\n-
495 template<int dimension, class CoordType>
\n-\n-
\n-\n-
498 eBegin(int nIntervals)
\n-
499 {
\n-
500 return ElementIterator(nIntervals);
\n-
501 }
\n-
\n-
502
\n-
503 template<int dimension, class CoordType>
\n-\n-
\n-\n-
506 eEnd(int nIntervals)
\n-
507 {
\n-
508 return ElementIterator(nIntervals, true);
\n-
509 }
\n-
\n-
510
\n-
511 // //////////////
\n-
512 //
\n-
513 // The iterator
\n-
514 //
\n-
515
\n-
516 template<int dimension, class CoordType, int codimension>
\n-\n-
518
\n-
519 // vertices
\n-
520
\n-
521 template<int dimension, class CoordType>
\n-
\n-
522 class RefinementIteratorSpecial<dimension, CoordType, dimension>
\n-
523 {
\n-
524 public:
\n-\n-
526 typedef typename Refinement::CoordVector CoordVector;
\n-
527 typedef typename Refinement::template Codim<dimension>::Geometry Geometry;
\n-\n-
529
\n-
530 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n-
531
\n-
532 void increment();
\n-
533 bool equals(const This &other) const;
\n-
534
\n-
535 CoordVector coords() const;
\n-
536 Geometry geometry () const;
\n-
537
\n-
538 int index() const;
\n-
539 protected:
\n-
540 typedef FieldVector<int, dimension> Vertex;
\n-
541
\n-
542 int size;
\n-\n-
544 };
\n-
\n-
545
\n-
546 template<int dimension, class CoordType>
\n-
\n-\n-
548 RefinementIteratorSpecial(int nIntervals, bool end)
\n-
549 : size(nIntervals)
\n-
550 {
\n-
551 vertex[0] = (end) ? size + 1 : 0;
\n-
552 for(int i = 1; i < dimension; ++ i)
\n-
553 vertex[i] = 0;
\n-
554 }
\n-
\n-
555
\n-
556 template<int dimension, class CoordType>
\n-
557 void
\n-
\n-\n-\n-
560 {
\n-
561 assert(vertex[0] <= size);
\n-
562 for(int i = dimension - 1; i >= 0; --i) {
\n-
563 ++vertex[i];
\n-
564 if(i == 0 || vertex[i] <= vertex[i-1])
\n-
565 break;
\n-
566 else
\n-
567 vertex[i] = 0;
\n-
568 }
\n-
569 }
\n-
\n-
570
\n-
571 template<int dimension, class CoordType>
\n-
572 bool
\n-
\n-\n-
574 equals(const This &other) const
\n-
575 {
\n-
576 return size == other.size && vertex == other.vertex;
\n-
577 }
\n-
\n-
578
\n-
579 template<int dimension, class CoordType>
\n-\n-
\n-\n-
582 coords() const
\n-
583 {
\n-
584 Vertex ref = kuhnToReference(vertex, getPermutation<dimension>(0));
\n-
585
\n-
586 CoordVector coords;
\n-
587 for(int i = 0; i < dimension; ++i)
\n-
588 coords[i] = CoordType(ref[i]) / size;
\n-
589 return coords;
\n-
590 }
\n-
\n-
591
\n-
592 template<int dimension, class CoordType>
\n-\n-
\n-\n-
595 {
\n-
596 std::vector<CoordVector> corners(1);
\n-
597 corners[0] = (CoordVector)vertex;
\n-
598 return Geometry(GeometryTypes::vertex, corners);
\n-
599 }
\n-
\n-
600
\n-
601 template<int dimension, class CoordType>
\n-
602 int
\n-
\n-\n-
604 index() const
\n-
605 {
\n-
606 return pointIndex(vertex);
\n-
607 }
\n-
\n-
608
\n-
609 // elements
\n-
610
\n-
611 template<int dimension, class CoordType>
\n-
\n-
612 class RefinementIteratorSpecial<dimension, CoordType, 0>
\n-
613 {
\n-
614 public:
\n-\n-\n-\n-
618 typedef typename Refinement::template Codim<0>::Geometry Geometry;
\n-\n-
620
\n-
621 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n-
622
\n-
623 void increment();
\n-
624 bool equals(const This &other) const;
\n-
625
\n-
626 IndexVector vertexIndices() const;
\n-
627 int index() const;
\n-
628 CoordVector coords() const;
\n-
629
\n-
630 Geometry geometry () const;
\n-
631
\n-
632 private:
\n-
633 CoordVector global(const CoordVector &local) const;
\n-
634
\n-
635 protected:
\n-
636 typedef FieldVector<int, dimension> Vertex;
\n-
637 constexpr static int nKuhnIntervals = Dune::factorial(dimension);
\n-
638
\n-\n-\n-
641 int size;
\n-\n-
643 };
\n-
\n-
644
\n-
645 template<int dimension, class CoordType>
\n-
\n-\n-
647 RefinementIteratorSpecial(int nIntervals, bool end)
\n-
648 : kuhnIndex(0), size(nIntervals), index_(0)
\n-
649 {
\n-
650 for(int i = 0; i < dimension; ++i)
\n-
651 origin[i] = 0;
\n-
652 if(end) {
\n-
653 index_ = Refinement::nElements(nIntervals);
\n-
654 origin[0] = size;
\n-
655 }
\n-
656 }
\n-
\n-
657
\n-
658 template<int dimension, class CoordType>
\n-
659 void
\n-
\n-\n-\n-
662 {
\n-
663 assert(origin[0] < size);
\n-
664
\n-
665 ++index_;
\n-
666
\n-
667 while(1) {
\n-
668 ++kuhnIndex;
\n-
669 if(kuhnIndex == nKuhnIntervals) {
\n-
670 kuhnIndex = 0;
\n-
671 // increment origin
\n-
672 for(int i = dimension - 1; i >= 0; --i) {
\n-
673 ++origin[i];
\n-
674 if(i == 0 || origin[i] <= origin[i-1])
\n-
675 break;
\n-
676 else
\n-
677 origin[i] = 0;
\n-
678 }
\n-
679 }
\n-
680
\n-
681 // test whether the current simplex has any corner outside the kuhn0 simplex
\n-
682 FieldVector<int, dimension> perm = getPermutation<dimension>(kuhnIndex);
\n-
683 Vertex corner = origin;
\n-
684 bool outside = false;
\n-
685 for(int i = 0; i < dimension; ++i) {
\n-
686 // next corner
\n-
687 ++corner[perm[i]];
\n-
688 if(perm[i] > 0)
\n-
689 if(corner[perm[i]] > corner[perm[i]-1]) {
\n-
690 outside = true;
\n-
691 break;
\n-
692 }
\n-
693 }
\n-
694 if(!outside)
\n-
695 return;
\n-
696 }
\n-
697 }
\n-
\n-
698
\n-
699 template<int dimension, class CoordType>
\n-
700 bool
\n-
\n-\n-
702 equals(const This &other) const
\n-
703 {
\n-
704 return size == other.size && index_ == other.index_;
\n-
705 }
\n-
\n-
706
\n-
707 template<int dimension, class CoordType>
\n-\n-
\n-\n-
710 vertexIndices() const
\n-
711 {
\n-
712 IndexVector indices;
\n-
713 FieldVector<int, dimension> perm = getPermutation<dimension>(kuhnIndex);
\n-
714 Vertex vertex = origin;
\n-
715 indices[0] = pointIndex(vertex);
\n-
716 for(int i = 0; i < dimension; ++i) {
\n-
717 ++vertex[perm[i]];
\n-
718 indices[i+1] = pointIndex(vertex);
\n-
719 }
\n-
720 if (kuhnIndex%2 == 1)
\n-
721 for(int i = 0; i < (dimension+1)/2; ++i) {
\n-
722 int t = indices[i];
\n-
723 indices[i] = indices[dimension-i];
\n-
724 indices[dimension-i] = t;
\n-
725 }
\n-
726 return indices;
\n-
727 }
\n-
\n-
728
\n-
729 template<int dimension, class CoordType>
\n-
730 int
\n-
\n-\n-
732 index() const
\n-
733 {
\n-
734 return index_;
\n-
735 }
\n-
\n-
736
\n-
737 template<int dimension, class CoordType>
\n-\n-
\n-\n-
740 coords() const
\n-
741 {
\n-\n-
743 ::simplex().position(0,0));
\n-
744 }
\n-
\n-
745
\n-
746 template<int dimension, class CoordType>
\n-\n-
\n-\n-
749 {
\n-
750 std::vector<CoordVector> corners(dimension+1);
\n-\n-
752 for(int i = 0; i <= dimension; ++i)
\n-
753 corners[i] = global(refelem.position(i, dimension));
\n-
754 return Geometry(refelem.type(), corners);
\n-
755 }
\n-
\n-
756
\n-
757 template<int dimension, class CoordType>
\n-\n-\n-
760 global(const CoordVector &local) const {
\n-
761 CoordVector v =
\n-
762 referenceToKuhn(local, getPermutation<dimension>(kuhnIndex));
\n-
763 v += origin;
\n-
764 v /= (typename CoordVector::value_type)size;
\n-
765 return kuhnToReference(v, getPermutation<dimension>(0));
\n-
766 }
\n-
767
\n-
768 // common
\n-
769
\n-
770 template<int dimension, class CoordType>
\n-
771 template<int codimension>
\n-
\n-
772 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n-
773 : public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n-
774 public RefinementIteratorSpecial<dimension, CoordType, codimension>
\n-
775 {
\n-
776 public:
\n-\n-
778
\n-
779 SubEntityIterator(int nIntervals, bool end = false);
\n-
780 };
\n-
\n-
781
\n-
782#ifndef DOXYGEN
\n-
783
\n-
784 template<int dimension, class CoordType>
\n-
785 template<int codimension>
\n-\n-
787 SubEntityIterator(int nIntervals, bool end)
\n-
788 : RefinementIteratorSpecial<dimension, CoordType, codimension>(nIntervals, end)
\n-
789 {}
\n-
790
\n-
791#endif
\n-
792
\n-
793 } // namespace Simplex
\n-
\n-
794
\n-
795 } // namespace RefinementImp
\n-
796
\n-
797
\n-
798 namespace RefinementImp {
\n-
799
\n-
800 // ///////////////////////
\n-
801 //
\n-
802 // The refinement traits
\n-
803 //
\n-
804
\n-
805#ifndef DOXYGEN
\n-
806 template<unsigned topologyId, class CoordType, unsigned coerceToId,
\n-
807 int dim>
\n-
808 struct Traits<
\n-
809 topologyId, CoordType, coerceToId, dim,
\n-
810 typename std::enable_if<
\n-
811 ((GeometryTypes::simplex(dim).id() >> 1) ==
\n-
812 (topologyId >> 1) &&
\n-
813 (GeometryTypes::simplex(dim).id() >> 1) ==
\n-
814 (coerceToId >> 1)
\n-
815 )>::type
\n-
816 >
\n-
817 {
\n-
818 typedef Simplex::RefinementImp<dim, CoordType> Imp;
\n-
819 };
\n-
820#endif
\n-
821
\n-
822
\n-
823 } // namespace RefinementImp
\n-
824
\n-
825} // namespace Dune
\n-
826
\n-
827#endif //DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
\n-\n-\n-
This file contains the parts independent of a particular Refinement implementation.
\n-
A unique label for each type of element that can occur in a grid.
\n-
Definition affinegeometry.hh:21
\n-
int pointIndex(const FieldVector< int, dimension > &point)
calculate the index of a given gridpoint within a Kuhn0 simplex
Definition simplex.cc:323
\n-
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:336
\n-
int factorial(int n)
Calculate n!
Definition simplex.cc:289
\n-
int binomial(int upper, int lower)
calculate
Definition simplex.cc:305
\n-
FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from the reference simplex to some Kuhn simplex.
Definition simplex.cc:394
\n-
FieldVector< CoordType, dimension > kuhnToReference(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from some Kuhn simplex to the reference simplex.
Definition simplex.cc:413
\n-
Class providing access to the singletons of the reference elements.
Definition referenceelements.hh:170
\n-
static const ReferenceElement & simplex()
get simplex reference elements
Definition referenceelements.hh:204
\n-
Static tag representing a codimension.
Definition dimension.hh:24
\n-
Implement a MultiLinearGeometry with additional caching.
Definition multilineargeometry.hh:526
\n-\n-
Codim< dimension >::SubEntityIterator VertexIterator
Definition simplex.cc:440
\n-
FieldVector< int, dimension+1 > IndexVector
Definition simplex.cc:443
\n-
CoordType ctype
Definition simplex.cc:436
\n-
static int nVertices(int nIntervals)
Definition simplex.cc:466
\n-
static int nElements(int nIntervals)
Definition simplex.cc:490
\n-
static ElementIterator eEnd(int nIntervals)
Definition simplex.cc:506
\n-
static VertexIterator vEnd(int nIntervals)
Definition simplex.cc:482
\n-
Codim< 0 >::SubEntityIterator ElementIterator
Definition simplex.cc:442
\n-
static VertexIterator vBegin(int nIntervals)
Definition simplex.cc:474
\n-
static ElementIterator eBegin(int nIntervals)
Definition simplex.cc:498
\n-
FieldVector< CoordType, dimension > CoordVector
Definition simplex.cc:441
\n-
static constexpr int dimension
Definition simplex.cc:435
\n-\n-
Dune::CachedMultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition simplex.cc:460
\n-\n-\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition simplex.cc:525
\n-\n-
Refinement::template Codim< dimension >::Geometry Geometry
Definition simplex.cc:527
\n-
RefinementIteratorSpecial< dimension, CoordType, dimension > This
Definition simplex.cc:528
\n-\n-\n-\n-\n-
FieldVector< int, dimension > Vertex
Definition simplex.cc:636
\n-\n-\n-
Refinement::template Codim< 0 >::Geometry Geometry
Definition simplex.cc:618
\n-\n-\n-
RefinementIteratorSpecial< dimension, CoordType, 0 > This
Definition simplex.cc:619
\n-
RefinementImp< dimension, CoordType > Refinement
Definition simplex.cc:615
\n-\n-\n-
RefinementImp< dimension, CoordType > Refinement
Definition simplex.cc:777
\n+
14 // PointDeprecationHelper can be used to prevent a deprecation warning for Point
\n+
15 struct PointDeprecationHelper
\n+
16 {
\n+
17 static const unsigned int dimension = 0;
\n+
18 static const unsigned int numCorners = 1;
\n+
19
\n+
20 static const unsigned int id = 0;
\n+
21
\n+
22 static std::string name () { return "p"; }
\n+
23 };
\n+
24
\n+
25 using Point [[deprecated("Use GeometryTypes::vertex instead.")]] = PointDeprecationHelper;
\n+
26
\n+
27
\n+
28 template< class BaseTopology >
\n+
29 struct [[deprecated("Use GeometryTypes::prismaticExtension(GeometryType gt) instead.")]] Prism
\n+
30 {
\n+
31 static const unsigned int dimension = BaseTopology::dimension + 1;
\n+
32 static const unsigned int numCorners = 2 * BaseTopology::numCorners;
\n+
33
\n+
34 static const unsigned int id = BaseTopology::id | ((unsigned int)prismConstruction << (dimension-1));
\n+
35
\n+
36 static std::string name () { return BaseTopology::name() + "l"; }
\n+
37 };
\n+
38
\n+
39
\n+
40 template< class BaseTopology >
\n+
41 struct [[deprecated("Use GeometryTypes::conicalExtension(GeometryType gt) instead.")]] Pyramid
\n+
42 {
\n+
43 static const unsigned int dimension = BaseTopology::dimension + 1;
\n+
44 static const unsigned int numCorners = BaseTopology::numCorners + 1;
\n+
45
\n+
46 static const unsigned int id = BaseTopology::id | ((unsigned int)pyramidConstruction << (dimension-1));
\n+
47
\n+
48 static std::string name () { return BaseTopology::name() + "o"; }
\n+
49 };
\n+
50
\n+
51
\n+
52
\n+
53 // Properties of Topologies
\n+
54 // ------------------------
\n+
55
\n+
56 template< class Topology >
\n+
57 struct [[deprecated("Use GeometryType::isSimplex() instead.")]] IsSimplex
\n+
58 : public std::integral_constant< bool, (Topology::id >> 1) == 0 >
\n+
59 {};
\n+
60
\n+
61 template< class Topology >
\n+
62 struct [[deprecated("Use GeometryType::isCube() instead.")]] IsCube
\n+
63 : public std::integral_constant< bool, (Topology::id | 1) == (1 << Topology::dimension) - 1 >
\n+
64 {};
\n+
65
\n+
78 [[deprecated("Use GeometryType::isPrismatic() or GeometryType::isConical() instead.")]]
\n+
79 inline static bool isTopology ( TopologyConstruction construction, unsigned int topologyId, int dim, int codim = 0 ) noexcept
\n+
80 {
\n+
81 assert( (dim > 0) && (topologyId < numTopologies( dim )) );
\n+
82 assert( (0 <= codim) && (codim <= dim) );
\n+
83 return (codim >= (dim-1)) || (((topologyId >> (dim-codim-1)) & 1) == (unsigned int)construction);
\n+
84 }
\n+
85
\n+
86
\n+
87 // SimplexTopology
\n+
88 // ---------------
\n+
89
\n+
90 template< unsigned int dim >
\n+
91 struct [[deprecated("Use GeometryTypes::simplex(dim) instead.")]] SimplexTopology
\n+
92 {
\n+
93 typedef Pyramid< typename SimplexTopology< dim-1 >::type > type;
\n+
94 };
\n+
95
\n+
96 template<>
\n+
97 struct [[deprecated("Use GeometryTypes::simplex(dim) instead.")]] SimplexTopology< 0 >
\n+
98 {
\n+
99 typedef Point type;
\n+
100 };
\n+
101
\n+
102
\n+
103
\n+
104 // CubeTopology
\n+
105 // ------------
\n+
106
\n+
107 template< unsigned int dim >
\n+
108 struct [[deprecated("Use GeometryTypes::cube(dim) instead.")]] CubeTopology
\n+
109 {
\n+
110 typedef Prism< typename CubeTopology< dim-1 >::type > type;
\n+
111 };
\n+
112
\n+
113 template<>
\n+
114 struct [[deprecated("Use GeometryTypes::simplex(dim) instead.")]] CubeTopology< 0 >
\n+
115 {
\n+
116 typedef Point type;
\n+
117 };
\n+
118
\n+
119
\n+
120
\n+
121 // PyramidTopology
\n+
122 // ---------------
\n+
123
\n+
124 template< unsigned int dim >
\n+
125 struct [[deprecated]] PyramidTopology
\n+
126 {
\n+
127 typedef Pyramid< typename CubeTopology< dim-1 >::type > type;
\n+
128 };
\n+
129
\n+
130
\n+
131
\n+
132 // PrismTopology
\n+
133 // -------------
\n+
134
\n+
135 template< unsigned int dim >
\n+
136 struct [[deprecated]] PrismTopology
\n+
137 {
\n+
138 typedef Prism< typename SimplexTopology< dim-1 >::type > type;
\n+
139 };
\n+
140
\n+
141
\n+
142
\n+
143
\n+
144 // IfTopology
\n+
145 // ----------
\n+
146
\n+
147 template< template< class > class Operation, int dim, class Topology = PointDeprecationHelper >
\n+
148 struct [[deprecated("Use IfGeometryType instead.")]] IfTopology
\n+
149 {
\n+
150 template< class... Args >
\n+
151 static auto apply ( unsigned int topologyId, Args &&... args )
\n+
152 {
\n+
153 if( topologyId & 1 )
\n+
154 return IfTopology< Operation, dim-1, Prism< Topology > >::apply( topologyId >> 1, std::forward< Args >( args )... );
\n+
155 else
\n+
156 return IfTopology< Operation, dim-1, Pyramid< Topology > >::apply( topologyId >> 1, std::forward< Args >( args )... );
\n+
157 }
\n+
158 };
\n+
159
\n+
160 template< template< class > class Operation, class Topology >
\n+
161 struct [[deprecated("Use IfGeometryType instead.")]] IfTopology< Operation, 0, Topology >
\n+
162 {
\n+
163 template< class... Args >
\n+
164 static auto apply ([[maybe_unused]] unsigned int topologyId, Args &&... args)
\n+
165 {
\n+
166 return Operation< Topology >::apply( std::forward< Args >( args )... );
\n+
167 }
\n+
168 };
\n+
169
\n+
170 } // namespace Impl
\n+
171#endif
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,738 +1,188 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-simplex.cc\n+deprecated_topology.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC\n-_\b6#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC\n+5#ifndef DUNE_DEPRECATED_TOPOLOGY_HH\n+6#define DUNE_DEPRECATED_TOPOLOGY_HH\n 7\n-8// This file is part of DUNE, a Distributed and Unified Numerics Environment\n-9// This file is copyright (C) 2005 Jorrit Fahlke \n-10// This file is licensed under version 2 of the GNU General Public License,\n-11// with a special \"runtime exception.\" See COPYING at the top of the source\n-12// tree for the full licence.\n+8 namespace Impl\n+9 {\n+10\n+11 // Basic Topology Types\n+12 // --------------------\n 13\n-251#include \n-252\n-253#include \n-254#include \n-255\n-256#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\ba_\br_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n-257#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-258#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-259\n-260#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n-261\n-262namespace _\bD_\bu_\bn_\be {\n-263\n-264 namespace RefinementImp {\n-265\n-_\b2_\b7_\b2 namespace Simplex {\n-273\n-274 // //////////////////\n-275 //\n-277 //\n-278\n-280\n-288 [[deprecated(\"Use factorial from dune-common's math.hh\")]]\n-_\b2_\b8_\b9 inline int _\bf_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl(int n)\n-290 {\n-291 int prod = 1;\n-292 for(int i = 1; i <= n; ++i)\n-293 prod *= i;\n-294 return prod;\n-295 }\n-296\n-304 [[deprecated(\"Use binomial from dune-common's math.hh\")]]\n-_\b3_\b0_\b5 inline int _\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl(int upper, int lower)\n-306 {\n-307 lower = std::min( lower, upper - lower );\n-308 if(lower < 0)\n-309 return 0;\n-310 int prod = 1;\n-311 for(int i = upper - lower; i < upper; ++i)\n-312 prod *= (i+1);\n-313 return prod / Dune::factorial(lower);\n-314 }\n-315\n-322 template\n-_\b3_\b2_\b3 int _\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx(const FieldVector &point)\n-324 {\n-325 int index = 0;\n-326 for(int i = 0; i < dimension; ++i)\n-327 index += Dune::binomial(dimension-i + point[i]-1, dimension-i);\n-328 return index;\n-329 }\n-330\n-335 template\n-_\b3_\b3_\b6 FieldVector _\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn(int m)\n-337 {\n-338 FieldVector perm;\n-339 for(int i = 0; i < n; ++i)\n-340 perm[i] = i;\n-341\n-342 int base = 1;\n-343 for(int i = 1; i <= n; ++i)\n-344 base *= i;\n-345\n-346 for(int i = n; i > 0; --i) {\n-347 base /= i;\n-348 int d = m / base;\n-349 m %= base;\n-350 int t = perm[i-1]; perm[i-1] = perm[i-1-d]; perm[i-1-d] = t;\n-351 }\n-352 return perm;\n-353 }\n-354\n-355#if 0\n-356 Has to be checked\n-357 // calculate the index of a permutation\n-358 template\n-359 int getPermIndex(const FieldVector& test) // O(n^2)\n-360 {\n-361 int m = 0;\n-362 FieldVector perm;\n-363 for(int i = 0; i < n; ++i)\n-364 perm[i] = i;\n-365\n-366 int base = 1;\n-367 for(int i = 1; i <= n; ++i)\n-368 base *= i;\n-369\n-370 for(int i = n; i > 0; --i) {\n-371 base /= i;\n-372 int d;\n-373 for(d = 0; d < i; ++d)\n-374 if(test[i-1] == perm[i-1-d])\n-375 break;\n-376 m += d * base;\n-377 int d = m / base;\n-378 m %= base;\n-379 perm[i-1-d] = perm[i-1];\n-380 }\n-381 }\n-382#endif\n-383\n-384 // map between the reference simplex and some arbitrary kuhn simplex\n-(denoted by it's permutation)\n-392 template\n-393 FieldVector\n-_\b3_\b9_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn(\n-395 FieldVector point,\n-397 const FieldVector &kuhn)\n-398 {\n-399 for(int i = dimension - 1; i > 0; --i)\n-400 point[kuhn[i-1]] += point[kuhn[i]];\n-401 return point;\n-402 }\n-403\n-411 template\n-412 FieldVector\n-_\b4_\b1_\b3 _\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be(\n-414 FieldVector point,\n-416 const FieldVector &kuhn)\n-417 {\n-418 for(int i = 0; i < dimension - 1; ++i)\n-419 point[kuhn[i]] -= point[kuhn[i+1]];\n-420 return point;\n-421 }\n-422\n-423\n-425\n-426 // /////////////////////////////////////////\n-427 //\n-428 // refinement implementation for simplices\n-429 //\n-430\n-431 template\n-_\b4_\b3_\b2 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-433 {\n-434 public:\n-_\b4_\b3_\b5 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n-_\b4_\b3_\b6 typedef CoordType _\bc_\bt_\by_\bp_\be;\n-437\n-438 template\n-439 struct _\bC_\bo_\bd_\bi_\bm;\n-_\b4_\b4_\b0 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b4_\b4_\b1 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b4_\b4_\b2 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b4_\b4_\b3 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-444\n-445 static int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals);\n-446 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals);\n-447 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(int nIntervals);\n-448\n-449 static int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals);\n-450 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(int nIntervals);\n-451 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(int nIntervals);\n-452 };\n-453\n-454 template\n-455 template\n-_\b4_\b5_\b6 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n-457 {\n-458 class SubEntityIterator;\n-459 // We don't need the caching, but the uncached MultiLinearGeometry has bug\n-FS#1209\n-_\b4_\b6_\b0 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-461 };\n-462\n-463 template\n-464 int\n-_\b4_\b6_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-466_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals)\n-467 {\n-468 return Dune::binomial(dimension + nIntervals, (int)dimension);\n-469 }\n-470\n-471 template\n-472 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b4_\b7_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-474_\b _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals)\n-475 {\n-476 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n-477 }\n-478\n-479 template\n-480 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b4_\b8_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-482_\b _\bv_\bE_\bn_\bd(int nIntervals)\n-483 {\n-484 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n-485 }\n-486\n-487 template\n-488 int\n-_\b4_\b8_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-490_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals)\n-491 {\n-492 return Dune::power(nIntervals, int(dimension));\n-493 }\n-494\n-495 template\n-496 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b4_\b9_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-498_\b _\be_\bB_\be_\bg_\bi_\bn(int nIntervals)\n-499 {\n-500 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n-501 }\n-502\n-503 template\n-504 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-_\b5_\b0_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n-506_\b _\be_\bE_\bn_\bd(int nIntervals)\n-507 {\n-508 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n-509 }\n-510\n-511 // //////////////\n-512 //\n-513 // The iterator\n-514 //\n-515\n-516 template\n-_\b5_\b1_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n-518\n-519 // vertices\n-520\n-521 template\n-_\b5_\b2_\b2 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-523 {\n-524 public:\n-_\b5_\b2_\b5 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b5_\b2_\b6 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b5_\b2_\b7 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-_\b5_\b2_\b8 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bT_\bh_\bi_\bs;\n-529\n-530 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n-531\n-532 void increment();\n-533 bool equals(const _\bT_\bh_\bi_\bs &other) const;\n-534\n-535 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-536 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry () const;\n-537\n-538 int index() const;\n-539 protected:\n-_\b5_\b4_\b0 typedef FieldVector _\bV_\be_\br_\bt_\be_\bx;\n-541\n-_\b5_\b4_\b2 int _\bs_\bi_\bz_\be;\n-_\b5_\b4_\b3 _\bV_\be_\br_\bt_\be_\bx _\bv_\be_\br_\bt_\be_\bx;\n-544 };\n-545\n-546 template\n-_\b5_\b4_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-548_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n-549 : size(nIntervals)\n-550 {\n-551 vertex[0] = (end) ? size + 1 : 0;\n-552 for(int i = 1; i < dimension; ++ i)\n-553 vertex[i] = 0;\n-554 }\n-555\n-556 template\n-557 void\n-_\b5_\b5_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-559_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n-560 {\n-561 assert(vertex[0] <= size);\n-562 for(int i = dimension - 1; i >= 0; --i) {\n-563 ++vertex[i];\n-564 if(i == 0 || vertex[i] <= vertex[i-1])\n-565 break;\n-566 else\n-567 vertex[i] = 0;\n-568 }\n-569 }\n-570\n-571 template\n-572 bool\n-_\b5_\b7_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-574_\b _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const\n-575 {\n-576 return size == other._\bs_\bi_\bz_\be && vertex == other._\bv_\be_\br_\bt_\be_\bx;\n-577 }\n-578\n-579 template\n-580 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b5_\b8_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-582_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-583 {\n-584 _\bV_\be_\br_\bt_\be_\bx ref = _\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be(vertex, getPermutation(0));\n-585\n-586 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords;\n-587 for(int i = 0; i < dimension; ++i)\n-588 coords[i] = CoordType(ref[i]) / size;\n-589 return coords;\n-590 }\n-591\n-592 template\n-593 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-_\b5_\b9_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by ()\n-const\n-595 {\n-596 std::vector corners(1);\n-597 corners[0] = (_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br)vertex;\n-598 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(GeometryTypes::vertex, corners);\n-599 }\n-600\n-601 template\n-602 int\n-_\b6_\b0_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-604_\b _\bi_\bn_\bd_\be_\bx() const\n-605 {\n-606 return _\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx(vertex);\n-607 }\n-608\n-609 // elements\n-610\n-611 template\n-_\b6_\b1_\b2 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-613 {\n-614 public:\n-_\b6_\b1_\b5 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-_\b6_\b1_\b6 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n-_\b6_\b1_\b7 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n-_\b6_\b1_\b8 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n-_\b6_\b1_\b9 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b> _\bT_\bh_\bi_\bs;\n-620\n-621 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n-622\n-623 void increment();\n-624 bool equals(const _\bT_\bh_\bi_\bs &other) const;\n-625\n-626 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n-627 int index() const;\n-628 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n-629\n-630 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry () const;\n-631\n-632 private:\n-633 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br global(const _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br &local) const;\n-634\n-635 protected:\n-_\b6_\b3_\b6 typedef FieldVector _\bV_\be_\br_\bt_\be_\bx;\n-_\b6_\b3_\b7 constexpr static int nKuhnIntervals = Dune::factorial(dimension);\n-638\n-_\b6_\b3_\b9 _\bV_\be_\br_\bt_\be_\bx _\bo_\br_\bi_\bg_\bi_\bn;\n-_\b6_\b4_\b0 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n-_\b6_\b4_\b1 int _\bs_\bi_\bz_\be;\n-_\b6_\b4_\b2 int _\bi_\bn_\bd_\be_\bx_\b_;\n-643 };\n-644\n-645 template\n-_\b6_\b4_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-647_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n-648 : kuhnIndex(0), size(nIntervals), index_(0)\n-649 {\n-650 for(int i = 0; i < dimension; ++i)\n-651 origin[i] = 0;\n-652 if(end) {\n-653 index_ = Refinement::nElements(nIntervals);\n-654 origin[0] = size;\n-655 }\n-656 }\n-657\n-658 template\n-659 void\n-_\b6_\b6_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-661_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n-662 {\n-663 assert(origin[0] < size);\n-664\n-665 ++index_;\n-666\n-667 while(1) {\n-668 ++kuhnIndex;\n-669 if(kuhnIndex == nKuhnIntervals) {\n-670 kuhnIndex = 0;\n-671 // increment origin\n-672 for(int i = dimension - 1; i >= 0; --i) {\n-673 ++origin[i];\n-674 if(i == 0 || origin[i] <= origin[i-1])\n-675 break;\n-676 else\n-677 origin[i] = 0;\n-678 }\n-679 }\n-680\n-681 // test whether the current simplex has any corner outside the kuhn0\n-simplex\n-682 FieldVector perm = getPermutation(kuhnIndex);\n-683 _\bV_\be_\br_\bt_\be_\bx corner = origin;\n-684 bool outside = false;\n-685 for(int i = 0; i < dimension; ++i) {\n-686 // next corner\n-687 ++corner[perm[i]];\n-688 if(perm[i] > 0)\n-689 if(corner[perm[i]] > corner[perm[i]-1]) {\n-690 outside = true;\n-691 break;\n-692 }\n-693 }\n-694 if(!outside)\n-695 return;\n-696 }\n-697 }\n-698\n-699 template\n-700 bool\n-_\b7_\b0_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-702_\b _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const\n-703 {\n-704 return size == other._\bs_\bi_\bz_\be && index_ == other._\bi_\bn_\bd_\be_\bx_\b_;\n-705 }\n-706\n-707 template\n-708 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-_\b7_\b0_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-710_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n-711 {\n-712 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br indices;\n-713 FieldVector perm = getPermutation(kuhnIndex);\n-714 _\bV_\be_\br_\bt_\be_\bx vertex = origin;\n-715 indices[0] = _\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx(vertex);\n-716 for(int i = 0; i < dimension; ++i) {\n-717 ++vertex[perm[i]];\n-718 indices[i+1] = _\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx(vertex);\n-719 }\n-720 if (kuhnIndex%2 == 1)\n-721 for(int i = 0; i < (dimension+1)/2; ++i) {\n-722 int t = indices[i];\n-723 indices[i] = indices[dimension-i];\n-724 indices[dimension-i] = t;\n-725 }\n-726 return indices;\n-727 }\n-728\n-729 template\n-730 int\n-_\b7_\b3_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-732_\b _\bi_\bn_\bd_\be_\bx() const\n-733 {\n-734 return index_;\n-735 }\n-736\n-737 template\n-738 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-_\b7_\b3_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-740_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n-741 {\n-742 return global(_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>\n-743 ::simplex().position(0,0));\n-744 }\n-745\n-746 template\n-747 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-_\b7_\b4_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by () const\n-749 {\n-750 std::vector corners(dimension+1);\n-751 auto refelem = _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx();\n-752 for(int i = 0; i <= dimension; ++i)\n-753 corners[i] = global(refelem.position(i, dimension));\n-754 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(refelem.type(), corners);\n-755 }\n-756\n-757 template\n-758 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-759 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n-760_\b _\bg_\bl_\bo_\bb_\ba_\bl(const CoordVector &local) const {\n-761 CoordVector v =\n-762 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn(local, getPermutation(kuhnIndex));\n-763 v += origin;\n-764 v /= (typename CoordVector::value_type)size;\n-765 return _\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be(v, getPermutation(0));\n-766 }\n-767\n-768 // common\n-769\n-770 template\n-771 template\n-_\b7_\b7_\b2 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n-SubEntityIterator\n-773 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n-774 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-775 {\n-776 public:\n-_\b7_\b7_\b7 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n-778\n-_\b7_\b7_\b9 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end = false);\n-780 };\n-781\n-782#ifndef DOXYGEN\n-783\n-784 template\n-785 template\n-786 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n-787_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end)\n-788 : _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(nIntervals,\n-end)\n-789 {}\n-790\n-791#endif\n-792\n-793 } // namespace Simplex\n-794\n-795 } // namespace RefinementImp\n-796\n-797\n-798 namespace RefinementImp {\n-799\n-800 // ///////////////////////\n-801 //\n-802 // The refinement traits\n-803 //\n-804\n-805#ifndef DOXYGEN\n-806 template\n-808 struct Traits<\n-809 topologyId, CoordType, coerceToId, dim,\n-810 typename std::enable_if<\n-811 ((GeometryTypes::simplex(dim).id() >> 1) ==\n-812 (topologyId >> 1) &&\n-813 (GeometryTypes::simplex(dim).id() >> 1) ==\n-814 (coerceToId >> 1)\n-815 )>::type\n-816 >\n-817 {\n-818 typedef Simplex::RefinementImp Imp;\n-819 };\n-820#endif\n-821\n-822\n-823 } // namespace RefinementImp\n-824\n-825} // namespace Dune\n-826\n-827#endif //DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC\n-_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n-_\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\ba_\br_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh\n-_\bb_\ba_\bs_\be_\b._\bc_\bc\n-This file contains the parts independent of a particular Refinement\n-implementation.\n-_\bt_\by_\bp_\be_\b._\bh_\bh\n-A unique label for each type of element that can occur in a grid.\n-_\bD_\bu_\bn_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx\n-int pointIndex(const FieldVector< int, dimension > &point)\n-calculate the index of a given gridpoint within a Kuhn0 simplex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:323\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn\n-FieldVector< int, n > getPermutation(int m)\n-Calculate permutation from it's index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:336\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl\n-int factorial(int n)\n-Calculate n!\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:289\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl\n-int binomial(int upper, int lower)\n-calculate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:305\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn\n-FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType,\n-dimension > point, const FieldVector< int, dimension > &kuhn)\n-Map from the reference simplex to some Kuhn simplex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:394\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-FieldVector< CoordType, dimension > kuhnToReference(FieldVector< CoordType,\n-dimension > point, const FieldVector< int, dimension > &kuhn)\n-Map from some Kuhn simplex to the reference simplex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:413\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-Class providing access to the singletons of the reference elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:170\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx\n-static const ReferenceElement & simplex()\n-get simplex reference elements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:204\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-Static tag representing a codimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Implement a MultiLinearGeometry with additional caching.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:526\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:433\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< dimension >::SubEntityIterator VertexIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:440\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< int, dimension+1 > IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:443\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bc_\bt_\by_\bp_\be\n-CoordType ctype\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:436\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n-static int nVertices(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:466\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n-static int nElements(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:490\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n-static ElementIterator eEnd(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:506\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n-static VertexIterator vEnd(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:482\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Codim< 0 >::SubEntityIterator ElementIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:442\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n-static VertexIterator vBegin(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:474\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n-static ElementIterator eBegin(int nIntervals)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:498\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-FieldVector< CoordType, dimension > CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:441\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static constexpr int dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:435\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:457\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Dune::CachedMultiLinearGeometry< CoordType, dimension-codimension, dimension >\n-Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:460\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:517\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:523\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:526\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:525\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bv_\be_\br_\bt_\be_\bx\n-Vertex vertex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:543\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Refinement::template Codim< dimension >::Geometry Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:527\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bT_\bh_\bi_\bs\n-RefinementIteratorSpecial< dimension, CoordType, dimension > This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:528\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx\n-FieldVector< int, dimension > Vertex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:540\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be\n-int size\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:542\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:613\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n-int kuhnIndex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:640\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx\n-FieldVector< int, dimension > Vertex\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:636\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bo_\br_\bi_\bg_\bi_\bn\n-Vertex origin\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:639\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bi_\bn_\bd_\be_\bx_\b_\n-int index_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:642\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Refinement::template Codim< 0 >::Geometry Geometry\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:618\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::IndexVector IndexVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:616\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n-Refinement::CoordVector CoordVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:617\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bT_\bh_\bi_\bs\n-RefinementIteratorSpecial< dimension, CoordType, 0 > This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:619\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:615\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n-_\b0_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be\n-int size\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:641\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n-_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SubEntityIterator(int nIntervals, bool end=false)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n-RefinementImp< dimension, CoordType > Refinement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:777\n+14 // PointDeprecationHelper can be used to prevent a deprecation warning for\n+Point\n+15 struct PointDeprecationHelper\n+16 {\n+17 static const unsigned int dimension = 0;\n+18 static const unsigned int numCorners = 1;\n+19\n+20 static const unsigned int id = 0;\n+21\n+22 static std::string name () { return \"p\"; }\n+23 };\n+24\n+25 using Point [[deprecated(\"Use GeometryTypes::vertex instead.\")]] =\n+PointDeprecationHelper;\n+26\n+27\n+28 template< class BaseTopology >\n+29 struct [[deprecated(\"Use GeometryTypes::prismaticExtension(GeometryType gt)\n+instead.\")]] Prism\n+30 {\n+31 static const unsigned int dimension = BaseTopology::dimension + 1;\n+32 static const unsigned int numCorners = 2 * BaseTopology::numCorners;\n+33\n+34 static const unsigned int id = BaseTopology::id | ((unsigned\n+int)prismConstruction << (dimension-1));\n+35\n+36 static std::string name () { return BaseTopology::name() + \"l\"; }\n+37 };\n+38\n+39\n+40 template< class BaseTopology >\n+41 struct [[deprecated(\"Use GeometryTypes::conicalExtension(GeometryType gt)\n+instead.\")]] Pyramid\n+42 {\n+43 static const unsigned int dimension = BaseTopology::dimension + 1;\n+44 static const unsigned int numCorners = BaseTopology::numCorners + 1;\n+45\n+46 static const unsigned int id = BaseTopology::id | ((unsigned\n+int)pyramidConstruction << (dimension-1));\n+47\n+48 static std::string name () { return BaseTopology::name() + \"o\"; }\n+49 };\n+50\n+51\n+52\n+53 // Properties of Topologies\n+54 // ------------------------\n+55\n+56 template< class Topology >\n+57 struct [[deprecated(\"Use GeometryType::isSimplex() instead.\")]] IsSimplex\n+58 : public std::integral_constant< bool, (Topology::id >> 1) == 0 >\n+59 {};\n+60\n+61 template< class Topology >\n+62 struct [[deprecated(\"Use GeometryType::isCube() instead.\")]] IsCube\n+63 : public std::integral_constant< bool, (Topology::id | 1) == (1 <<\n+Topology::dimension) - 1 >\n+64 {};\n+65\n+78 [[deprecated(\"Use GeometryType::isPrismatic() or GeometryType::isConical()\n+instead.\")]]\n+79 inline static bool isTopology ( TopologyConstruction construction, unsigned\n+int topologyId, int dim, int codim = 0 ) noexcept\n+80 {\n+81 assert( (dim > 0) && (topologyId < numTopologies( dim )) );\n+82 assert( (0 <= codim) && (codim <= dim) );\n+83 return (codim >= (dim-1)) || (((topologyId >> (dim-codim-1)) & 1) ==\n+(unsigned int)construction);\n+84 }\n+85\n+86\n+87 // SimplexTopology\n+88 // ---------------\n+89\n+90 template< unsigned int dim >\n+91 struct [[deprecated(\"Use GeometryTypes::simplex(dim) instead.\")]]\n+SimplexTopology\n+92 {\n+93 typedef Pyramid< typename SimplexTopology< dim-1 >::type > type;\n+94 };\n+95\n+96 template<>\n+97 struct [[deprecated(\"Use GeometryTypes::simplex(dim) instead.\")]]\n+SimplexTopology< 0 >\n+98 {\n+99 typedef Point type;\n+100 };\n+101\n+102\n+103\n+104 // CubeTopology\n+105 // ------------\n+106\n+107 template< unsigned int dim >\n+108 struct [[deprecated(\"Use GeometryTypes::cube(dim) instead.\")]] CubeTopology\n+109 {\n+110 typedef Prism< typename CubeTopology< dim-1 >::type > type;\n+111 };\n+112\n+113 template<>\n+114 struct [[deprecated(\"Use GeometryTypes::simplex(dim) instead.\")]]\n+CubeTopology< 0 >\n+115 {\n+116 typedef Point type;\n+117 };\n+118\n+119\n+120\n+121 // PyramidTopology\n+122 // ---------------\n+123\n+124 template< unsigned int dim >\n+125 struct [[deprecated]] PyramidTopology\n+126 {\n+127 typedef Pyramid< typename CubeTopology< dim-1 >::type > type;\n+128 };\n+129\n+130\n+131\n+132 // PrismTopology\n+133 // -------------\n+134\n+135 template< unsigned int dim >\n+136 struct [[deprecated]] PrismTopology\n+137 {\n+138 typedef Prism< typename SimplexTopology< dim-1 >::type > type;\n+139 };\n+140\n+141\n+142\n+143\n+144 // IfTopology\n+145 // ----------\n+146\n+147 template< template< class > class Operation, int dim, class Topology =\n+PointDeprecationHelper >\n+148 struct [[deprecated(\"Use IfGeometryType instead.\")]] IfTopology\n+149 {\n+150 template< class... Args >\n+151 static auto apply ( unsigned int topologyId, Args &&... args )\n+152 {\n+153 if( topologyId & 1 )\n+154 return IfTopology< Operation, dim-1, Prism< Topology > >::apply( topologyId\n+>> 1, std::forward< Args >( args )... );\n+155 else\n+156 return IfTopology< Operation, dim-1, Pyramid< Topology > >::apply\n+( topologyId >> 1, std::forward< Args >( args )... );\n+157 }\n+158 };\n+159\n+160 template< template< class > class Operation, class Topology >\n+161 struct [[deprecated(\"Use IfGeometryType instead.\")]] IfTopology< Operation,\n+0, Topology >\n+162 {\n+163 template< class... Args >\n+164 static auto apply ([[maybe_unused]] unsigned int topologyId, Args &&...\n+args)\n+165 {\n+166 return Operation< Topology >::apply( std::forward< Args >( args )... );\n+167 }\n+168 };\n+169\n+170 } // namespace Impl\n+171#endif\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00221.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00221.html", "unified_diff": "@@ -80,15 +80,15 @@\n Functions \n
base.cc File Reference
\n \n
\n \n

This file contains the parts independent of a particular Refinement implementation. \n More...

\n-
#include <dune/geometry/type.hh>
\n+
#include <dune/geometry/type.hh>
\n
\n

Go to the source code of this file.

\n \n \n \n \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00221_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00221_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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n
5#ifndef DUNE_GEOMETRY_REFINEMENT_BASE_CC
\n
6#define DUNE_GEOMETRY_REFINEMENT_BASE_CC
\n
7
\n-
15#include <dune/geometry/type.hh>
\n+
15#include <dune/geometry/type.hh>
\n
16
\n
17namespace Dune
\n
18{
\n
\n
28 namespace RefinementImp
\n
29 {
\n
30 // /////////////////////////////////
\n@@ -233,15 +233,15 @@\n
\n
251 };
\n
\n
252
\n
254} // namespace Dune
\n
255
\n
256#endif // DUNE_GEOMETRY_REFINEMENT_BASE_CC
\n-
A unique label for each type of element that can occur in a grid.
\n+
A unique label for each type of element that can occur in a grid.
\n
RefinementIntervals refinementIntervals(int intervals)
Creates a RefinementIntervals object.
Definition base.cc:108
\n
RefinementIntervals refinementLevels(int levels)
Creates a RefinementIntervals object.
Definition base.cc:117
\n
Definition affinegeometry.hh:21
\n
Mapping from geometryType, CoordType and coerceTo to a particular Refinement implementation.
Definition base.cc:70
\n
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:94
\n
RefinementIntervals(int i)
Definition base.cc:98
\n
int intervals() const
Definition base.cc:100
\n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00224.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00224.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: quadraturerules.hh File Reference\n+dune-geometry: pyramidtriangulation.cc File Reference\n \n \n \n \n \n \n \n@@ -65,119 +65,80 @@\n \n \n \n \n \n \n \n
\n \n-
quadraturerules.hh File Reference
\n+Functions
\n+
pyramidtriangulation.cc File Reference
\n \n
\n-
#include <algorithm>
\n-#include <iostream>
\n-#include <limits>
\n-#include <mutex>
\n-#include <utility>
\n-#include <vector>
\n-#include <dune/common/fvector.hh>
\n-#include <dune/common/exceptions.hh>
\n-#include <dune/common/stdstreams.hh>
\n-#include <dune/common/stdthread.hh>
\n-#include <dune/common/visibility.hh>
\n-#include <dune/geometry/type.hh>
\n-#include <dune/geometry/typeindex.hh>
\n-#include "quadraturerules/pointquadrature.hh"
\n-#include "quadraturerules/gausslobattoquadrature.hh"
\n-#include "quadraturerules/gaussquadrature.hh"
\n-#include "quadraturerules/gaussradauleftquadrature.hh"
\n-#include "quadraturerules/gaussradaurightquadrature.hh"
\n-#include "quadraturerules/jacobi1quadrature.hh"
\n-#include "quadraturerules/jacobi2quadrature.hh"
\n-#include "quadraturerules/jacobiNquadrature.hh"
\n-#include "quadraturerules/prismquadrature.hh"
\n-#include "quadraturerules/simplexquadrature.hh"
\n-#include "quadraturerules/tensorproductquadrature.hh"
\n+
#include <dune/common/fvector.hh>
\n+#include <dune/common/typetraits.hh>
\n+#include <dune/geometry/referenceelements.hh>
\n+#include <dune/geometry/type.hh>
\n+#include "base.cc"
\n+#include "simplex.cc"
\n
\n

Go to the source code of this file.

\n

\n Classes

struct  Dune::RefinementImp::Traits< topologyId, CoordType, coerceToId, dimension, Dummy >
 Mapping from geometryType, CoordType and coerceTo to a particular Refinement implementation. More...
\n \n-\n-\n+\n+\n \n-\n-\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::QuadratureOrderOutOfRange
 Exception thrown if a desired QuadratureRule is not available, because the requested order is to high. More...
class  Dune::RefinementImp::PyramidTriangulation::RefinementImp< dimension_, CoordType >
 Implementation of the refinement of a pyramid into simplices. More...
 
class  Dune::QuadraturePoint< ct, dim >
 Single evaluation point in a quadrature rule. More...
struct  Dune::RefinementImp::PyramidTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::QuadratureRule< ct, dim >
 Abstract base class for quadrature rules. More...
class  Dune::RefinementImp::PyramidTriangulation::RefinementIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::QuadratureRules< ctype, dim >
 A container for all quadrature rules of dimension dim More...
class  Dune::RefinementImp::PyramidTriangulation::RefinementIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::QuadratureRuleFactory< ctype, dim >
 Factory class for creation of quadrature rules, depending on GeometryType, order and QuadratureType. More...
 
class  Dune::QuadratureRuleFactory< ctype, 0 >
 
class  Dune::QuadratureRuleFactory< ctype, 1 >
 
class  Dune::QuadratureRuleFactory< ctype, 2 >
 
class  Dune::QuadratureRuleFactory< ctype, 3 >
class  Dune::RefinementImp::PyramidTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
\n \n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Namespaces

namespace  Dune
 
namespace  Dune::QuadratureType
 Defines an enum for currently available quadrature rules.
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 
namespace  Dune::RefinementImp::PyramidTriangulation
 This namespace contains the Refinement implementation for triangulating pyramids (GeometryType::pyramid -> GeometryType::simplex)
 
\n \n-\n-\n+\n+\n

\n Macros

#define DUNE_INCLUDING_IMPLEMENTATION
 
#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
 
\n-\n-\n-\n+\n+\n+\n+\n

\n-Enumerations

enum  Dune::QuadratureType::Enum {
\n-  Dune::QuadratureType::GaussLegendre = 0\n-, Dune::QuadratureType::GaussJacobi_1_0 = 1\n-, Dune::QuadratureType::GaussJacobi_2_0 = 2\n-, Dune::QuadratureType::GaussJacobi_n_0 = 3\n-,
\n-  Dune::QuadratureType::GaussLobatto = 4\n-, Dune::QuadratureType::GaussRadauLeft = 5\n-, Dune::QuadratureType::GaussRadauRight = 6\n-, Dune::QuadratureType::size\n-
\n- }
 

\n+Functions

template<int dimension, class CoordType >
FieldVector< CoordType, dimension > Dune::RefinementImp::PyramidTriangulation::transformCoordinate (FieldVector< CoordType, dimension > point)
 
\n-

Detailed Description

\n-

Interface for quadrature points and rules

\n-

Macro Definition Documentation

\n-\n-

◆ DUNE_INCLUDING_IMPLEMENTATION

\n+

Macro Definition Documentation

\n+\n+

◆ DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC

\n \n
\n
\n \n \n- \n+ \n \n
#define DUNE_INCLUDING_IMPLEMENTATION#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
\n
\n \n
\n
\n
\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,85 +1,59 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n-quadraturerules.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+pyramidtriangulation.cc File Reference\n #include \n-#include \n-#include \n-#include \n-#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n-#include \"quadraturerules/pointquadrature.hh\"\n-#include \"quadraturerules/gausslobattoquadrature.hh\"\n-#include \"quadraturerules/gaussquadrature.hh\"\n-#include \"quadraturerules/gaussradauleftquadrature.hh\"\n-#include \"quadraturerules/gaussradaurightquadrature.hh\"\n-#include \"quadraturerules/jacobi1quadrature.hh\"\n-#include \"quadraturerules/jacobi2quadrature.hh\"\n-#include \"quadraturerules/jacobiNquadrature.hh\"\n-#include \"quadraturerules/prismquadrature.hh\"\n-#include \"quadraturerules/simplexquadrature.hh\"\n-#include \"quadraturerules/tensorproductquadrature.hh\"\n+#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\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:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bO_\br_\bd_\be_\br_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be\n-\u00a0 Exception thrown if a desired _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be is not available, because\n- the requested order is to high. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+\u00a0 Implementation of the refinement of a pyramid into simplices. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b<_\b _\bc_\bt_\b,_\b _\bd_\bi_\bm_\b _\b>\n-\u00a0 Single evaluation point in a quadrature rule. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\b _\bc_\bt_\b,_\b _\bd_\bi_\bm_\b _\b>\n-\u00a0 Abstract base class for quadrature rules. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b _\b>\n-\u00a0 A container for all quadrature rules of dimension dim _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b _\b>\n-\u00a0 Factory class for creation of quadrature rules, depending on\n- _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be, order and _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\b1_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\b2_\b _\b>\n-\u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\b3_\b _\b>\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\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:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be\n-\u00a0 Defines an enum for currently available quadrature rules.\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn\n+ This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for\n+\u00a0 triangulating pyramids (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bp_\by_\br_\ba_\bm_\bi_\bd -> _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:\n+ _\bs_\bi_\bm_\bp_\bl_\be_\bx)\n \u00a0\n M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bI_\bN_\bC_\bL_\bU_\bD_\bI_\bN_\bG_\b__\bI_\bM_\bP_\bL_\bE_\bM_\bE_\bN_\bT_\bA_\bT_\bI_\bO_\bN\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bP_\bY_\bR_\bA_\bM_\bI_\bD_\bT_\bR_\bI_\bA_\bN_\bG_\bU_\bL_\bA_\bT_\bI_\bO_\bN_\b__\bC_\bC\n \u00a0\n-E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n-enum \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm {\n- \u00a0\u00a0_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be = 0 , _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:\n- _\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0 = 1 , _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0 = 2 , _\bD_\bu_\bn_\be_\b:_\b:\n- _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 = 3 ,\n- \u00a0\u00a0_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo = 4 , _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:\n- _\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt = 5 , _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt = 6 , _\bD_\bu_\bn_\be_\b:_\b:\n- _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bz_\be\n- }\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+FieldVector< CoordType, dimension >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:\n+ _\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+ (FieldVector< CoordType, dimension >\n+ point)\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-Interface for quadrature points and rules\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\u00a0D\bDU\bUN\bNE\bE_\b_I\bIN\bNC\bCL\bLU\bUD\bDI\bIN\bNG\bG_\b_I\bIM\bMP\bPL\bLE\bEM\bME\bEN\bNT\bTA\bAT\bTI\bIO\bON\bN *\b**\b**\b**\b**\b*\n-#define DUNE_INCLUDING_IMPLEMENTATION\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_P\bPY\bYR\bRA\bAM\bMI\bID\bDT\bTR\bRI\bIA\bAN\bNG\bGU\bUL\bLA\bAT\bTI\bIO\bON\bN_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n+#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00224_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00224_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: quadraturerules.hh Source File\n+dune-geometry: pyramidtriangulation.cc Source File\n \n \n \n \n \n \n \n@@ -70,478 +70,523 @@\n
\n \n \n \n \n \n \n
\n-
quadraturerules.hh
\n+
pyramidtriangulation.cc
\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5
\n-
6#ifndef DUNE_GEOMETRY_QUADRATURERULES_HH
\n-
7#define DUNE_GEOMETRY_QUADRATURERULES_HH
\n-
8
\n-
9#include <algorithm>
\n-
10#include <iostream>
\n-
11#include <limits>
\n-
12#include <mutex>
\n-
13#include <utility>
\n-
14#include <vector>
\n-
15
\n-
16#include <dune/common/fvector.hh>
\n-
17#include <dune/common/exceptions.hh>
\n-
18#include <dune/common/stdstreams.hh>
\n-
19#include <dune/common/stdthread.hh>
\n-
20#include <dune/common/visibility.hh>
\n-
21
\n-
22#include <dune/geometry/type.hh>
\n-\n-
24
\n-
30namespace Dune {
\n-
31
\n-
36 class QuadratureOrderOutOfRange : public NotImplemented {};
\n-
37
\n-
43 template<typename ct, int dim>
\n-
\n-\n-
45 public:
\n-
47 constexpr static int dimension = dim;
\n-
48
\n-
50 typedef ct Field;
\n-
51
\n-
53 typedef Dune::FieldVector<ct,dim> Vector;
\n-
54
\n-
\n-
56 QuadraturePoint (const Vector& x, ct w) : local(x)
\n-
57 {
\n-
58 weight_ = w;
\n-
59 }
\n-
\n-
60
\n-
\n-
62 const Vector& position () const
\n-
63 {
\n-
64 return local;
\n-
65 }
\n-
\n-
66
\n-
\n-
68 const ct &weight () const
\n-
69 {
\n-
70 return weight_;
\n-
71 }
\n-
\n-
72
\n-
73 protected:
\n-
74 FieldVector<ct, dim> local;
\n-\n-
76 };
\n-
\n-
77
\n-
\n-
81 namespace QuadratureType {
\n-
\n-
82 enum Enum {
\n-\n-
93
\n-\n-
100
\n-\n-
107
\n-\n-
120
\n-\n-
128
\n-\n-
136
\n-\n-
145 size
\n-
146 };
\n-
\n-
147 }
\n-
\n-
148
\n-
152 template<typename ct, int dim>
\n-
\n-
153 class QuadratureRule : public std::vector<QuadraturePoint<ct,dim> >
\n-
154 {
\n-
155 public:
\n-\n-
162
\n-
163 protected:
\n-\n-
166
\n-\n-
169 public:
\n-
171 constexpr static int d = dim;
\n-
172
\n-
174 typedef ct CoordType;
\n+
5#ifndef DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
\n+
6#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
\n+
7
\n+
8#include <dune/common/fvector.hh>
\n+
9#include <dune/common/typetraits.hh>
\n+
10
\n+\n+
12#include <dune/geometry/type.hh>
\n+
13
\n+
14#include "base.cc"
\n+
15#include "simplex.cc"
\n+
16
\n+
17namespace Dune
\n+
18{
\n+
19 namespace RefinementImp
\n+
20 {
\n+
\n+
26 namespace PyramidTriangulation
\n+
27 {
\n+
28 // ////////////
\n+
29 //
\n+
30 // Utilities
\n+
31 //
\n+
32
\n+\n+\n+
35
\n+
36 // ////////////////////////////////////
\n+
37 //
\n+
38 // Refine a pyramid with simplices
\n+
39 //
\n+
40
\n+
41 // forward declaration of the iterator base
\n+
42 template<int dimension, class CoordType, int codimension>
\n+\n+
44
\n+
45 /*
\n+
46 * The permutations 0 and 1 of the Kuhn-decomposition of a cube into simplices form a pyramid.
\n+
47 * The resulting pyramid is not oriented the same as the reference pyramid and so the Kuhn-coordinates
\n+
48 * have to be transformed using the method below.
\n+
49 */
\n+
50 template<int dimension, class CoordType> FieldVector<CoordType, dimension>
\n+
\n+
51 transformCoordinate( FieldVector<CoordType, dimension> point)
\n+
52 {
\n+
53 FieldVector<CoordType, dimension> transform;
\n+
54 transform[0]=1-point[0];
\n+
55 transform[1]=1-point[1];
\n+
56 transform[2]=point[2];
\n+
57 return transform;
\n+
58 }
\n+
\n+
59
\n+
66 template<int dimension_, class CoordType>
\n+
\n+\n+
68 {
\n+
69 public:
\n+
70 constexpr static int dimension = dimension_;
\n+
71
\n+
72 typedef CoordType ctype;
\n+
73
\n+
74 template<int codimension>
\n+
75 struct Codim;
\n+\n+
77 typedef FieldVector<CoordType, dimension> CoordVector;
\n+\n+
79 typedef FieldVector<int, dimension+1> IndexVector;
\n+
80
\n+
81 static int nVertices(int nIntervals);
\n+
82 static VertexIterator vBegin(int nIntervals);
\n+
83 static VertexIterator vEnd(int nIntervals);
\n+
84
\n+
85 static int nElements(int nIntervals);
\n+
86 static ElementIterator eBegin(int nIntervals);
\n+
87 static ElementIterator eEnd(int nIntervals);
\n+
88
\n+
89 private:
\n+
90 friend class RefinementIteratorSpecial<dimension, CoordType, 0>;
\n+
91 friend class RefinementIteratorSpecial<dimension, CoordType, dimension>;
\n+
92
\n+\n+
94
\n+
95 constexpr static int nKuhnSimplices = 2;
\n+
96 };
\n+
\n+
97
\n+
98 template<int dimension, class CoordType>
\n+
99 template<int codimension>
\n+
\n+
100 struct RefinementImp<dimension, CoordType>::Codim
\n+
101 {
\n+
102 class SubEntityIterator;
\n+\n+
104 };
\n+
\n+
105
\n+
106 template<int dimension, class CoordType>
\n+
107 int
\n+
\n+\n+
109 nVertices(int nIntervals)
\n+
110 {
\n+
111 return BackendRefinement::nVertices(nIntervals) * nKuhnSimplices;
\n+
112 }
\n+
\n+
113
\n+
114 template<int dimension, class CoordType>
\n+\n+
\n+\n+
117 vBegin(int nIntervals)
\n+
118 {
\n+
119 return VertexIterator(nIntervals);
\n+
120 }
\n+
\n+
121
\n+
122 template<int dimension, class CoordType>
\n+\n+
\n+\n+
125 vEnd(int nIntervals)
\n+
126 {
\n+
127 return VertexIterator(nIntervals, true);
\n+
128 }
\n+
\n+
129
\n+
130 template<int dimension, class CoordType>
\n+
131 int
\n+
\n+\n+
133 nElements(int nIntervals)
\n+
134 {
\n+
135 return BackendRefinement::nElements(nIntervals) * nKuhnSimplices;
\n+
136 }
\n+
\n+
137
\n+
138 template<int dimension, class CoordType>
\n+\n+
\n+\n+
141 eBegin(int nIntervals)
\n+
142 {
\n+
143 return ElementIterator(nIntervals);
\n+
144 }
\n+
\n+
145
\n+
146 template<int dimension, class CoordType>
\n+\n+
\n+\n+
149 eEnd(int nIntervals)
\n+
150 {
\n+
151 return ElementIterator(nIntervals, true);
\n+
152 }
\n+
\n+
153
\n+
154 // //////////////
\n+
155 //
\n+
156 // The iterator
\n+
157 //
\n+
158
\n+
159 // vertices
\n+
160 template<int dimension, class CoordType>
\n+
\n+
161 class RefinementIteratorSpecial<dimension, CoordType, dimension>
\n+
162 {
\n+
163 public:
\n+\n+
165 typedef typename Refinement::CoordVector CoordVector;
\n+
166 typedef typename Refinement::template Codim<dimension>::Geometry Geometry;
\n+
167
\n+
168 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n+
169
\n+
170 void increment();
\n+
171
\n+
172 CoordVector coords() const;
\n+
173
\n+
174 Geometry geometry() const;
\n
175
\n-
177 virtual int order () const { return delivered_order; }
\n-
178
\n-
180 virtual GeometryType type () const { return geometry_type; }
\n-
181 virtual ~QuadratureRule(){}
\n-
182
\n-
185 typedef typename std::vector<QuadraturePoint<ct,dim> >::const_iterator iterator;
\n-
186
\n-
187 protected:
\n-\n-\n-
190 };
\n-
\n-
191
\n-
192 // Forward declaration of the factory class,
\n-
193 // needed internally by the QuadratureRules container class.
\n-
194 template<typename ctype, int dim> class QuadratureRuleFactory;
\n-
195
\n-
199 template<typename ctype, int dim>
\n-
\n-\n-
201
\n-\n-
204
\n-
205 // indexed by quadrature order
\n-
206 using QuadratureOrderVector = std::vector<std::pair<std::once_flag, QuadratureRule> >;
\n-
207
\n-
208 // indexed by geometry type
\n-
209 using GeometryTypeVector = std::vector<std::pair<std::once_flag, QuadratureOrderVector> >;
\n-
210
\n-
211 // indexed by quadrature type enum
\n-
212 using QuadratureCacheVector = std::vector<std::pair<std::once_flag, GeometryTypeVector> >;
\n-
213
\n-
215 DUNE_EXPORT const QuadratureRule& _rule(const GeometryType& t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre) const
\n-
216 {
\n-
217 assert(t.dim()==dim);
\n-
218
\n-
219 DUNE_ASSERT_CALL_ONCE();
\n-
220
\n-
221 static QuadratureCacheVector quadratureCache(QuadratureType::size);
\n-
222
\n-
223 auto& [ onceFlagQuadratureType, geometryTypes ] = quadratureCache[qt];
\n-
224 // initialize geometry types for this quadrature type once
\n-
225 std::call_once(onceFlagQuadratureType, [&types = geometryTypes]{
\n-
226 types = GeometryTypeVector(LocalGeometryTypeIndex::size(dim));
\n-
227 });
\n-
228
\n-
229 auto& [ onceFlagGeometryType, quadratureOrders ] = geometryTypes[LocalGeometryTypeIndex::index(t)];
\n-
230 // initialize quadrature orders for this geometry type and quadrature type once
\n-
231 std::call_once(onceFlagGeometryType, [&, &orders = quadratureOrders]{
\n-
232 // we only need one quadrature rule for points, not maxint
\n-
233 const auto numRules = dim == 0 ? 1 : QuadratureRuleFactory<ctype,dim>::maxOrder(t, qt)+1;
\n-
234 orders = QuadratureOrderVector(numRules);
\n-
235 });
\n-
236
\n-
237 // we only have one quadrature rule for points
\n-
238 auto& [ onceFlagQuadratureOrder, quadratureRule ] = quadratureOrders[dim == 0 ? 0 : p];
\n-
239 // initialize quadrature rule once
\n-
240 std::call_once(onceFlagQuadratureOrder, [&, &rule = quadratureRule]{
\n-\n-
242 });
\n-
243
\n-
244 return quadratureRule;
\n-
245 }
\n-
246
\n-
248 DUNE_EXPORT static QuadratureRules& instance()
\n-
249 {
\n-
250 static QuadratureRules instance;
\n-
251 return instance;
\n-
252 }
\n-
253
\n-
255 QuadratureRules () = default;
\n-
256 public:
\n-
258 static unsigned
\n-\n-
264
\n-
\n-\n-
267 {
\n-
268 return instance()._rule(t,p,qt);
\n-
269 }
\n-
\n-
270
\n-
\n-\n-
273 {
\n-
274 GeometryType gt(t,dim);
\n-
275 return instance()._rule(gt,p,qt);
\n-
276 }
\n-
\n-
277 };
\n-
\n-
278
\n-
279} // end namespace Dune
\n-
280
\n-
281#define DUNE_INCLUDING_IMPLEMENTATION
\n-
282
\n-
283// 0d rules
\n-
284#include "quadraturerules/pointquadrature.hh"
\n-
285// 1d rules
\n-
286#include "quadraturerules/gausslobattoquadrature.hh"
\n-
287#include "quadraturerules/gaussquadrature.hh"
\n-
288#include "quadraturerules/gaussradauleftquadrature.hh"
\n-
289#include "quadraturerules/gaussradaurightquadrature.hh"
\n-
290#include "quadraturerules/jacobi1quadrature.hh"
\n-
291#include "quadraturerules/jacobi2quadrature.hh"
\n-
292#include "quadraturerules/jacobiNquadrature.hh"
\n-
293// 3d rules
\n-
294#include "quadraturerules/prismquadrature.hh"
\n-
295// general rules
\n-
296#include "quadraturerules/simplexquadrature.hh"
\n-
297#include "quadraturerules/tensorproductquadrature.hh"
\n-
298
\n-
299#undef DUNE_INCLUDING_IMPLEMENTATION
\n-
300
\n-
301namespace Dune {
\n-
302
\n-
309 template<typename ctype, int dim>
\n-
\n-\n-
311 private:
\n-
312 friend class QuadratureRules<ctype, dim>;
\n-
313 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
\n-
314 {
\n-
315 return TensorProductQuadratureRule<ctype,dim>::maxOrder(t.id(), qt);
\n-
316 }
\n-
317 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int p, QuadratureType::Enum qt)
\n-
318 {
\n-
319 return TensorProductQuadratureRule<ctype,dim>(t.id(), p, qt);
\n-
320 }
\n-
321 };
\n-
\n-
322
\n-
323 template<typename ctype>
\n-
\n-
324 class QuadratureRuleFactory<ctype, 0> {
\n-
325 private:
\n-
326 constexpr static int dim = 0;
\n-
327 friend class QuadratureRules<ctype, dim>;
\n-
328 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum)
\n-
329 {
\n-
330 if (t.isVertex())
\n-
331 {
\n-
332 return std::numeric_limits<int>::max();
\n-
333 }
\n-
334 DUNE_THROW(Exception, "Unknown GeometryType");
\n-
335 }
\n-
336 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int , QuadratureType::Enum)
\n-
337 {
\n-
338 if (t.isVertex())
\n-
339 {
\n-
340 return PointQuadratureRule<ctype>();
\n-
341 }
\n-
342 DUNE_THROW(Exception, "Unknown GeometryType");
\n-
343 }
\n-
344 };
\n-
\n-
345
\n-
346 template<typename ctype>
\n-
\n-
347 class QuadratureRuleFactory<ctype, 1> {
\n-
348 private:
\n-
349 constexpr static int dim = 1;
\n-
350 friend class QuadratureRules<ctype, dim>;
\n-
351 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
\n-
352 {
\n-
353 if (t.isLine())
\n-
354 {
\n-
355 switch (qt) {
\n-\n-
357 return GaussQuadratureRule1D<ctype>::highest_order;
\n-\n-
359 return Jacobi1QuadratureRule1D<ctype>::highest_order;
\n-\n-
361 return Jacobi2QuadratureRule1D<ctype>::highest_order;
\n-\n-
363 return GaussLobattoQuadratureRule1D<ctype>::highest_order;
\n-\n-
365 return JacobiNQuadratureRule1D<ctype>::maxOrder();
\n-\n-
367 return GaussRadauLeftQuadratureRule1D<ctype>::highest_order;
\n-\n-
369 return GaussRadauRightQuadratureRule1D<ctype>::highest_order;
\n-
370 default :
\n-
371 DUNE_THROW(Exception, "Unknown QuadratureType");
\n-
372 }
\n-
373 }
\n-
374 DUNE_THROW(Exception, "Unknown GeometryType");
\n-
375 }
\n-
376 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int p, QuadratureType::Enum qt)
\n-
377 {
\n-
378 if (t.isLine())
\n-
379 {
\n-
380 switch (qt) {
\n-\n-
382 return GaussQuadratureRule1D<ctype>(p);
\n-\n-
384 return Jacobi1QuadratureRule1D<ctype>(p);
\n-\n-
386 return Jacobi2QuadratureRule1D<ctype>(p);
\n-\n-
388 return GaussLobattoQuadratureRule1D<ctype>(p);
\n-\n-
390 return JacobiNQuadratureRule1D<ctype>(p);
\n-\n-
392 return GaussRadauLeftQuadratureRule1D<ctype>(p);
\n-\n-
394 return GaussRadauRightQuadratureRule1D<ctype>(p);
\n-
395 default :
\n-
396 DUNE_THROW(Exception, "Unknown QuadratureType");
\n-
397 }
\n-
398 }
\n-
399 DUNE_THROW(Exception, "Unknown GeometryType");
\n-
400 }
\n-
401 };
\n-
\n-
402
\n-
403 template<typename ctype>
\n-
\n-
404 class QuadratureRuleFactory<ctype, 2> {
\n-
405 private:
\n-
406 constexpr static int dim = 2;
\n-
407 friend class QuadratureRules<ctype, dim>;
\n-
408 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
\n-
409 {
\n-
410 unsigned order =
\n-
411 TensorProductQuadratureRule<ctype,dim>::maxOrder(t.id(), qt);
\n-
412 if (t.isSimplex())
\n-
413 order = std::max
\n-
414 (order, unsigned(SimplexQuadratureRule<ctype,dim>::highest_order));
\n-
415 return order;
\n-
416 }
\n-
417 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int p, QuadratureType::Enum qt)
\n-
418 {
\n-
419 if (t.isSimplex()
\n-\n-
421 && p <= SimplexQuadratureRule<ctype,dim>::highest_order)
\n-
422 {
\n-
423 return SimplexQuadratureRule<ctype,dim>(p);
\n-
424 }
\n-
425 return TensorProductQuadratureRule<ctype,dim>(t.id(), p, qt);
\n-
426 }
\n-
427 };
\n-
\n-
428
\n-
429 template<typename ctype>
\n-
\n-
430 class QuadratureRuleFactory<ctype, 3> {
\n-
431 private:
\n-
432 constexpr static int dim = 3;
\n-
433 friend class QuadratureRules<ctype, dim>;
\n-
434 static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt)
\n-
435 {
\n-
436 unsigned order =
\n-
437 TensorProductQuadratureRule<ctype,dim>::maxOrder(t.id(), qt);
\n-
438 if (t.isSimplex())
\n-
439 order = std::max
\n-
440 (order, unsigned(SimplexQuadratureRule<ctype,dim>::highest_order));
\n-
441 if (t.isPrism())
\n-
442 order = std::max
\n-
443 (order, unsigned(PrismQuadratureRule<ctype,dim>::highest_order));
\n-
444 return order;
\n-
445 }
\n-
446 static QuadratureRule<ctype, dim> rule(const GeometryType& t, int p, QuadratureType::Enum qt)
\n-
447 {
\n-
448
\n-
449 if (t.isSimplex()
\n-\n-
451 && p <= SimplexQuadratureRule<ctype,dim>::highest_order)
\n-
452 {
\n-
453 return SimplexQuadratureRule<ctype,dim>(p);
\n-
454 }
\n-
455 if (t.isPrism()
\n-\n-
457 && p <= PrismQuadratureRule<ctype,dim>::highest_order)
\n-
458 {
\n-
459 return PrismQuadratureRule<ctype,dim>(p);
\n-
460 }
\n-
461 return TensorProductQuadratureRule<ctype,dim>(t.id(), p, qt);
\n-
462 }
\n-
463 };
\n-
\n-
464
\n-
465#ifndef DUNE_NO_EXTERN_QUADRATURERULES
\n-
466 extern template class GaussLobattoQuadratureRule<double, 1>;
\n-
467 extern template class GaussQuadratureRule<double, 1>;
\n-
468 extern template class GaussRadauLeftQuadratureRule<double, 1>;
\n-
469 extern template class GaussRadauRightQuadratureRule<double, 1>;
\n-
470 extern template class Jacobi1QuadratureRule<double, 1>;
\n-
471 extern template class Jacobi2QuadratureRule<double, 1>;
\n-
472 extern template class JacobiNQuadratureRule<double, 1>;
\n-
473 extern template class PrismQuadratureRule<double, 3>;
\n-
474 extern template class SimplexQuadratureRule<double, 2>;
\n-
475 extern template class SimplexQuadratureRule<double, 3>;
\n-
476#endif // !DUNE_NO_EXTERN_QUADRATURERULES
\n-
477
\n-
478} // end namespace
\n-
479
\n-
480#endif // DUNE_GEOMETRY_QUADRATURERULES_HH
\n-
Helper classes to provide indices for geometrytypes for use in a vector.
\n-
A unique label for each type of element that can occur in a grid.
\n+
176 int index() const;
\n+
177 protected:
\n+
178 typedef typename Refinement::BackendRefinement BackendRefinement;
\n+
179 typedef typename BackendRefinement::template Codim<dimension>::SubEntityIterator BackendIterator;
\n+
180 constexpr static int nKuhnSimplices = 2;
\n+
181
\n+\n+
183
\n+\n+\n+\n+
187 };
\n+
\n+
188
\n+
189 template<int dimension, class CoordType>
\n+
\n+\n+
191 RefinementIteratorSpecial(int nIntervals, bool end)
\n+
192 : nIntervals_(nIntervals), kuhnIndex(0),
\n+
193 backend(BackendRefinement::vBegin(nIntervals_)),
\n+
194 backendEnd(BackendRefinement::vEnd(nIntervals_))
\n+
195 {
\n+
196 if (end)
\n+
197 kuhnIndex = nKuhnSimplices;
\n+
198 }
\n+
\n+
199
\n+
200 template<int dimension, class CoordType>
\n+
201 void
\n+
\n+\n+\n+
204 {
\n+
205 ++backend;
\n+
206 if(backend == backendEnd)
\n+
207 {
\n+
208 backend = BackendRefinement::vBegin(nIntervals_);
\n+
209 ++kuhnIndex;
\n+
210 }
\n+
211 }
\n+
\n+
212
\n+
213 template<int dimension, class CoordType>
\n+\n+
\n+\n+
216 coords() const
\n+
217 {
\n+
218 return transformCoordinate(referenceToKuhn(backend.coords(),
\n+
219 getPermutation<dimension>(kuhnIndex)));
\n+
220 }
\n+
\n+
221
\n+
222 template<int dimension, class CoordType>
\n+\n+
\n+\n+
225 {
\n+
226 std::vector<CoordVector> corners(1);
\n+
227 corners[0] = referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
\n+
228 return Geometry(GeometryTypes::vertex, corners);
\n+
229 }
\n+
\n+
230
\n+
231 template<int dimension, class CoordType>
\n+
232 int
\n+
\n+\n+
234 index() const
\n+
235 {
\n+
236 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index();
\n+
237 }
\n+
\n+
238
\n+
239 // elements
\n+
240 template<int dimension, class CoordType>
\n+
\n+
241 class RefinementIteratorSpecial<dimension, CoordType, 0>
\n+
242 {
\n+
243 public:
\n+\n+\n+\n+
247 typedef typename Refinement::template Codim<0>::Geometry Geometry;
\n+
248
\n+
249 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n+
250
\n+
251 void increment();
\n+
252
\n+
253 IndexVector vertexIndices() const;
\n+
254 int index() const;
\n+
255 CoordVector coords() const;
\n+
256
\n+
257 Geometry geometry() const;
\n+
258
\n+
259 private:
\n+
260 CoordVector global(const CoordVector &local) const;
\n+
261
\n+
262 protected:
\n+\n+
264 typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator;
\n+
265 constexpr static int nKuhnSimplices = 2;
\n+
266
\n+\n+
268
\n+\n+\n+\n+
272 };
\n+
\n+
273
\n+
274 template<int dimension, class CoordType>
\n+
\n+\n+
276 RefinementIteratorSpecial(int nIntervals, bool end)
\n+
277 : nIntervals_(nIntervals), kuhnIndex(0),
\n+
278 backend(BackendRefinement::eBegin(nIntervals_)),
\n+
279 backendEnd(BackendRefinement::eEnd(nIntervals_))
\n+
280 {
\n+
281 if (end)
\n+
282 kuhnIndex = nKuhnSimplices;
\n+
283 }
\n+
\n+
284
\n+
285 template<int dimension, class CoordType>
\n+
286 void
\n+
\n+\n+\n+
289 {
\n+
290 ++backend;
\n+
291 if (backend == backendEnd)
\n+
292 {
\n+
293 backend = BackendRefinement::eBegin(nIntervals_);
\n+
294 ++kuhnIndex;
\n+
295 }
\n+
296 }
\n+
\n+
297
\n+
298 template<int dimension, class CoordType>
\n+\n+
\n+\n+
301 vertexIndices() const
\n+
302 {
\n+
303 IndexVector indices = backend.vertexIndices();
\n+
304
\n+
305 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);
\n+
306 indices += base;
\n+
307
\n+
308 return indices;
\n+
309 }
\n+
\n+
310
\n+
311 template<int dimension, class CoordType>
\n+
312 int
\n+
\n+\n+
314 index() const
\n+
315 {
\n+
316 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index();
\n+
317 }
\n+
\n+
318
\n+
319 template<int dimension, class CoordType>
\n+\n+
\n+\n+
322 coords() const
\n+
323 {
\n+
324 return global(backend.coords());
\n+
325 }
\n+
\n+
326
\n+
327 template<int dimension, class CoordType>
\n+\n+
\n+\n+
330 geometry() const
\n+
331 {
\n+
332 const typename BackendIterator::Geometry &
\n+
333 bgeo = backend.geometry();
\n+
334 std::vector<CoordVector> corners(dimension+1);
\n+
335 for(int i = 0; i <= dimension; ++i)
\n+
336 corners[i] = global(bgeo.corner(i));
\n+
337
\n+
338 return Geometry(bgeo.type(), corners);
\n+
339 }
\n+
\n+
340
\n+
341 template<int dimension, class CoordType>
\n+\n+
343 CoordVector
\n+\n+
345 global(const CoordVector &local) const
\n+
346 {
\n+
347 return transformCoordinate(referenceToKuhn(local,
\n+
348 getPermutation<dimension>(kuhnIndex)));
\n+
349 }
\n+
350
\n+
351 // common
\n+
352 template<int dimension, class CoordType>
\n+
353 template<int codimension>
\n+
\n+
354 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n+
355 : public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n+
356 public RefinementIteratorSpecial<dimension, CoordType, codimension>
\n+
357 {
\n+
358 public:
\n+\n+
360 typedef SubEntityIterator This;
\n+
361
\n+
362 SubEntityIterator(int nIntervals, bool end = false);
\n+
363
\n+
364 bool equals(const This &other) const;
\n+
365 protected:
\n+
366 using RefinementIteratorSpecial<dimension, CoordType, codimension>::kuhnIndex;
\n+
367 using RefinementIteratorSpecial<dimension, CoordType, codimension>::backend;
\n+
368 };
\n+
\n+
369
\n+
370#ifndef DOXYGEN
\n+
371 template<int dimension, class CoordType>
\n+
372 template<int codimension>
\n+\n+
374 SubEntityIterator(int nIntervals, bool end)
\n+
375 : RefinementIteratorSpecial<dimension, CoordType, codimension>(nIntervals, end)
\n+
376 {}
\n+
377
\n+
378 template<int dimension, class CoordType>
\n+
379 template<int codimension>
\n+
380 bool
\n+\n+
382 equals(const This &other) const
\n+
383 {
\n+
384 return kuhnIndex == other.kuhnIndex && backend == other.backend;
\n+
385 }
\n+
386#endif
\n+
387
\n+
388 } // namespace PyramidTriangulation
\n+
\n+
389 } // namespace RefinementImp
\n+
390
\n+
391 namespace RefinementImp
\n+
392 {
\n+
393 // ///////////////////////
\n+
394 //
\n+
395 // The refinement traits
\n+
396 //
\n+
397#ifndef DOXYGEN
\n+
398 template<unsigned topologyId, class CoordType, unsigned coerceToId>
\n+
399 struct Traits<
\n+
400 topologyId, CoordType, coerceToId, 3,
\n+
401 typename std::enable_if<
\n+
402 (GeometryTypes::pyramid.id() >> 1) ==
\n+
403 (topologyId >> 1) &&
\n+
404 (GeometryTypes::simplex(3).id() >> 1) ==
\n+
405 (coerceToId >> 1)
\n+
406 >::type>
\n+
407 {
\n+
408 typedef PyramidTriangulation::RefinementImp<3, CoordType> Imp;
\n+
409 };
\n+
410#endif
\n+
411
\n+
412 } // namespace RefinementImp
\n+
413} // namespace Dune
\n+
414
\n+
415#endif // DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC
\n+\n+
A unique label for each type of element that can occur in a grid.
\n+
This file contains the parts independent of a particular Refinement implementation.
\n+
This file contains the Refinement implementation for simplices (triangles, tetrahedrons....
\n
Definition affinegeometry.hh:21
\n-
Enum
Definition quadraturerules.hh:82
\n-
@ GaussJacobi_n_0
Gauss-Legendre rules with .
Definition quadraturerules.hh:119
\n-
@ GaussJacobi_2_0
Gauss-Legendre rules with .
Definition quadraturerules.hh:106
\n-
@ GaussRadauRight
Gauss-Radau rules including the right endpoint.
Definition quadraturerules.hh:144
\n-
@ GaussJacobi_1_0
Gauss-Jacobi rules with .
Definition quadraturerules.hh:99
\n-
@ size
Definition quadraturerules.hh:145
\n-
@ GaussLobatto
Gauss-Lobatto rules.
Definition quadraturerules.hh:127
\n-
@ GaussRadauLeft
Gauss-Radau rules including the left endpoint.
Definition quadraturerules.hh:135
\n-
@ GaussLegendre
Gauss-Legendre rules (default)
Definition quadraturerules.hh:92
\n-
Exception thrown if a desired QuadratureRule is not available, because the requested order is to high...
Definition quadraturerules.hh:36
\n-
Single evaluation point in a quadrature rule.
Definition quadraturerules.hh:44
\n-
const Vector & position() const
return local coordinates of integration point i
Definition quadraturerules.hh:62
\n-
Dune::FieldVector< ct, dim > Vector
Type used for the position of a quadrature point.
Definition quadraturerules.hh:53
\n-
ct Field
Number type used for coordinates and quadrature weights.
Definition quadraturerules.hh:50
\n-
const ct & weight() const
return weight associated with integration point i
Definition quadraturerules.hh:68
\n-
ct weight_
Definition quadraturerules.hh:75
\n-
static constexpr int dimension
Dimension of the integration domain.
Definition quadraturerules.hh:47
\n-
QuadraturePoint(const Vector &x, ct w)
set up quadrature of given order in d dimensions
Definition quadraturerules.hh:56
\n-
FieldVector< ct, dim > local
Definition quadraturerules.hh:74
\n-
Abstract base class for quadrature rules.
Definition quadraturerules.hh:154
\n-
virtual ~QuadratureRule()
Definition quadraturerules.hh:181
\n-
static constexpr int d
The space dimension.
Definition quadraturerules.hh:171
\n-
virtual GeometryType type() const
return type of element
Definition quadraturerules.hh:180
\n-
int delivered_order
Definition quadraturerules.hh:189
\n-
QuadratureRule(GeometryType t, int order)
Constructor for a given geometry type and a given quadrature order.
Definition quadraturerules.hh:168
\n-
GeometryType geometry_type
Definition quadraturerules.hh:188
\n-
ct CoordType
The type used for coordinates.
Definition quadraturerules.hh:174
\n-
QuadratureRule()
Default constructor.
Definition quadraturerules.hh:161
\n-
virtual int order() const
return order
Definition quadraturerules.hh:177
\n-
QuadratureRule(GeometryType t)
Constructor for a given geometry type. Leaves the quadrature order invalid
Definition quadraturerules.hh:165
\n-
std::vector< QuadraturePoint< ct, dim > >::const_iterator iterator
Definition quadraturerules.hh:185
\n-
Factory class for creation of quadrature rules, depending on GeometryType, order and QuadratureType.
Definition quadraturerules.hh:310
\n-
A container for all quadrature rules of dimension dim
Definition quadraturerules.hh:200
\n-
static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt=QuadratureType::GaussLegendre)
maximum quadrature order for given geometry type and quadrature type
Definition quadraturerules.hh:259
\n-
static const QuadratureRule & rule(const GeometryType::BasicType t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre)
select the appropriate QuadratureRule for GeometryType t and order p
Definition quadraturerules.hh:272
\n-
static const QuadratureRule & rule(const GeometryType &t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre)
select the appropriate QuadratureRule for GeometryType t and order p
Definition quadraturerules.hh:266
\n-
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n-
constexpr bool isPrism() const
Return true if entity is a prism.
Definition type.hh:321
\n-
constexpr bool isVertex() const
Return true if entity is a vertex.
Definition type.hh:291
\n-
constexpr unsigned int dim() const
Return dimension of the type.
Definition type.hh:372
\n-
BasicType
Each entity can be tagged by one of these basic types plus its space dimension.
Definition type.hh:132
\n-
constexpr bool isLine() const
Return true if entity is a line segment.
Definition type.hh:296
\n-
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
\n-
constexpr bool isSimplex() const
Return true if entity is a simplex of any dimension.
Definition type.hh:331
\n-
static constexpr std::size_t size(std::size_t dim)
Compute total number of geometry types for the given dimension.
Definition typeindex.hh:61
\n-
static constexpr std::size_t index(const GeometryType &gt)
Compute the index for the given geometry type within its dimension.
Definition typeindex.hh:73
\n+
FieldVector< CoordType, dimension > transformCoordinate(FieldVector< CoordType, dimension > point)
Definition pyramidtriangulation.cc:51
\n+
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:336
\n+
FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from the reference simplex to some Kuhn simplex.
Definition simplex.cc:394
\n+
Static tag representing a codimension.
Definition dimension.hh:24
\n+
generic geometry implementation based on corner coordinates
Definition multilineargeometry.hh:181
\n+\n+
Implementation of the refinement of a pyramid into simplices.
Definition pyramidtriangulation.cc:68
\n+
FieldVector< CoordType, dimension > CoordVector
Definition pyramidtriangulation.cc:77
\n+
static int nVertices(int nIntervals)
Definition pyramidtriangulation.cc:109
\n+
static int nElements(int nIntervals)
Definition pyramidtriangulation.cc:133
\n+
CoordType ctype
Definition pyramidtriangulation.cc:72
\n+
Codim< dimension >::SubEntityIterator VertexIterator
Definition pyramidtriangulation.cc:76
\n+
Codim< 0 >::SubEntityIterator ElementIterator
Definition pyramidtriangulation.cc:78
\n+
static constexpr int dimension
Definition pyramidtriangulation.cc:70
\n+
static ElementIterator eBegin(int nIntervals)
Definition pyramidtriangulation.cc:141
\n+
static ElementIterator eEnd(int nIntervals)
Definition pyramidtriangulation.cc:149
\n+
FieldVector< int, dimension+1 > IndexVector
Definition pyramidtriangulation.cc:79
\n+
static VertexIterator vBegin(int nIntervals)
Definition pyramidtriangulation.cc:117
\n+
static VertexIterator vEnd(int nIntervals)
Definition pyramidtriangulation.cc:125
\n+\n+
Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition pyramidtriangulation.cc:103
\n+
RefinementImp< dimension, CoordType > Refinement
Definition pyramidtriangulation.cc:164
\n+
Refinement::template Codim< dimension >::Geometry Geometry
Definition pyramidtriangulation.cc:166
\n+
Refinement::BackendRefinement BackendRefinement
Definition pyramidtriangulation.cc:178
\n+\n+
BackendRefinement::template Codim< dimension >::SubEntityIterator BackendIterator
Definition pyramidtriangulation.cc:179
\n+\n+\n+\n+\n+\n+
Refinement::CoordVector CoordVector
Definition pyramidtriangulation.cc:246
\n+\n+
Refinement::template Codim< 0 >::Geometry Geometry
Definition pyramidtriangulation.cc:247
\n+
Refinement::IndexVector IndexVector
Definition pyramidtriangulation.cc:245
\n+
BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator
Definition pyramidtriangulation.cc:264
\n+\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition pyramidtriangulation.cc:244
\n+
Refinement::BackendRefinement BackendRefinement
Definition pyramidtriangulation.cc:263
\n+\n+
SubEntityIterator This
Definition pyramidtriangulation.cc:360
\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition pyramidtriangulation.cc:359
\n+\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,587 +1,604 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-quadraturerules.hh\n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+pyramidtriangulation.cc\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5\n-6#ifndef DUNE_GEOMETRY_QUADRATURERULES_HH\n-7#define DUNE_GEOMETRY_QUADRATURERULES_HH\n-8\n-9#include \n-10#include \n-11#include \n-12#include \n-13#include \n-14#include \n-15\n-16#include \n-17#include \n-18#include \n-19#include \n-20#include \n-21\n-22#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-23#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n-24\n-30namespace _\bD_\bu_\bn_\be {\n-31\n-_\b3_\b6 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bO_\br_\bd_\be_\br_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be : public NotImplemented {};\n-37\n-43 template\n-_\b4_\b4 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt {\n-45 public:\n-_\b4_\b7 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dim;\n-48\n-_\b5_\b0 typedef ct _\bF_\bi_\be_\bl_\bd;\n-51\n-_\b5_\b3 typedef Dune::FieldVector _\bV_\be_\bc_\bt_\bo_\br;\n-54\n-_\b5_\b6 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt (const _\bV_\be_\bc_\bt_\bo_\br& x, ct w) : _\bl_\bo_\bc_\ba_\bl(x)\n-57 {\n-58 _\bw_\be_\bi_\bg_\bh_\bt_\b_ = w;\n-59 }\n-60\n-_\b6_\b2 const _\bV_\be_\bc_\bt_\bo_\br& _\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn () const\n-63 {\n-64 return _\bl_\bo_\bc_\ba_\bl;\n-65 }\n-66\n-_\b6_\b8 const ct &_\bw_\be_\bi_\bg_\bh_\bt () const\n-69 {\n-70 return _\bw_\be_\bi_\bg_\bh_\bt_\b_;\n-71 }\n-72\n-73 protected:\n-_\b7_\b4 FieldVector _\bl_\bo_\bc_\ba_\bl;\n-_\b7_\b5 ct _\bw_\be_\bi_\bg_\bh_\bt_\b_;\n-76 };\n-77\n-_\b8_\b1 namespace QuadratureType {\n-_\b8_\b2 enum _\bE_\bn_\bu_\bm {\n-_\b9_\b2 _\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be = 0,\n-93\n-_\b9_\b9 _\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0 = 1,\n-100\n-_\b1_\b0_\b6 _\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0 = 2,\n-107\n-_\b1_\b1_\b9 _\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 = 3,\n-120\n-_\b1_\b2_\b7 _\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo = 4,\n-128\n-_\b1_\b3_\b5 _\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt = 5,\n-136\n-_\b1_\b4_\b4 _\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt = 6,\n-145 _\bs_\bi_\bz_\be\n-_\b1_\b4_\b6 };\n-147 }\n-148\n-152 template\n-_\b1_\b5_\b3 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be : public std::vector >\n-154 {\n-155 public:\n-_\b1_\b6_\b1 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be() : _\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br(-1) {}\n-162\n-163 protected:\n-_\b1_\b6_\b5 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be(_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be t) : _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be(t), _\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br(-1) {}\n-166\n-_\b1_\b6_\b8 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be(_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be t, int _\bo_\br_\bd_\be_\br) : _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be(t),\n-_\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br(_\bo_\br_\bd_\be_\br) {}\n-169 public:\n-_\b1_\b7_\b1 constexpr static int _\bd = dim;\n-172\n-_\b1_\b7_\b4 typedef ct _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be;\n+5#ifndef DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC\n+_\b6#define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC\n+7\n+8#include \n+9#include \n+10\n+11#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+12#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+13\n+14#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+15#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n+16\n+17namespace _\bD_\bu_\bn_\be\n+18{\n+19 namespace RefinementImp\n+20 {\n+_\b2_\b6 namespace PyramidTriangulation\n+27 {\n+28 // ////////////\n+29 //\n+30 // Utilities\n+31 //\n+32\n+33 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn;\n+34 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn;\n+35\n+36 // ////////////////////////////////////\n+37 //\n+38 // Refine a pyramid with simplices\n+39 //\n+40\n+41 // forward declaration of the iterator base\n+42 template\n+_\b4_\b3 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n+44\n+45 /*\n+46 * The permutations 0 and 1 of the Kuhn-decomposition of a cube into\n+simplices form a pyramid.\n+47 * The resulting pyramid is not oriented the same as the reference pyramid\n+and so the Kuhn-coordinates\n+48 * have to be transformed using the method below.\n+49 */\n+50 template FieldVector\n+_\b5_\b1 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be( FieldVector point)\n+52 {\n+53 FieldVector transform;\n+54 transform[0]=1-point[0];\n+55 transform[1]=1-point[1];\n+56 transform[2]=point[2];\n+57 return transform;\n+58 }\n+59\n+66 template\n+_\b6_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+68 {\n+69 public:\n+_\b7_\b0 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n+71\n+_\b7_\b2 typedef CoordType _\bc_\bt_\by_\bp_\be;\n+73\n+74 template\n+75 struct _\bC_\bo_\bd_\bi_\bm;\n+_\b7_\b6 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b7_\b7 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b7_\b8 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b7_\b9 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+80\n+81 static int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals);\n+82 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals);\n+83 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(int nIntervals);\n+84\n+85 static int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals);\n+86 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(int nIntervals);\n+_\b8_\b7 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(int nIntervals);\n+88\n+89 private:\n+90 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, 0>;\n+91 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>;\n+92\n+93 typedef _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+94\n+95 constexpr static int nKuhnSimplices = 2;\n+96 };\n+97\n+98 template\n+99 template\n+_\b1_\b0_\b0 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n+101 {\n+102 class SubEntityIterator;\n+_\b1_\b0_\b3 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+104 };\n+105\n+106 template\n+107 int\n+_\b1_\b0_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+109_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals)\n+110 {\n+111 return BackendRefinement::nVertices(nIntervals) * nKuhnSimplices;\n+112 }\n+113\n+114 template\n+115 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b1_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+117_\b _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals)\n+118 {\n+119 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n+120 }\n+121\n+122 template\n+123 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b2_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+125_\b _\bv_\bE_\bn_\bd(int nIntervals)\n+126 {\n+127 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n+128 }\n+129\n+130 template\n+131 int\n+_\b1_\b3_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+133_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals)\n+134 {\n+135 return BackendRefinement::nElements(nIntervals) * nKuhnSimplices;\n+136 }\n+137\n+138 template\n+139 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b4_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+141_\b _\be_\bB_\be_\bg_\bi_\bn(int nIntervals)\n+142 {\n+143 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n+144 }\n+145\n+146 template\n+147 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b4_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+149_\b _\be_\bE_\bn_\bd(int nIntervals)\n+150 {\n+151 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n+152 }\n+153\n+154 // //////////////\n+155 //\n+156 // The iterator\n+157 //\n+158\n+159 // vertices\n+160 template\n+_\b1_\b6_\b1 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+162 {\n+163 public:\n+_\b1_\b6_\b4 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b1_\b6_\b5 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b1_\b6_\b6 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+167\n+168 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n+169\n+170 void increment();\n+171\n+172 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+173\n+174 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry() const;\n 175\n-_\b1_\b7_\b7 virtual int _\bo_\br_\bd_\be_\br () const { return _\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br; }\n-178\n-_\b1_\b8_\b0 virtual _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bt_\by_\bp_\be () const { return _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be; }\n-_\b1_\b8_\b1 virtual _\b~_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be(){}\n-182\n-_\b1_\b8_\b5 typedef typename std::vector >::const_iterator\n-_\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-186\n-187 protected:\n-_\b1_\b8_\b8 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be;\n-_\b1_\b8_\b9 int _\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br;\n-190 };\n-191\n-192 // Forward declaration of the factory class,\n-193 // needed internally by the QuadratureRules container class.\n-194 template class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by;\n-195\n-199 template\n-_\b2_\b0_\b0 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs {\n-201\n-203 using _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be = _\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b>;\n-204\n-205 // indexed by quadrature order\n-206 using QuadratureOrderVector = std::vector >;\n-207\n-208 // indexed by geometry type\n-209 using GeometryTypeVector = std::vector >;\n-210\n-211 // indexed by quadrature type enum\n-212 using QuadratureCacheVector = std::vector >;\n-213\n-215 DUNE_EXPORT const _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be& _rule(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n-_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt=_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be) const\n-216 {\n-217 assert(t._\bd_\bi_\bm()==dim);\n-218\n-219 DUNE_ASSERT_CALL_ONCE();\n-220\n-221 static QuadratureCacheVector quadratureCache(_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bz_\be);\n-222\n-223 auto& [ onceFlagQuadratureType, geometryTypes ] = quadratureCache[qt];\n-224 // initialize geometry types for this quadrature type once\n-225 std::call_once(onceFlagQuadratureType, [&types = geometryTypes]{\n-226 types = GeometryTypeVector(_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be(dim));\n-227 });\n-228\n-229 auto& [ onceFlagGeometryType, quadratureOrders ] = geometryTypes\n-[_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx(t)];\n-230 // initialize quadrature orders for this geometry type and quadrature type\n-once\n-231 std::call_once(onceFlagGeometryType, [&, &orders = quadratureOrders]{\n-232 // we only need one quadrature rule for points, not maxint\n-233 const auto numRules = dim == 0 ? 1 : _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bc_\bt_\by_\bp_\be_\b,_\bd_\bi_\bm_\b>_\b:_\b:\n-_\bm_\ba_\bx_\bO_\br_\bd_\be_\br(t, qt)+1;\n-234 orders = QuadratureOrderVector(numRules);\n-235 });\n-236\n-237 // we only have one quadrature rule for points\n-238 auto& [ onceFlagQuadratureOrder, quadratureRule ] = quadratureOrders[dim ==\n-0 ? 0 : p];\n-239 // initialize quadrature rule once\n-240 std::call_once(onceFlagQuadratureOrder, [&, &_\br_\bu_\bl_\be = quadratureRule]{\n-241 _\br_\bu_\bl_\be = _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bc_\bt_\by_\bp_\be_\b,_\bd_\bi_\bm_\b>_\b:_\b:_\br_\bu_\bl_\be(t, p, qt);\n-242 });\n-243\n-244 return quadratureRule;\n-245 }\n-246\n-248 DUNE_EXPORT static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs& instance()\n-249 {\n-250 static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs instance;\n-251 return instance;\n-252 }\n-253\n-255 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs () = default;\n-256 public:\n-258 static unsigned\n-_\b2_\b5_\b9 _\bm_\ba_\bx_\bO_\br_\bd_\be_\br(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t,\n-260 _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt=_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be)\n-261 {\n-262 return _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\bc_\bt_\by_\bp_\be_\b,_\bd_\bi_\bm_\b>_\b:_\b:_\bm_\ba_\bx_\bO_\br_\bd_\be_\br(t,qt);\n-263 }\n-264\n-_\b2_\b6_\b6 static const _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be& _\br_\bu_\bl_\be(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n-_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt=_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be)\n-267 {\n-268 return instance()._rule(t,p,qt);\n-269 }\n-270\n-_\b2_\b7_\b2 static const _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be& _\br_\bu_\bl_\be(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bc_\bT_\by_\bp_\be t, int p,\n-_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt=_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be)\n-273 {\n-274 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt(t,dim);\n-275 return instance()._rule(gt,p,qt);\n-276 }\n-277 };\n-278\n-279} // end namespace Dune\n-280\n-_\b2_\b8_\b1#define DUNE_INCLUDING_IMPLEMENTATION\n-282\n-283// 0d rules\n-284#include \"quadraturerules/pointquadrature.hh\"\n-285// 1d rules\n-286#include \"quadraturerules/gausslobattoquadrature.hh\"\n-287#include \"quadraturerules/gaussquadrature.hh\"\n-288#include \"quadraturerules/gaussradauleftquadrature.hh\"\n-289#include \"quadraturerules/gaussradaurightquadrature.hh\"\n-290#include \"quadraturerules/jacobi1quadrature.hh\"\n-291#include \"quadraturerules/jacobi2quadrature.hh\"\n-292#include \"quadraturerules/jacobiNquadrature.hh\"\n-293// 3d rules\n-294#include \"quadraturerules/prismquadrature.hh\"\n-295// general rules\n-296#include \"quadraturerules/simplexquadrature.hh\"\n-297#include \"quadraturerules/tensorproductquadrature.hh\"\n-298\n-299#undef DUNE_INCLUDING_IMPLEMENTATION\n-300\n-301namespace _\bD_\bu_\bn_\be {\n-302\n-309 template\n-_\b3_\b1_\b0 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n-311 private:\n-312 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n-313 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n-314 {\n-315 return TensorProductQuadratureRule::maxOrder(t._\bi_\bd(), qt);\n-316 }\n-317 static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b> rule(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n-_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n-318 {\n-319 return TensorProductQuadratureRule(t._\bi_\bd(), p, qt);\n-320 }\n-321 };\n-322\n-323 template\n-_\b3_\b2_\b4 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n-325 private:\n-_\b3_\b2_\b6 constexpr static int dim = 0;\n-327 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n-328 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm)\n-329 {\n-330 if (t._\bi_\bs_\bV_\be_\br_\bt_\be_\bx())\n+176 int index() const;\n+177 protected:\n+_\b1_\b7_\b8 typedef typename Refinement::BackendRefinement _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b1_\b7_\b9 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b1_\b8_\b0 constexpr static int nKuhnSimplices = 2;\n+181\n+_\b1_\b8_\b2 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n+183\n+_\b1_\b8_\b4 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n+_\b1_\b8_\b5 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n+_\b1_\b8_\b6 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n+187 };\n+188\n+189 template\n+_\b1_\b9_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+191_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n+192 : nIntervals_(nIntervals), kuhnIndex(0),\n+193 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vBegin(nIntervals_)),\n+194 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vEnd(nIntervals_))\n+195 {\n+196 if (end)\n+197 kuhnIndex = nKuhnSimplices;\n+198 }\n+199\n+200 template\n+201 void\n+_\b2_\b0_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+203_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+204 {\n+205 ++backend;\n+206 if(backend == backendEnd)\n+207 {\n+208 backend = BackendRefinement::vBegin(nIntervals_);\n+209 ++kuhnIndex;\n+210 }\n+211 }\n+212\n+213 template\n+214 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b2_\b1_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+216_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+217 {\n+218 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(backend.coords(),\n+219 getPermutation(kuhnIndex)));\n+220 }\n+221\n+222 template\n+223 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+_\b2_\b2_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by ()\n+const\n+225 {\n+226 std::vector corners(1);\n+227 corners[0] = referenceToKuhn(backend.coords(), getPermutation\n+(kuhnIndex));\n+228 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(GeometryTypes::vertex, corners);\n+229 }\n+230\n+231 template\n+232 int\n+_\b2_\b3_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+234_\b _\bi_\bn_\bd_\be_\bx() const\n+235 {\n+236 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index\n+();\n+237 }\n+238\n+239 // elements\n+240 template\n+_\b2_\b4_\b1 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+242 {\n+243 public:\n+_\b2_\b4_\b4 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b4_\b5 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+_\b2_\b4_\b6 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b2_\b4_\b7 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+248\n+249 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n+250\n+251 void increment();\n+252\n+253 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n+254 int index() const;\n+255 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+256\n+257 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry() const;\n+258\n+259 private:\n+260 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br global(const _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br &local) const;\n+261\n+262 protected:\n+_\b2_\b6_\b3 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b6_\b4 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b2_\b6_\b5 constexpr static int nKuhnSimplices = 2;\n+266\n+_\b2_\b6_\b7 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n+268\n+_\b2_\b6_\b9 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n+_\b2_\b7_\b0 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n+_\b2_\b7_\b1 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n+272 };\n+273\n+274 template\n+_\b2_\b7_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+276_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n+277 : nIntervals_(nIntervals), kuhnIndex(0),\n+278 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eBegin(nIntervals_)),\n+279 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eEnd(nIntervals_))\n+280 {\n+281 if (end)\n+282 kuhnIndex = nKuhnSimplices;\n+283 }\n+284\n+285 template\n+286 void\n+_\b2_\b8_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+288_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+289 {\n+290 ++backend;\n+291 if (backend == backendEnd)\n+292 {\n+293 backend = BackendRefinement::eBegin(nIntervals_);\n+294 ++kuhnIndex;\n+295 }\n+296 }\n+297\n+298 template\n+299 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+_\b3_\b0_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+301_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n+302 {\n+303 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br indices = backend.vertexIndices();\n+304\n+305 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);\n+306 indices += base;\n+307\n+308 return indices;\n+309 }\n+310\n+311 template\n+312 int\n+_\b3_\b1_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+314_\b _\bi_\bn_\bd_\be_\bx() const\n+315 {\n+316 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index\n+();\n+317 }\n+318\n+319 template\n+320 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b3_\b2_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+322_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+323 {\n+324 return global(backend.coords());\n+325 }\n+326\n+327 template\n+328 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+_\b3_\b2_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+330_\b _\bg_\be_\bo_\bm_\be_\bt_\br_\by() const\n 331 {\n-332 return std::numeric_limits::max();\n-333 }\n-334 DUNE_THROW(Exception, \"Unknown GeometryType\");\n-335 }\n-336 static QuadratureRule rule(const GeometryType& t, int ,\n-_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm)\n-337 {\n-338 if (t.isVertex())\n-339 {\n-340 return PointQuadratureRule();\n-341 }\n-342 DUNE_THROW(Exception, \"Unknown GeometryType\");\n-343 }\n-344 };\n-345\n-346 template\n-_\b3_\b4_\b7 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n-348 private:\n-_\b3_\b4_\b9 constexpr static int dim = 1;\n-350 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n-351 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n-352 {\n-353 if (t._\bi_\bs_\bL_\bi_\bn_\be())\n-354 {\n-355 switch (qt) {\n-356 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be :\n-357 return GaussQuadratureRule1D::highest_order;\n-358 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0 :\n-359 return Jacobi1QuadratureRule1D::highest_order;\n-360 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0 :\n-361 return Jacobi2QuadratureRule1D::highest_order;\n-362 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo :\n-363 return GaussLobattoQuadratureRule1D::highest_order;\n-364 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 :\n-365 return JacobiNQuadratureRule1D::maxOrder();\n-366 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt :\n-367 return GaussRadauLeftQuadratureRule1D::highest_order;\n-368 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt :\n-369 return GaussRadauRightQuadratureRule1D::highest_order;\n-370 default :\n-371 DUNE_THROW(Exception, \"Unknown QuadratureType\");\n-372 }\n-373 }\n-374 DUNE_THROW(Exception, \"Unknown GeometryType\");\n-375 }\n-376 static QuadratureRule rule(const GeometryType& t, int p,\n-_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n-377 {\n-378 if (t.isLine())\n-379 {\n-380 switch (qt) {\n-381 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be :\n-382 return GaussQuadratureRule1D(p);\n-383 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0 :\n-384 return Jacobi1QuadratureRule1D(p);\n-385 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0 :\n-386 return Jacobi2QuadratureRule1D(p);\n-387 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo :\n-388 return GaussLobattoQuadratureRule1D(p);\n-389 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 :\n-390 return JacobiNQuadratureRule1D(p);\n-391 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt :\n-392 return GaussRadauLeftQuadratureRule1D(p);\n-393 case _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt :\n-394 return GaussRadauRightQuadratureRule1D(p);\n-395 default :\n-396 DUNE_THROW(Exception, \"Unknown QuadratureType\");\n-397 }\n-398 }\n-399 DUNE_THROW(Exception, \"Unknown GeometryType\");\n-400 }\n-401 };\n-402\n-403 template\n-_\b4_\b0_\b4 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n-405 private:\n-_\b4_\b0_\b6 constexpr static int dim = 2;\n-407 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n-408 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n-409 {\n-410 unsigned order =\n-411 TensorProductQuadratureRule::maxOrder(t._\bi_\bd(), qt);\n-412 if (t._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx())\n-413 order = std::max\n-414 (order, unsigned(SimplexQuadratureRule::highest_order));\n-415 return order;\n-416 }\n-417 static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b> rule(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n-_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n-418 {\n-419 if (t._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx()\n-420 && ( qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be || qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:\n-_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 )\n-421 && p <= SimplexQuadratureRule::highest_order)\n-422 {\n-423 return SimplexQuadratureRule(p);\n-424 }\n-425 return TensorProductQuadratureRule(t._\bi_\bd(), p, qt);\n-426 }\n-427 };\n-428\n-429 template\n-_\b4_\b3_\b0 class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by {\n-431 private:\n-_\b4_\b3_\b2 constexpr static int dim = 3;\n-433 friend class _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs;\n-434 static unsigned maxOrder(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &t, _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n-435 {\n-436 unsigned order =\n-437 TensorProductQuadratureRule::maxOrder(t._\bi_\bd(), qt);\n-438 if (t._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx())\n-439 order = std::max\n-440 (order, unsigned(SimplexQuadratureRule::highest_order));\n-441 if (t._\bi_\bs_\bP_\br_\bi_\bs_\bm())\n-442 order = std::max\n-443 (order, unsigned(PrismQuadratureRule::highest_order));\n-444 return order;\n-445 }\n-446 static _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b<_\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b> rule(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& t, int p,\n-_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm qt)\n-447 {\n-448\n-449 if (t._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx()\n-450 && ( qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be || qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:\n-_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0 )\n-451 && p <= SimplexQuadratureRule::highest_order)\n-452 {\n-453 return SimplexQuadratureRule(p);\n-454 }\n-455 if (t._\bi_\bs_\bP_\br_\bi_\bs_\bm()\n-456 && qt == _\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be\n-457 && p <= PrismQuadratureRule::highest_order)\n-458 {\n-459 return PrismQuadratureRule(p);\n-460 }\n-461 return TensorProductQuadratureRule(t._\bi_\bd(), p, qt);\n-462 }\n-463 };\n-464\n-465#ifndef DUNE_NO_EXTERN_QUADRATURERULES\n-466 extern template class GaussLobattoQuadratureRule;\n-467 extern template class GaussQuadratureRule;\n-468 extern template class GaussRadauLeftQuadratureRule;\n-469 extern template class GaussRadauRightQuadratureRule;\n-470 extern template class Jacobi1QuadratureRule;\n-471 extern template class Jacobi2QuadratureRule;\n-472 extern template class JacobiNQuadratureRule;\n-473 extern template class PrismQuadratureRule;\n-474 extern template class SimplexQuadratureRule;\n-_\b4_\b7_\b5 extern template class SimplexQuadratureRule;\n-476#endif // !DUNE_NO_EXTERN_QUADRATURERULES\n-477\n-478} // end namespace\n-479\n-480#endif // DUNE_GEOMETRY_QUADRATURERULES_HH\n-_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n-Helper classes to provide indices for geometrytypes for use in a vector.\n+332 const typename BackendIterator::Geometry &\n+333 bgeo = backend.geometry();\n+334 std::vector corners(dimension+1);\n+335 for(int i = 0; i <= dimension; ++i)\n+336 corners[i] = global(bgeo.corner(i));\n+337\n+338 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(bgeo.type(), corners);\n+339 }\n+340\n+341 template\n+342 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>::\n+343 CoordVector\n+344 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+345_\b _\bg_\bl_\bo_\bb_\ba_\bl(const CoordVector &local) const\n+346 {\n+347 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(local,\n+348 getPermutation(kuhnIndex)));\n+349 }\n+350\n+351 // common\n+352 template\n+353 template\n+_\b3_\b5_\b4 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n+SubEntityIterator\n+355 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n+356 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+357 {\n+358 public:\n+_\b3_\b5_\b9 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b3_\b6_\b0 typedef SubEntityIterator _\bT_\bh_\bi_\bs;\n+361\n+_\b3_\b6_\b2 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end = false);\n+363\n+_\b3_\b6_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n+365 protected:\n+366 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n+kuhnIndex;\n+367 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n+backend;\n+368 };\n+369\n+370#ifndef DOXYGEN\n+371 template\n+372 template\n+373 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n+374_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end)\n+375 : _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(nIntervals,\n+end)\n+376 {}\n+377\n+378 template\n+379 template\n+380 bool\n+381 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n+382_\b _\be_\bq_\bu_\ba_\bl_\bs(const This &other) const\n+383 {\n+384 return kuhnIndex == other.kuhnIndex && backend == other.backend;\n+385 }\n+386#endif\n+387\n+388 } // namespace PyramidTriangulation\n+389 } // namespace RefinementImp\n+390\n+391 namespace RefinementImp\n+392 {\n+393 // ///////////////////////\n+394 //\n+395 // The refinement traits\n+396 //\n+397#ifndef DOXYGEN\n+398 template\n+399 struct Traits<\n+400 topologyId, CoordType, coerceToId, 3,\n+401 typename std::enable_if<\n+402 (GeometryTypes::pyramid.id() >> 1) ==\n+403 (topologyId >> 1) &&\n+404 (GeometryTypes::simplex(3).id() >> 1) ==\n+405 (coerceToId >> 1)\n+406 >::type>\n+407 {\n+408 typedef PyramidTriangulation::RefinementImp<3, CoordType> Imp;\n+409 };\n+410#endif\n+411\n+412 } // namespace RefinementImp\n+413} // namespace Dune\n+414\n+415#endif // DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC\n+_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n+_\bb_\ba_\bs_\be_\b._\bc_\bc\n+This file contains the parts independent of a particular Refinement\n+implementation.\n+_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\n+This file contains the Refinement implementation for simplices (triangles,\n+tetrahedrons....\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bE_\bn_\bu_\bm\n-Enum\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:82\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\bn_\b__\b0\n-@ GaussJacobi_n_0\n-Gauss-Legendre rules with .\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:119\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b2_\b__\b0\n-@ GaussJacobi_2_0\n-Gauss-Legendre rules with .\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bR_\bi_\bg_\bh_\bt\n-@ GaussRadauRight\n-Gauss-Radau rules including the right endpoint.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:144\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bJ_\ba_\bc_\bo_\bb_\bi_\b__\b1_\b__\b0\n-@ GaussJacobi_1_0\n-Gauss-Jacobi rules with .\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:99\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bz_\be\n-@ size\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:145\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\bo_\bb_\ba_\bt_\bt_\bo\n-@ GaussLobatto\n-Gauss-Lobatto rules.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:127\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bR_\ba_\bd_\ba_\bu_\bL_\be_\bf_\bt\n-@ GaussRadauLeft\n-Gauss-Radau rules including the left endpoint.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:135\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bT_\by_\bp_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bL_\be_\bg_\be_\bn_\bd_\br_\be\n-@ GaussLegendre\n-Gauss-Legendre rules (default)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:92\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bO_\br_\bd_\be_\br_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be\n-Exception thrown if a desired QuadratureRule is not available, because the\n-requested order is to high...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt\n-Single evaluation point in a quadrature rule.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:44\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn\n-const Vector & position() const\n-return local coordinates of integration point i\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br\n-Dune::FieldVector< ct, dim > Vector\n-Type used for the position of a quadrature point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:53\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bF_\bi_\be_\bl_\bd\n-ct Field\n-Number type used for coordinates and quadrature weights.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt\n-const ct & weight() const\n-return weight associated with integration point i\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\b_\n-ct weight_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+FieldVector< CoordType, dimension > transformCoordinate(FieldVector< CoordType,\n+dimension > point)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:51\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn\n+FieldVector< int, n > getPermutation(int m)\n+Calculate permutation from it's index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:336\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn\n+FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType,\n+dimension > point, const FieldVector< int, dimension > &kuhn)\n+Map from the reference simplex to some Kuhn simplex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:394\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+Static tag representing a codimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n+_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+generic geometry implementation based on corner coordinates\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:43\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+Implementation of the refinement of a pyramid into simplices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< CoordType, dimension > CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:77\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+static int nVertices(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:109\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+static int nElements(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:133\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bc_\bt_\by_\bp_\be\n+CoordType ctype\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:72\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< dimension >::SubEntityIterator VertexIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:76\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< 0 >::SubEntityIterator ElementIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n static constexpr int dimension\n-Dimension of the integration domain.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:47\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt\n-QuadraturePoint(const Vector &x, ct w)\n-set up quadrature of given order in d dimensions\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:56\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bP_\bo_\bi_\bn_\bt_\b:_\b:_\bl_\bo_\bc_\ba_\bl\n-FieldVector< ct, dim > local\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n-Abstract base class for quadrature rules.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:154\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\b~_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n-virtual ~QuadratureRule()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bd\n-static constexpr int d\n-The space dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bt_\by_\bp_\be\n-virtual GeometryType type() const\n-return type of element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:180\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bd_\be_\bl_\bi_\bv_\be_\br_\be_\bd_\b__\bo_\br_\bd_\be_\br\n-int delivered_order\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:189\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n-QuadratureRule(GeometryType t, int order)\n-Constructor for a given geometry type and a given quadrature order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:168\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b__\bt_\by_\bp_\be\n-GeometryType geometry_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be\n-ct CoordType\n-The type used for coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:174\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n-QuadratureRule()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:161\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bo_\br_\bd_\be_\br\n-virtual int order() const\n-return order\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:177\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be\n-QuadratureRule(GeometryType t)\n-Constructor for a given geometry type. Leaves the quadrature order invalid\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:165\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-std::vector< QuadraturePoint< ct, dim > >::const_iterator iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:185\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\by\n-Factory class for creation of quadrature rules, depending on GeometryType,\n-order and QuadratureType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:310\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs\n-A container for all quadrature rules of dimension dim\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:200\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs_\b:_\b:_\bm_\ba_\bx_\bO_\br_\bd_\be_\br\n-static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum\n-qt=QuadratureType::GaussLegendre)\n-maximum quadrature order for given geometry type and quadrature type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:259\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs_\b:_\b:_\br_\bu_\bl_\be\n-static const QuadratureRule & rule(const GeometryType::BasicType t, int p,\n-QuadratureType::Enum qt=QuadratureType::GaussLegendre)\n-select the appropriate QuadratureRule for GeometryType t and order p\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:272\n-_\bD_\bu_\bn_\be_\b:_\b:_\bQ_\bu_\ba_\bd_\br_\ba_\bt_\bu_\br_\be_\bR_\bu_\bl_\be_\bs_\b:_\b:_\br_\bu_\bl_\be\n-static const QuadratureRule & rule(const GeometryType &t, int p,\n-QuadratureType::Enum qt=QuadratureType::GaussLegendre)\n-select the appropriate QuadratureRule for GeometryType t and order p\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn quadraturerules.hh:266\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-Unique label for each type of entities that can occur in DUNE grids.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\br_\bi_\bs_\bm\n-constexpr bool isPrism() const\n-Return true if entity is a prism.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:321\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bV_\be_\br_\bt_\be_\bx\n-constexpr bool isVertex() const\n-Return true if entity is a vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:291\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bd_\bi_\bm\n-constexpr unsigned int dim() const\n-Return dimension of the type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:372\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bc_\bT_\by_\bp_\be\n-BasicType\n-Each entity can be tagged by one of these basic types plus its space dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:132\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bL_\bi_\bn_\be\n-constexpr bool isLine() const\n-Return true if entity is a line segment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:296\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n-constexpr unsigned int id() const\n-Return the topology id of the type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx\n-constexpr bool isSimplex() const\n-Return true if entity is a simplex of any dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:331\n-_\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr std::size_t size(std::size_t dim)\n-Compute total number of geometry types for the given dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bd_\be_\bx\n-static constexpr std::size_t index(const GeometryType >)\n-Compute the index for the given geometry type within its dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeindex.hh:73\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:70\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n+static ElementIterator eBegin(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:141\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n+static ElementIterator eEnd(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:149\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< int, dimension+1 > IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:79\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n+static VertexIterator vBegin(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:117\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n+static VertexIterator vEnd(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:125\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:101\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension >\n+Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:103\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:164\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Refinement::template Codim< dimension >::Geometry Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:166\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+Refinement::BackendRefinement BackendRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:178\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n+BackendIterator backend\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:185\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+BackendRefinement::template Codim< dimension >::SubEntityIterator\n+BackendIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:179\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n+int kuhnIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:184\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n+const BackendIterator backendEnd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:186\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n+int nIntervals_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:182\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n+const BackendIterator backendEnd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:271\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:246\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n+int nIntervals_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:267\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Refinement::template Codim< 0 >::Geometry Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:247\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::IndexVector IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:245\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:264\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n+int kuhnIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:269\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n+BackendIterator backend\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:270\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:244\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+Refinement::BackendRefinement BackendRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:263\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other) const\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+_\b>_\b:_\b:_\bT_\bh_\bi_\bs\n+SubEntityIterator This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:360\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+SubEntityIterator(int nIntervals, bool end=false)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\by_\br_\ba_\bm_\bi_\bd_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+_\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn pyramidtriangulation.cc:359\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:433\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00227.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00227.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: axisalignedcubegeometry.hh File Reference\n+dune-geometry: prismtriangulation.cc File Reference\n \n \n \n \n \n \n \n@@ -65,49 +65,86 @@\n \n \n \n \n \n \n \n
\n \n-
axisalignedcubegeometry.hh File Reference
\n+Namespaces |\n+Macros |\n+Functions
\n+
prismtriangulation.cc File Reference
\n \n
\n-\n-

A geometry implementation for axis-aligned hypercubes. \n-More...

\n-
#include <bitset>
\n-#include <dune/common/fvector.hh>
\n-#include <dune/common/fmatrix.hh>
\n-#include <dune/common/diagonalmatrix.hh>
\n-#include <dune/geometry/referenceelements.hh>
\n-#include <dune/geometry/type.hh>
\n+
#include <dune/common/fvector.hh>
\n+#include <dune/common/typetraits.hh>
\n+#include <dune/geometry/referenceelements.hh>
\n+#include <dune/geometry/type.hh>
\n+#include "base.cc"
\n+#include "simplex.cc"
\n
\n

Go to the source code of this file.

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

\n Classes

class  Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim >
 A geometry implementation for axis-aligned hypercubes. More...
class  Dune::RefinementImp::PrismTriangulation::RefinementImp< dimension_, CoordType >
 Implementation of the refinement of a prism into simplices. More...
 
struct  Dune::RefinementImp::PrismTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::RefinementImp::PrismTriangulation::RefinementIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::RefinementImp::PrismTriangulation::RefinementIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::RefinementImp::PrismTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
\n \n \n \n+\n+\n+\n+\n+\n+\n+

\n Namespaces

namespace  Dune
 
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 
namespace  Dune::RefinementImp::PrismTriangulation
 This namespace contains the Refinement implementation for triangulating prisms (GeometryType::prism -> GeometryType::simplex)
 
\n+\n+\n+\n+

\n+Macros

#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
 
\n+\n+\n+\n+\n

\n+Functions

template<int dimension, class CoordType >
FieldVector< CoordType, dimension > Dune::RefinementImp::PrismTriangulation::transformCoordinate (FieldVector< CoordType, dimension > point)
 
\n-

Detailed Description

\n-

A geometry implementation for axis-aligned hypercubes.

\n-
\n+

Macro Definition Documentation

\n+\n+

◆ DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+
#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
\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,27 +1,57 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-axisalignedcubegeometry.hh File Reference\n-A geometry implementation for axis-aligned hypercubes. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+prismtriangulation.cc File Reference\n #include \n-#include \n-#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\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:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b,_\b _\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\b _\b>\n-\u00a0 A geometry implementation for axis-aligned hypercubes. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+\u00a0 Implementation of the refinement of a prism into simplices. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\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-*\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-A geometry implementation for axis-aligned hypercubes.\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn\n+\u00a0 This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for\n+ triangulating prisms (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bp_\br_\bi_\bs_\bm -> _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx)\n+\u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bP_\bR_\bI_\bS_\bM_\bT_\bR_\bI_\bA_\bN_\bG_\bU_\bL_\bA_\bT_\bI_\bO_\bN_\b__\bC_\bC\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+FieldVector< CoordType, dimension >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:\n+ _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be (FieldVector<\n+ CoordType, dimension > point)\n+\u00a0\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_P\bPR\bRI\bIS\bSM\bMT\bTR\bRI\bIA\bAN\bNG\bGU\bUL\bLA\bAT\bTI\bIO\bON\bN_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n+#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00227_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00227_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: axisalignedcubegeometry.hh Source File\n+dune-geometry: prismtriangulation.cc Source File\n \n \n \n \n \n \n \n@@ -70,360 +70,520 @@\n \n \n \n \n \n \n \n
\n-
axisalignedcubegeometry.hh
\n+
prismtriangulation.cc
\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5
\n-
6#ifndef DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH
\n-
7#define DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH
\n-
8
\n-
13#include <bitset>
\n-
14
\n-
15#include <dune/common/fvector.hh>
\n-
16#include <dune/common/fmatrix.hh>
\n-
17#include <dune/common/diagonalmatrix.hh>
\n-
18
\n-\n-
20#include <dune/geometry/type.hh>
\n-
21
\n-
22
\n-
23namespace Dune {
\n-
24
\n-
48 template <class CoordType, unsigned int dim, unsigned int coorddim>
\n-
\n-\n-
50 {
\n-
51
\n-
52
\n-
53 public:
\n-
54
\n-
56 constexpr static int mydimension = dim;
\n-
57
\n-
59 constexpr static int coorddimension = coorddim;
\n-
60
\n-
62 typedef CoordType ctype;
\n-
63
\n-
65 typedef FieldVector<ctype,dim> LocalCoordinate;
\n-
66
\n-
68 typedef FieldVector<ctype,coorddim> GlobalCoordinate;
\n-
69
\n-
71 typedef ctype Volume;
\n+
5#ifndef DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
\n+
6#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
\n+
7
\n+
8#include <dune/common/fvector.hh>
\n+
9#include <dune/common/typetraits.hh>
\n+
10
\n+\n+
12#include <dune/geometry/type.hh>
\n+
13
\n+
14#include "base.cc"
\n+
15#include "simplex.cc"
\n+
16
\n+
17namespace Dune
\n+
18{
\n+
19 namespace RefinementImp
\n+
20 {
\n+
\n+
26 namespace PrismTriangulation
\n+
27 {
\n+
28 // ////////////
\n+
29 //
\n+
30 // Utilities
\n+
31 //
\n+
32
\n+\n+\n+
35
\n+
36 // ////////////////////////////////////
\n+
37 //
\n+
38 // Refine a prism with simplices
\n+
39 //
\n+
40
\n+
41 // forward declaration of the iterator base
\n+
42 template<int dimension, class CoordType, int codimension>
\n+\n+
44 /*
\n+
45 * The permutations 0,2 and 3 of the Kuhn-decomposition of a cube into simplices form a prism.
\n+
46 * The resulting prism is not oriented the same as the reference prism and so the Kuhn-coordinates
\n+
47 * have to be transformed using the method below.
\n+
48 */
\n+
49 template<int dimension, class CoordType> FieldVector<CoordType, dimension>
\n+
\n+
50 transformCoordinate(FieldVector<CoordType, dimension> point)
\n+
51 {
\n+
52 FieldVector<CoordType, dimension> transform;
\n+
53 transform[0] = point[1];
\n+
54 transform[1] = 1 - point[0];
\n+
55 transform[2] = point[2];
\n+
56 return transform;
\n+
57 }
\n+
\n+
58
\n+
65 template<int dimension_, class CoordType>
\n+
\n+\n+
67 {
\n+
68 public:
\n+
69 constexpr static int dimension = dimension_;
\n+
70
\n+
71 typedef CoordType ctype;
\n
72
\n-
79 typedef typename std::conditional<dim==coorddim,
\n-
80 DiagonalMatrix<ctype,dim>,
\n-
81 FieldMatrix<ctype,dim,coorddim> >::type JacobianTransposed;
\n-
82
\n-
89 typedef typename std::conditional<dim==coorddim,
\n-
90 DiagonalMatrix<ctype,dim>,
\n-
91 FieldMatrix<ctype,coorddim,dim> >::type JacobianInverseTransposed;
\n-
92
\n-
100 using Jacobian = std::conditional_t<dim==coorddim, DiagonalMatrix<ctype,dim>, FieldMatrix<ctype,coorddim,dim> >;
\n-
101
\n-
109 using JacobianInverse = std::conditional_t<dim==coorddim, DiagonalMatrix<ctype,dim>, FieldMatrix<ctype,dim,coorddim> >;
\n+
73 template<int codimension>
\n+
74 struct Codim;
\n+\n+
76 typedef FieldVector<CoordType, dimension> CoordVector;
\n+\n+
78 typedef FieldVector<int, dimension+1> IndexVector;
\n+
79
\n+
80 static int nVertices(int nIntervals);
\n+
81 static VertexIterator vBegin(int nIntervals);
\n+
82 static VertexIterator vEnd(int nIntervals);
\n+
83
\n+
84 static int nElements(int nIntervals);
\n+
85 static ElementIterator eBegin(int nIntervals);
\n+
86 static ElementIterator eEnd(int nIntervals);
\n+
87
\n+
88 private:
\n+
89 friend class RefinementIteratorSpecial<dimension, CoordType, 0>;
\n+
90 friend class RefinementIteratorSpecial<dimension, CoordType, dimension>;
\n+
91
\n+\n+
93 };
\n+
\n+
94
\n+
95 template<int dimension, class CoordType>
\n+
96 template<int codimension>
\n+
\n+
97 struct RefinementImp<dimension, CoordType>::Codim
\n+
98 {
\n+
99 class SubEntityIterator;
\n+\n+
101 };
\n+
\n+
102
\n+
103 template<int dimension, class CoordType>
\n+
104 int
\n+
\n+\n+
106 nVertices(int nIntervals)
\n+
107 {
\n+
108 return BackendRefinement::nVertices(nIntervals) * 3;
\n+
109 }
\n+
\n
110
\n-
\n-
115 AxisAlignedCubeGeometry(const Dune::FieldVector<ctype,coorddim> lower,
\n-
116 const Dune::FieldVector<ctype,coorddim> upper)
\n-
117 : lower_(lower),
\n-
118 upper_(upper),
\n-
119 axes_()
\n-
120 {
\n-
121 static_assert(dim==coorddim, "Use this constructor only if dim==coorddim!");
\n-
122 // all 'true', but is never actually used
\n-
123 axes_ = (1<<coorddim)-1;
\n-
124 }
\n-
\n-
125
\n-
\n-
133 AxisAlignedCubeGeometry(const Dune::FieldVector<ctype,coorddim> lower,
\n-
134 const Dune::FieldVector<ctype,coorddim> upper,
\n-
135 const std::bitset<coorddim>& axes)
\n-
136 : lower_(lower),
\n-
137 upper_(upper),
\n-
138 axes_(axes)
\n-
139 {
\n-
140 assert(axes.count()==dim);
\n-
141 for (size_t i=0; i<coorddim; i++)
\n-
142 if (not axes_[i])
\n-
143 upper_[i] = lower_[i];
\n-
144 }
\n-
\n-
145
\n-
\n-
150 AxisAlignedCubeGeometry(const Dune::FieldVector<ctype,coorddim> lower)
\n-
151 : lower_(lower)
\n-
152 {}
\n-
\n-
153
\n-
\n-\n-
156 {
\n-
157 return GeometryTypes::cube(dim);
\n-
158 }
\n-
\n-
159
\n-
\n-\n-
162 {
\n-
163 GlobalCoordinate result;
\n-
164 if (dim == coorddim) { // fast case
\n-
165 for (size_t i=0; i<coorddim; i++)
\n-
166 result[i] = lower_[i] + local[i]*(upper_[i] - lower_[i]);
\n-
167 } else if (dim == 0) { // a vertex -- the other fast case
\n-
168 result = lower_; // hope for named-return-type-optimization
\n-
169 } else { // slow case
\n-
170 size_t lc=0;
\n-
171 for (size_t i=0; i<coorddim; i++)
\n-
172 result[i] = (axes_[i])
\n-
173 ? lower_[i] + local[lc++]*(upper_[i] - lower_[i])
\n-
174 : lower_[i];
\n-
175 }
\n-
176 return result;
\n-
177 }
\n-
\n-
178
\n-
\n-\n-
181 {
\n-
182 LocalCoordinate result;
\n-
183 if (dim == coorddim) { // fast case
\n-
184 for (size_t i=0; i<dim; i++)
\n-
185 result[i] = (global[i] - lower_[i]) / (upper_[i] - lower_[i]);
\n-
186 } else if (dim != 0) { // slow case
\n-
187 size_t lc=0;
\n-
188 for (size_t i=0; i<coorddim; i++)
\n-
189 if (axes_[i])
\n-
190 result[lc++] = (global[i] - lower_[i]) / (upper_[i] - lower_[i]);
\n-
191 }
\n-
192 return result;
\n-
193 }
\n-
\n-
194
\n-
\n-\n-
197 {
\n-
198 JacobianTransposed result;
\n-
199
\n-
200 // Actually compute the result. Uses different methods depending
\n-
201 // on what kind of matrix JacobianTransposed is.
\n-
202 jacobianTransposed(result);
\n-
203
\n-
204 return result;
\n-
205 }
\n-
\n-
206
\n-
\n-\n-
209 {
\n-\n-
211
\n-
212 // Actually compute the result. Uses different methods depending
\n-
213 // on what kind of matrix JacobianTransposed is.
\n-\n-
215
\n-
216 return result;
\n-
217 }
\n+
111 template<int dimension, class CoordType>
\n+\n+
\n+\n+
114 vBegin(int nIntervals)
\n+
115 {
\n+
116 return VertexIterator(nIntervals);
\n+
117 }
\n+
\n+
118
\n+
119 template<int dimension, class CoordType>
\n+\n+
\n+\n+
122 vEnd(int nIntervals)
\n+
123 {
\n+
124 return VertexIterator(nIntervals, true);
\n+
125 }
\n+
\n+
126
\n+
127 template<int dimension, class CoordType>
\n+
128 int
\n+
\n+\n+
130 nElements(int nIntervals)
\n+
131 {
\n+
132 return BackendRefinement::nElements(nIntervals) * 3;
\n+
133 }
\n+
\n+
134
\n+
135 template<int dimension, class CoordType>
\n+\n+
\n+\n+
138 eBegin(int nIntervals)
\n+
139 {
\n+
140 return ElementIterator(nIntervals);
\n+
141 }
\n+
\n+
142
\n+
143 template<int dimension, class CoordType>
\n+\n+
\n+\n+
146 eEnd(int nIntervals)
\n+
147 {
\n+
148 return ElementIterator(nIntervals, true);
\n+
149 }
\n+
\n+
150
\n+
151 // //////////////
\n+
152 //
\n+
153 // The iterator
\n+
154 //
\n+
155
\n+
156 // vertices
\n+
157 template<int dimension, class CoordType>
\n+
\n+
158 class RefinementIteratorSpecial<dimension, CoordType, dimension>
\n+
159 {
\n+
160 public:
\n+\n+
162 typedef typename Refinement::CoordVector CoordVector;
\n+
163 typedef typename Refinement::template Codim<dimension>::Geometry Geometry;
\n+
164
\n+
165 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n+
166
\n+
167 void increment();
\n+
168
\n+
169 CoordVector coords() const;
\n+
170 Geometry geometry () const;
\n+
171
\n+
172 int index() const;
\n+
173 protected:
\n+
174 typedef typename Refinement::BackendRefinement BackendRefinement;
\n+
175 typedef typename BackendRefinement::template Codim<dimension>::SubEntityIterator BackendIterator;
\n+
176 constexpr static int nKuhnSimplices = 3;
\n+
177
\n+\n+
179
\n+\n+\n+\n+
183 };
\n+
\n+
184
\n+
185 template<int dimension, class CoordType>
\n+
\n+\n+
187 RefinementIteratorSpecial(int nIntervals, bool end)
\n+
188 : nIntervals_(nIntervals), kuhnIndex(0),
\n+
189 backend(BackendRefinement::vBegin(nIntervals_)),
\n+
190 backendEnd(BackendRefinement::vEnd(nIntervals_))
\n+
191 {
\n+
192 if (end)
\n+
193 kuhnIndex = nKuhnSimplices;
\n+
194 }
\n+
\n+
195
\n+
196 template<int dimension, class CoordType>
\n+
197 void
\n+
\n+\n+\n+
200 {
\n+
201 ++backend;
\n+
202 if (backend == backendEnd)
\n+
203 {
\n+
204 backend = BackendRefinement::vBegin(nIntervals_);
\n+
205 ++kuhnIndex;
\n+
206 }
\n+
207 }
\n+
\n+
208
\n+
209 template<int dimension, class CoordType>
\n+\n+
\n+\n+
212 coords() const
\n+
213 {
\n+
214 // while the kuhnIndex runs from 0,1,2 the actual permutations we need are 0,2,3
\n+
215 return transformCoordinate(referenceToKuhn(backend.coords(),
\n+
216 getPermutation<dimension>((kuhnIndex + 2) % 4)));
\n+
217 }
\n
\n
218
\n-
\n-
220 Jacobian jacobian([[maybe_unused]] const LocalCoordinate& local) const
\n-
221 {
\n-
222 return jacobianTransposed(local).transposed();
\n-
223 }
\n-
\n-
224
\n-
\n-\n-
227 {
\n-
228 return jacobianInverseTransposed(local).transposed();
\n-
229 }
\n-
\n-
230
\n-
\n-
234 Volume integrationElement([[maybe_unused]] const LocalCoordinate& local) const
\n-
235 {
\n-
236 return volume();
\n-
237 }
\n-
\n-
238
\n-
\n-\n-
241 {
\n-
242 GlobalCoordinate result;
\n-
243 if (dim==0)
\n-
244 result = lower_;
\n-
245 else {
\n-
246 // Since lower_==upper_ for unused coordinates, this always does the right thing
\n-
247 for (size_t i=0; i<coorddim; i++)
\n-
248 result[i] = CoordType(0.5) * (lower_[i] + upper_[i]);
\n-
249 }
\n-
250 return result;
\n-
251 }
\n-
\n-
252
\n-
\n-
254 int corners() const
\n-
255 {
\n-
256 return 1<<dim;
\n-
257 }
\n-
\n-
258
\n-
\n-\n-
261 {
\n-
262 GlobalCoordinate result;
\n-
263 if (dim == coorddim) { // fast case
\n-
264 for (size_t i=0; i<coorddim; i++)
\n-
265 result[i] = (k & (1<<i)) ? upper_[i] : lower_[i];
\n-
266 } else if (dim == 0) { // vertex
\n-
267 result = lower_; // rely on named return-type optimization
\n-
268 } else { // slow case
\n-
269 unsigned int mask = 1;
\n-
270
\n-
271 for (size_t i=0; i<coorddim; i++) {
\n-
272 if (not axes_[i])
\n-
273 result[i] = lower_[i];
\n-
274 else {
\n-
275 result[i] = (k & mask) ? upper_[i] : lower_[i];
\n-
276 mask = (mask<<1);
\n-
277 }
\n-
278 }
\n-
279 }
\n-
280
\n-
281
\n-
282 return result;
\n-
283 }
\n-
\n-
284
\n-
\n-\n-
287 {
\n-
288 ctype vol = 1;
\n-
289 if (dim == coorddim) { // fast case
\n-
290 for (size_t i=0; i<dim; i++)
\n-
291 vol *= upper_[i] - lower_[i];
\n-
292 // do nothing if dim == 0
\n-
293 } else if (dim != 0) { // slow case
\n-
294 for (size_t i=0; i<coorddim; i++)
\n-
295 if (axes_[i])
\n-
296 vol *= upper_[i] - lower_[i];
\n-
297 }
\n-
298 return vol;
\n-
299 }
\n-
\n-
300
\n-
\n-
302 bool affine() const
\n-
303 {
\n-
304 return true;
\n-
305 }
\n-
\n-
306
\n-
\n-
307 friend Dune::Transitional::ReferenceElement< ctype, Dim<dim> > referenceElement ( const AxisAlignedCubeGeometry & /* geometry */ )
\n-
308 {
\n-\n-
310 }
\n-
\n-
311
\n-
312 private:
\n-
313 // jacobianTransposed: fast case --> diagonal matrix
\n-
314 void jacobianTransposed ( DiagonalMatrix<ctype,dim> &jacobianTransposed ) const
\n-
315 {
\n-
316 for (size_t i=0; i<dim; i++)
\n-
317 jacobianTransposed.diagonal()[i] = upper_[i] - lower_[i];
\n-
318 }
\n-
319
\n-
320 // jacobianTransposed: slow case --> dense matrix
\n-
321 void jacobianTransposed ( FieldMatrix<ctype,dim,coorddim> &jacobianTransposed ) const
\n-
322 {
\n-
323 if (dim==0)
\n-
324 return;
\n-
325
\n-
326 size_t lc = 0;
\n-
327 for (size_t i=0; i<coorddim; i++)
\n-
328 if (axes_[i])
\n-
329 jacobianTransposed[lc++][i] = upper_[i] - lower_[i];
\n-
330 }
\n-
331
\n-
332 // jacobianInverseTransposed: fast case --> diagonal matrix
\n-
333 void jacobianInverseTransposed ( DiagonalMatrix<ctype,dim> &jacobianInverseTransposed ) const
\n-
334 {
\n-
335 for (size_t i=0; i<dim; i++)
\n-
336 jacobianInverseTransposed.diagonal()[i] = CoordType(1.0) / (upper_[i] - lower_[i]);
\n-
337 }
\n-
338
\n-
339 // jacobianInverseTransposed: slow case --> dense matrix
\n-
340 void jacobianInverseTransposed ( FieldMatrix<ctype,coorddim,dim> &jacobianInverseTransposed ) const
\n-
341 {
\n-
342 if (dim==0)
\n-
343 return;
\n-
344
\n-
345 size_t lc = 0;
\n-
346 for (size_t i=0; i<coorddim; i++)
\n-
347 if (axes_[i])
\n-
348 jacobianInverseTransposed[i][lc++] = CoordType(1.0) / (upper_[i] - lower_[i]);
\n-
349 }
\n-
350
\n-
351 Dune::FieldVector<ctype,coorddim> lower_;
\n-
352
\n-
353 Dune::FieldVector<ctype,coorddim> upper_;
\n-
354
\n-
355 std::bitset<coorddim> axes_;
\n-
356 };
\n-
\n+
219 template<int dimension, class CoordType>
\n+\n+
\n+\n+
222 {
\n+
223 std::vector<CoordVector> corners(1);
\n+
224 corners[0] = transformCoordinate(referenceToKuhn(backend.coords(),
\n+
225 getPermutation<dimension>((kuhnIndex + 2) % 4)));
\n+
226 return Geometry(GeometryTypes::vertex, corners);
\n+
227 }
\n+
\n+
228
\n+
229 template<int dimension, class CoordType>
\n+
230 int
\n+
\n+\n+
232 index() const
\n+
233 {
\n+
234 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index();
\n+
235 }
\n+
\n+
236
\n+
237 // elements
\n+
238 template<int dimension, class CoordType>
\n+
\n+
239 class RefinementIteratorSpecial<dimension, CoordType, 0>
\n+
240 {
\n+
241 public:
\n+\n+\n+\n+
245 typedef typename Refinement::template Codim<0>::Geometry Geometry;
\n+
246
\n+
247 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n+
248
\n+
249 void increment();
\n+
250
\n+
251 IndexVector vertexIndices() const;
\n+
252 int index() const;
\n+
253 CoordVector coords() const;
\n+
254
\n+
255 Geometry geometry () const;
\n+
256
\n+
257 private:
\n+
258 CoordVector global(const CoordVector &local) const;
\n+
259
\n+
260 protected:
\n+\n+
262 typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator;
\n+
263 constexpr static int nKuhnSimplices = 3;
\n+
264
\n+\n+
266
\n+\n+\n+\n+
270 };
\n+
\n+
271
\n+
272 template<int dimension, class CoordType>
\n+
\n+\n+
274 RefinementIteratorSpecial(int nIntervals, bool end)
\n+
275 : nIntervals_(nIntervals), kuhnIndex(0),
\n+
276 backend(BackendRefinement::eBegin(nIntervals_)),
\n+
277 backendEnd(BackendRefinement::eEnd(nIntervals_))
\n+
278 {
\n+
279 if (end)
\n+
280 kuhnIndex = nKuhnSimplices;
\n+
281 }
\n+
\n+
282
\n+
283 template<int dimension, class CoordType>
\n+
284 void
\n+
\n+\n+\n+
287 {
\n+
288 ++backend;
\n+
289 if (backend == backendEnd)
\n+
290 {
\n+
291 backend = BackendRefinement::eBegin(nIntervals_);
\n+
292 ++kuhnIndex;
\n+
293 }
\n+
294 }
\n+
\n+
295
\n+
296 template<int dimension, class CoordType>
\n+\n+
\n+\n+
299 vertexIndices() const
\n+
300 {
\n+
301 IndexVector indices = backend.vertexIndices();
\n+
302
\n+
303 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);
\n+
304 indices += base;
\n+
305
\n+
306 return indices;
\n+
307 }
\n+
\n+
308
\n+
309 template<int dimension, class CoordType>
\n+
310 int
\n+
\n+\n+
312 index() const
\n+
313 {
\n+
314 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index();
\n+
315 }
\n+
\n+
316
\n+
317 template<int dimension, class CoordType>
\n+\n+
\n+\n+
320 coords() const
\n+
321 {
\n+
322 return global(backend.coords());
\n+
323 }
\n+
\n+
324
\n+
325 template<int dimension, class CoordType>
\n+\n+
\n+\n+
328 {
\n+
329 const typename BackendIterator::Geometry &bgeo =
\n+
330 backend.geometry();
\n+
331 std::vector<CoordVector> corners(dimension+1);
\n+
332 for(int i = 0; i <= dimension; ++i)
\n+
333 corners[i] = global(bgeo.corner(i));
\n+
334
\n+
335 return Geometry(bgeo.type(), corners);
\n+
336 }
\n+
\n+
337
\n+
338 template<int dimension, class CoordType>
\n+\n+\n+
341 global(const CoordVector &local) const
\n+
342 {
\n+
343 // while the kuhnIndex runs from 0,1,2 the actual permutations we need are 0,2,3
\n+
344 return transformCoordinate(referenceToKuhn(local, getPermutation<dimension>((kuhnIndex+2)%4)));
\n+
345 }
\n+
346
\n+
347 // common
\n+
348 template<int dimension, class CoordType>
\n+
349 template<int codimension>
\n+
\n+
350 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n+
351 : public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n+
352 public RefinementIteratorSpecial<dimension, CoordType, codimension>
\n+
353 {
\n+
354 public:
\n+\n+
356 typedef SubEntityIterator This;
\n
357
\n-
358} // namespace Dune
\n-
359#endif
\n-\n-
A unique label for each type of element that can occur in a grid.
\n+
358 SubEntityIterator(int nIntervals, bool end = false);
\n+
359
\n+
360 bool equals(const This &other) const;
\n+
361 protected:
\n+
362 using RefinementIteratorSpecial<dimension, CoordType, codimension>::kuhnIndex;
\n+
363 using RefinementIteratorSpecial<dimension, CoordType, codimension>::backend;
\n+
364 };
\n+
\n+
365
\n+
366#ifndef DOXYGEN
\n+
367 template<int dimension, class CoordType>
\n+
368 template<int codimension>
\n+\n+
370 SubEntityIterator(int nIntervals, bool end)
\n+
371 : RefinementIteratorSpecial<dimension, CoordType, codimension>(nIntervals, end)
\n+
372 {}
\n+
373
\n+
374 template<int dimension, class CoordType>
\n+
375 template<int codimension>
\n+
376 bool
\n+\n+
378 equals(const This &other) const
\n+
379 {
\n+
380 return ((kuhnIndex == other.kuhnIndex) && (backend == other.backend));
\n+
381 }
\n+
382#endif
\n+
383
\n+
384 } // namespace PrismTriangulation
\n+
\n+
385 } // namespace RefinementImp
\n+
386
\n+
387 namespace RefinementImp
\n+
388 {
\n+
389 // ///////////////////////
\n+
390 //
\n+
391 // The refinement traits
\n+
392 //
\n+
393
\n+
394#ifndef DOXYGEN
\n+
395 template<unsigned topologyId, class CoordType, unsigned coerceToId>
\n+
396 struct Traits<
\n+
397 topologyId, CoordType, coerceToId, 3,
\n+
398 typename std::enable_if<
\n+
399 (GeometryTypes::prism.id() >> 1) ==
\n+
400 (topologyId >> 1) &&
\n+
401 (GeometryTypes::simplex(3).id() >> 1) ==
\n+
402 (coerceToId >> 1)
\n+
403 >::type>
\n+
404 {
\n+
405 typedef PrismTriangulation::RefinementImp<3, CoordType> Imp;
\n+
406 };
\n+
407#endif
\n+
408
\n+
409 } // namespace RefinementImp
\n+
410} // namespace Dune
\n+
411
\n+
412#endif // DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC
\n+\n+
A unique label for each type of element that can occur in a grid.
\n+
This file contains the parts independent of a particular Refinement implementation.
\n+
This file contains the Refinement implementation for simplices (triangles, tetrahedrons....
\n
Definition affinegeometry.hh:21
\n-
static const ReferenceElement & cube()
get hypercube reference elements
Definition referenceelements.hh:210
\n-
A geometry implementation for axis-aligned hypercubes.
Definition axisalignedcubegeometry.hh:50
\n-
Volume volume() const
Return the element volume.
Definition axisalignedcubegeometry.hh:286
\n-
AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower, const Dune::FieldVector< ctype, coorddim > upper, const std::bitset< coorddim > &axes)
Constructor from a lower left and an upper right corner.
Definition axisalignedcubegeometry.hh:133
\n-
AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower, const Dune::FieldVector< ctype, coorddim > upper)
Constructor from a lower left and an upper right corner.
Definition axisalignedcubegeometry.hh:115
\n-
JacobianInverse jacobianInverse(const LocalCoordinate &local) const
Inverse Jacobian of the transformation from local to global coordinates.
Definition axisalignedcubegeometry.hh:226
\n-
JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate &local) const
Inverse Jacobian transposed of the transformation from local to global coordinates.
Definition axisalignedcubegeometry.hh:208
\n-
std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, dim, coorddim > >::type JacobianTransposed
Return type of jacobianTransposed.
Definition axisalignedcubegeometry.hh:81
\n-
AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower)
Constructor from a single point only.
Definition axisalignedcubegeometry.hh:150
\n-
static constexpr int mydimension
Dimension of the cube element.
Definition axisalignedcubegeometry.hh:56
\n-
static constexpr int coorddimension
Dimension of the world space that the cube element is embedded in.
Definition axisalignedcubegeometry.hh:59
\n-
GlobalCoordinate corner(int k) const
Return world coordinates of the k-th corner of the element.
Definition axisalignedcubegeometry.hh:260
\n-
ctype Volume
Type used for volume.
Definition axisalignedcubegeometry.hh:71
\n-
FieldVector< ctype, dim > LocalCoordinate
Type used for a vector of element coordinates.
Definition axisalignedcubegeometry.hh:65
\n-
friend Dune::Transitional::ReferenceElement< ctype, Dim< dim > > referenceElement(const AxisAlignedCubeGeometry &)
Definition axisalignedcubegeometry.hh:307
\n-
JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const
Jacobian transposed of the transformation from local to global coordinates.
Definition axisalignedcubegeometry.hh:196
\n-
FieldVector< ctype, coorddim > GlobalCoordinate
Type used for a vector of world coordinates.
Definition axisalignedcubegeometry.hh:68
\n-
LocalCoordinate local(const GlobalCoordinate &global) const
Map a point in global (world) coordinates to element coordinates.
Definition axisalignedcubegeometry.hh:180
\n-
CoordType ctype
Type used for single coordinate coefficients.
Definition axisalignedcubegeometry.hh:62
\n-
std::conditional_t< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, coorddim, dim > > Jacobian
Return type of jacobian.
Definition axisalignedcubegeometry.hh:100
\n-
GeometryType type() const
Type of the cube. Here: a hypercube of the correct dimension.
Definition axisalignedcubegeometry.hh:155
\n-
int corners() const
Return the number of corners of the element.
Definition axisalignedcubegeometry.hh:254
\n-
Jacobian jacobian(const LocalCoordinate &local) const
Jacobian of the transformation from local to global coordinates.
Definition axisalignedcubegeometry.hh:220
\n-
std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, coorddim, dim > >::type JacobianInverseTransposed
Return type of jacobianInverseTransposed.
Definition axisalignedcubegeometry.hh:91
\n-
Volume integrationElement(const LocalCoordinate &local) const
Return the integration element, i.e., the determinant term in the integral transformation formula.
Definition axisalignedcubegeometry.hh:234
\n-
GlobalCoordinate center() const
Return center of mass of the element.
Definition axisalignedcubegeometry.hh:240
\n-
bool affine() const
Return if the element is affine. Here: yes.
Definition axisalignedcubegeometry.hh:302
\n-
std::conditional_t< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix< ctype, dim, coorddim > > JacobianInverse
Return type of jacobianInverse.
Definition axisalignedcubegeometry.hh:109
\n-
GlobalCoordinate global(const LocalCoordinate &local) const
Map a point in local (element) coordinates to world coordinates.
Definition axisalignedcubegeometry.hh:161
\n-
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n+
FieldVector< CoordType, dimension > transformCoordinate(FieldVector< CoordType, dimension > point)
Definition prismtriangulation.cc:50
\n+
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:336
\n+
FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from the reference simplex to some Kuhn simplex.
Definition simplex.cc:394
\n+
Static tag representing a codimension.
Definition dimension.hh:24
\n+
generic geometry implementation based on corner coordinates
Definition multilineargeometry.hh:181
\n+\n+
Implementation of the refinement of a prism into simplices.
Definition prismtriangulation.cc:67
\n+
static constexpr int dimension
Definition prismtriangulation.cc:69
\n+
CoordType ctype
Definition prismtriangulation.cc:71
\n+
static VertexIterator vEnd(int nIntervals)
Definition prismtriangulation.cc:122
\n+
FieldVector< int, dimension+1 > IndexVector
Definition prismtriangulation.cc:78
\n+
static ElementIterator eEnd(int nIntervals)
Definition prismtriangulation.cc:146
\n+
static int nVertices(int nIntervals)
Definition prismtriangulation.cc:106
\n+
FieldVector< CoordType, dimension > CoordVector
Definition prismtriangulation.cc:76
\n+
static int nElements(int nIntervals)
Definition prismtriangulation.cc:130
\n+
Codim< 0 >::SubEntityIterator ElementIterator
Definition prismtriangulation.cc:77
\n+
Codim< dimension >::SubEntityIterator VertexIterator
Definition prismtriangulation.cc:75
\n+
static ElementIterator eBegin(int nIntervals)
Definition prismtriangulation.cc:138
\n+
static VertexIterator vBegin(int nIntervals)
Definition prismtriangulation.cc:114
\n+\n+
Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition prismtriangulation.cc:100
\n+\n+
Refinement::template Codim< dimension >::Geometry Geometry
Definition prismtriangulation.cc:163
\n+
Refinement::BackendRefinement BackendRefinement
Definition prismtriangulation.cc:174
\n+
BackendRefinement::template Codim< dimension >::SubEntityIterator BackendIterator
Definition prismtriangulation.cc:175
\n+\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition prismtriangulation.cc:161
\n+\n+\n+\n+
Refinement::template Codim< 0 >::Geometry Geometry
Definition prismtriangulation.cc:245
\n+\n+
Refinement::IndexVector IndexVector
Definition prismtriangulation.cc:243
\n+
BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator
Definition prismtriangulation.cc:262
\n+\n+
Refinement::CoordVector CoordVector
Definition prismtriangulation.cc:244
\n+
RefinementImp< dimension, CoordType > Refinement
Definition prismtriangulation.cc:242
\n+\n+
Refinement::BackendRefinement BackendRefinement
Definition prismtriangulation.cc:261
\n+
SubEntityIterator This
Definition prismtriangulation.cc:356
\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition prismtriangulation.cc:355
\n+\n+\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,429 +1,603 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-axisalignedcubegeometry.hh\n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+prismtriangulation.cc\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5\n-6#ifndef DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH\n-7#define DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH\n-8\n-13#include \n-14\n-15#include \n-16#include \n-17#include \n-18\n-19#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-21\n-22\n-23namespace _\bD_\bu_\bn_\be {\n-24\n-48 template \n-_\b4_\b9 class _\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-50 {\n-51\n-52\n-53 public:\n-54\n-_\b5_\b6 constexpr static int _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dim;\n-57\n-_\b5_\b9 constexpr static int _\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = coorddim;\n-60\n-_\b6_\b2 typedef CoordType _\bc_\bt_\by_\bp_\be;\n-63\n-_\b6_\b5 typedef FieldVector _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-66\n-_\b6_\b8 typedef FieldVector _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-69\n-_\b7_\b1 typedef _\bc_\bt_\by_\bp_\be _\bV_\bo_\bl_\bu_\bm_\be;\n+5#ifndef DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC\n+_\b6#define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC\n+7\n+8#include \n+9#include \n+10\n+11#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+12#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+13\n+14#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+15#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n+16\n+17namespace _\bD_\bu_\bn_\be\n+18{\n+19 namespace RefinementImp\n+20 {\n+_\b2_\b6 namespace PrismTriangulation\n+27 {\n+28 // ////////////\n+29 //\n+30 // Utilities\n+31 //\n+32\n+33 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn;\n+34 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn;\n+35\n+36 // ////////////////////////////////////\n+37 //\n+38 // Refine a prism with simplices\n+39 //\n+40\n+41 // forward declaration of the iterator base\n+42 template\n+_\b4_\b3 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n+44 /*\n+45 * The permutations 0,2 and 3 of the Kuhn-decomposition of a cube into\n+simplices form a prism.\n+46 * The resulting prism is not oriented the same as the reference prism and so\n+the Kuhn-coordinates\n+47 * have to be transformed using the method below.\n+48 */\n+49 template FieldVector\n+_\b5_\b0 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(FieldVector point)\n+51 {\n+52 FieldVector transform;\n+53 transform[0] = point[1];\n+54 transform[1] = 1 - point[0];\n+55 transform[2] = point[2];\n+56 return transform;\n+57 }\n+58\n+65 template\n+_\b6_\b6 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+67 {\n+68 public:\n+_\b6_\b9 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n+70\n+_\b7_\b1 typedef CoordType _\bc_\bt_\by_\bp_\be;\n 72\n-79 typedef typename std::conditional,\n-_\b8_\b1 FieldMatrix >_\b:_\b:_\bt_\by_\bp_\be _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n-82\n-89 typedef typename std::conditional,\n-_\b9_\b1 FieldMatrix >_\b:_\b:_\bt_\by_\bp_\be _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n-92\n-_\b1_\b0_\b0 using _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn = std::conditional_t, FieldMatrix >;\n-101\n-_\b1_\b0_\b9 using _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be = std::conditional_t, FieldMatrix >;\n+73 template\n+74 struct _\bC_\bo_\bd_\bi_\bm;\n+_\b7_\b5 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b7_\b6 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b7_\b7 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b7_\b8 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+79\n+80 static int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals);\n+81 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals);\n+82 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(int nIntervals);\n+83\n+84 static int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals);\n+85 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(int nIntervals);\n+_\b8_\b6 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(int nIntervals);\n+87\n+88 private:\n+89 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, 0>;\n+90 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>;\n+91\n+92 typedef _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+93 };\n+94\n+95 template\n+96 template\n+_\b9_\b7 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n+98 {\n+99 class SubEntityIterator;\n+_\b1_\b0_\b0 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+101 };\n+102\n+103 template\n+104 int\n+_\b1_\b0_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+106_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals)\n+107 {\n+108 return BackendRefinement::nVertices(nIntervals) * 3;\n+109 }\n 110\n-_\b1_\b1_\b5 _\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by(const Dune::FieldVector lower,\n-116 const Dune::FieldVector upper)\n-117 : lower_(lower),\n-118 upper_(upper),\n-119 axes_()\n-120 {\n-121 static_assert(dim==coorddim, \"Use this constructor only if\n-dim==coorddim!\");\n-122 // all 'true', but is never actually used\n-123 axes_ = (1< lower,\n-134 const Dune::FieldVector upper,\n-135 const std::bitset& axes)\n-136 : lower_(lower),\n-137 upper_(upper),\n-138 axes_(axes)\n+111 template\n+112 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b1_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+114_\b _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals)\n+115 {\n+116 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n+117 }\n+118\n+119 template\n+120 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b2_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+122_\b _\bv_\bE_\bn_\bd(int nIntervals)\n+123 {\n+124 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n+125 }\n+126\n+127 template\n+128 int\n+_\b1_\b2_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+130_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals)\n+131 {\n+132 return BackendRefinement::nElements(nIntervals) * 3;\n+133 }\n+134\n+135 template\n+136 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b3_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+138_\b _\be_\bB_\be_\bg_\bi_\bn(int nIntervals)\n 139 {\n-140 assert(axes.count()==dim);\n-141 for (size_t i=0; i lower)\n-151 : lower_(lower)\n-152 {}\n-153\n-_\b1_\b5_\b5 _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bt_\by_\bp_\be() const\n-156 {\n-157 return GeometryTypes::cube(dim);\n-158 }\n-159\n-_\b1_\b6_\b1 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bg_\bl_\bo_\bb_\ba_\bl(const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be& _\bl_\bo_\bc_\ba_\bl) const\n-162 {\n-163 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be result;\n-164 if (dim == coorddim) { // fast case\n-165 for (size_t i=0; i\n+144 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b4_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+146_\b _\be_\bE_\bn_\bd(int nIntervals)\n+147 {\n+148 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n+149 }\n+150\n+151 // //////////////\n+152 //\n+153 // The iterator\n+154 //\n+155\n+156 // vertices\n+157 template\n+_\b1_\b5_\b8 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+159 {\n+160 public:\n+_\b1_\b6_\b1 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b1_\b6_\b2 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b1_\b6_\b3 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+164\n+165 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n+166\n+167 void increment();\n+168\n+169 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+170 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry () const;\n+171\n+172 int index() const;\n+173 protected:\n+_\b1_\b7_\b4 typedef typename Refinement::BackendRefinement _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b1_\b7_\b5 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b1_\b7_\b6 constexpr static int nKuhnSimplices = 3;\n+177\n+_\b1_\b7_\b8 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n+179\n+_\b1_\b8_\b0 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n+_\b1_\b8_\b1 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n+_\b1_\b8_\b2 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n+183 };\n+184\n+185 template\n+_\b1_\b8_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+187_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n+188 : nIntervals_(nIntervals), kuhnIndex(0),\n+189 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vBegin(nIntervals_)),\n+190 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vEnd(nIntervals_))\n+191 {\n+192 if (end)\n+193 kuhnIndex = nKuhnSimplices;\n+194 }\n+195\n+196 template\n+197 void\n+_\b1_\b9_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+199_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+200 {\n+201 ++backend;\n+202 if (backend == backendEnd)\n+203 {\n+204 backend = BackendRefinement::vBegin(nIntervals_);\n+205 ++kuhnIndex;\n+206 }\n+207 }\n+208\n+209 template\n+210 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b2_\b1_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+212_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+213 {\n+214 // while the kuhnIndex runs from 0,1,2 the actual permutations we need are\n+0,2,3\n+215 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(backend.coords(),\n+216 getPermutation((kuhnIndex + 2) % 4)));\n 217 }\n 218\n-_\b2_\b2_\b0 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be& _\bl_\bo_\bc_\ba_\bl) const\n-221 {\n-222 return _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd(_\bl_\bo_\bc_\ba_\bl).transposed();\n-223 }\n-224\n-_\b2_\b2_\b6 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be&\n-_\bl_\bo_\bc_\ba_\bl) const\n-227 {\n-228 return _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd(_\bl_\bo_\bc_\ba_\bl).transposed();\n-229 }\n-230\n-_\b2_\b3_\b4 _\bV_\bo_\bl_\bu_\bm_\be _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be& _\bl_\bo_\bc_\ba_\bl)\n+219 template\n+220 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+_\b2_\b2_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by ()\n const\n-235 {\n-236 return _\bv_\bo_\bl_\bu_\bm_\be();\n-237 }\n-238\n-_\b2_\b4_\b0 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bc_\be_\bn_\bt_\be_\br() const\n-241 {\n-242 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be result;\n-243 if (dim==0)\n-244 result = lower_;\n-245 else {\n-246 // Since lower_==upper_ for unused coordinates, this always does the right\n-thing\n-247 for (size_t i=0; i corners(1);\n+224 corners[0] = _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(backend.coords(),\n+225 getPermutation((kuhnIndex + 2) % 4)));\n+226 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(GeometryTypes::vertex, corners);\n+227 }\n+228\n+229 template\n+230 int\n+_\b2_\b3_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+232_\b _\bi_\bn_\bd_\be_\bx() const\n+233 {\n+234 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index\n+();\n+235 }\n+236\n+237 // elements\n+238 template\n+_\b2_\b3_\b9 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+240 {\n+241 public:\n+_\b2_\b4_\b2 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b4_\b3 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+_\b2_\b4_\b4 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b2_\b4_\b5 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+246\n+247 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n+248\n+249 void increment();\n+250\n+251 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n+252 int index() const;\n+253 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+254\n+255 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry () const;\n+256\n+257 private:\n+258 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br global(const _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br &local) const;\n+259\n+260 protected:\n+_\b2_\b6_\b1 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b6_\b2 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b2_\b6_\b3 constexpr static int nKuhnSimplices = 3;\n+264\n+_\b2_\b6_\b5 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n+266\n+_\b2_\b6_\b7 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n+_\b2_\b6_\b8 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n+_\b2_\b6_\b9 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n+270 };\n+271\n+272 template\n+_\b2_\b7_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+274_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n+275 : nIntervals_(nIntervals), kuhnIndex(0),\n+276 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eBegin(nIntervals_)),\n+277 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eEnd(nIntervals_))\n+278 {\n+279 if (end)\n+280 kuhnIndex = nKuhnSimplices;\n+281 }\n+282\n+283 template\n+284 void\n+_\b2_\b8_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+286_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n 287 {\n-288 _\bc_\bt_\by_\bp_\be vol = 1;\n-289 if (dim == coorddim) { // fast case\n-290 for (size_t i=0; i >\n-_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt ( const _\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by & /* geometry */ )\n-308 {\n-309 return _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\b _\b>_\b:_\b:_\bc_\bu_\bb_\be();\n-310 }\n-311\n-312 private:\n-313 // jacobianTransposed: fast case --> diagonal matrix\n-314 void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( DiagonalMatrix &_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd )\n-const\n-315 {\n-316 for (size_t i=0; i dense matrix\n-321 void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( FieldMatrix\n-&_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ) const\n-322 {\n-323 if (dim==0)\n-324 return;\n-325\n-326 size_t lc = 0;\n-327 for (size_t i=0; i diagonal matrix\n-333 void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( DiagonalMatrix\n-&_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ) const\n-334 {\n-335 for (size_t i=0; i dense matrix\n-340 void _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ( FieldMatrix\n-&_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ) const\n-341 {\n-342 if (dim==0)\n-343 return;\n-344\n-345 size_t lc = 0;\n-346 for (size_t i=0; i lower_;\n-352\n-353 Dune::FieldVector upper_;\n-354\n-355 std::bitset axes_;\n-356 };\n+288 ++backend;\n+289 if (backend == backendEnd)\n+290 {\n+291 backend = BackendRefinement::eBegin(nIntervals_);\n+292 ++kuhnIndex;\n+293 }\n+294 }\n+295\n+296 template\n+297 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+_\b2_\b9_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+299_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n+300 {\n+301 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br indices = backend.vertexIndices();\n+302\n+303 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);\n+304 indices += base;\n+305\n+306 return indices;\n+307 }\n+308\n+309 template\n+310 int\n+_\b3_\b1_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+312_\b _\bi_\bn_\bd_\be_\bx() const\n+313 {\n+314 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index\n+();\n+315 }\n+316\n+317 template\n+318 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b3_\b1_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+320_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+321 {\n+322 return global(backend.coords());\n+323 }\n+324\n+325 template\n+326 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+_\b3_\b2_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by () const\n+328 {\n+329 const typename BackendIterator::Geometry &bgeo =\n+330 backend.geometry();\n+331 std::vector corners(dimension+1);\n+332 for(int i = 0; i <= dimension; ++i)\n+333 corners[i] = global(bgeo.corner(i));\n+334\n+335 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(bgeo.type(), corners);\n+336 }\n+337\n+338 template\n+339 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+340 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+341_\b _\bg_\bl_\bo_\bb_\ba_\bl(const CoordVector &local) const\n+342 {\n+343 // while the kuhnIndex runs from 0,1,2 the actual permutations we need are\n+0,2,3\n+344 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be(referenceToKuhn(local, getPermutation\n+((kuhnIndex+2)%4)));\n+345 }\n+346\n+347 // common\n+348 template\n+349 template\n+_\b3_\b5_\b0 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n+SubEntityIterator\n+351 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n+352 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+353 {\n+354 public:\n+_\b3_\b5_\b5 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b3_\b5_\b6 typedef SubEntityIterator _\bT_\bh_\bi_\bs;\n 357\n-358} // namespace Dune\n-359#endif\n+_\b3_\b5_\b8 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end = false);\n+359\n+_\b3_\b6_\b0 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n+361 protected:\n+362 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n+kuhnIndex;\n+363 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n+backend;\n+364 };\n+365\n+366#ifndef DOXYGEN\n+367 template\n+368 template\n+369 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n+370_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end)\n+371 : _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(nIntervals,\n+end)\n+372 {}\n+373\n+374 template\n+375 template\n+376 bool\n+377 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n+378_\b _\be_\bq_\bu_\ba_\bl_\bs(const This &other) const\n+379 {\n+380 return ((kuhnIndex == other.kuhnIndex) && (backend == other.backend));\n+381 }\n+382#endif\n+383\n+384 } // namespace PrismTriangulation\n+385 } // namespace RefinementImp\n+386\n+387 namespace RefinementImp\n+388 {\n+389 // ///////////////////////\n+390 //\n+391 // The refinement traits\n+392 //\n+393\n+394#ifndef DOXYGEN\n+395 template\n+396 struct Traits<\n+397 topologyId, CoordType, coerceToId, 3,\n+398 typename std::enable_if<\n+399 (GeometryTypes::prism.id() >> 1) ==\n+400 (topologyId >> 1) &&\n+401 (GeometryTypes::simplex(3).id() >> 1) ==\n+402 (coerceToId >> 1)\n+403 >::type>\n+404 {\n+405 typedef PrismTriangulation::RefinementImp<3, CoordType> Imp;\n+406 };\n+407#endif\n+408\n+409 } // namespace RefinementImp\n+410} // namespace Dune\n+411\n+412#endif // DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC\n _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n+_\bb_\ba_\bs_\be_\b._\bc_\bc\n+This file contains the parts independent of a particular Refinement\n+implementation.\n+_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\n+This file contains the Refinement implementation for simplices (triangles,\n+tetrahedrons....\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bc_\bu_\bb_\be\n-static const ReferenceElement & cube()\n-get hypercube reference elements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:210\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-A geometry implementation for axis-aligned hypercubes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n-Volume volume() const\n-Return the element volume.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:286\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower, const\n-Dune::FieldVector< ctype, coorddim > upper, const std::bitset< coorddim >\n-&axes)\n-Constructor from a lower left and an upper right corner.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:133\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower, const\n-Dune::FieldVector< ctype, coorddim > upper)\n-Constructor from a lower left and an upper right corner.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:115\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n-JacobianInverse jacobianInverse(const LocalCoordinate &local) const\n-Inverse Jacobian of the transformation from local to global coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:226\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate\n-&local) const\n-Inverse Jacobian transposed of the transformation from local to global\n-coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:208\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix<\n-ctype, dim, coorddim > >::type JacobianTransposed\n-Return type of jacobianTransposed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:81\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-AxisAlignedCubeGeometry(const Dune::FieldVector< ctype, coorddim > lower)\n-Constructor from a single point only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:150\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static constexpr int mydimension\n-Dimension of the cube element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:56\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static constexpr int coorddimension\n-Dimension of the world space that the cube element is embedded in.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:59\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br\n-GlobalCoordinate corner(int k) const\n-Return world coordinates of the k-th corner of the element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:260\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bV_\bo_\bl_\bu_\bm_\be\n-ctype Volume\n-Type used for volume.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:71\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-FieldVector< ctype, dim > LocalCoordinate\n-Type used for a vector of element coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:65\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-friend Dune::Transitional::ReferenceElement< ctype, Dim< dim > >\n-referenceElement(const AxisAlignedCubeGeometry &)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:307\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const\n-Jacobian transposed of the transformation from local to global coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:196\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-FieldVector< ctype, coorddim > GlobalCoordinate\n-Type used for a vector of world coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bl_\bo_\bc_\ba_\bl\n-LocalCoordinate local(const GlobalCoordinate &global) const\n-Map a point in global (world) coordinates to element coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:180\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bt_\by_\bp_\be\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+FieldVector< CoordType, dimension > transformCoordinate(FieldVector< CoordType,\n+dimension > point)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn\n+FieldVector< int, n > getPermutation(int m)\n+Calculate permutation from it's index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:336\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn\n+FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType,\n+dimension > point, const FieldVector< int, dimension > &kuhn)\n+Map from the reference simplex to some Kuhn simplex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:394\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+Static tag representing a codimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n+_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+generic geometry implementation based on corner coordinates\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:43\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+Implementation of the refinement of a prism into simplices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static constexpr int dimension\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:69\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bc_\bt_\by_\bp_\be\n CoordType ctype\n-Type used for single coordinate coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:62\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-std::conditional_t< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix<\n-ctype, coorddim, dim > > Jacobian\n-Return type of jacobian.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bt_\by_\bp_\be\n-GeometryType type() const\n-Type of the cube. Here: a hypercube of the correct dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:155\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br_\bs\n-int corners() const\n-Return the number of corners of the element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:254\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-Jacobian jacobian(const LocalCoordinate &local) const\n-Jacobian of the transformation from local to global coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:220\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-std::conditional< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix<\n-ctype, coorddim, dim > >::type JacobianInverseTransposed\n-Return type of jacobianInverseTransposed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:91\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt\n-Volume integrationElement(const LocalCoordinate &local) const\n-Return the integration element, i.e., the determinant term in the integral\n-transformation formula.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:234\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\be_\bn_\bt_\be_\br\n-GlobalCoordinate center() const\n-Return center of mass of the element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:240\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be\n-bool affine() const\n-Return if the element is affine. Here: yes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:302\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n-std::conditional_t< dim==coorddim, DiagonalMatrix< ctype, dim >, FieldMatrix<\n-ctype, dim, coorddim > > JacobianInverse\n-Return type of jacobianInverse.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:109\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl\n-GlobalCoordinate global(const LocalCoordinate &local) const\n-Map a point in local (element) coordinates to world coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:161\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-Unique label for each type of entities that can occur in DUNE grids.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:71\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n+static VertexIterator vEnd(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< int, dimension+1 > IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n+static ElementIterator eEnd(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:146\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+static int nVertices(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:106\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< CoordType, dimension > CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:76\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+static int nElements(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:130\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< 0 >::SubEntityIterator ElementIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:77\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< dimension >::SubEntityIterator VertexIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n+static ElementIterator eBegin(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:138\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n+static VertexIterator vBegin(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:114\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:98\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension >\n+Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:100\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n+int nIntervals_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:178\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Refinement::template Codim< dimension >::Geometry Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:163\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+Refinement::BackendRefinement BackendRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:174\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+BackendRefinement::template Codim< dimension >::SubEntityIterator\n+BackendIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:175\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:162\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n+const BackendIterator backendEnd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:182\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:161\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n+BackendIterator backend\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n+int kuhnIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:180\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n+int nIntervals_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:265\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Refinement::template Codim< 0 >::Geometry Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:245\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n+BackendIterator backend\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:268\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::IndexVector IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:243\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:262\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n+int kuhnIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:267\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:244\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:242\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n+const BackendIterator backendEnd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:269\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+Refinement::BackendRefinement BackendRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:261\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\bT_\bh_\bi_\bs\n+SubEntityIterator This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:356\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other) const\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn prismtriangulation.cc:355\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bP_\br_\bi_\bs_\bm_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+SubEntityIterator(int nIntervals, bool end=false)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:433\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00230.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00230.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: referenceelement.hh File Reference\n+dune-geometry: hcube.cc File Reference\n \n \n \n \n \n \n \n@@ -65,44 +65,88 @@\n
\n \n \n \n \n \n \n
\n \n-
referenceelement.hh File Reference
\n+Namespaces |\n+Macros
\n+
hcube.cc File Reference
\n \n
\n-
#include <dune/geometry/type.hh>
\n+\n+

This file contains the Refinement implementation for hypercubes (quadrilaterals, hexahedrons, etc.). \n+More...

\n+
#include <cassert>
\n+#include <dune/common/fvector.hh>
\n+#include <dune/common/iteratorfacades.hh>
\n+#include <dune/geometry/referenceelements.hh>
\n+#include <dune/geometry/axisalignedcubegeometry.hh>
\n+#include "base.cc"
\n
\n

Go to the source code of this file.

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

\n Classes

class  Dune::Geo::ReferenceElement< Implementation >
 This class provides access to geometric and topological properties of a reference element. More...
class  Dune::RefinementImp::HCube::RefinementImp< dimension_, CoordType >
 Refinement implementation for hypercubes More...
 
struct  Dune::RefinementImp::HCube::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::RefinementImp::HCube::RefinementSubEntityIteratorSpecial< dimension, CoordType, codimension >
 SubEntityIterator base class for hypercube refinement. More...
 
struct  Dune::Geo::ReferenceElement< Implementation >::Codim< codim >
 Collection of types depending on the codimension. More...
class  Dune::RefinementImp::HCube::RefinementSubEntityIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::RefinementImp::HCube::RefinementSubEntityIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::RefinementImp::HCube::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
\n \n \n \n-\n+\n+\n+\n+\n+\n \n+

\n Namespaces

namespace  Dune
 
namespace  Dune::Geo
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 
namespace  Dune::RefinementImp::HCube
 This namespace contains the Refinement implementation for hypercubes (GeometryType::cube).
 
\n+\n+\n+\n

\n+Macros

#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
 
\n+

Detailed Description

\n+

This file contains the Refinement implementation for hypercubes (quadrilaterals, hexahedrons, etc.).

\n+

See Refinement implementation for hypercubes.

\n+

Macro Definition Documentation

\n+\n+

◆ DUNE_GEOMETRY_REFINEMENT_HCUBE_CC

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+
#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
\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,25 +1,60 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-referenceelement.hh File Reference\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\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+hcube.cc File Reference\n+This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for hypercubes\n+(quadrilaterals, hexahedrons, etc.). _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bx_\bi_\bs_\ba_\bl_\bi_\bg_\bn_\be_\bd_\bc_\bu_\bb_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n+#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\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:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\b>\n-\u00a0 This class provides access to geometric and topological properties of\n- a reference element. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+\u00a0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for hypercubes _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\b _\b>\n-\u00a0 Collection of types depending on the codimension. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:\n+ _\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0 SubEntityIterator base class for hypercube refinement. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:\n+ _\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\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:_\bG_\be_\bo\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be\n+\u00a0 This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for\n+ hypercubes (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bc_\bu_\bb_\be).\n+\u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bH_\bC_\bU_\bB_\bE_\b__\bC_\bC\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+This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for hypercubes\n+(quadrilaterals, hexahedrons, etc.).\n+See _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b _\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bf_\bo_\br_\b _\bh_\by_\bp_\be_\br_\bc_\bu_\bb_\be_\bs.\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_H\bHC\bCU\bUB\bBE\bE_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n+#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00230_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00230_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: referenceelement.hh Source File\n+dune-geometry: hcube.cc Source File\n \n \n \n \n \n \n \n@@ -70,264 +70,477 @@\n
\n \n \n \n \n \n \n
\n-
referenceelement.hh
\n+
hcube.cc
\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_REFERENCEELEMENT_HH
\n-
6#define DUNE_GEOMETRY_REFERENCEELEMENT_HH
\n+
5#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
\n+
6#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
\n
7
\n-\n-
9
\n-
10namespace Dune {
\n-
11 namespace Geo {
\n-
12
\n-
13 namespace Impl {
\n-
14
\n-
15 // forward declaration for friend declaration
\n-
16 template<typename ctype, int dim>
\n-
17 class ReferenceElementContainer;
\n-
18
\n-
19 }
\n-
20
\n-
21 // forward declaration for constructing default reference element type
\n-
22 template<typename ctype, int dim>
\n-
23 class ReferenceElementImplementation;
\n-
24
\n-
25 // forward declaration for backwards compatibility conversion
\n-
26 template<typename ctype, int dim>
\n-
27 struct ReferenceElements;
\n-
28
\n-
29 // ReferenceElement
\n-
30 // ----------------
\n-
31
\n-
50 template<typename Implementation>
\n-
\n-\n-
52 {
\n-
53
\n-
54 public:
\n-
55
\n-
56#ifndef DOXYGEN
\n-
57
\n-
59 template<int codim>
\n-
60 using Codim = typename Implementation::template Codim<codim>;
\n-
61
\n-
62#else
\n-
63
\n-
65 template< int codim >
\n-
\n-
66 struct Codim
\n-
67 {
\n-
69 using Geometry = implementation-defined;
\n-
70 };
\n-
\n-
71
\n-
72#endif // DOXYGEN
\n-
73
\n-
75 using ctype = typename Implementation::ctype;
\n-
76
\n-\n-
79
\n-
81 using Coordinate = typename Implementation::Coordinate;
\n-
82
\n-
84 typedef ctype Volume;
\n-
85
\n-
87 static constexpr int dimension = Implementation::dimension;
\n+
42#include <cassert>
\n+
43
\n+
44#include <dune/common/fvector.hh>
\n+
45#include <dune/common/iteratorfacades.hh>
\n+
46
\n+\n+\n+
49
\n+
50#include "base.cc" // for RefinementTraits
\n+
51
\n+
52namespace Dune
\n+
53{
\n+
54 namespace RefinementImp
\n+
55 {
\n+
\n+
62 namespace HCube
\n+
63 {
\n+
73 template<int dimension_, class CoordType>
\n+
\n+\n+
75 {
\n+
76 public:
\n+
78 constexpr static int dimension = dimension_;
\n+
79 //- Know yourself
\n+\n+
81
\n+
82 template<int codimension>
\n+
83 struct Codim;
\n+\n+
85 typedef FieldVector<CoordType, dimension> CoordVector;
\n+\n+
87 typedef FieldVector<int, (1<<dimension)> IndexVector;
\n
88
\n-
89
\n-
\n-
94 int size(int c) const
\n-
95 {
\n-
96 return _impl->size(c);
\n-
97 }
\n-
\n-
98
\n-
99
\n-
\n-
111 int size(int i, int c, int cc) const
\n-
112 {
\n-
113 return _impl->size(i,c,cc);
\n-
114 }
\n-
\n-
115
\n-
116
\n-
\n-
130 int subEntity(int i, int c, int ii, int cc) const
\n-
131 {
\n-
132 return _impl->subEntity(i,c,ii,cc);
\n-
133 }
\n-
\n-
134
\n-
\n-
153 auto subEntities ( int i, int c, int cc ) const
\n-
154 {
\n-
155 return _impl->subEntities(i,c,cc);
\n+
89 static unsigned nVertices(unsigned nIntervals);
\n+
90 static VertexIterator vBegin(unsigned nIntervals);
\n+
91 static VertexIterator vEnd(unsigned nIntervals);
\n+
92
\n+
93 static unsigned nElements(unsigned nIntervals);
\n+
94 static ElementIterator eBegin(unsigned nIntervals);
\n+
95 static ElementIterator eEnd(unsigned nIntervals);
\n+
96 };
\n+
\n+
97
\n+
98 template<int dimension, class CoordType>
\n+
99 template<int codimension>
\n+
\n+
100 struct RefinementImp<dimension, CoordType>::Codim
\n+
101 {
\n+
102 class SubEntityIterator;
\n+\n+
104 };
\n+
\n+
105
\n+
106 template<int dimension, class CoordType>
\n+
107 unsigned
\n+
\n+\n+
109 nVertices(unsigned nIntervals)
\n+
110 {
\n+
111 // return (nIntervals + 1)^dim
\n+
112 return Dune::power(nIntervals+1u, unsigned(dimension));
\n+
113 }
\n+
\n+
114
\n+
115 template<int dimension, class CoordType>
\n+\n+
\n+\n+
118 vBegin(unsigned nIntervals)
\n+
119 {
\n+
120 return VertexIterator(0,nIntervals);
\n+
121 }
\n+
\n+
122
\n+
123 template<int dimension, class CoordType>
\n+\n+
\n+\n+
126 vEnd(unsigned nIntervals)
\n+
127 {
\n+
128 return VertexIterator(nVertices(nIntervals),nIntervals);
\n+
129 }
\n+
\n+
130
\n+
131 template<int dimension, class CoordType>
\n+
132 unsigned
\n+
\n+\n+
134 nElements(unsigned nIntervals)
\n+
135 {
\n+
136 static_assert(dimension >= 0,
\n+
137 "Negative dimension given, what the heck is that supposed to mean?");
\n+
138 // return nIntervals^dim
\n+
139 return Dune::power(nIntervals, unsigned(dimension));
\n+
140 }
\n+
\n+
141
\n+
142 template<int dimension, class CoordType>
\n+\n+
\n+\n+
145 eBegin(unsigned nIntervals)
\n+
146 {
\n+
147 return ElementIterator(0,nIntervals);
\n+
148 }
\n+
\n+
149
\n+
150 template<int dimension, class CoordType>
\n+\n+
\n+\n+
153 eEnd(unsigned nIntervals)
\n+
154 {
\n+
155 return ElementIterator(nElements(nIntervals),nIntervals);
\n
156 }
\n
\n
157
\n-
158
\n-
\n-
171 decltype(auto) type(int i, int c) const
\n-
172 {
\n-
173 return _impl->type(i,c);
\n-
174 }
\n-
\n-
175
\n-
176
\n-
\n-
184 decltype(auto) type() const
\n+
158 //
\n+
159 // The iterators
\n+
160 //
\n+
161
\n+
162#ifdef DOXYGEN
\n+
174 template<int dimension, class CoordType, int codimension>
\n+\n+
176#else
\n+
177 template<int dimension, class CoordType, int codimension>
\n+\n+
179#endif //DOXYGEN
\n+
180
\n+
181 // for vertices
\n+
182
\n+
183 template<int dimension, class CoordType>
\n+
\n+
184 class RefinementSubEntityIteratorSpecial<dimension, CoordType, dimension>
\n
185 {
\n-
186 return _impl->type();
\n-
187 }
\n-
\n-
188
\n-
189
\n-
\n-
203 decltype(auto) position(int i, int c) const
\n-
204 {
\n-
205 return _impl->position(i,c);
\n-
206 }
\n-
\n-
207
\n-
208
\n-
\n-
216 bool checkInside(const Coordinate& local) const
\n-
217 {
\n-
218 return _impl->checkInside(local);
\n-
219 }
\n-
\n-
220
\n-
221
\n-
233 template<int codim>
\n-
\n-
234 typename Codim<codim>::Geometry geometry(int i) const
\n-
235 {
\n-
236 return _impl->template geometry<codim>(i);
\n-
237 }
\n-
\n-
238
\n-
239
\n-
\n-\n-
242 {
\n-
243 return _impl->volume();
\n-
244 }
\n-
\n-
245
\n-
246
\n-
\n-
258 decltype(auto) integrationOuterNormal(int face) const
\n-
259 {
\n-
260 return _impl->integrationOuterNormal(face);
\n-
261 }
\n-
\n-
262
\n-
263
\n-
\n-\n-
272 : _impl(nullptr)
\n-
273 {}
\n-
\n-
274
\n-
\n-
280 const Implementation& impl() const
\n-
281 {
\n-
282 return *_impl;
\n-
283 }
\n-
\n+
186 public:
\n+\n+
188 typedef typename Refinement::template Codim<dimension>::SubEntityIterator Common;
\n+
189 typedef typename Refinement::CoordVector CoordVector;
\n+
190
\n+
191 CoordVector coords() const;
\n+
192
\n+
193 private:
\n+
194 const Common & asCommon() const
\n+
195 {
\n+
196 return *static_cast<const Common*>(this);
\n+
197 }
\n+
198 };
\n+
\n+
199
\n+
200 template<int dimension, class CoordType>
\n+
201 typename RefinementSubEntityIteratorSpecial<dimension, CoordType, dimension>::CoordVector
\n+
\n+\n+
203 coords() const
\n+
204 {
\n+
205 std::array<unsigned int, dimension> v(asCommon().vertexCoord());
\n+
206 CoordVector c;
\n+
207 for (int d = 0; d < dimension; d++)
\n+
208 {
\n+
209 c[d] = v[d]*1.0 / asCommon()._nIntervals;
\n+
210 }
\n+
211 return c;
\n+
212 }
\n+
\n+
213
\n+
214 // for elements
\n+
215
\n+
216 template<int dimension, class CoordType>
\n+
\n+
217 class RefinementSubEntityIteratorSpecial<dimension, CoordType, 0>
\n+
218 {
\n+
219 public:
\n+\n+
221 typedef typename Refinement::template Codim<0>::SubEntityIterator Common;
\n+
222 typedef typename Refinement::IndexVector IndexVector;
\n+
223 typedef typename Refinement::CoordVector CoordVector;
\n+
224
\n+
225 IndexVector vertexIndices() const;
\n+
226 CoordVector coords() const;
\n+
227
\n+
228 private:
\n+
229 const Common & asCommon() const
\n+
230 {
\n+
231 return *static_cast<const Common*>(this);
\n+
232 }
\n+
233 };
\n+
\n+
234
\n+
235 template<int dimension, class CoordType>
\n+
236 typename RefinementSubEntityIteratorSpecial<dimension, CoordType, 0>::IndexVector
\n+
\n+\n+
238 vertexIndices() const
\n+
239 {
\n+
240 constexpr static int nIndices = 1 << dimension;
\n+
241
\n+
242 // cell index tuple
\n+
243 std::array<unsigned int, dimension> e(asCommon().cellCoord());
\n+
244
\n+
245 // vertices
\n+
246 IndexVector vec;
\n+
247 for(int i = 0; i < nIndices; ++i)
\n+
248 {
\n+
249 int base = 1;
\n+
250 std::array<unsigned int, dimension> alpha(asCommon().idx2multiidx(i));
\n+
251 for (int d = 0; d < dimension; d++) {
\n+
252 vec[i] += (alpha[d] + e[d]) * base;
\n+
253 base *= asCommon()._nIntervals+1;
\n+
254 }
\n+
255 }
\n+
256 return vec;
\n+
257 }
\n+
\n+
258
\n+
259 template<int dimension, class CoordType>
\n+\n+
\n+\n+
262 coords() const
\n+
263 {
\n+
264 std::array<unsigned int, dimension> v(asCommon().cellCoord());
\n+
265 CoordVector c;
\n+
266 for (int d=0; d<dimension; d++)
\n+
267 {
\n+
268 c[d] = (v[d]*1.0 + 0.5) / asCommon()._nIntervals;
\n+
269 }
\n+
270 return c;
\n+
271 }
\n+
\n+
272
\n+
273 // common
\n+
274 template<int dimension, class CoordType>
\n+
275 template<int codimension>
\n+
\n+
276 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n+
277 : public ForwardIteratorFacade<typename RefinementImp<dimension,
\n+
278 CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n+
279 public RefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>
\n+
280 {
\n+
281 public:
\n+\n+
283 typedef typename Refinement::template Codim<codimension>::SubEntityIterator This;
\n
284
\n-
\n-
286 bool operator==(const ReferenceElement& r) const
\n-
287 {
\n-
288 return _impl == r._impl;
\n-
289 }
\n-
\n-
290
\n-
\n-
292 bool operator!=(const ReferenceElement& r) const
\n-
293 {
\n-
294 return not (*this == r);
\n-
295 }
\n-
\n+
285 SubEntityIterator(unsigned int index, unsigned int nIntervals);
\n+
286
\n+
287 bool equals(const This &other) const;
\n+
288 void increment();
\n+
289
\n+
290 int index() const;
\n+
291 Geometry geometry () const;
\n+
292 private:
\n+
293 friend class RefinementSubEntityIteratorSpecial<dimension, CoordType, codimension>;
\n+
294 unsigned int _index;
\n+
295 unsigned int _nIntervals;
\n
296
\n-
\n-
298 friend std::size_t hash_value(const ReferenceElement& r)
\n-
299 {
\n-
300 return reinterpret_cast<std::size_t>(r._impl);
\n-
301 }
\n-
\n+
297 std::array<unsigned int, dimension>
\n+
298 cellCoord(unsigned int idx) const
\n+
299 {
\n+
300 return idx2coord(idx, _nIntervals);
\n+
301 }
\n
302
\n-
303 private:
\n-
304
\n-
305 // The implementation must be a friend to construct a wrapper around itself.
\n-
306 friend Implementation;
\n-
307
\n-
308 // The reference container is a friend to be able to call setImplementation.
\n-
309 friend class Impl::ReferenceElementContainer<ctype,dimension>;
\n-
310
\n-
311 // Constructor for wrapping an implementation reference (required internally by the default implementation)
\n-
312 ReferenceElement(const Implementation& impl)
\n-
313 : _impl(&impl)
\n-
314 {}
\n-
315
\n-
316 void setImplementation(const Implementation& impl)
\n-
317 {
\n-
318 _impl = &impl;
\n-
319 }
\n+
303 std::array<unsigned int, dimension>
\n+
304 vertexCoord(unsigned int idx) const
\n+
305 {
\n+
306 return idx2coord(idx, _nIntervals+1u);
\n+
307 }
\n+
308
\n+
309 std::array<unsigned int, dimension>
\n+
310 cellCoord() const
\n+
311 {
\n+
312 return cellCoord(_index);
\n+
313 }
\n+
314
\n+
315 std::array<unsigned int, dimension>
\n+
316 vertexCoord() const
\n+
317 {
\n+
318 return vertexCoord(_index);
\n+
319 }
\n
320
\n-
321 const Implementation* _impl;
\n-
322
\n-
323 };
\n-
\n-
324
\n-
325 }
\n-
326
\n-
327}
\n-
328
\n-
329
\n-
330#endif // DUNE_GEOMETRY_REFERENCEELEMENT_HH
\n-
A unique label for each type of element that can occur in a grid.
\n+
321 std::array<unsigned int, dimension>
\n+
322 idx2coord(unsigned int idx, unsigned int w) const
\n+
323 {
\n+
324 std::array<unsigned int, dimension> c;
\n+
325 for (unsigned int d = 0; d < dimension; d++)
\n+
326 {
\n+
327 c[d] = idx%w;
\n+
328 idx = idx/w;
\n+
329 }
\n+
330 return c;
\n+
331 }
\n+
332
\n+
333 unsigned int
\n+
334 coord2idx(std::array<unsigned int, dimension> c, unsigned int w) const
\n+
335 {
\n+
336 unsigned int i = 0;
\n+
337 for (unsigned int d = dimension; d > 0; d--)
\n+
338 {
\n+
339 i *= w;
\n+
340 i += c[d-1];
\n+
341 }
\n+
342 return i;
\n+
343 }
\n+
344
\n+
345 std::array<unsigned int, dimension>
\n+
346 idx2multiidx(unsigned int idx) const
\n+
347 {
\n+
348 std::array<unsigned int, dimension> alpha;
\n+
349 for (unsigned int i = 0; i < dimension; ++i)
\n+
350 alpha[i] = (idx >> i) & 1u;
\n+
351 return alpha;
\n+
352 }
\n+
353 };
\n+
\n+
354
\n+
355#ifndef DOXYGEN
\n+
356 template<int dimension, class CoordType>
\n+
357 template<int codimension>
\n+
358 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
359 SubEntityIterator(unsigned int index, unsigned int nIntervals)
\n+
360 : _index(index), _nIntervals(nIntervals)
\n+
361 {}
\n+
362
\n+
363 template<int dimension, class CoordType>
\n+
364 template<int codimension>
\n+
365 bool
\n+
366 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
367 equals(const This &other) const
\n+
368 {
\n+
369 return ((_index == other._index) && (_nIntervals == other._nIntervals));
\n+
370 }
\n+
371
\n+
372 template<int dimension, class CoordType>
\n+
373 template<int codimension>
\n+
374 void
\n+
375 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
376 increment()
\n+
377 {
\n+
378 ++_index;
\n+
379 }
\n+
380
\n+
381 template<int dimension, class CoordType>
\n+
382 template<int codimension>
\n+
383 int
\n+
384 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
\n+
385 index() const
\n+
386 {
\n+
387 return _index;
\n+
388 }
\n+
389
\n+
390 template<int dimension, class CoordType>
\n+
391 template<int codimension>
\n+
392 typename RefinementImp<dimension, CoordType>::template Codim<codimension>::Geometry
\n+
393 RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator::geometry () const
\n+
394 {
\n+
395 std::array<unsigned int,dimension> intCoords = idx2coord(_index,_nIntervals);
\n+
396
\n+
397 Dune::FieldVector<CoordType,dimension> lower;
\n+
398 Dune::FieldVector<CoordType,dimension> upper;
\n+
399
\n+
400 assert(codimension == 0 or codimension == dimension);
\n+
401
\n+
402 if constexpr (codimension == 0) {
\n+
403 for (size_t j = 0; j < dimension; j++)
\n+
404 {
\n+
405 lower[j] = double(intCoords[j]) / double(_nIntervals);
\n+
406 upper[j] = double(intCoords[j] + 1) / double(_nIntervals);
\n+
407 }
\n+
408
\n+
409 return typename RefinementImp<dimension,
\n+
410 CoordType>::template Codim<codimension>::Geometry(lower,upper);
\n+
411 } else {
\n+
412 for (size_t j = 0; j < dimension; j++)
\n+
413 lower[j] = upper[j] = double(intCoords[j]) / double(_nIntervals);
\n+
414
\n+
415 return typename RefinementImp<dimension,
\n+
416 CoordType>::template Codim<codimension>::Geometry(lower,upper,std::bitset<dimension>(0));
\n+
417 }
\n+
418 }
\n+
419
\n+
420#endif // DOXYGEN
\n+
421
\n+
422 } // namespace HCube
\n+
\n+
423
\n+
424 // ///////////////////////
\n+
425 //
\n+
426 // The refinement traits
\n+
427 //
\n+
428
\n+
429#ifndef DOXYGEN
\n+
430 template<unsigned topologyId, class CoordType, unsigned coerceToId,
\n+
431 int dim>
\n+
432 struct Traits<
\n+
433 topologyId, CoordType, coerceToId, dim,
\n+
434 typename std::enable_if<
\n+
435 (dim >= 2 &&
\n+
436 (GeometryTypes::cube(dim).id() >> 1) ==
\n+
437 (topologyId >> 1) &&
\n+
438 (GeometryTypes::cube(dim).id() >> 1) ==
\n+
439 (coerceToId >> 1)
\n+
440 )>::type
\n+
441 >
\n+
442 {
\n+
443 typedef HCube::RefinementImp<dim, CoordType> Imp;
\n+
444 };
\n+
445#endif
\n+
446
\n+
447 } // namespace RefinementImp
\n+
448
\n+
449} // namespace Dune
\n+
450
\n+
451#endif // DUNE_GEOMETRY_REFINEMENT_HCUBE_CC
\n+\n+
A geometry implementation for axis-aligned hypercubes.
\n+
This file contains the parts independent of a particular Refinement implementation.
\n
Definition affinegeometry.hh:21
\n-
This class provides access to geometric and topological properties of a reference element.
Definition referenceelement.hh:52
\n-
CoordinateField volume() const
obtain the volume of the reference element
Definition referenceelement.hh:241
\n-
ReferenceElement()
Constructs an empty reference element.
Definition referenceelement.hh:271
\n-
bool operator!=(const ReferenceElement &r) const
Compares for inequality with another reference element.
Definition referenceelement.hh:292
\n-
decltype(auto) type(int i, int c) const
obtain the type of subentity (i,c)
Definition referenceelement.hh:171
\n-
typename Implementation::Coordinate Coordinate
The coordinate type.
Definition referenceelement.hh:81
\n-
Codim< codim >::Geometry geometry(int i) const
obtain the embedding of subentity (i,codim) into the reference element
Definition referenceelement.hh:234
\n-
static constexpr int dimension
The dimension of the reference element.
Definition referenceelement.hh:87
\n-
int size(int i, int c, int cc) const
number of subentities of codimension cc of subentity (i,c)
Definition referenceelement.hh:111
\n-
int subEntity(int i, int c, int ii, int cc) const
obtain number of ii-th subentity with codim cc of (i,c)
Definition referenceelement.hh:130
\n-
typename Implementation::ctype ctype
The coordinate field type.
Definition referenceelement.hh:75
\n-
int size(int c) const
number of subentities of codimension c
Definition referenceelement.hh:94
\n-
decltype(auto) type() const
obtain the type of this reference element
Definition referenceelement.hh:184
\n-
const Implementation & impl() const
Returns a reference to the internal implementation object.
Definition referenceelement.hh:280
\n-
bool checkInside(const Coordinate &local) const
check if a coordinate is in the reference element
Definition referenceelement.hh:216
\n-
ctype CoordinateField
The coordinate field type.
Definition referenceelement.hh:78
\n-
bool operator==(const ReferenceElement &r) const
Compares for equality with another reference element.
Definition referenceelement.hh:286
\n-
decltype(auto) position(int i, int c) const
position of the barycenter of entity (i,c)
Definition referenceelement.hh:203
\n-
decltype(auto) integrationOuterNormal(int face) const
obtain the integration outer normal of the reference element
Definition referenceelement.hh:258
\n-
friend std::size_t hash_value(const ReferenceElement &r)
Yields a hash value suitable for storing the reference element a in hash table.
Definition referenceelement.hh:298
\n-
auto subEntities(int i, int c, int cc) const
Obtain the range of numbers of subentities with codim cc of (i,c)
Definition referenceelement.hh:153
\n-
ctype Volume
Type used for volume.
Definition referenceelement.hh:84
\n-
Collection of types depending on the codimension.
Definition referenceelement.hh:67
\n-
implementation-defined Geometry
type of geometry embedding a subentity into the reference element
Definition referenceelement.hh:69
\n+
A geometry implementation for axis-aligned hypercubes.
Definition axisalignedcubegeometry.hh:50
\n+
Static tag representing a codimension.
Definition dimension.hh:24
\n+
Refinement implementation for hypercubes
Definition hcube.cc:75
\n+
Codim< 0 >::SubEntityIterator ElementIterator
Definition hcube.cc:86
\n+
static ElementIterator eEnd(unsigned nIntervals)
Definition hcube.cc:153
\n+
static unsigned nVertices(unsigned nIntervals)
Definition hcube.cc:109
\n+
static VertexIterator vEnd(unsigned nIntervals)
Definition hcube.cc:126
\n+
FieldVector< int,(1<< dimension)> IndexVector
Definition hcube.cc:87
\n+
Codim< dimension >::SubEntityIterator VertexIterator
Definition hcube.cc:84
\n+
FieldVector< CoordType, dimension > CoordVector
Definition hcube.cc:85
\n+
static unsigned nElements(unsigned nIntervals)
Definition hcube.cc:134
\n+
RefinementImp< dimension, CoordType > Refinement
Definition hcube.cc:80
\n+
static ElementIterator eBegin(unsigned nIntervals)
Definition hcube.cc:145
\n+
static constexpr int dimension
Know your own dimension.
Definition hcube.cc:78
\n+
static VertexIterator vBegin(unsigned nIntervals)
Definition hcube.cc:118
\n+\n+
Dune::AxisAlignedCubeGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition hcube.cc:103
\n+
SubEntityIterator base class for hypercube refinement.
Definition hcube.cc:175
\n+\n+
Refinement::template Codim< dimension >::SubEntityIterator Common
Definition hcube.cc:188
\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition hcube.cc:220
\n+
Refinement::template Codim< 0 >::SubEntityIterator Common
Definition hcube.cc:221
\n+\n+\n+
SubEntityIterator(unsigned int index, unsigned int nIntervals)
\n+\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition hcube.cc:282
\n+\n+\n+
Refinement::template Codim< codimension >::SubEntityIterator This
Definition hcube.cc:283
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,294 +1,527 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-referenceelement.hh\n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+hcube.cc\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_REFERENCEELEMENT_HH\n-6#define DUNE_GEOMETRY_REFERENCEELEMENT_HH\n+5#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBE_CC\n+_\b6#define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC\n 7\n-8#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-9\n-10namespace _\bD_\bu_\bn_\be {\n-11 namespace Geo {\n-12\n-13 namespace Impl {\n-14\n-15 // forward declaration for friend declaration\n-16 template\n-17 class ReferenceElementContainer;\n-18\n-19 }\n-20\n-21 // forward declaration for constructing default reference element type\n-22 template\n-23 class ReferenceElementImplementation;\n-24\n-25 // forward declaration for backwards compatibility conversion\n-26 template\n-27 struct ReferenceElements;\n-28\n-29 // ReferenceElement\n-30 // ----------------\n-31\n-50 template\n-_\b5_\b1 class _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-52 {\n-53\n-54 public:\n-55\n-56#ifndef DOXYGEN\n-57\n-59 template\n-60 using _\bC_\bo_\bd_\bi_\bm = typename Implementation::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\b>;\n-61\n-62#else\n-63\n-65 template< int codim >\n-_\b6_\b6 struct _\bC_\bo_\bd_\bi_\bm\n-67 {\n-_\b6_\b9 using _\bG_\be_\bo_\bm_\be_\bt_\br_\by = implementation-defined;\n-70 };\n-71\n-72#endif // DOXYGEN\n-73\n-_\b7_\b5 using _\bc_\bt_\by_\bp_\be = typename Implementation::ctype;\n-76\n-_\b7_\b8 using _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd = _\bc_\bt_\by_\bp_\be;\n-79\n-_\b8_\b1 using _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be = typename Implementation::Coordinate;\n-82\n-_\b8_\b4 typedef _\bc_\bt_\by_\bp_\be _\bV_\bo_\bl_\bu_\bm_\be;\n-85\n-_\b8_\b7 static constexpr int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = Implementation::dimension;\n+42#include \n+43\n+44#include \n+45#include \n+46\n+47#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+48#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\ba_\bx_\bi_\bs_\ba_\bl_\bi_\bg_\bn_\be_\bd_\bc_\bu_\bb_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n+49\n+50#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\" // for RefinementTraits\n+51\n+52namespace _\bD_\bu_\bn_\be\n+53{\n+54 namespace RefinementImp\n+55 {\n+_\b6_\b2 namespace HCube\n+63 {\n+73 template\n+_\b7_\b4 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+75 {\n+76 public:\n+_\b7_\b8 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n+79 //- Know yourself\n+_\b8_\b0 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+81\n+82 template\n+83 struct _\bC_\bo_\bd_\bi_\bm;\n+_\b8_\b4 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b8_\b5 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b8_\b6 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b8_\b7 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n 88\n-89\n-_\b9_\b4 int _\bs_\bi_\bz_\be(int c) const\n-95 {\n-96 return _impl->size(c);\n-97 }\n-98\n-99\n-_\b1_\b1_\b1 int _\bs_\bi_\bz_\be(int i, int c, int cc) const\n-112 {\n-113 return _impl->size(i,c,cc);\n-114 }\n-115\n-116\n-_\b1_\b3_\b0 int _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by(int i, int c, int ii, int cc) const\n-131 {\n-132 return _impl->subEntity(i,c,ii,cc);\n-133 }\n-134\n-_\b1_\b5_\b3 auto _\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\bi_\be_\bs ( int i, int c, int cc ) const\n+89 static unsigned _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(unsigned nIntervals);\n+90 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(unsigned nIntervals);\n+91 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(unsigned nIntervals);\n+92\n+93 static unsigned _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(unsigned nIntervals);\n+94 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(unsigned nIntervals);\n+95 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(unsigned nIntervals);\n+96 };\n+97\n+98 template\n+99 template\n+_\b1_\b0_\b0 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n+101 {\n+102 class SubEntityIterator;\n+_\b1_\b0_\b3 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+104 };\n+105\n+106 template\n+107 unsigned\n+_\b1_\b0_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+109_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(unsigned nIntervals)\n+110 {\n+111 // return (nIntervals + 1)^dim\n+112 return Dune::power(nIntervals+1u, unsigned(dimension));\n+113 }\n+114\n+115 template\n+116 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b1_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+118_\b _\bv_\bB_\be_\bg_\bi_\bn(unsigned nIntervals)\n+119 {\n+120 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(0,nIntervals);\n+121 }\n+122\n+123 template\n+124 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b2_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+126_\b _\bv_\bE_\bn_\bd(unsigned nIntervals)\n+127 {\n+128 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nVertices(nIntervals),nIntervals);\n+129 }\n+130\n+131 template\n+132 unsigned\n+_\b1_\b3_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+134_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(unsigned nIntervals)\n+135 {\n+136 static_assert(dimension >= 0,\n+137 \"Negative dimension given, what the heck is that supposed to mean?\");\n+138 // return nIntervals^dim\n+139 return Dune::power(nIntervals, unsigned(dimension));\n+140 }\n+141\n+142 template\n+143 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b4_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+145_\b _\be_\bB_\be_\bg_\bi_\bn(unsigned nIntervals)\n+146 {\n+147 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(0,nIntervals);\n+148 }\n+149\n+150 template\n+151 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b5_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+153_\b _\be_\bE_\bn_\bd(unsigned nIntervals)\n 154 {\n-155 return _impl->subEntities(i,c,cc);\n+155 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nElements(nIntervals),nIntervals);\n 156 }\n 157\n-158\n-_\b1_\b7_\b1 decltype(auto) _\bt_\by_\bp_\be(int i, int c) const\n-172 {\n-173 return _impl->type(i,c);\n-174 }\n-175\n-176\n-_\b1_\b8_\b4 decltype(auto) _\bt_\by_\bp_\be() const\n+158 //\n+159 // The iterators\n+160 //\n+161\n+162#ifdef DOXYGEN\n+174 template\n+_\b1_\b7_\b5 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl {};\n+176#else\n+177 template\n+178 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n+179#endif //DOXYGEN\n+180\n+181 // for vertices\n+182\n+183 template\n+_\b1_\b8_\b4 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n 185 {\n-186 return _impl->type();\n-187 }\n-188\n-189\n-_\b2_\b0_\b3 decltype(auto) _\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn(int i, int c) const\n+186 public:\n+_\b1_\b8_\b7 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b1_\b8_\b8 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\bC_\bo_\bm_\bm_\bo_\bn;\n+_\b1_\b8_\b9 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+190\n+191 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+192\n+193 private:\n+194 const _\bC_\bo_\bm_\bm_\bo_\bn & asCommon() const\n+195 {\n+196 return *static_cast(this);\n+197 }\n+198 };\n+199\n+200 template\n+201 typename RefinementSubEntityIteratorSpecial::CoordVector\n+_\b2_\b0_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+203_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n 204 {\n-205 return _impl->position(i,c);\n-206 }\n-207\n-208\n-_\b2_\b1_\b6 bool _\bc_\bh_\be_\bc_\bk_\bI_\bn_\bs_\bi_\bd_\be(const _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be& local) const\n-217 {\n-218 return _impl->checkInside(local);\n-219 }\n-220\n-221\n-233 template\n-_\b2_\b3_\b4 typename _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bg_\be_\bo_\bm_\be_\bt_\br_\by(int i) const\n-235 {\n-236 return _impl->template geometry(i);\n-237 }\n-238\n-239\n-_\b2_\b4_\b1 _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd _\bv_\bo_\bl_\bu_\bm_\be() const\n-242 {\n-243 return _impl->volume();\n-244 }\n-245\n-246\n-_\b2_\b5_\b8 decltype(auto) _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bO_\bu_\bt_\be_\br_\bN_\bo_\br_\bm_\ba_\bl(int face) const\n-259 {\n-260 return _impl->integrationOuterNormal(face);\n-261 }\n-262\n-263\n-_\b2_\b7_\b1 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt()\n-272 : _impl(nullptr)\n-273 {}\n-274\n-_\b2_\b8_\b0 const Implementation& _\bi_\bm_\bp_\bl() const\n-281 {\n-282 return *_impl;\n-283 }\n+205 std::array v(asCommon().vertexCoord());\n+206 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br c;\n+207 for (int d = 0; d < dimension; d++)\n+208 {\n+209 c[d] = v[d]*1.0 / asCommon()._nIntervals;\n+210 }\n+211 return c;\n+212 }\n+213\n+214 // for elements\n+215\n+216 template\n+_\b2_\b1_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+218 {\n+219 public:\n+_\b2_\b2_\b0 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b2_\b1 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bC_\bo_\bm_\bm_\bo_\bn;\n+_\b2_\b2_\b2 typedef typename Refinement::IndexVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+_\b2_\b2_\b3 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+224\n+225 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n+226 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+227\n+228 private:\n+229 const _\bC_\bo_\bm_\bm_\bo_\bn & asCommon() const\n+230 {\n+231 return *static_cast(this);\n+232 }\n+233 };\n+234\n+235 template\n+236 typename RefinementSubEntityIteratorSpecial::\n+IndexVector\n+_\b2_\b3_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+238_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n+239 {\n+240 constexpr static int nIndices = 1 << dimension;\n+241\n+242 // cell index tuple\n+243 std::array e(asCommon().cellCoord());\n+244\n+245 // vertices\n+246 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vec;\n+247 for(int i = 0; i < nIndices; ++i)\n+248 {\n+249 int base = 1;\n+250 std::array alpha(asCommon().idx2multiidx(i));\n+251 for (int d = 0; d < dimension; d++) {\n+252 vec[i] += (alpha[d] + e[d]) * base;\n+253 base *= asCommon()._nIntervals+1;\n+254 }\n+255 }\n+256 return vec;\n+257 }\n+258\n+259 template\n+260 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b2_\b6_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+262_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+263 {\n+264 std::array v(asCommon().cellCoord());\n+265 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br c;\n+266 for (int d=0; d\n+275 template\n+_\b2_\b7_\b6 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n+SubEntityIterator\n+277 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n+279 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+280 {\n+281 public:\n+_\b2_\b8_\b2 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b8_\b3 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\bT_\bh_\bi_\bs;\n 284\n-_\b2_\b8_\b6 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& r) const\n-287 {\n-288 return _impl == r._impl;\n-289 }\n-290\n-_\b2_\b9_\b2 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& r) const\n-293 {\n-294 return not (*this == r);\n-295 }\n+_\b2_\b8_\b5 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(unsigned int index, unsigned int nIntervals);\n+286\n+_\b2_\b8_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n+_\b2_\b8_\b8 void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt();\n+289\n+_\b2_\b9_\b0 int _\bi_\bn_\bd_\be_\bx() const;\n+_\b2_\b9_\b1 Geometry _\bg_\be_\bo_\bm_\be_\bt_\br_\by () const;\n+292 private:\n+293 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType,\n+codimension>;\n+294 unsigned int _index;\n+295 unsigned int _nIntervals;\n 296\n-_\b2_\b9_\b8 friend std::size_t _\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be(const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt& r)\n+297 std::array\n+298 cellCoord(unsigned int idx) const\n 299 {\n-300 return reinterpret_cast(r._impl);\n+300 return idx2coord(idx, _nIntervals);\n 301 }\n 302\n-303 private:\n-304\n-305 // The implementation must be a friend to construct a wrapper around\n-itself.\n-306 friend Implementation;\n-307\n-308 // The reference container is a friend to be able to call\n-setImplementation.\n-309 friend class Impl::ReferenceElementContainer<_\bc_\bt_\by_\bp_\be,_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>;\n-310\n-311 // Constructor for wrapping an implementation reference (required\n-internally by the default implementation)\n-312 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt(const Implementation& _\bi_\bm_\bp_\bl)\n-313 : _impl(&_\bi_\bm_\bp_\bl)\n-314 {}\n-315\n-316 void setImplementation(const Implementation& _\bi_\bm_\bp_\bl)\n+303 std::array\n+304 vertexCoord(unsigned int idx) const\n+305 {\n+306 return idx2coord(idx, _nIntervals+1u);\n+307 }\n+308\n+309 std::array\n+310 cellCoord() const\n+311 {\n+312 return cellCoord(_index);\n+313 }\n+314\n+315 std::array\n+316 vertexCoord() const\n 317 {\n-318 _impl = &_\bi_\bm_\bp_\bl;\n+318 return vertexCoord(_index);\n 319 }\n 320\n-321 const Implementation* _impl;\n-322\n-323 };\n-324\n-325 }\n-326\n-327}\n-328\n-329\n-330#endif // DUNE_GEOMETRY_REFERENCEELEMENT_HH\n-_\bt_\by_\bp_\be_\b._\bh_\bh\n-A unique label for each type of element that can occur in a grid.\n+321 std::array\n+322 idx2coord(unsigned int idx, unsigned int w) const\n+323 {\n+324 std::array c;\n+325 for (unsigned int d = 0; d < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; d++)\n+326 {\n+327 c[d] = idx%w;\n+328 idx = idx/w;\n+329 }\n+330 return c;\n+331 }\n+332\n+333 unsigned int\n+334 coord2idx(std::array c, unsigned int w) const\n+335 {\n+336 unsigned int i = 0;\n+337 for (unsigned int d = _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; d > 0; d--)\n+338 {\n+339 i *= w;\n+340 i += c[d-1];\n+341 }\n+342 return i;\n+343 }\n+344\n+345 std::array\n+346 idx2multiidx(unsigned int idx) const\n+347 {\n+348 std::array alpha;\n+349 for (unsigned int i = 0; i < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; ++i)\n+350 alpha[i] = (idx >> i) & 1u;\n+351 return alpha;\n+352 }\n+353 };\n+354\n+355#ifndef DOXYGEN\n+356 template\n+357 template\n+358 RefinementImp::Codim::\n+SubEntityIterator::\n+359 SubEntityIterator(unsigned int index, unsigned int nIntervals)\n+360 : _index(index), _nIntervals(nIntervals)\n+361 {}\n+362\n+363 template\n+364 template\n+365 bool\n+366 RefinementImp::Codim::\n+SubEntityIterator::\n+367 equals(const This &other) const\n+368 {\n+369 return ((_index == other._index) && (_nIntervals == other._nIntervals));\n+370 }\n+371\n+372 template\n+373 template\n+374 void\n+375 RefinementImp::Codim::\n+SubEntityIterator::\n+376 increment()\n+377 {\n+378 ++_index;\n+379 }\n+380\n+381 template\n+382 template\n+383 int\n+384 RefinementImp::Codim::\n+SubEntityIterator::\n+385 index() const\n+386 {\n+387 return _index;\n+388 }\n+389\n+390 template\n+391 template\n+392 typename RefinementImp::template Codim::\n+Geometry\n+393 RefinementImp::Codim::\n+SubEntityIterator::geometry () const\n+394 {\n+395 std::array intCoords = idx2coord\n+(_index,_nIntervals);\n+396\n+397 Dune::FieldVector lower;\n+398 Dune::FieldVector upper;\n+399\n+400 assert(codimension == 0 or codimension == _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n+401\n+402 if constexpr (codimension == 0) {\n+403 for (size_t j = 0; j < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; j++)\n+404 {\n+405 lower[j] = double(intCoords[j]) / double(_nIntervals);\n+406 upper[j] = double(intCoords[j] + 1) / double(_nIntervals);\n+407 }\n+408\n+409 return typename RefinementImp<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn,\n+410 CoordType>::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by(lower,upper);\n+411 } else {\n+412 for (size_t j = 0; j < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; j++)\n+413 lower[j] = upper[j] = double(intCoords[j]) / double(_nIntervals);\n+414\n+415 return typename RefinementImp<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn,\n+416 CoordType>::template _\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by(lower,upper,std::\n+bitset(0));\n+417 }\n+418 }\n+419\n+420#endif // DOXYGEN\n+421\n+422 } // namespace HCube\n+423\n+424 // ///////////////////////\n+425 //\n+426 // The refinement traits\n+427 //\n+428\n+429#ifndef DOXYGEN\n+430 template\n+432 struct Traits<\n+433 topologyId, CoordType, coerceToId, dim,\n+434 typename std::enable_if<\n+435 (dim >= 2 &&\n+436 (GeometryTypes::cube(dim).id() >> 1) ==\n+437 (topologyId >> 1) &&\n+438 (GeometryTypes::cube(dim).id() >> 1) ==\n+439 (coerceToId >> 1)\n+440 )>::type\n+441 >\n+442 {\n+443 typedef HCube::RefinementImp Imp;\n+444 };\n+445#endif\n+446\n+447 } // namespace RefinementImp\n+448\n+449} // namespace Dune\n+450\n+451#endif // DUNE_GEOMETRY_REFINEMENT_HCUBE_CC\n+_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n+_\ba_\bx_\bi_\bs_\ba_\bl_\bi_\bg_\bn_\be_\bd_\bc_\bu_\bb_\be_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh\n+A geometry implementation for axis-aligned hypercubes.\n+_\bb_\ba_\bs_\be_\b._\bc_\bc\n+This file contains the parts independent of a particular Refinement\n+implementation.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-This class provides access to geometric and topological properties of a\n-reference element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n-CoordinateField volume() const\n-obtain the volume of the reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:241\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-ReferenceElement()\n-Constructs an empty reference element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:271\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n-bool operator!=(const ReferenceElement &r) const\n-Compares for inequality with another reference element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:292\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bt_\by_\bp_\be\n-decltype(auto) type(int i, int c) const\n-obtain the type of subentity (i,c)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-typename Implementation::Coordinate Coordinate\n-The coordinate type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:81\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-Codim< codim >::Geometry geometry(int i) const\n-obtain the embedding of subentity (i,codim) into the reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:234\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bC_\bu_\bb_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+A geometry implementation for axis-aligned hypercubes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn axisalignedcubegeometry.hh:50\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+Static tag representing a codimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+Refinement implementation for hypercubes\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< 0 >::SubEntityIterator ElementIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:86\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n+static ElementIterator eEnd(unsigned nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:153\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+static unsigned nVertices(unsigned nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:109\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n+static VertexIterator vEnd(unsigned nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< int,(1<< dimension)> IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:87\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< dimension >::SubEntityIterator VertexIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:84\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< CoordType, dimension > CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:85\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+static unsigned nElements(unsigned nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:134\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:80\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n+static ElementIterator eBegin(unsigned nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:145\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n static constexpr int dimension\n-The dimension of the reference element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n-int size(int i, int c, int cc) const\n-number of subentities of codimension cc of subentity (i,c)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:111\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by\n-int subEntity(int i, int c, int ii, int cc) const\n-obtain number of ii-th subentity with codim cc of (i,c)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:130\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bc_\bt_\by_\bp_\be\n-typename Implementation::ctype ctype\n-The coordinate field type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n-int size(int c) const\n-number of subentities of codimension c\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:94\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bt_\by_\bp_\be\n-decltype(auto) type() const\n-obtain the type of this reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:184\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bi_\bm_\bp_\bl\n-const Implementation & impl() const\n-Returns a reference to the internal implementation object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:280\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bI_\bn_\bs_\bi_\bd_\be\n-bool checkInside(const Coordinate &local) const\n-check if a coordinate is in the reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:216\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bF_\bi_\be_\bl_\bd\n-ctype CoordinateField\n-The coordinate field type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const ReferenceElement &r) const\n-Compares for equality with another reference element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:286\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn\n-decltype(auto) position(int i, int c) const\n-position of the barycenter of entity (i,c)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:203\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bO_\bu_\bt_\be_\br_\bN_\bo_\br_\bm_\ba_\bl\n-decltype(auto) integrationOuterNormal(int face) const\n-obtain the integration outer normal of the reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:258\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bh_\ba_\bs_\bh_\b__\bv_\ba_\bl_\bu_\be\n-friend std::size_t hash_value(const ReferenceElement &r)\n-Yields a hash value suitable for storing the reference element a in hash table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:298\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\bi_\be_\bs\n-auto subEntities(int i, int c, int cc) const\n-Obtain the range of numbers of subentities with codim cc of (i,c)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:153\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bV_\bo_\bl_\bu_\bm_\be\n-ctype Volume\n-Type used for volume.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:84\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n-Collection of types depending on the codimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-implementation-defined Geometry\n-type of geometry embedding a subentity into the reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:69\n+Know your own dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n+static VertexIterator vBegin(unsigned nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:118\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:101\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Dune::AxisAlignedCubeGeometry< CoordType, dimension-codimension, dimension >\n+Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:103\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+SubEntityIterator base class for hypercube refinement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:175\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:189\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bm_\bm_\bo_\bn\n+Refinement::template Codim< dimension >::SubEntityIterator Common\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:188\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:187\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:220\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bm_\bm_\bo_\bn\n+Refinement::template Codim< 0 >::SubEntityIterator Common\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:221\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:223\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::IndexVector IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:222\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+SubEntityIterator(unsigned int index, unsigned int nIntervals)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other) const\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+Geometry geometry() const\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:282\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bi_\bn_\bd_\be_\bx\n+int index() const\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n+void increment()\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bT_\bh_\bi_\bs\n+Refinement::template Codim< codimension >::SubEntityIterator This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcube.cc:283\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00233.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00233.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: affinegeometry.hh File Reference\n+dune-geometry: simplex.cc File Reference\n \n \n \n \n \n \n \n@@ -65,50 +65,111 @@\n
\n \n \n \n \n \n \n
\n \n-
affinegeometry.hh File Reference
\n+Namespaces |\n+Macros
\n+
simplex.cc File Reference
\n \n
\n \n-

An implementation of the Geometry interface for affine geometries. \n+

This file contains the Refinement implementation for simplices (triangles, tetrahedrons...) \n More...

\n-
#include <cmath>
\n-#include <dune/common/fmatrix.hh>
\n+
#include <algorithm>
\n #include <dune/common/fvector.hh>
\n-#include <dune/geometry/type.hh>
\n+#include <dune/common/math.hh>
\n+#include <dune/geometry/multilineargeometry.hh>
\n+#include <dune/geometry/referenceelements.hh>
\n+#include <dune/geometry/type.hh>
\n+#include "base.cc"
\n
\n

Go to the source code of this file.

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

\n Classes

class  Dune::AffineGeometry< ct, mydim, cdim >
 Implementation of the Geometry interface for affine geometries. More...
class  Dune::RefinementImp::Simplex::RefinementImp< dimension_, CoordType >
 
struct  Dune::RefinementImp::Simplex::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::RefinementImp::Simplex::RefinementIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::RefinementImp::Simplex::RefinementIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::RefinementImp::Simplex::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
\n \n \n \n-\n+\n+\n+\n+\n+\n \n+

\n Namespaces

namespace  Dune
 
namespace  Dune::Geo
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 
namespace  Dune::RefinementImp::Simplex
 This namespace contains the Refinement implementation for simplices (triangles, tetrahedrons...)
 
\n+\n+\n+\n+

\n+Macros

#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
 
\n+\n+\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

Utilities
int Dune::RefinementImp::Simplex::factorial (int n)
 Calculate n!
 
int Dune::RefinementImp::Simplex::binomial (int upper, int lower)
 calculate \"$\\left({upper}\\atop{lower}\\right)$\"
 
template<int dimension>
int Dune::RefinementImp::Simplex::pointIndex (const FieldVector< int, dimension > &point)
 calculate the index of a given gridpoint within a Kuhn0 simplex
 
template<int n>
FieldVector< int, n > Dune::RefinementImp::Simplex::getPermutation (int m)
 Calculate permutation from it's index.
 
template<int dimension, class CoordType >
FieldVector< CoordType, dimension > Dune::RefinementImp::Simplex::referenceToKuhn (FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
 Map from the reference simplex to some Kuhn simplex.
 
template<int dimension, class CoordType >
FieldVector< CoordType, dimension > Dune::RefinementImp::Simplex::kuhnToReference (FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
 Map from some Kuhn simplex to the reference simplex.
 
\n

Detailed Description

\n-

An implementation of the Geometry interface for affine geometries.

\n-
Author
Martin Nolte
\n-
\n+

This file contains the Refinement implementation for simplices (triangles, tetrahedrons...)

\n+

See Refinement implementation for simplices.

\n+

Macro Definition Documentation

\n+\n+

◆ DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+
#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
\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,29 +1,95 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-affinegeometry.hh File Reference\n-An implementation of the Geometry interface for affine geometries. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\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+simplex.cc File Reference\n+This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for simplices (triangles,\n+tetrahedrons...) _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n #include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\ba_\br_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\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:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b _\b>\n-\u00a0 Implementation of the Geometry interface for affine geometries. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:\n+ _\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:\n+ _\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\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:_\bG_\be_\bo\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx\n+\u00a0 This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for simplices\n+ (triangles, tetrahedrons...)\n+\u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bR_\bI_\bD_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bS_\bI_\bM_\bP_\bL_\bE_\bX_\b__\bC_\bC\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+Utilities\n+ int\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl\n+ (int n)\n+\u00a0 Calculate n!\n+\u00a0\n+ int\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl\n+ (int upper, int lower)\n+\u00a0 calculate[$\\left({upper}\\atop\n+ {lower}\\right)$]\n+\u00a0\n+template\n+ int\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx\n+ (const FieldVector< int, dimension >\n+ &point)\n+\u00a0 calculate the index of a given gridpoint\n+ within a Kuhn0 simplex\n+\u00a0\n+template\n+ FieldVector< int, n >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:\n+ _\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn (int m)\n+\u00a0 Calculate permutation from it's index.\n+\u00a0\n+template\n+FieldVector< CoordType, dimension >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:\n+ _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn (FieldVector< CoordType,\n+ dimension > point, const FieldVector< int,\n+ dimension > &kuhn)\n+\u00a0 Map from the reference simplex to some\n+ Kuhn simplex.\n+\u00a0\n+template\n+FieldVector< CoordType, dimension >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:\n+ _\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be (FieldVector< CoordType,\n+ dimension > point, const FieldVector< int,\n+ dimension > &kuhn)\n+\u00a0 Map from some Kuhn simplex to the\n+ reference simplex.\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 implementation of the Geometry interface for affine geometries.\n- Author\n- Martin Nolte\n+This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for simplices (triangles,\n+tetrahedrons...)\n+See _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b _\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bf_\bo_\br_\b _\bs_\bi_\bm_\bp_\bl_\bi_\bc_\be_\bs.\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGR\bRI\bID\bD_\b_C\bCO\bOM\bMM\bMO\bON\bN_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_S\bSI\bIM\bMP\bPL\bLE\bEX\bX_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n+#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00233_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00233_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: affinegeometry.hh Source File\n+dune-geometry: simplex.cc Source File\n \n \n \n \n \n \n \n@@ -70,693 +70,676 @@\n \n \n \n \n \n \n \n
\n-
affinegeometry.hh
\n+
simplex.cc
\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH
\n-
6#define DUNE_GEOMETRY_AFFINEGEOMETRY_HH
\n+
5#ifndef DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
\n+
6#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
\n
7
\n-
13#include <cmath>
\n-
14
\n-
15#include <dune/common/fmatrix.hh>
\n-
16#include <dune/common/fvector.hh>
\n-
17
\n-
18#include <dune/geometry/type.hh>
\n-
19
\n-
\n-
20namespace Dune
\n-
21{
\n-
22
\n-
23 // External Forward Declarations
\n-
24 // -----------------------------
\n-
25
\n-
\n-
26 namespace Geo
\n-
27 {
\n-
28
\n-
29 template< typename Implementation >
\n-
30 class ReferenceElement;
\n-
31
\n-
32 template< class ctype, int dim >
\n-\n-
34
\n-
35 template< class ctype, int dim >
\n-
36 struct ReferenceElements;
\n-
37
\n-
38 }
\n-
\n-
39
\n-
40
\n-
41 namespace Impl
\n-
42 {
\n-
43
\n-
44 // FieldMatrixHelper
\n-
45 // -----------------
\n-
46
\n-
47 template< class ct >
\n-
48 struct FieldMatrixHelper
\n-
49 {
\n-
50 typedef ct ctype;
\n-
51
\n-
52 template< int m, int n >
\n-
53 static void Ax ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, n > &x, FieldVector< ctype, m > &ret )
\n-
54 {
\n-
55 for( int i = 0; i < m; ++i )
\n-
56 {
\n-
57 ret[ i ] = ctype( 0 );
\n-
58 for( int j = 0; j < n; ++j )
\n-
59 ret[ i ] += A[ i ][ j ] * x[ j ];
\n-
60 }
\n-
61 }
\n-
62
\n-
63 template< int m, int n >
\n-
64 static void ATx ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, m > &x, FieldVector< ctype, n > &ret )
\n-
65 {
\n-
66 for( int i = 0; i < n; ++i )
\n-
67 {
\n-
68 ret[ i ] = ctype( 0 );
\n-
69 for( int j = 0; j < m; ++j )
\n-
70 ret[ i ] += A[ j ][ i ] * x[ j ];
\n-
71 }
\n-
72 }
\n-
73
\n-
74 template< int m, int n, int p >
\n-
75 static void AB ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix< ctype, n, p > &B, FieldMatrix< ctype, m, p > &ret )
\n-
76 {
\n-
77 for( int i = 0; i < m; ++i )
\n-
78 {
\n-
79 for( int j = 0; j < p; ++j )
\n-
80 {
\n-
81 ret[ i ][ j ] = ctype( 0 );
\n-
82 for( int k = 0; k < n; ++k )
\n-
83 ret[ i ][ j ] += A[ i ][ k ] * B[ k ][ j ];
\n-
84 }
\n-
85 }
\n-
86 }
\n-
87
\n-
88 template< int m, int n, int p >
\n-
89 static void ATBT ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix< ctype, p, m > &B, FieldMatrix< ctype, n, p > &ret )
\n-
90 {
\n-
91 for( int i = 0; i < n; ++i )
\n-
92 {
\n-
93 for( int j = 0; j < p; ++j )
\n-
94 {
\n-
95 ret[ i ][ j ] = ctype( 0 );
\n-
96 for( int k = 0; k < m; ++k )
\n-
97 ret[ i ][ j ] += A[ k ][ i ] * B[ j ][ k ];
\n-
98 }
\n-
99 }
\n-
100 }
\n-
101
\n-
102 template< int m, int n >
\n-
103 static void ATA_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, n > &ret )
\n-
104 {
\n-
105 for( int i = 0; i < n; ++i )
\n-
106 {
\n-
107 for( int j = 0; j <= i; ++j )
\n-
108 {
\n-
109 ret[ i ][ j ] = ctype( 0 );
\n-
110 for( int k = 0; k < m; ++k )
\n-
111 ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ];
\n-
112 }
\n-
113 }
\n-
114 }
\n-
115
\n-
116 template< int m, int n >
\n-
117 static void ATA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, n > &ret )
\n-
118 {
\n-
119 for( int i = 0; i < n; ++i )
\n-
120 {
\n-
121 for( int j = 0; j <= i; ++j )
\n-
122 {
\n-
123 ret[ i ][ j ] = ctype( 0 );
\n-
124 for( int k = 0; k < m; ++k )
\n-
125 ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ];
\n-
126 ret[ j ][ i ] = ret[ i ][ j ];
\n-
127 }
\n-
128
\n-
129 ret[ i ][ i ] = ctype( 0 );
\n-
130 for( int k = 0; k < m; ++k )
\n-
131 ret[ i ][ i ] += A[ k ][ i ] * A[ k ][ i ];
\n-
132 }
\n-
133 }
\n-
134
\n-
135 template< int m, int n >
\n-
136 static void AAT_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, m, m > &ret )
\n-
137 {
\n-
138 /*
\n-
139 if (m==2) {
\n-
140 ret[0][0] = A[0]*A[0];
\n-
141 ret[1][1] = A[1]*A[1];
\n-
142 ret[1][0] = A[0]*A[1];
\n-
143 }
\n-
144 else
\n-
145 */
\n-
146 for( int i = 0; i < m; ++i )
\n-
147 {
\n-
148 for( int j = 0; j <= i; ++j )
\n-
149 {
\n-
150 ctype &retij = ret[ i ][ j ];
\n-
151 retij = A[ i ][ 0 ] * A[ j ][ 0 ];
\n-
152 for( int k = 1; k < n; ++k )
\n-
153 retij += A[ i ][ k ] * A[ j ][ k ];
\n-
154 }
\n-
155 }
\n-
156 }
\n-
157
\n-
158 template< int m, int n >
\n-
159 static void AAT ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, m, m > &ret )
\n-
160 {
\n-
161 for( int i = 0; i < m; ++i )
\n-
162 {
\n-
163 for( int j = 0; j < i; ++j )
\n-
164 {
\n-
165 ret[ i ][ j ] = ctype( 0 );
\n-
166 for( int k = 0; k < n; ++k )
\n-
167 ret[ i ][ j ] += A[ i ][ k ] * A[ j ][ k ];
\n-
168 ret[ j ][ i ] = ret[ i ][ j ];
\n-
169 }
\n-
170 ret[ i ][ i ] = ctype( 0 );
\n-
171 for( int k = 0; k < n; ++k )
\n-
172 ret[ i ][ i ] += A[ i ][ k ] * A[ i ][ k ];
\n-
173 }
\n-
174 }
\n-
175
\n-
176 template< int n >
\n-
177 static void Lx ( const FieldMatrix< ctype, n, n > &L, const FieldVector< ctype, n > &x, FieldVector< ctype, n > &ret )
\n-
178 {
\n-
179 for( int i = 0; i < n; ++i )
\n-
180 {
\n-
181 ret[ i ] = ctype( 0 );
\n-
182 for( int j = 0; j <= i; ++j )
\n-
183 ret[ i ] += L[ i ][ j ] * x[ j ];
\n-
184 }
\n-
185 }
\n-
186
\n-
187 template< int n >
\n-
188 static void LTx ( const FieldMatrix< ctype, n, n > &L, const FieldVector< ctype, n > &x, FieldVector< ctype, n > &ret )
\n-
189 {
\n-
190 for( int i = 0; i < n; ++i )
\n-
191 {
\n-
192 ret[ i ] = ctype( 0 );
\n-
193 for( int j = i; j < n; ++j )
\n-
194 ret[ i ] += L[ j ][ i ] * x[ j ];
\n-
195 }
\n-
196 }
\n-
197
\n-
198 template< int n >
\n-
199 static void LTL ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype, n, n > &ret )
\n-
200 {
\n-
201 for( int i = 0; i < n; ++i )
\n-
202 {
\n-
203 for( int j = 0; j < i; ++j )
\n-
204 {
\n-
205 ret[ i ][ j ] = ctype( 0 );
\n-
206 for( int k = i; k < n; ++k )
\n-
207 ret[ i ][ j ] += L[ k ][ i ] * L[ k ][ j ];
\n-
208 ret[ j ][ i ] = ret[ i ][ j ];
\n-
209 }
\n-
210 ret[ i ][ i ] = ctype( 0 );
\n-
211 for( int k = i; k < n; ++k )
\n-
212 ret[ i ][ i ] += L[ k ][ i ] * L[ k ][ i ];
\n-
213 }
\n-
214 }
\n-
215
\n-
216 template< int n >
\n-
217 static void LLT ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype, n, n > &ret )
\n-
218 {
\n-
219 for( int i = 0; i < n; ++i )
\n-
220 {
\n-
221 for( int j = 0; j < i; ++j )
\n-
222 {
\n-
223 ret[ i ][ j ] = ctype( 0 );
\n-
224 for( int k = 0; k <= j; ++k )
\n-
225 ret[ i ][ j ] += L[ i ][ k ] * L[ j ][ k ];
\n-
226 ret[ j ][ i ] = ret[ i ][ j ];
\n-
227 }
\n-
228 ret[ i ][ i ] = ctype( 0 );
\n-
229 for( int k = 0; k <= i; ++k )
\n-
230 ret[ i ][ i ] += L[ i ][ k ] * L[ i ][ k ];
\n-
231 }
\n-
232 }
\n-
233
\n-
234 template< int n >
\n-
235 static bool cholesky_L ( const FieldMatrix< ctype, n, n > &A, FieldMatrix< ctype, n, n > &ret, const bool checkSingular = false )
\n-
236 {
\n-
237 using std::sqrt;
\n-
238 for( int i = 0; i < n; ++i )
\n-
239 {
\n-
240 ctype &rii = ret[ i ][ i ];
\n-
241
\n-
242 ctype xDiag = A[ i ][ i ];
\n-
243 for( int j = 0; j < i; ++j )
\n-
244 xDiag -= ret[ i ][ j ] * ret[ i ][ j ];
\n-
245
\n-
246 // in some cases A can be singular, e.g. when checking local for
\n-
247 // outside points during checkInside
\n-
248 if( checkSingular && ! ( xDiag > ctype( 0 )) )
\n-
249 return false ;
\n-
250
\n-
251 // otherwise this should be true always
\n-
252 assert( xDiag > ctype( 0 ) );
\n-
253 rii = sqrt( xDiag );
\n-
254
\n-
255 ctype invrii = ctype( 1 ) / rii;
\n-
256 for( int k = i+1; k < n; ++k )
\n-
257 {
\n-
258 ctype x = A[ k ][ i ];
\n-
259 for( int j = 0; j < i; ++j )
\n-
260 x -= ret[ i ][ j ] * ret[ k ][ j ];
\n-
261 ret[ k ][ i ] = invrii * x;
\n-
262 }
\n-
263 }
\n-
264
\n-
265 // return true for meaning A is non-singular
\n-
266 return true;
\n-
267 }
\n-
268
\n-
269 template< int n >
\n-
270 static ctype detL ( const FieldMatrix< ctype, n, n > &L )
\n-
271 {
\n-
272 ctype det( 1 );
\n-
273 for( int i = 0; i < n; ++i )
\n-
274 det *= L[ i ][ i ];
\n-
275 return det;
\n-
276 }
\n-
277
\n-
278 template< int n >
\n-
279 static ctype invL ( FieldMatrix< ctype, n, n > &L )
\n-
280 {
\n-
281 ctype det( 1 );
\n-
282 for( int i = 0; i < n; ++i )
\n-
283 {
\n-
284 ctype &lii = L[ i ][ i ];
\n-
285 det *= lii;
\n-
286 lii = ctype( 1 ) / lii;
\n-
287 for( int j = 0; j < i; ++j )
\n-
288 {
\n-
289 ctype &lij = L[ i ][ j ];
\n-
290 ctype x = lij * L[ j ][ j ];
\n-
291 for( int k = j+1; k < i; ++k )
\n-
292 x += L[ i ][ k ] * L[ k ][ j ];
\n-
293 lij = (-lii) * x;
\n-
294 }
\n-
295 }
\n-
296 return det;
\n-
297 }
\n-
298
\n-
299 // calculates x := L^{-1} x
\n-
300 template< int n >
\n-
301 static void invLx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n > &x )
\n-
302 {
\n-
303 for( int i = 0; i < n; ++i )
\n-
304 {
\n-
305 for( int j = 0; j < i; ++j )
\n-
306 x[ i ] -= L[ i ][ j ] * x[ j ];
\n-
307 x[ i ] /= L[ i ][ i ];
\n-
308 }
\n-
309 }
\n-
310
\n-
311 // calculates x := L^{-T} x
\n-
312 template< int n >
\n-
313 static void invLTx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n > &x )
\n-
314 {
\n-
315 for( int i = n; i > 0; --i )
\n-
316 {
\n-
317 for( int j = i; j < n; ++j )
\n-
318 x[ i-1 ] -= L[ j ][ i-1 ] * x[ j ];
\n-
319 x[ i-1 ] /= L[ i-1 ][ i-1 ];
\n-
320 }
\n-
321 }
\n-
322
\n-
323 template< int n >
\n-
324 static ctype spdDetA ( const FieldMatrix< ctype, n, n > &A )
\n-
325 {
\n-
326 // return A[0][0]*A[1][1]-A[1][0]*A[1][0];
\n-
327 FieldMatrix< ctype, n, n > L;
\n-
328 cholesky_L( A, L );
\n-
329 return detL( L );
\n-
330 }
\n-
331
\n-
332 template< int n >
\n-
333 static ctype spdInvA ( FieldMatrix< ctype, n, n > &A )
\n-
334 {
\n-
335 FieldMatrix< ctype, n, n > L;
\n-
336 cholesky_L( A, L );
\n-
337 const ctype det = invL( L );
\n-
338 LTL( L, A );
\n-
339 return det;
\n-
340 }
\n+
8// This file is part of DUNE, a Distributed and Unified Numerics Environment
\n+
9// This file is copyright (C) 2005 Jorrit Fahlke <jorrit@jorrit.de>
\n+
10// This file is licensed under version 2 of the GNU General Public License,
\n+
11// with a special "runtime exception." See COPYING at the top of the source
\n+
12// tree for the full licence.
\n+
13
\n+
251#include <algorithm>
\n+
252
\n+
253#include <dune/common/fvector.hh>
\n+
254#include <dune/common/math.hh>
\n+
255
\n+\n+\n+
258#include <dune/geometry/type.hh>
\n+
259
\n+
260#include "base.cc"
\n+
261
\n+
262namespace Dune {
\n+
263
\n+
264 namespace RefinementImp {
\n+
265
\n+
\n+
272 namespace Simplex {
\n+
273
\n+
274 // //////////////////
\n+
275 //
\n+
277 //
\n+
278
\n+
280
\n+
288 [[deprecated("Use factorial from dune-common's math.hh")]]
\n+
\n+
289 inline int factorial(int n)
\n+
290 {
\n+
291 int prod = 1;
\n+
292 for(int i = 1; i <= n; ++i)
\n+
293 prod *= i;
\n+
294 return prod;
\n+
295 }
\n+
\n+
296
\n+
304 [[deprecated("Use binomial from dune-common's math.hh")]]
\n+
\n+
305 inline int binomial(int upper, int lower)
\n+
306 {
\n+
307 lower = std::min( lower, upper - lower );
\n+
308 if(lower < 0)
\n+
309 return 0;
\n+
310 int prod = 1;
\n+
311 for(int i = upper - lower; i < upper; ++i)
\n+
312 prod *= (i+1);
\n+
313 return prod / Dune::factorial(lower);
\n+
314 }
\n+
\n+
315
\n+
322 template<int dimension>
\n+
\n+
323 int pointIndex(const FieldVector<int, dimension> &point)
\n+
324 {
\n+
325 int index = 0;
\n+
326 for(int i = 0; i < dimension; ++i)
\n+
327 index += Dune::binomial(dimension-i + point[i]-1, dimension-i);
\n+
328 return index;
\n+
329 }
\n+
\n+
330
\n+
335 template<int n>
\n+
\n+
336 FieldVector<int, n> getPermutation(int m)
\n+
337 {
\n+
338 FieldVector<int, n> perm;
\n+
339 for(int i = 0; i < n; ++i)
\n+
340 perm[i] = i;
\n
341
\n-
342 // calculate x := A^{-1} x
\n-
343 template< int n >
\n-
344 static bool spdInvAx ( FieldMatrix< ctype, n, n > &A, FieldVector< ctype, n > &x, const bool checkSingular = false )
\n-
345 {
\n-
346 FieldMatrix< ctype, n, n > L;
\n-
347 const bool invertible = cholesky_L( A, L, checkSingular );
\n-
348 if( ! invertible ) return invertible ;
\n-
349 invLx( L, x );
\n-
350 invLTx( L, x );
\n-
351 return invertible;
\n-
352 }
\n-
353
\n-
354 template< int m, int n >
\n-
355 static ctype detATA ( const FieldMatrix< ctype, m, n > &A )
\n-
356 {
\n-
357 if( m >= n )
\n-
358 {
\n-
359 FieldMatrix< ctype, n, n > ata;
\n-
360 ATA_L( A, ata );
\n-
361 return spdDetA( ata );
\n-
362 }
\n-
363 else
\n-
364 return ctype( 0 );
\n-
365 }
\n-
366
\n-
372 template< int m, int n >
\n-
373 static ctype sqrtDetAAT ( const FieldMatrix< ctype, m, n > &A )
\n-
374 {
\n-
375 using std::abs;
\n-
376 using std::sqrt;
\n-
377 // These special cases are here not only for speed reasons:
\n-
378 // The general implementation aborts if the matrix is almost singular,
\n-
379 // and the special implementation provide a stable way to handle that case.
\n-
380 if( (n == 2) && (m == 2) )
\n-
381 {
\n-
382 // Special implementation for 2x2 matrices: faster and more stable
\n-
383 return abs( A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ] );
\n-
384 }
\n-
385 else if( (n == 3) && (m == 3) )
\n-
386 {
\n-
387 // Special implementation for 3x3 matrices
\n-
388 const ctype v0 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 1 ][ 1 ] * A[ 0 ][ 2 ];
\n-
389 const ctype v1 = A[ 0 ][ 2 ] * A[ 1 ][ 0 ] - A[ 1 ][ 2 ] * A[ 0 ][ 0 ];
\n-
390 const ctype v2 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 1 ][ 0 ] * A[ 0 ][ 1 ];
\n-
391 return abs( v0 * A[ 2 ][ 0 ] + v1 * A[ 2 ][ 1 ] + v2 * A[ 2 ][ 2 ] );
\n-
392 }
\n-
393 else if ( (n == 3) && (m == 2) )
\n-
394 {
\n-
395 // Special implementation for 2x3 matrices
\n-
396 const ctype v0 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 0 ][ 1 ] * A[ 1 ][ 0 ];
\n-
397 const ctype v1 = A[ 0 ][ 0 ] * A[ 1 ][ 2 ] - A[ 1 ][ 0 ] * A[ 0 ][ 2 ];
\n-
398 const ctype v2 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 0 ][ 2 ] * A[ 1 ][ 1 ];
\n-
399 return sqrt( v0*v0 + v1*v1 + v2*v2);
\n-
400 }
\n-
401 else if( n >= m )
\n-
402 {
\n-
403 // General case
\n-
404 FieldMatrix< ctype, m, m > aat;
\n-
405 AAT_L( A, aat );
\n-
406 return spdDetA( aat );
\n-
407 }
\n-
408 else
\n-
409 return ctype( 0 );
\n-
410 }
\n-
411
\n-
412 // A^{-1}_L = (A^T A)^{-1} A^T
\n-
413 // => A^{-1}_L A = I
\n-
414 template< int m, int n >
\n-
415 static ctype leftInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, m > &ret )
\n-
416 {
\n-
417 static_assert((m >= n), "Matrix has no left inverse.");
\n-
418 FieldMatrix< ctype, n, n > ata;
\n-
419 ATA_L( A, ata );
\n-
420 const ctype det = spdInvA( ata );
\n-
421 ATBT( ata, A, ret );
\n-
422 return det;
\n-
423 }
\n-
424
\n-
425 template< int m, int n >
\n-
426 static void leftInvAx ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, m > &x, FieldVector< ctype, n > &y )
\n-
427 {
\n-
428 static_assert((m >= n), "Matrix has no left inverse.");
\n-
429 FieldMatrix< ctype, n, n > ata;
\n-
430 ATx( A, x, y );
\n-
431 ATA_L( A, ata );
\n-
432 spdInvAx( ata, y );
\n-
433 }
\n-
434
\n-
436 template< int m, int n >
\n-
437 static ctype rightInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, m > &ret )
\n-
438 {
\n-
439 static_assert((n >= m), "Matrix has no right inverse.");
\n-
440 using std::abs;
\n-
441 if( (n == 2) && (m == 2) )
\n-
442 {
\n-
443 const ctype det = (A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ]);
\n-
444 const ctype detInv = ctype( 1 ) / det;
\n-
445 ret[ 0 ][ 0 ] = A[ 1 ][ 1 ] * detInv;
\n-
446 ret[ 1 ][ 1 ] = A[ 0 ][ 0 ] * detInv;
\n-
447 ret[ 1 ][ 0 ] = -A[ 1 ][ 0 ] * detInv;
\n-
448 ret[ 0 ][ 1 ] = -A[ 0 ][ 1 ] * detInv;
\n-
449 return abs( det );
\n-
450 }
\n-
451 else
\n-
452 {
\n-
453 FieldMatrix< ctype, m , m > aat;
\n-
454 AAT_L( A, aat );
\n-
455 const ctype det = spdInvA( aat );
\n-
456 ATBT( A , aat , ret );
\n-
457 return det;
\n-
458 }
\n-
459 }
\n-
460
\n-
461 template< int m, int n >
\n-
462 static bool xTRightInvA ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, n > &x, FieldVector< ctype, m > &y )
\n-
463 {
\n-
464 static_assert((n >= m), "Matrix has no right inverse.");
\n-
465 FieldMatrix< ctype, m, m > aat;
\n-
466 Ax( A, x, y );
\n-
467 AAT_L( A, aat );
\n-
468 // check whether aat is singular and return true if non-singular
\n-
469 return spdInvAx( aat, y, true );
\n-
470 }
\n-
471 };
\n-
472
\n-
473 } // namespace Impl
\n-
474
\n-
475
\n-
476
\n-
482 template< class ct, int mydim, int cdim>
\n-
\n-\n-
484 {
\n-
485 public:
\n+
342 int base = 1;
\n+
343 for(int i = 1; i <= n; ++i)
\n+
344 base *= i;
\n+
345
\n+
346 for(int i = n; i > 0; --i) {
\n+
347 base /= i;
\n+
348 int d = m / base;
\n+
349 m %= base;
\n+
350 int t = perm[i-1]; perm[i-1] = perm[i-1-d]; perm[i-1-d] = t;
\n+
351 }
\n+
352 return perm;
\n+
353 }
\n+
\n+
354
\n+
355#if 0
\n+
356 Has to be checked
\n+
357 // calculate the index of a permutation
\n+
358 template<int n>
\n+
359 int getPermIndex(const FieldVector<int, n>& test) // O(n^2)
\n+
360 {
\n+
361 int m = 0;
\n+
362 FieldVector<int, n> perm;
\n+
363 for(int i = 0; i < n; ++i)
\n+
364 perm[i] = i;
\n+
365
\n+
366 int base = 1;
\n+
367 for(int i = 1; i <= n; ++i)
\n+
368 base *= i;
\n+
369
\n+
370 for(int i = n; i > 0; --i) {
\n+
371 base /= i;
\n+
372 int d;
\n+
373 for(d = 0; d < i; ++d)
\n+
374 if(test[i-1] == perm[i-1-d])
\n+
375 break;
\n+
376 m += d * base;
\n+
377 int d = m / base;
\n+
378 m %= base;
\n+
379 perm[i-1-d] = perm[i-1];
\n+
380 }
\n+
381 }
\n+
382#endif
\n+
383
\n+
384 // map between the reference simplex and some arbitrary kuhn simplex (denoted by it's permutation)
\n+
392 template<int dimension, class CoordType>
\n+
393 FieldVector<CoordType, dimension>
\n+
\n+\n+
395 FieldVector<CoordType, dimension> point,
\n+
397 const FieldVector<int, dimension> &kuhn)
\n+
398 {
\n+
399 for(int i = dimension - 1; i > 0; --i)
\n+
400 point[kuhn[i-1]] += point[kuhn[i]];
\n+
401 return point;
\n+
402 }
\n+
\n+
403
\n+
411 template<int dimension, class CoordType>
\n+
412 FieldVector<CoordType, dimension>
\n+
\n+\n+
414 FieldVector<CoordType, dimension> point,
\n+
416 const FieldVector<int, dimension> &kuhn)
\n+
417 {
\n+
418 for(int i = 0; i < dimension - 1; ++i)
\n+
419 point[kuhn[i]] -= point[kuhn[i+1]];
\n+
420 return point;
\n+
421 }
\n+
\n+
422
\n+
423
\n+
425
\n+
426 // /////////////////////////////////////////
\n+
427 //
\n+
428 // refinement implementation for simplices
\n+
429 //
\n+
430
\n+
431 template<int dimension_, class CoordType>
\n+
\n+\n+
433 {
\n+
434 public:
\n+
435 constexpr static int dimension = dimension_;
\n+
436 typedef CoordType ctype;
\n+
437
\n+
438 template<int codimension>
\n+
439 struct Codim;
\n+\n+
441 typedef FieldVector<CoordType, dimension> CoordVector;
\n+\n+
443 typedef FieldVector<int, dimension+1> IndexVector;
\n+
444
\n+
445 static int nVertices(int nIntervals);
\n+
446 static VertexIterator vBegin(int nIntervals);
\n+
447 static VertexIterator vEnd(int nIntervals);
\n+
448
\n+
449 static int nElements(int nIntervals);
\n+
450 static ElementIterator eBegin(int nIntervals);
\n+
451 static ElementIterator eEnd(int nIntervals);
\n+
452 };
\n+
\n+
453
\n+
454 template<int dimension, class CoordType>
\n+
455 template<int codimension>
\n+
\n+
456 struct RefinementImp<dimension, CoordType>::Codim
\n+
457 {
\n+
458 class SubEntityIterator;
\n+
459 // We don't need the caching, but the uncached MultiLinearGeometry has bug FS#1209
\n+\n+
461 };
\n+
\n+
462
\n+
463 template<int dimension, class CoordType>
\n+
464 int
\n+
\n+\n+
466 nVertices(int nIntervals)
\n+
467 {
\n+
468 return Dune::binomial(dimension + nIntervals, (int)dimension);
\n+
469 }
\n+
\n+
470
\n+
471 template<int dimension, class CoordType>
\n+\n+
\n+\n+
474 vBegin(int nIntervals)
\n+
475 {
\n+
476 return VertexIterator(nIntervals);
\n+
477 }
\n+
\n+
478
\n+
479 template<int dimension, class CoordType>
\n+\n+
\n+\n+
482 vEnd(int nIntervals)
\n+
483 {
\n+
484 return VertexIterator(nIntervals, true);
\n+
485 }
\n+
\n
486
\n-
488 typedef ct ctype;
\n-
489
\n-
491 static const int mydimension= mydim;
\n-
492
\n-
494 static const int coorddimension = cdim;
\n-
495
\n-
497 typedef FieldVector< ctype, mydimension > LocalCoordinate;
\n-
498
\n-
500 typedef FieldVector< ctype, coorddimension > GlobalCoordinate;
\n-
501
\n-
503 typedef ctype Volume;
\n-
504
\n-
506 typedef FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed;
\n-
507
\n-
509 typedef FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed;
\n+
487 template<int dimension, class CoordType>
\n+
488 int
\n+
\n+\n+
490 nElements(int nIntervals)
\n+
491 {
\n+
492 return Dune::power(nIntervals, int(dimension));
\n+
493 }
\n+
\n+
494
\n+
495 template<int dimension, class CoordType>
\n+\n+
\n+\n+
498 eBegin(int nIntervals)
\n+
499 {
\n+
500 return ElementIterator(nIntervals);
\n+
501 }
\n+
\n+
502
\n+
503 template<int dimension, class CoordType>
\n+\n+
\n+\n+
506 eEnd(int nIntervals)
\n+
507 {
\n+
508 return ElementIterator(nIntervals, true);
\n+
509 }
\n+
\n
510
\n-
512 typedef FieldMatrix< ctype, coorddimension, mydimension > Jacobian;
\n-
513
\n-
515 typedef FieldMatrix< ctype, mydimension, coorddimension > JacobianInverse;
\n-
516
\n-
517 private:
\n-\n+
511 // //////////////
\n+
512 //
\n+
513 // The iterator
\n+
514 //
\n+
515
\n+
516 template<int dimension, class CoordType, int codimension>
\n+\n+
518
\n+
519 // vertices
\n
520
\n-\n-
522
\n-
523 // Helper class to compute a matrix pseudo inverse
\n-
524 typedef Impl::FieldMatrixHelper< ct > MatrixHelper;
\n-
525
\n-
526 public:
\n-
\n-
528 AffineGeometry ( const ReferenceElement &refElement, const GlobalCoordinate &origin,
\n-
529 const JacobianTransposed &jt )
\n-
530 : refElement_(refElement), origin_(origin), jacobianTransposed_(jt)
\n-
531 {
\n-
532 integrationElement_ = MatrixHelper::template rightInvA< mydimension, coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ );
\n-
533 }
\n-
\n+
521 template<int dimension, class CoordType>
\n+
\n+
522 class RefinementIteratorSpecial<dimension, CoordType, dimension>
\n+
523 {
\n+
524 public:
\n+\n+
526 typedef typename Refinement::CoordVector CoordVector;
\n+
527 typedef typename Refinement::template Codim<dimension>::Geometry Geometry;
\n+\n+
529
\n+
530 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n+
531
\n+
532 void increment();
\n+
533 bool equals(const This &other) const;
\n
534
\n-
\n-\n-
537 const JacobianTransposed &jt )
\n-
538 : AffineGeometry(ReferenceElements::general( gt ), origin, jt)
\n-
539 { }
\n-
\n-
540
\n-
542 template< class CoordVector >
\n-
\n-
543 AffineGeometry ( const ReferenceElement &refElement, const CoordVector &coordVector )
\n-
544 : refElement_(refElement), origin_(coordVector[0])
\n-
545 {
\n-
546 for( int i = 0; i < mydimension; ++i )
\n-
547 jacobianTransposed_[ i ] = coordVector[ i+1 ] - origin_;
\n-
548 integrationElement_ = MatrixHelper::template rightInvA< mydimension, coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ );
\n-
549 }
\n-
\n-
550
\n-
552 template< class CoordVector >
\n-
\n-
553 AffineGeometry ( Dune::GeometryType gt, const CoordVector &coordVector )
\n-
554 : AffineGeometry(ReferenceElements::general( gt ), coordVector)
\n-
555 { }
\n-
\n-
556
\n-
558 bool affine () const { return true; }
\n-
559
\n-
561 Dune::GeometryType type () const { return refElement_.type(); }
\n-
562
\n-
564 int corners () const { return refElement_.size( mydimension ); }
\n-
565
\n-
\n-
567 GlobalCoordinate corner ( int i ) const
\n-
568 {
\n-
569 return global( refElement_.position( i, mydimension ) );
\n-
570 }
\n-
\n-
571
\n-
573 GlobalCoordinate center () const { return global( refElement_.position( 0, 0 ) ); }
\n-
574
\n+
535 CoordVector coords() const;
\n+
536 Geometry geometry () const;
\n+
537
\n+
538 int index() const;
\n+
539 protected:
\n+
540 typedef FieldVector<int, dimension> Vertex;
\n+
541
\n+
542 int size;
\n+\n+
544 };
\n+
\n+
545
\n+
546 template<int dimension, class CoordType>
\n+
\n+\n+
548 RefinementIteratorSpecial(int nIntervals, bool end)
\n+
549 : size(nIntervals)
\n+
550 {
\n+
551 vertex[0] = (end) ? size + 1 : 0;
\n+
552 for(int i = 1; i < dimension; ++ i)
\n+
553 vertex[i] = 0;
\n+
554 }
\n+
\n+
555
\n+
556 template<int dimension, class CoordType>
\n+
557 void
\n+
\n+\n+\n+
560 {
\n+
561 assert(vertex[0] <= size);
\n+
562 for(int i = dimension - 1; i >= 0; --i) {
\n+
563 ++vertex[i];
\n+
564 if(i == 0 || vertex[i] <= vertex[i-1])
\n+
565 break;
\n+
566 else
\n+
567 vertex[i] = 0;
\n+
568 }
\n+
569 }
\n+
\n+
570
\n+
571 template<int dimension, class CoordType>
\n+
572 bool
\n+
\n+\n+
574 equals(const This &other) const
\n+
575 {
\n+
576 return size == other.size && vertex == other.vertex;
\n+
577 }
\n+
\n+
578
\n+
579 template<int dimension, class CoordType>
\n+\n
\n-\n-
582 {
\n-
583 GlobalCoordinate global( origin_ );
\n-
584 jacobianTransposed_.umtv( local, global );
\n-
585 return global;
\n-
586 }
\n-
\n-
587
\n-
\n-\n-
602 {
\n-\n-
604 jacobianInverseTransposed_.mtv( global - origin_, local );
\n-
605 return local;
\n-
606 }
\n-
\n-
607
\n-
\n-
618 ctype integrationElement ([[maybe_unused]] const LocalCoordinate &local) const
\n-
619 {
\n-
620 return integrationElement_;
\n-
621 }
\n-
\n+\n+
582 coords() const
\n+
583 {
\n+
584 Vertex ref = kuhnToReference(vertex, getPermutation<dimension>(0));
\n+
585
\n+
586 CoordVector coords;
\n+
587 for(int i = 0; i < dimension; ++i)
\n+
588 coords[i] = CoordType(ref[i]) / size;
\n+
589 return coords;
\n+
590 }
\n+
\n+
591
\n+
592 template<int dimension, class CoordType>
\n+\n+
\n+\n+
595 {
\n+
596 std::vector<CoordVector> corners(1);
\n+
597 corners[0] = (CoordVector)vertex;
\n+
598 return Geometry(GeometryTypes::vertex, corners);
\n+
599 }
\n+
\n+
600
\n+
601 template<int dimension, class CoordType>
\n+
602 int
\n+
\n+\n+
604 index() const
\n+
605 {
\n+
606 return pointIndex(vertex);
\n+
607 }
\n+
\n+
608
\n+
609 // elements
\n+
610
\n+
611 template<int dimension, class CoordType>
\n+
\n+
612 class RefinementIteratorSpecial<dimension, CoordType, 0>
\n+
613 {
\n+
614 public:
\n+\n+\n+\n+
618 typedef typename Refinement::template Codim<0>::Geometry Geometry;
\n+\n+
620
\n+
621 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n
622
\n-
\n-
624 Volume volume () const
\n-
625 {
\n-
626 return integrationElement_ * refElement_.volume();
\n-
627 }
\n-
\n-
628
\n-
\n-
635 const JacobianTransposed &jacobianTransposed ([[maybe_unused]] const LocalCoordinate &local) const
\n-
636 {
\n-
637 return jacobianTransposed_;
\n-
638 }
\n+
623 void increment();
\n+
624 bool equals(const This &other) const;
\n+
625
\n+
626 IndexVector vertexIndices() const;
\n+
627 int index() const;
\n+
628 CoordVector coords() const;
\n+
629
\n+
630 Geometry geometry () const;
\n+
631
\n+
632 private:
\n+
633 CoordVector global(const CoordVector &local) const;
\n+
634
\n+
635 protected:
\n+
636 typedef FieldVector<int, dimension> Vertex;
\n+
637 constexpr static int nKuhnIntervals = Dune::factorial(dimension);
\n+
638
\n+\n+\n+
641 int size;
\n+\n+
643 };
\n
\n-
639
\n+
644
\n+
645 template<int dimension, class CoordType>
\n
\n-\n-
647 {
\n-
648 return jacobianInverseTransposed_;
\n-
649 }
\n-
\n-
650
\n-
\n-
657 Jacobian jacobian ([[maybe_unused]] const LocalCoordinate &local) const
\n-
658 {
\n-
659 return jacobianTransposed_.transposed();
\n-
660 }
\n-
\n-
661
\n-
\n-
668 JacobianInverse jacobianInverse ([[maybe_unused]] const LocalCoordinate &local) const
\n-
669 {
\n-
670 return jacobianInverseTransposed_.transposed();
\n-
671 }
\n-
\n-
672
\n-
\n-\n-
674 {
\n-
675 return geometry.refElement_;
\n-
676 }
\n-
\n-
677
\n-
678 private:
\n-
679 ReferenceElement refElement_;
\n-
680 GlobalCoordinate origin_;
\n-
681 JacobianTransposed jacobianTransposed_;
\n-
682 JacobianInverseTransposed jacobianInverseTransposed_;
\n-
683 ctype integrationElement_;
\n-
684 };
\n-
\n-
685
\n-
686} // namespace Dune
\n-
\n-
687
\n-
688#endif // #ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH
\n-
A unique label for each type of element that can occur in a grid.
\n-
unspecified-type ReferenceElement
Returns the type of reference element for the argument type T.
Definition referenceelements.hh:497
\n+\n+
647 RefinementIteratorSpecial(int nIntervals, bool end)
\n+
648 : kuhnIndex(0), size(nIntervals), index_(0)
\n+
649 {
\n+
650 for(int i = 0; i < dimension; ++i)
\n+
651 origin[i] = 0;
\n+
652 if(end) {
\n+
653 index_ = Refinement::nElements(nIntervals);
\n+
654 origin[0] = size;
\n+
655 }
\n+
656 }
\n+
\n+
657
\n+
658 template<int dimension, class CoordType>
\n+
659 void
\n+
\n+\n+\n+
662 {
\n+
663 assert(origin[0] < size);
\n+
664
\n+
665 ++index_;
\n+
666
\n+
667 while(1) {
\n+
668 ++kuhnIndex;
\n+
669 if(kuhnIndex == nKuhnIntervals) {
\n+
670 kuhnIndex = 0;
\n+
671 // increment origin
\n+
672 for(int i = dimension - 1; i >= 0; --i) {
\n+
673 ++origin[i];
\n+
674 if(i == 0 || origin[i] <= origin[i-1])
\n+
675 break;
\n+
676 else
\n+
677 origin[i] = 0;
\n+
678 }
\n+
679 }
\n+
680
\n+
681 // test whether the current simplex has any corner outside the kuhn0 simplex
\n+
682 FieldVector<int, dimension> perm = getPermutation<dimension>(kuhnIndex);
\n+
683 Vertex corner = origin;
\n+
684 bool outside = false;
\n+
685 for(int i = 0; i < dimension; ++i) {
\n+
686 // next corner
\n+
687 ++corner[perm[i]];
\n+
688 if(perm[i] > 0)
\n+
689 if(corner[perm[i]] > corner[perm[i]-1]) {
\n+
690 outside = true;
\n+
691 break;
\n+
692 }
\n+
693 }
\n+
694 if(!outside)
\n+
695 return;
\n+
696 }
\n+
697 }
\n+
\n+
698
\n+
699 template<int dimension, class CoordType>
\n+
700 bool
\n+
\n+\n+
702 equals(const This &other) const
\n+
703 {
\n+
704 return size == other.size && index_ == other.index_;
\n+
705 }
\n+
\n+
706
\n+
707 template<int dimension, class CoordType>
\n+\n+
\n+\n+
710 vertexIndices() const
\n+
711 {
\n+
712 IndexVector indices;
\n+
713 FieldVector<int, dimension> perm = getPermutation<dimension>(kuhnIndex);
\n+
714 Vertex vertex = origin;
\n+
715 indices[0] = pointIndex(vertex);
\n+
716 for(int i = 0; i < dimension; ++i) {
\n+
717 ++vertex[perm[i]];
\n+
718 indices[i+1] = pointIndex(vertex);
\n+
719 }
\n+
720 if (kuhnIndex%2 == 1)
\n+
721 for(int i = 0; i < (dimension+1)/2; ++i) {
\n+
722 int t = indices[i];
\n+
723 indices[i] = indices[dimension-i];
\n+
724 indices[dimension-i] = t;
\n+
725 }
\n+
726 return indices;
\n+
727 }
\n+
\n+
728
\n+
729 template<int dimension, class CoordType>
\n+
730 int
\n+
\n+\n+
732 index() const
\n+
733 {
\n+
734 return index_;
\n+
735 }
\n+
\n+
736
\n+
737 template<int dimension, class CoordType>
\n+\n+
\n+\n+
740 coords() const
\n+
741 {
\n+\n+
743 ::simplex().position(0,0));
\n+
744 }
\n+
\n+
745
\n+
746 template<int dimension, class CoordType>
\n+\n+
\n+\n+
749 {
\n+
750 std::vector<CoordVector> corners(dimension+1);
\n+\n+
752 for(int i = 0; i <= dimension; ++i)
\n+
753 corners[i] = global(refelem.position(i, dimension));
\n+
754 return Geometry(refelem.type(), corners);
\n+
755 }
\n+
\n+
756
\n+
757 template<int dimension, class CoordType>
\n+\n+\n+
760 global(const CoordVector &local) const {
\n+
761 CoordVector v =
\n+
762 referenceToKuhn(local, getPermutation<dimension>(kuhnIndex));
\n+
763 v += origin;
\n+
764 v /= (typename CoordVector::value_type)size;
\n+
765 return kuhnToReference(v, getPermutation<dimension>(0));
\n+
766 }
\n+
767
\n+
768 // common
\n+
769
\n+
770 template<int dimension, class CoordType>
\n+
771 template<int codimension>
\n+
\n+
772 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n+
773 : public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n+
774 public RefinementIteratorSpecial<dimension, CoordType, codimension>
\n+
775 {
\n+
776 public:
\n+\n+
778
\n+
779 SubEntityIterator(int nIntervals, bool end = false);
\n+
780 };
\n+
\n+
781
\n+
782#ifndef DOXYGEN
\n+
783
\n+
784 template<int dimension, class CoordType>
\n+
785 template<int codimension>
\n+\n+
787 SubEntityIterator(int nIntervals, bool end)
\n+
788 : RefinementIteratorSpecial<dimension, CoordType, codimension>(nIntervals, end)
\n+
789 {}
\n+
790
\n+
791#endif
\n+
792
\n+
793 } // namespace Simplex
\n+
\n+
794
\n+
795 } // namespace RefinementImp
\n+
796
\n+
797
\n+
798 namespace RefinementImp {
\n+
799
\n+
800 // ///////////////////////
\n+
801 //
\n+
802 // The refinement traits
\n+
803 //
\n+
804
\n+
805#ifndef DOXYGEN
\n+
806 template<unsigned topologyId, class CoordType, unsigned coerceToId,
\n+
807 int dim>
\n+
808 struct Traits<
\n+
809 topologyId, CoordType, coerceToId, dim,
\n+
810 typename std::enable_if<
\n+
811 ((GeometryTypes::simplex(dim).id() >> 1) ==
\n+
812 (topologyId >> 1) &&
\n+
813 (GeometryTypes::simplex(dim).id() >> 1) ==
\n+
814 (coerceToId >> 1)
\n+
815 )>::type
\n+
816 >
\n+
817 {
\n+
818 typedef Simplex::RefinementImp<dim, CoordType> Imp;
\n+
819 };
\n+
820#endif
\n+
821
\n+
822
\n+
823 } // namespace RefinementImp
\n+
824
\n+
825} // namespace Dune
\n+
826
\n+
827#endif //DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC
\n+\n+\n+
A unique label for each type of element that can occur in a grid.
\n+
This file contains the parts independent of a particular Refinement implementation.
\n
Definition affinegeometry.hh:21
\n-
This class provides access to geometric and topological properties of a reference element.
Definition referenceelement.hh:52
\n-
CoordinateField volume() const
obtain the volume of the reference element
Definition referenceelement.hh:241
\n-
decltype(auto) type(int i, int c) const
obtain the type of subentity (i,c)
Definition referenceelement.hh:171
\n-
int size(int c) const
number of subentities of codimension c
Definition referenceelement.hh:94
\n-
decltype(auto) position(int i, int c) const
position of the barycenter of entity (i,c)
Definition referenceelement.hh:203
\n-
Definition affinegeometry.hh:33
\n+
int pointIndex(const FieldVector< int, dimension > &point)
calculate the index of a given gridpoint within a Kuhn0 simplex
Definition simplex.cc:323
\n+
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:336
\n+
int factorial(int n)
Calculate n!
Definition simplex.cc:289
\n+
int binomial(int upper, int lower)
calculate
Definition simplex.cc:305
\n+
FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from the reference simplex to some Kuhn simplex.
Definition simplex.cc:394
\n+
FieldVector< CoordType, dimension > kuhnToReference(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from some Kuhn simplex to the reference simplex.
Definition simplex.cc:413
\n
Class providing access to the singletons of the reference elements.
Definition referenceelements.hh:170
\n-
Implementation of the Geometry interface for affine geometries.
Definition affinegeometry.hh:484
\n-
AffineGeometry(const ReferenceElement &refElement, const CoordVector &coordVector)
Create affine geometry from reference element and a vector of vertex coordinates.
Definition affinegeometry.hh:543
\n-
AffineGeometry(Dune::GeometryType gt, const GlobalCoordinate &origin, const JacobianTransposed &jt)
Create affine geometry from GeometryType, one vertex, and the Jacobian matrix.
Definition affinegeometry.hh:536
\n-
FieldVector< ctype, mydimension > LocalCoordinate
Type for local coordinate vector.
Definition affinegeometry.hh:497
\n-
Dune::GeometryType type() const
Obtain the type of the reference element.
Definition affinegeometry.hh:561
\n-
static const int mydimension
Dimension of the geometry.
Definition affinegeometry.hh:491
\n-
AffineGeometry(const ReferenceElement &refElement, const GlobalCoordinate &origin, const JacobianTransposed &jt)
Create affine geometry from reference element, one vertex, and the Jacobian matrix.
Definition affinegeometry.hh:528
\n-
ctype Volume
Type used for volume.
Definition affinegeometry.hh:503
\n-
JacobianInverse jacobianInverse(const LocalCoordinate &local) const
Obtain the Jacobian's inverse.
Definition affinegeometry.hh:668
\n-
friend ReferenceElement referenceElement(const AffineGeometry &geometry)
Definition affinegeometry.hh:673
\n-
AffineGeometry(Dune::GeometryType gt, const CoordVector &coordVector)
Create affine geometry from GeometryType and a vector of vertex coordinates.
Definition affinegeometry.hh:553
\n-
ctype integrationElement(const LocalCoordinate &local) const
Obtain the integration element.
Definition affinegeometry.hh:618
\n-
FieldMatrix< ctype, mydimension, coorddimension > JacobianInverse
Type for the inverse Jacobian matrix.
Definition affinegeometry.hh:515
\n-
FieldMatrix< ctype, coorddimension, mydimension > Jacobian
Type for the Jacobian matrix.
Definition affinegeometry.hh:512
\n-
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
Obtain the transposed of the Jacobian's inverse.
Definition affinegeometry.hh:646
\n-
FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
Type for the transposed Jacobian matrix.
Definition affinegeometry.hh:506
\n-
GlobalCoordinate corner(int i) const
Obtain coordinates of the i-th corner.
Definition affinegeometry.hh:567
\n-
int corners() const
Obtain number of corners of the corresponding reference element.
Definition affinegeometry.hh:564
\n-
LocalCoordinate local(const GlobalCoordinate &global) const
Evaluate the inverse mapping.
Definition affinegeometry.hh:601
\n-
FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
Type for the transposed inverse Jacobian matrix.
Definition affinegeometry.hh:509
\n-
static const int coorddimension
Dimension of the world space.
Definition affinegeometry.hh:494
\n-
GlobalCoordinate global(const LocalCoordinate &local) const
Evaluate the mapping.
Definition affinegeometry.hh:581
\n-
GlobalCoordinate center() const
Obtain the centroid of the mapping's image.
Definition affinegeometry.hh:573
\n-
Jacobian jacobian(const LocalCoordinate &local) const
Obtain the Jacobian.
Definition affinegeometry.hh:657
\n-
ct ctype
Type used for coordinates.
Definition affinegeometry.hh:488
\n-
FieldVector< ctype, coorddimension > GlobalCoordinate
Type for coordinate vector in world space.
Definition affinegeometry.hh:500
\n-
bool affine() const
Always true: this is an affine geometry.
Definition affinegeometry.hh:558
\n-
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
Obtain the transposed of the Jacobian.
Definition affinegeometry.hh:635
\n-
Volume volume() const
Obtain the volume of the element.
Definition affinegeometry.hh:624
\n-
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n+
static const ReferenceElement & simplex()
get simplex reference elements
Definition referenceelements.hh:204
\n+
Static tag representing a codimension.
Definition dimension.hh:24
\n+
Implement a MultiLinearGeometry with additional caching.
Definition multilineargeometry.hh:526
\n+\n+
Codim< dimension >::SubEntityIterator VertexIterator
Definition simplex.cc:440
\n+
FieldVector< int, dimension+1 > IndexVector
Definition simplex.cc:443
\n+
CoordType ctype
Definition simplex.cc:436
\n+
static int nVertices(int nIntervals)
Definition simplex.cc:466
\n+
static int nElements(int nIntervals)
Definition simplex.cc:490
\n+
static ElementIterator eEnd(int nIntervals)
Definition simplex.cc:506
\n+
static VertexIterator vEnd(int nIntervals)
Definition simplex.cc:482
\n+
Codim< 0 >::SubEntityIterator ElementIterator
Definition simplex.cc:442
\n+
static VertexIterator vBegin(int nIntervals)
Definition simplex.cc:474
\n+
static ElementIterator eBegin(int nIntervals)
Definition simplex.cc:498
\n+
FieldVector< CoordType, dimension > CoordVector
Definition simplex.cc:441
\n+
static constexpr int dimension
Definition simplex.cc:435
\n+\n+
Dune::CachedMultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition simplex.cc:460
\n+\n+\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition simplex.cc:525
\n+\n+
Refinement::template Codim< dimension >::Geometry Geometry
Definition simplex.cc:527
\n+
RefinementIteratorSpecial< dimension, CoordType, dimension > This
Definition simplex.cc:528
\n+\n+\n+\n+\n+
FieldVector< int, dimension > Vertex
Definition simplex.cc:636
\n+\n+\n+
Refinement::template Codim< 0 >::Geometry Geometry
Definition simplex.cc:618
\n+\n+\n+
RefinementIteratorSpecial< dimension, CoordType, 0 > This
Definition simplex.cc:619
\n+
RefinementImp< dimension, CoordType > Refinement
Definition simplex.cc:615
\n+\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition simplex.cc:777
\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,798 +1,738 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-affinegeometry.hh\n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+simplex.cc\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH\n-6#define DUNE_GEOMETRY_AFFINEGEOMETRY_HH\n+5#ifndef DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC\n+_\b6#define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC\n 7\n-13#include \n-14\n-15#include \n-16#include \n-17\n-18#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-19\n-_\b2_\b0namespace _\bD_\bu_\bn_\be\n-21{\n-22\n-23 // External Forward Declarations\n-24 // -----------------------------\n-25\n-_\b2_\b6 namespace Geo\n-27 {\n-28\n-29 template< typename Implementation >\n-30 class _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n-31\n-32 template< class ctype, int dim >\n-_\b3_\b3 class _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn;\n-34\n-35 template< class ctype, int dim >\n-36 struct _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs;\n-37\n-38 }\n-39\n-40\n-41 namespace Impl\n-42 {\n-43\n-44 // FieldMatrixHelper\n-45 // -----------------\n-46\n-47 template< class ct >\n-48 struct FieldMatrixHelper\n-49 {\n-50 typedef ct ctype;\n-51\n-52 template< int m, int n >\n-53 static void Ax ( const FieldMatrix< ctype, m, n > &A, const FieldVector<\n-ctype, n > &x, FieldVector< ctype, m > &ret )\n-54 {\n-55 for( int i = 0; i < m; ++i )\n-56 {\n-57 ret[ i ] = ctype( 0 );\n-58 for( int j = 0; j < n; ++j )\n-59 ret[ i ] += A[ i ][ j ] * x[ j ];\n-60 }\n-61 }\n-62\n-63 template< int m, int n >\n-64 static void ATx ( const FieldMatrix< ctype, m, n > &A, const FieldVector<\n-ctype, m > &x, FieldVector< ctype, n > &ret )\n-65 {\n-66 for( int i = 0; i < n; ++i )\n-67 {\n-68 ret[ i ] = ctype( 0 );\n-69 for( int j = 0; j < m; ++j )\n-70 ret[ i ] += A[ j ][ i ] * x[ j ];\n-71 }\n-72 }\n-73\n-74 template< int m, int n, int p >\n-75 static void AB ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix<\n-ctype, n, p > &B, FieldMatrix< ctype, m, p > &ret )\n-76 {\n-77 for( int i = 0; i < m; ++i )\n-78 {\n-79 for( int j = 0; j < p; ++j )\n-80 {\n-81 ret[ i ][ j ] = ctype( 0 );\n-82 for( int k = 0; k < n; ++k )\n-83 ret[ i ][ j ] += A[ i ][ k ] * B[ k ][ j ];\n-84 }\n-85 }\n-86 }\n-87\n-88 template< int m, int n, int p >\n-89 static void ATBT ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix<\n-ctype, p, m > &B, FieldMatrix< ctype, n, p > &ret )\n-90 {\n-91 for( int i = 0; i < n; ++i )\n-92 {\n-93 for( int j = 0; j < p; ++j )\n-94 {\n-95 ret[ i ][ j ] = ctype( 0 );\n-96 for( int k = 0; k < m; ++k )\n-97 ret[ i ][ j ] += A[ k ][ i ] * B[ j ][ k ];\n-98 }\n-99 }\n-100 }\n-101\n-102 template< int m, int n >\n-103 static void ATA_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix<\n-ctype, n, n > &ret )\n-104 {\n-105 for( int i = 0; i < n; ++i )\n-106 {\n-107 for( int j = 0; j <= i; ++j )\n-108 {\n-109 ret[ i ][ j ] = ctype( 0 );\n-110 for( int k = 0; k < m; ++k )\n-111 ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ];\n-112 }\n-113 }\n-114 }\n-115\n-116 template< int m, int n >\n-117 static void ATA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype,\n-n, n > &ret )\n-118 {\n-119 for( int i = 0; i < n; ++i )\n-120 {\n-121 for( int j = 0; j <= i; ++j )\n-122 {\n-123 ret[ i ][ j ] = ctype( 0 );\n-124 for( int k = 0; k < m; ++k )\n-125 ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ];\n-126 ret[ j ][ i ] = ret[ i ][ j ];\n-127 }\n-128\n-129 ret[ i ][ i ] = ctype( 0 );\n-130 for( int k = 0; k < m; ++k )\n-131 ret[ i ][ i ] += A[ k ][ i ] * A[ k ][ i ];\n-132 }\n-133 }\n-134\n-135 template< int m, int n >\n-136 static void AAT_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix<\n-ctype, m, m > &ret )\n-137 {\n-138 /*\n-139 if (m==2) {\n-140 ret[0][0] = A[0]*A[0];\n-141 ret[1][1] = A[1]*A[1];\n-142 ret[1][0] = A[0]*A[1];\n-143 }\n-144 else\n-145 */\n-146 for( int i = 0; i < m; ++i )\n-147 {\n-148 for( int j = 0; j <= i; ++j )\n-149 {\n-150 ctype &retij = ret[ i ][ j ];\n-151 retij = A[ i ][ 0 ] * A[ j ][ 0 ];\n-152 for( int k = 1; k < n; ++k )\n-153 retij += A[ i ][ k ] * A[ j ][ k ];\n-154 }\n-155 }\n-156 }\n-157\n-158 template< int m, int n >\n-159 static void AAT ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype,\n-m, m > &ret )\n-160 {\n-161 for( int i = 0; i < m; ++i )\n-162 {\n-163 for( int j = 0; j < i; ++j )\n-164 {\n-165 ret[ i ][ j ] = ctype( 0 );\n-166 for( int k = 0; k < n; ++k )\n-167 ret[ i ][ j ] += A[ i ][ k ] * A[ j ][ k ];\n-168 ret[ j ][ i ] = ret[ i ][ j ];\n-169 }\n-170 ret[ i ][ i ] = ctype( 0 );\n-171 for( int k = 0; k < n; ++k )\n-172 ret[ i ][ i ] += A[ i ][ k ] * A[ i ][ k ];\n-173 }\n-174 }\n-175\n-176 template< int n >\n-177 static void Lx ( const FieldMatrix< ctype, n, n > &L, const FieldVector<\n-ctype, n > &x, FieldVector< ctype, n > &ret )\n-178 {\n-179 for( int i = 0; i < n; ++i )\n-180 {\n-181 ret[ i ] = ctype( 0 );\n-182 for( int j = 0; j <= i; ++j )\n-183 ret[ i ] += L[ i ][ j ] * x[ j ];\n-184 }\n-185 }\n-186\n-187 template< int n >\n-188 static void LTx ( const FieldMatrix< ctype, n, n > &L, const FieldVector<\n-ctype, n > &x, FieldVector< ctype, n > &ret )\n-189 {\n-190 for( int i = 0; i < n; ++i )\n-191 {\n-192 ret[ i ] = ctype( 0 );\n-193 for( int j = i; j < n; ++j )\n-194 ret[ i ] += L[ j ][ i ] * x[ j ];\n-195 }\n-196 }\n-197\n-198 template< int n >\n-199 static void LTL ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype,\n-n, n > &ret )\n-200 {\n-201 for( int i = 0; i < n; ++i )\n-202 {\n-203 for( int j = 0; j < i; ++j )\n-204 {\n-205 ret[ i ][ j ] = ctype( 0 );\n-206 for( int k = i; k < n; ++k )\n-207 ret[ i ][ j ] += L[ k ][ i ] * L[ k ][ j ];\n-208 ret[ j ][ i ] = ret[ i ][ j ];\n-209 }\n-210 ret[ i ][ i ] = ctype( 0 );\n-211 for( int k = i; k < n; ++k )\n-212 ret[ i ][ i ] += L[ k ][ i ] * L[ k ][ i ];\n-213 }\n-214 }\n-215\n-216 template< int n >\n-217 static void LLT ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype,\n-n, n > &ret )\n-218 {\n-219 for( int i = 0; i < n; ++i )\n-220 {\n-221 for( int j = 0; j < i; ++j )\n-222 {\n-223 ret[ i ][ j ] = ctype( 0 );\n-224 for( int k = 0; k <= j; ++k )\n-225 ret[ i ][ j ] += L[ i ][ k ] * L[ j ][ k ];\n-226 ret[ j ][ i ] = ret[ i ][ j ];\n-227 }\n-228 ret[ i ][ i ] = ctype( 0 );\n-229 for( int k = 0; k <= i; ++k )\n-230 ret[ i ][ i ] += L[ i ][ k ] * L[ i ][ k ];\n-231 }\n-232 }\n-233\n-234 template< int n >\n-235 static bool cholesky_L ( const FieldMatrix< ctype, n, n > &A, FieldMatrix<\n-ctype, n, n > &ret, const bool checkSingular = false )\n-236 {\n-237 using std::sqrt;\n-238 for( int i = 0; i < n; ++i )\n-239 {\n-240 ctype &rii = ret[ i ][ i ];\n-241\n-242 ctype xDiag = A[ i ][ i ];\n-243 for( int j = 0; j < i; ++j )\n-244 xDiag -= ret[ i ][ j ] * ret[ i ][ j ];\n-245\n-246 // in some cases A can be singular, e.g. when checking local for\n-247 // outside points during checkInside\n-248 if( checkSingular && ! ( xDiag > ctype( 0 )) )\n-249 return false ;\n-250\n-251 // otherwise this should be true always\n-252 assert( xDiag > ctype( 0 ) );\n-253 rii = sqrt( xDiag );\n-254\n-255 ctype invrii = ctype( 1 ) / rii;\n-256 for( int k = i+1; k < n; ++k )\n-257 {\n-258 ctype x = A[ k ][ i ];\n-259 for( int j = 0; j < i; ++j )\n-260 x -= ret[ i ][ j ] * ret[ k ][ j ];\n-261 ret[ k ][ i ] = invrii * x;\n-262 }\n-263 }\n-264\n-265 // return true for meaning A is non-singular\n-266 return true;\n-267 }\n-268\n-269 template< int n >\n-270 static ctype detL ( const FieldMatrix< ctype, n, n > &L )\n-271 {\n-272 ctype det( 1 );\n-273 for( int i = 0; i < n; ++i )\n-274 det *= L[ i ][ i ];\n-275 return det;\n-276 }\n-277\n-278 template< int n >\n-279 static ctype invL ( FieldMatrix< ctype, n, n > &L )\n-280 {\n-281 ctype det( 1 );\n-282 for( int i = 0; i < n; ++i )\n-283 {\n-284 ctype &lii = L[ i ][ i ];\n-285 det *= lii;\n-286 lii = ctype( 1 ) / lii;\n-287 for( int j = 0; j < i; ++j )\n-288 {\n-289 ctype &lij = L[ i ][ j ];\n-290 ctype x = lij * L[ j ][ j ];\n-291 for( int k = j+1; k < i; ++k )\n-292 x += L[ i ][ k ] * L[ k ][ j ];\n-293 lij = (-lii) * x;\n-294 }\n+8// This file is part of DUNE, a Distributed and Unified Numerics Environment\n+9// This file is copyright (C) 2005 Jorrit Fahlke \n+10// This file is licensed under version 2 of the GNU General Public License,\n+11// with a special \"runtime exception.\" See COPYING at the top of the source\n+12// tree for the full licence.\n+13\n+251#include \n+252\n+253#include \n+254#include \n+255\n+256#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\ba_\br_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh>\n+257#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+258#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+259\n+260#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+261\n+262namespace _\bD_\bu_\bn_\be {\n+263\n+264 namespace RefinementImp {\n+265\n+_\b2_\b7_\b2 namespace Simplex {\n+273\n+274 // //////////////////\n+275 //\n+277 //\n+278\n+280\n+288 [[deprecated(\"Use factorial from dune-common's math.hh\")]]\n+_\b2_\b8_\b9 inline int _\bf_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl(int n)\n+290 {\n+291 int prod = 1;\n+292 for(int i = 1; i <= n; ++i)\n+293 prod *= i;\n+294 return prod;\n 295 }\n-296 return det;\n-297 }\n-298\n-299 // calculates x := L^{-1} x\n-300 template< int n >\n-301 static void invLx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n >\n-&x )\n-302 {\n-303 for( int i = 0; i < n; ++i )\n-304 {\n-305 for( int j = 0; j < i; ++j )\n-306 x[ i ] -= L[ i ][ j ] * x[ j ];\n-307 x[ i ] /= L[ i ][ i ];\n-308 }\n-309 }\n-310\n-311 // calculates x := L^{-T} x\n-312 template< int n >\n-313 static void invLTx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n >\n-&x )\n-314 {\n-315 for( int i = n; i > 0; --i )\n-316 {\n-317 for( int j = i; j < n; ++j )\n-318 x[ i-1 ] -= L[ j ][ i-1 ] * x[ j ];\n-319 x[ i-1 ] /= L[ i-1 ][ i-1 ];\n-320 }\n-321 }\n-322\n-323 template< int n >\n-324 static ctype spdDetA ( const FieldMatrix< ctype, n, n > &A )\n-325 {\n-326 // return A[0][0]*A[1][1]-A[1][0]*A[1][0];\n-327 FieldMatrix< ctype, n, n > L;\n-328 cholesky_L( A, L );\n-329 return detL( L );\n-330 }\n-331\n-332 template< int n >\n-333 static ctype spdInvA ( FieldMatrix< ctype, n, n > &A )\n-334 {\n-335 FieldMatrix< ctype, n, n > L;\n-336 cholesky_L( A, L );\n-337 const ctype det = invL( L );\n-338 LTL( L, A );\n-339 return det;\n-340 }\n+296\n+304 [[deprecated(\"Use binomial from dune-common's math.hh\")]]\n+_\b3_\b0_\b5 inline int _\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl(int upper, int lower)\n+306 {\n+307 lower = std::min( lower, upper - lower );\n+308 if(lower < 0)\n+309 return 0;\n+310 int prod = 1;\n+311 for(int i = upper - lower; i < upper; ++i)\n+312 prod *= (i+1);\n+313 return prod / Dune::factorial(lower);\n+314 }\n+315\n+322 template\n+_\b3_\b2_\b3 int _\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx(const FieldVector &point)\n+324 {\n+325 int index = 0;\n+326 for(int i = 0; i < dimension; ++i)\n+327 index += Dune::binomial(dimension-i + point[i]-1, dimension-i);\n+328 return index;\n+329 }\n+330\n+335 template\n+_\b3_\b3_\b6 FieldVector _\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn(int m)\n+337 {\n+338 FieldVector perm;\n+339 for(int i = 0; i < n; ++i)\n+340 perm[i] = i;\n 341\n-342 // calculate x := A^{-1} x\n-343 template< int n >\n-344 static bool spdInvAx ( FieldMatrix< ctype, n, n > &A, FieldVector< ctype, n\n-> &x, const bool checkSingular = false )\n-345 {\n-346 FieldMatrix< ctype, n, n > L;\n-347 const bool invertible = cholesky_L( A, L, checkSingular );\n-348 if( ! invertible ) return invertible ;\n-349 invLx( L, x );\n-350 invLTx( L, x );\n-351 return invertible;\n-352 }\n-353\n-354 template< int m, int n >\n-355 static ctype detATA ( const FieldMatrix< ctype, m, n > &A )\n-356 {\n-357 if( m >= n )\n-358 {\n-359 FieldMatrix< ctype, n, n > ata;\n-360 ATA_L( A, ata );\n-361 return spdDetA( ata );\n-362 }\n-363 else\n-364 return ctype( 0 );\n-365 }\n-366\n-372 template< int m, int n >\n-373 static ctype sqrtDetAAT ( const FieldMatrix< ctype, m, n > &A )\n-374 {\n-375 using std::abs;\n-376 using std::sqrt;\n-377 // These special cases are here not only for speed reasons:\n-378 // The general implementation aborts if the matrix is almost singular,\n-379 // and the special implementation provide a stable way to handle that case.\n-380 if( (n == 2) && (m == 2) )\n-381 {\n-382 // Special implementation for 2x2 matrices: faster and more stable\n-383 return abs( A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ] );\n-384 }\n-385 else if( (n == 3) && (m == 3) )\n-386 {\n-387 // Special implementation for 3x3 matrices\n-388 const ctype v0 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 1 ][ 1 ] * A[ 0 ][ 2 ];\n-389 const ctype v1 = A[ 0 ][ 2 ] * A[ 1 ][ 0 ] - A[ 1 ][ 2 ] * A[ 0 ][ 0 ];\n-390 const ctype v2 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 1 ][ 0 ] * A[ 0 ][ 1 ];\n-391 return abs( v0 * A[ 2 ][ 0 ] + v1 * A[ 2 ][ 1 ] + v2 * A[ 2 ][ 2 ] );\n-392 }\n-393 else if ( (n == 3) && (m == 2) )\n-394 {\n-395 // Special implementation for 2x3 matrices\n-396 const ctype v0 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 0 ][ 1 ] * A[ 1 ][ 0 ];\n-397 const ctype v1 = A[ 0 ][ 0 ] * A[ 1 ][ 2 ] - A[ 1 ][ 0 ] * A[ 0 ][ 2 ];\n-398 const ctype v2 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 0 ][ 2 ] * A[ 1 ][ 1 ];\n-399 return sqrt( v0*v0 + v1*v1 + v2*v2);\n-400 }\n-401 else if( n >= m )\n-402 {\n-403 // General case\n-404 FieldMatrix< ctype, m, m > aat;\n-405 AAT_L( A, aat );\n-406 return spdDetA( aat );\n-407 }\n-408 else\n-409 return ctype( 0 );\n-410 }\n-411\n-412 // A^{-1}_L = (A^T A)^{-1} A^T\n-413 // => A^{-1}_L A = I\n-414 template< int m, int n >\n-415 static ctype leftInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix<\n-ctype, n, m > &ret )\n-416 {\n-417 static_assert((m >= n), \"Matrix has no left inverse.\");\n-418 FieldMatrix< ctype, n, n > ata;\n-419 ATA_L( A, ata );\n-420 const ctype det = spdInvA( ata );\n-421 ATBT( ata, A, ret );\n-422 return det;\n-423 }\n-424\n-425 template< int m, int n >\n-426 static void leftInvAx ( const FieldMatrix< ctype, m, n > &A, const\n-FieldVector< ctype, m > &x, FieldVector< ctype, n > &y )\n-427 {\n-428 static_assert((m >= n), \"Matrix has no left inverse.\");\n-429 FieldMatrix< ctype, n, n > ata;\n-430 ATx( A, x, y );\n-431 ATA_L( A, ata );\n-432 spdInvAx( ata, y );\n-433 }\n-434\n-436 template< int m, int n >\n-437 static ctype rightInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix<\n-ctype, n, m > &ret )\n-438 {\n-439 static_assert((n >= m), \"Matrix has no right inverse.\");\n-440 using std::abs;\n-441 if( (n == 2) && (m == 2) )\n-442 {\n-443 const ctype det = (A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ]);\n-444 const ctype detInv = ctype( 1 ) / det;\n-445 ret[ 0 ][ 0 ] = A[ 1 ][ 1 ] * detInv;\n-446 ret[ 1 ][ 1 ] = A[ 0 ][ 0 ] * detInv;\n-447 ret[ 1 ][ 0 ] = -A[ 1 ][ 0 ] * detInv;\n-448 ret[ 0 ][ 1 ] = -A[ 0 ][ 1 ] * detInv;\n-449 return abs( det );\n-450 }\n-451 else\n-452 {\n-453 FieldMatrix< ctype, m , m > aat;\n-454 AAT_L( A, aat );\n-455 const ctype det = spdInvA( aat );\n-456 ATBT( A , aat , ret );\n-457 return det;\n-458 }\n-459 }\n-460\n-461 template< int m, int n >\n-462 static bool xTRightInvA ( const FieldMatrix< ctype, m, n > &A, const\n-FieldVector< ctype, n > &x, FieldVector< ctype, m > &y )\n-463 {\n-464 static_assert((n >= m), \"Matrix has no right inverse.\");\n-465 FieldMatrix< ctype, m, m > aat;\n-466 Ax( A, x, y );\n-467 AAT_L( A, aat );\n-468 // check whether aat is singular and return true if non-singular\n-469 return spdInvAx( aat, y, true );\n-470 }\n-471 };\n-472\n-473 } // namespace Impl\n-474\n-475\n-476\n-482 template< class ct, int mydim, int cdim>\n-_\b4_\b8_\b3 class _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-484 {\n-485 public:\n+342 int base = 1;\n+343 for(int i = 1; i <= n; ++i)\n+344 base *= i;\n+345\n+346 for(int i = n; i > 0; --i) {\n+347 base /= i;\n+348 int d = m / base;\n+349 m %= base;\n+350 int t = perm[i-1]; perm[i-1] = perm[i-1-d]; perm[i-1-d] = t;\n+351 }\n+352 return perm;\n+353 }\n+354\n+355#if 0\n+356 Has to be checked\n+357 // calculate the index of a permutation\n+358 template\n+359 int getPermIndex(const FieldVector& test) // O(n^2)\n+360 {\n+361 int m = 0;\n+362 FieldVector perm;\n+363 for(int i = 0; i < n; ++i)\n+364 perm[i] = i;\n+365\n+366 int base = 1;\n+367 for(int i = 1; i <= n; ++i)\n+368 base *= i;\n+369\n+370 for(int i = n; i > 0; --i) {\n+371 base /= i;\n+372 int d;\n+373 for(d = 0; d < i; ++d)\n+374 if(test[i-1] == perm[i-1-d])\n+375 break;\n+376 m += d * base;\n+377 int d = m / base;\n+378 m %= base;\n+379 perm[i-1-d] = perm[i-1];\n+380 }\n+381 }\n+382#endif\n+383\n+384 // map between the reference simplex and some arbitrary kuhn simplex\n+(denoted by it's permutation)\n+392 template\n+393 FieldVector\n+_\b3_\b9_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn(\n+395 FieldVector point,\n+397 const FieldVector &kuhn)\n+398 {\n+399 for(int i = dimension - 1; i > 0; --i)\n+400 point[kuhn[i-1]] += point[kuhn[i]];\n+401 return point;\n+402 }\n+403\n+411 template\n+412 FieldVector\n+_\b4_\b1_\b3 _\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be(\n+414 FieldVector point,\n+416 const FieldVector &kuhn)\n+417 {\n+418 for(int i = 0; i < dimension - 1; ++i)\n+419 point[kuhn[i]] -= point[kuhn[i+1]];\n+420 return point;\n+421 }\n+422\n+423\n+425\n+426 // /////////////////////////////////////////\n+427 //\n+428 // refinement implementation for simplices\n+429 //\n+430\n+431 template\n+_\b4_\b3_\b2 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+433 {\n+434 public:\n+_\b4_\b3_\b5 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n+_\b4_\b3_\b6 typedef CoordType _\bc_\bt_\by_\bp_\be;\n+437\n+438 template\n+439 struct _\bC_\bo_\bd_\bi_\bm;\n+_\b4_\b4_\b0 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b4_\b4_\b1 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b4_\b4_\b2 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b4_\b4_\b3 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+444\n+445 static int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals);\n+446 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals);\n+447 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(int nIntervals);\n+448\n+449 static int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals);\n+450 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(int nIntervals);\n+451 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(int nIntervals);\n+452 };\n+453\n+454 template\n+455 template\n+_\b4_\b5_\b6 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n+457 {\n+458 class SubEntityIterator;\n+459 // We don't need the caching, but the uncached MultiLinearGeometry has bug\n+FS#1209\n+_\b4_\b6_\b0 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+461 };\n+462\n+463 template\n+464 int\n+_\b4_\b6_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+466_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals)\n+467 {\n+468 return Dune::binomial(dimension + nIntervals, (int)dimension);\n+469 }\n+470\n+471 template\n+472 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b4_\b7_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+474_\b _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals)\n+475 {\n+476 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n+477 }\n+478\n+479 template\n+480 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b4_\b8_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+482_\b _\bv_\bE_\bn_\bd(int nIntervals)\n+483 {\n+484 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n+485 }\n 486\n-_\b4_\b8_\b8 typedef ct _\bc_\bt_\by_\bp_\be;\n-489\n-_\b4_\b9_\b1 static const int _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn= mydim;\n-492\n-_\b4_\b9_\b4 static const int _\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = cdim;\n-495\n-_\b4_\b9_\b7 typedef FieldVector< ctype, mydimension > _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-498\n-_\b5_\b0_\b0 typedef FieldVector< ctype, coorddimension > _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n-501\n-_\b5_\b0_\b3 typedef _\bc_\bt_\by_\bp_\be _\bV_\bo_\bl_\bu_\bm_\be;\n-504\n-_\b5_\b0_\b6 typedef FieldMatrix< ctype, mydimension, coorddimension >\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n-507\n-_\b5_\b0_\b9 typedef FieldMatrix< ctype, coorddimension, mydimension >\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n+487 template\n+488 int\n+_\b4_\b8_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+490_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals)\n+491 {\n+492 return Dune::power(nIntervals, int(dimension));\n+493 }\n+494\n+495 template\n+496 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b4_\b9_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+498_\b _\be_\bB_\be_\bg_\bi_\bn(int nIntervals)\n+499 {\n+500 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n+501 }\n+502\n+503 template\n+504 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b5_\b0_\b5 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+506_\b _\be_\bE_\bn_\bd(int nIntervals)\n+507 {\n+508 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n+509 }\n 510\n-_\b5_\b1_\b2 typedef FieldMatrix< ctype, coorddimension, mydimension > _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n-513\n-_\b5_\b1_\b5 typedef FieldMatrix< ctype, mydimension, coorddimension > _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be;\n-516\n-517 private:\n-519 typedef _\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b<_\b _\bc_\bt_\by_\bp_\be_\b,\n-_\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b> > _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n+511 // //////////////\n+512 //\n+513 // The iterator\n+514 //\n+515\n+516 template\n+_\b5_\b1_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n+518\n+519 // vertices\n 520\n-521 typedef _\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b> _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs;\n-522\n-523 // Helper class to compute a matrix pseudo inverse\n-524 typedef Impl::FieldMatrixHelper< ct > MatrixHelper;\n-525\n-526 public:\n-_\b5_\b2_\b8 _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt &refElement, const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-&origin,\n-529 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jt )\n-530 : refElement_(refElement), origin_(origin), jacobianTransposed_(jt)\n-531 {\n-532 integrationElement_ = MatrixHelper::template rightInvA< mydimension,\n-coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ );\n-533 }\n+521 template\n+_\b5_\b2_\b2 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+523 {\n+524 public:\n+_\b5_\b2_\b5 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b5_\b2_\b6 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b5_\b2_\b7 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+_\b5_\b2_\b8 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bT_\bh_\bi_\bs;\n+529\n+530 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n+531\n+532 void increment();\n+533 bool equals(const _\bT_\bh_\bi_\bs &other) const;\n 534\n-_\b5_\b3_\b6 _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt, const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &origin,\n-537 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jt )\n-538 : _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by(_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs::general( gt ), origin, jt)\n-539 { }\n-540\n-542 template< class CoordVector >\n-_\b5_\b4_\b3 _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt &refElement, const CoordVector\n-&coordVector )\n-544 : refElement_(refElement), origin_(coordVector[0])\n-545 {\n-546 for( int i = 0; i < _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; ++i )\n-547 jacobianTransposed_[ i ] = coordVector[ i+1 ] - origin_;\n-548 integrationElement_ = MatrixHelper::template rightInvA< mydimension,\n-coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ );\n-549 }\n-550\n-552 template< class CoordVector >\n-_\b5_\b5_\b3 _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt, const CoordVector &coordVector )\n-554 : _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by(_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs::general( gt ), coordVector)\n-555 { }\n-556\n-_\b5_\b5_\b8 bool _\ba_\bf_\bf_\bi_\bn_\be () const { return true; }\n-559\n-_\b5_\b6_\b1 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bt_\by_\bp_\be () const { return refElement_._\bt_\by_\bp_\be(); }\n-562\n-_\b5_\b6_\b4 int _\bc_\bo_\br_\bn_\be_\br_\bs () const { return refElement_._\bs_\bi_\bz_\be( _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn ); }\n-565\n-_\b5_\b6_\b7 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bc_\bo_\br_\bn_\be_\br ( int i ) const\n-568 {\n-569 return _\bg_\bl_\bo_\bb_\ba_\bl( refElement_._\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn( i, _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn ) );\n-570 }\n-571\n-_\b5_\b7_\b3 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bc_\be_\bn_\bt_\be_\br () const { return _\bg_\bl_\bo_\bb_\ba_\bl( refElement_._\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn( 0,\n-0 ) ); }\n-574\n-_\b5_\b8_\b1 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bg_\bl_\bo_\bb_\ba_\bl ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl ) const\n-582 {\n-583 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bg_\bl_\bo_\bb_\ba_\bl( origin_ );\n-584 jacobianTransposed_.umtv( _\bl_\bo_\bc_\ba_\bl, _\bg_\bl_\bo_\bb_\ba_\bl );\n-585 return _\bg_\bl_\bo_\bb_\ba_\bl;\n-586 }\n-587\n-_\b6_\b0_\b1 _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bl_\bo_\bc_\ba_\bl ( const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bg_\bl_\bo_\bb_\ba_\bl ) const\n-602 {\n-603 _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bl_\bo_\bc_\ba_\bl;\n-604 jacobianInverseTransposed_.mtv( _\bg_\bl_\bo_\bb_\ba_\bl - origin_, _\bl_\bo_\bc_\ba_\bl );\n-605 return _\bl_\bo_\bc_\ba_\bl;\n-606 }\n-607\n-_\b6_\b1_\b8 _\bc_\bt_\by_\bp_\be _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt ([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl)\n+535 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+536 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry () const;\n+537\n+538 int index() const;\n+539 protected:\n+_\b5_\b4_\b0 typedef FieldVector _\bV_\be_\br_\bt_\be_\bx;\n+541\n+_\b5_\b4_\b2 int _\bs_\bi_\bz_\be;\n+_\b5_\b4_\b3 _\bV_\be_\br_\bt_\be_\bx _\bv_\be_\br_\bt_\be_\bx;\n+544 };\n+545\n+546 template\n+_\b5_\b4_\b7 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+548_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n+549 : size(nIntervals)\n+550 {\n+551 vertex[0] = (end) ? size + 1 : 0;\n+552 for(int i = 1; i < dimension; ++ i)\n+553 vertex[i] = 0;\n+554 }\n+555\n+556 template\n+557 void\n+_\b5_\b5_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+559_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+560 {\n+561 assert(vertex[0] <= size);\n+562 for(int i = dimension - 1; i >= 0; --i) {\n+563 ++vertex[i];\n+564 if(i == 0 || vertex[i] <= vertex[i-1])\n+565 break;\n+566 else\n+567 vertex[i] = 0;\n+568 }\n+569 }\n+570\n+571 template\n+572 bool\n+_\b5_\b7_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+574_\b _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const\n+575 {\n+576 return size == other._\bs_\bi_\bz_\be && vertex == other._\bv_\be_\br_\bt_\be_\bx;\n+577 }\n+578\n+579 template\n+580 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b5_\b8_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+582_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+583 {\n+584 _\bV_\be_\br_\bt_\be_\bx ref = _\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be(vertex, getPermutation(0));\n+585\n+586 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords;\n+587 for(int i = 0; i < dimension; ++i)\n+588 coords[i] = CoordType(ref[i]) / size;\n+589 return coords;\n+590 }\n+591\n+592 template\n+593 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+_\b5_\b9_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by ()\n const\n-619 {\n-620 return integrationElement_;\n-621 }\n+595 {\n+596 std::vector corners(1);\n+597 corners[0] = (_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br)vertex;\n+598 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(GeometryTypes::vertex, corners);\n+599 }\n+600\n+601 template\n+602 int\n+_\b6_\b0_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+604_\b _\bi_\bn_\bd_\be_\bx() const\n+605 {\n+606 return _\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx(vertex);\n+607 }\n+608\n+609 // elements\n+610\n+611 template\n+_\b6_\b1_\b2 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+613 {\n+614 public:\n+_\b6_\b1_\b5 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b6_\b1_\b6 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+_\b6_\b1_\b7 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b6_\b1_\b8 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+_\b6_\b1_\b9 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b> _\bT_\bh_\bi_\bs;\n+620\n+621 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n 622\n-_\b6_\b2_\b4 _\bV_\bo_\bl_\bu_\bm_\be _\bv_\bo_\bl_\bu_\bm_\be () const\n-625 {\n-626 return integrationElement_ * refElement_._\bv_\bo_\bl_\bu_\bm_\be();\n-627 }\n-628\n-_\b6_\b3_\b5 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ([[maybe_unused]] const\n-_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n-636 {\n-637 return jacobianTransposed_;\n-638 }\n-639\n-_\b6_\b4_\b6 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ([\n-[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n-647 {\n-648 return jacobianInverseTransposed_;\n-649 }\n-650\n-_\b6_\b5_\b7 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn ([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n-658 {\n-659 return jacobianTransposed_.transposed();\n-660 }\n-661\n-_\b6_\b6_\b8 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be ([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-&_\bl_\bo_\bc_\ba_\bl) const\n-669 {\n-670 return jacobianInverseTransposed_.transposed();\n-671 }\n-672\n-_\b6_\b7_\b3 friend _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt ( const _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by &geometry )\n-674 {\n-675 return geometry.refElement_;\n-676 }\n-677\n-678 private:\n-679 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt refElement_;\n-680 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be origin_;\n-681 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jacobianTransposed_;\n-682 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jacobianInverseTransposed_;\n-683 _\bc_\bt_\by_\bp_\be integrationElement_;\n-684 };\n-685\n-686} // namespace Dune\n-687\n-688#endif // #ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH\n+623 void increment();\n+624 bool equals(const _\bT_\bh_\bi_\bs &other) const;\n+625\n+626 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n+627 int index() const;\n+628 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+629\n+630 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry () const;\n+631\n+632 private:\n+633 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br global(const _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br &local) const;\n+634\n+635 protected:\n+_\b6_\b3_\b6 typedef FieldVector _\bV_\be_\br_\bt_\be_\bx;\n+_\b6_\b3_\b7 constexpr static int nKuhnIntervals = Dune::factorial(dimension);\n+638\n+_\b6_\b3_\b9 _\bV_\be_\br_\bt_\be_\bx _\bo_\br_\bi_\bg_\bi_\bn;\n+_\b6_\b4_\b0 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n+_\b6_\b4_\b1 int _\bs_\bi_\bz_\be;\n+_\b6_\b4_\b2 int _\bi_\bn_\bd_\be_\bx_\b_;\n+643 };\n+644\n+645 template\n+_\b6_\b4_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+647_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n+648 : kuhnIndex(0), size(nIntervals), index_(0)\n+649 {\n+650 for(int i = 0; i < dimension; ++i)\n+651 origin[i] = 0;\n+652 if(end) {\n+653 index_ = Refinement::nElements(nIntervals);\n+654 origin[0] = size;\n+655 }\n+656 }\n+657\n+658 template\n+659 void\n+_\b6_\b6_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+661_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+662 {\n+663 assert(origin[0] < size);\n+664\n+665 ++index_;\n+666\n+667 while(1) {\n+668 ++kuhnIndex;\n+669 if(kuhnIndex == nKuhnIntervals) {\n+670 kuhnIndex = 0;\n+671 // increment origin\n+672 for(int i = dimension - 1; i >= 0; --i) {\n+673 ++origin[i];\n+674 if(i == 0 || origin[i] <= origin[i-1])\n+675 break;\n+676 else\n+677 origin[i] = 0;\n+678 }\n+679 }\n+680\n+681 // test whether the current simplex has any corner outside the kuhn0\n+simplex\n+682 FieldVector perm = getPermutation(kuhnIndex);\n+683 _\bV_\be_\br_\bt_\be_\bx corner = origin;\n+684 bool outside = false;\n+685 for(int i = 0; i < dimension; ++i) {\n+686 // next corner\n+687 ++corner[perm[i]];\n+688 if(perm[i] > 0)\n+689 if(corner[perm[i]] > corner[perm[i]-1]) {\n+690 outside = true;\n+691 break;\n+692 }\n+693 }\n+694 if(!outside)\n+695 return;\n+696 }\n+697 }\n+698\n+699 template\n+700 bool\n+_\b7_\b0_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+702_\b _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const\n+703 {\n+704 return size == other._\bs_\bi_\bz_\be && index_ == other._\bi_\bn_\bd_\be_\bx_\b_;\n+705 }\n+706\n+707 template\n+708 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+_\b7_\b0_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+710_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n+711 {\n+712 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br indices;\n+713 FieldVector perm = getPermutation(kuhnIndex);\n+714 _\bV_\be_\br_\bt_\be_\bx vertex = origin;\n+715 indices[0] = _\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx(vertex);\n+716 for(int i = 0; i < dimension; ++i) {\n+717 ++vertex[perm[i]];\n+718 indices[i+1] = _\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx(vertex);\n+719 }\n+720 if (kuhnIndex%2 == 1)\n+721 for(int i = 0; i < (dimension+1)/2; ++i) {\n+722 int t = indices[i];\n+723 indices[i] = indices[dimension-i];\n+724 indices[dimension-i] = t;\n+725 }\n+726 return indices;\n+727 }\n+728\n+729 template\n+730 int\n+_\b7_\b3_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+732_\b _\bi_\bn_\bd_\be_\bx() const\n+733 {\n+734 return index_;\n+735 }\n+736\n+737 template\n+738 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b7_\b3_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+740_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+741 {\n+742 return global(_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>\n+743 ::simplex().position(0,0));\n+744 }\n+745\n+746 template\n+747 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+_\b7_\b4_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by () const\n+749 {\n+750 std::vector corners(dimension+1);\n+751 auto refelem = _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx();\n+752 for(int i = 0; i <= dimension; ++i)\n+753 corners[i] = global(refelem.position(i, dimension));\n+754 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(refelem.type(), corners);\n+755 }\n+756\n+757 template\n+758 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+759 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+760_\b _\bg_\bl_\bo_\bb_\ba_\bl(const CoordVector &local) const {\n+761 CoordVector v =\n+762 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn(local, getPermutation(kuhnIndex));\n+763 v += origin;\n+764 v /= (typename CoordVector::value_type)size;\n+765 return _\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be(v, getPermutation(0));\n+766 }\n+767\n+768 // common\n+769\n+770 template\n+771 template\n+_\b7_\b7_\b2 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n+SubEntityIterator\n+773 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n+774 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+775 {\n+776 public:\n+_\b7_\b7_\b7 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+778\n+_\b7_\b7_\b9 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end = false);\n+780 };\n+781\n+782#ifndef DOXYGEN\n+783\n+784 template\n+785 template\n+786 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n+787_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end)\n+788 : _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(nIntervals,\n+end)\n+789 {}\n+790\n+791#endif\n+792\n+793 } // namespace Simplex\n+794\n+795 } // namespace RefinementImp\n+796\n+797\n+798 namespace RefinementImp {\n+799\n+800 // ///////////////////////\n+801 //\n+802 // The refinement traits\n+803 //\n+804\n+805#ifndef DOXYGEN\n+806 template\n+808 struct Traits<\n+809 topologyId, CoordType, coerceToId, dim,\n+810 typename std::enable_if<\n+811 ((GeometryTypes::simplex(dim).id() >> 1) ==\n+812 (topologyId >> 1) &&\n+813 (GeometryTypes::simplex(dim).id() >> 1) ==\n+814 (coerceToId >> 1)\n+815 )>::type\n+816 >\n+817 {\n+818 typedef Simplex::RefinementImp Imp;\n+819 };\n+820#endif\n+821\n+822\n+823 } // namespace RefinementImp\n+824\n+825} // namespace Dune\n+826\n+827#endif //DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC\n+_\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\ba_\br_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b._\bh_\bh\n+_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-unspecified-type ReferenceElement\n-Returns the type of reference element for the argument type T.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:497\n+_\bb_\ba_\bs_\be_\b._\bc_\bc\n+This file contains the parts independent of a particular Refinement\n+implementation.\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-This class provides access to geometric and topological properties of a\n-reference element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n-CoordinateField volume() const\n-obtain the volume of the reference element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:241\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bt_\by_\bp_\be\n-decltype(auto) type(int i, int c) const\n-obtain the type of subentity (i,c)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n-int size(int c) const\n-number of subentities of codimension c\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:94\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn\n-decltype(auto) position(int i, int c) const\n-position of the barycenter of entity (i,c)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:203\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:33\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\bI_\bn_\bd_\be_\bx\n+int pointIndex(const FieldVector< int, dimension > &point)\n+calculate the index of a given gridpoint within a Kuhn0 simplex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:323\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn\n+FieldVector< int, n > getPermutation(int m)\n+Calculate permutation from it's index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:336\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl\n+int factorial(int n)\n+Calculate n!\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:289\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl\n+int binomial(int upper, int lower)\n+calculate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:305\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn\n+FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType,\n+dimension > point, const FieldVector< int, dimension > &kuhn)\n+Map from the reference simplex to some Kuhn simplex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:394\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bk_\bu_\bh_\bn_\bT_\bo_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+FieldVector< CoordType, dimension > kuhnToReference(FieldVector< CoordType,\n+dimension > point, const FieldVector< int, dimension > &kuhn)\n+Map from some Kuhn simplex to the reference simplex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:413\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n Class providing access to the singletons of the reference elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:170\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-Implementation of the Geometry interface for affine geometries.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:484\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-AffineGeometry(const ReferenceElement &refElement, const CoordVector\n-&coordVector)\n-Create affine geometry from reference element and a vector of vertex\n-coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:543\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-AffineGeometry(Dune::GeometryType gt, const GlobalCoordinate &origin, const\n-JacobianTransposed &jt)\n-Create affine geometry from GeometryType, one vertex, and the Jacobian matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:536\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-FieldVector< ctype, mydimension > LocalCoordinate\n-Type for local coordinate vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:497\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bt_\by_\bp_\be\n-Dune::GeometryType type() const\n-Obtain the type of the reference element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:561\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static const int mydimension\n-Dimension of the geometry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:491\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-AffineGeometry(const ReferenceElement &refElement, const GlobalCoordinate\n-&origin, const JacobianTransposed &jt)\n-Create affine geometry from reference element, one vertex, and the Jacobian\n-matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:528\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bV_\bo_\bl_\bu_\bm_\be\n-ctype Volume\n-Type used for volume.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:503\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n-JacobianInverse jacobianInverse(const LocalCoordinate &local) const\n-Obtain the Jacobian's inverse.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:668\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n-friend ReferenceElement referenceElement(const AffineGeometry &geometry)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:673\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n-AffineGeometry(Dune::GeometryType gt, const CoordVector &coordVector)\n-Create affine geometry from GeometryType and a vector of vertex coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:553\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt\n-ctype integrationElement(const LocalCoordinate &local) const\n-Obtain the integration element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:618\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n-FieldMatrix< ctype, mydimension, coorddimension > JacobianInverse\n-Type for the inverse Jacobian matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:515\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-FieldMatrix< ctype, coorddimension, mydimension > Jacobian\n-Type for the Jacobian matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:512\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-const JacobianInverseTransposed & jacobianInverseTransposed(const\n-LocalCoordinate &local) const\n-Obtain the transposed of the Jacobian's inverse.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:646\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed\n-Type for the transposed Jacobian matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:506\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br\n-GlobalCoordinate corner(int i) const\n-Obtain coordinates of the i-th corner.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:567\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br_\bs\n-int corners() const\n-Obtain number of corners of the corresponding reference element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:564\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bl_\bo_\bc_\ba_\bl\n-LocalCoordinate local(const GlobalCoordinate &global) const\n-Evaluate the inverse mapping.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:601\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed\n-Type for the transposed inverse Jacobian matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:509\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static const int coorddimension\n-Dimension of the world space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:494\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl\n-GlobalCoordinate global(const LocalCoordinate &local) const\n-Evaluate the mapping.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:581\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\be_\bn_\bt_\be_\br\n-GlobalCoordinate center() const\n-Obtain the centroid of the mapping's image.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:573\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-Jacobian jacobian(const LocalCoordinate &local) const\n-Obtain the Jacobian.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:657\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bt_\by_\bp_\be\n-ct ctype\n-Type used for coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:488\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n-FieldVector< ctype, coorddimension > GlobalCoordinate\n-Type for coordinate vector in world space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:500\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be\n-bool affine() const\n-Always true: this is an affine geometry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:558\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local)\n-const\n-Obtain the transposed of the Jacobian.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:635\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n-Volume volume() const\n-Obtain the volume of the element.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:624\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-Unique label for each type of entities that can occur in DUNE grids.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx\n+static const ReferenceElement & simplex()\n+get simplex reference elements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:204\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+Static tag representing a codimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\ba_\bc_\bh_\be_\bd_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Implement a MultiLinearGeometry with additional caching.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:526\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:433\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< dimension >::SubEntityIterator VertexIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:440\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< int, dimension+1 > IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:443\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bc_\bt_\by_\bp_\be\n+CoordType ctype\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:436\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+static int nVertices(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:466\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+static int nElements(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:490\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n+static ElementIterator eEnd(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:506\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n+static VertexIterator vEnd(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:482\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< 0 >::SubEntityIterator ElementIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:442\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n+static VertexIterator vBegin(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:474\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n+static ElementIterator eBegin(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:498\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< CoordType, dimension > CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:441\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static constexpr int dimension\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:435\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:457\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Dune::CachedMultiLinearGeometry< CoordType, dimension-codimension, dimension >\n+Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:460\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:517\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:523\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:526\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:525\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bv_\be_\br_\bt_\be_\bx\n+Vertex vertex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:543\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Refinement::template Codim< dimension >::Geometry Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:527\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bT_\bh_\bi_\bs\n+RefinementIteratorSpecial< dimension, CoordType, dimension > This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:528\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx\n+FieldVector< int, dimension > Vertex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:540\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be\n+int size\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:542\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:613\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n+int kuhnIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:640\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx\n+FieldVector< int, dimension > Vertex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:636\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bo_\br_\bi_\bg_\bi_\bn\n+Vertex origin\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:639\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bi_\bn_\bd_\be_\bx_\b_\n+int index_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:642\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Refinement::template Codim< 0 >::Geometry Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:618\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::IndexVector IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:616\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:617\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bT_\bh_\bi_\bs\n+RefinementIteratorSpecial< dimension, CoordType, 0 > This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:619\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:615\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,\n+_\b0_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be\n+int size\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:641\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+SubEntityIterator(int nIntervals, bool end=false)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:777\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00236.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00236.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: type.hh File Reference\n+dune-geometry: hcubetriangulation.cc File Reference\n \n \n \n \n \n \n \n@@ -65,62 +65,82 @@\n \n \n \n \n \n \n \n
\n \n-
type.hh File Reference
\n+Macros
\n+
hcubetriangulation.cc File Reference
\n \n
\n \n-

A unique label for each type of element that can occur in a grid. \n+

This file contains the Refinement implementation for triangulating hypercubes (quadrilateral -> triangle, hexahedron -> tetrahedron) \n More...

\n-
#include <cassert>
\n-#include <cstdint>
\n-#include <string>
\n-#include <type_traits>
\n-#include <dune/common/exceptions.hh>
\n-#include <dune/common/keywords.hh>
\n-#include <dune/common/typetraits.hh>
\n-#include <dune/common/unused.hh>
\n-#include <dune/geometry/deprecated_topology.hh>
\n+
#include <dune/geometry/referenceelements.hh>
\n+#include <dune/geometry/type.hh>
\n+#include "base.cc"
\n+#include "simplex.cc"
\n
\n

Go to the source code of this file.

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

\n Classes

class  Dune::GeometryType
 Unique label for each type of entities that can occur in DUNE grids. More...
class  Dune::RefinementImp::HCubeTriangulation::RefinementImp< dimension_, CoordType >
 
struct  Dune::RefinementImp::HCubeTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
class  Dune::RefinementImp::HCubeTriangulation::RefinementIteratorSpecial< dimension, CoordType, dimension >
 
class  Dune::RefinementImp::HCubeTriangulation::RefinementIteratorSpecial< dimension, CoordType, 0 >
 
class  Dune::RefinementImp::HCubeTriangulation::RefinementImp< dimension_, CoordType >::Codim< codimension >
 
\n \n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Namespaces

namespace  Dune
 
namespace  Dune::GeometryTypes
 Predefined GeometryTypes for common geometries.
namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 
namespace  Dune::RefinementImp::HCubeTriangulation
 This namespace contains the Refinement implementation for triangulating hypercubes (GeometryType::cube -> GeometryType::simplex)
 
\n-\n-\n-\n-\n+\n+\n+\n

\n-Functions

std::ostream & Dune::operator<< (std::ostream &s, const GeometryType &a)
 Prints the type to an output stream.
 

\n+Macros

#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
 
\n

Detailed Description

\n-

A unique label for each type of element that can occur in a grid.

\n-
\n+

This file contains the Refinement implementation for triangulating hypercubes (quadrilateral -> triangle, hexahedron -> tetrahedron)

\n+

See Refinement implementation for triangulating hypercubes.

\n+

Macro Definition Documentation

\n+\n+

◆ DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+
#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
\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,38 +1,55 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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-type.hh File Reference\n-A unique label for each type of element that can occur in a grid. _\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/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bd_\be_\bp_\br_\be_\bc_\ba_\bt_\be_\bd_\b__\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\b._\bh_\bh>\n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\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+hcubetriangulation.cc File Reference\n+This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for triangulating hypercubes\n+(quadrilateral -> triangle, hexahedron -> tetrahedron) _\bM_\bo_\br_\be_\b._\b._\b.\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\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:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-\u00a0 Unique label for each type of entities that can occur in DUNE grids.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<\n+ _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b__\b,\n+ _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b _\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\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:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bs\n-\u00a0 Predefined _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\bs for common geometries.\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+\u00a0 This namespace contains the implementation of _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt.\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn\n+ This namespace contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for\n+\u00a0 triangulating hypercubes (_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bc_\bu_\bb_\be -> _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:\n+ _\bs_\bi_\bm_\bp_\bl_\be_\bx)\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b< (std::ostream &s, const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be &a)\n-\u00a0 Prints the type to an output stream.\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bG_\bE_\bO_\bM_\bE_\bT_\bR_\bY_\b__\bR_\bE_\bF_\bI_\bN_\bE_\bM_\bE_\bN_\bT_\b__\bH_\bC_\bU_\bB_\bE_\bT_\bR_\bI_\bA_\bN_\bG_\bU_\bL_\bA_\bT_\bI_\bO_\bN_\b__\bC_\bC\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-A unique label for each type of element that can occur in a grid.\n+This file contains the _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt implementation for triangulating hypercubes\n+(quadrilateral -> triangle, hexahedron -> tetrahedron)\n+See _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b _\bi_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bf_\bo_\br_\b _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\b _\bh_\by_\bp_\be_\br_\bc_\bu_\bb_\be_\bs.\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\u00a0D\bDU\bUN\bNE\bE_\b_G\bGE\bEO\bOM\bME\bET\bTR\bRY\bY_\b_R\bRE\bEF\bFI\bIN\bNE\bEM\bME\bEN\bNT\bT_\b_H\bHC\bCU\bUB\bBE\bET\bTR\bRI\bIA\bAN\bNG\bGU\bUL\bLA\bAT\bTI\bIO\bON\bN_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n+#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00236_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00236_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: type.hh Source File\n+dune-geometry: hcubetriangulation.cc Source File\n \n \n \n \n \n \n \n@@ -70,500 +70,508 @@\n \n \n \n \n \n \n \n
\n-
type.hh
\n+
hcubetriangulation.cc
\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
\n
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
\n-
5#ifndef DUNE_GEOMETRY_TYPE_HH
\n-
6#define DUNE_GEOMETRY_TYPE_HH
\n+
5#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
\n+
6#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
\n
7
\n-
12#include <cassert>
\n-
13#include <cstdint>
\n-
14
\n-
15#include <string>
\n-
16#include <type_traits>
\n-
17
\n-
18#include <dune/common/exceptions.hh>
\n-
19#include <dune/common/keywords.hh>
\n-
20#include <dune/common/typetraits.hh>
\n-
21#include <dune/common/unused.hh>
\n-
22
\n-
23namespace Dune
\n-
24{
\n-
25
\n-
26 namespace Impl
\n-
27 {
\n-
28
\n-
29 enum TopologyConstruction { pyramidConstruction = 0, prismConstruction = 1 };
\n-
30
\n-
31 // Dynamic Topology Properties
\n-
32 // ---------------------------
\n-
33
\n-
42 inline static unsigned int numTopologies ( int dim ) noexcept
\n-
43 {
\n-
44 return (1u << dim);
\n-
45 }
\n-
46
\n-
58 inline bool static isPyramid ( unsigned int topologyId, int dim, int codim = 0 ) noexcept
\n-
59 {
\n-
60 assert( (dim > 0) && (topologyId < numTopologies( dim )) );
\n-
61 assert( (0 <= codim) && (codim < dim) );
\n-
62 return (((topologyId & ~1) & (1u << (dim-codim-1))) == 0);
\n-
63 }
\n+\n+
30#include <dune/geometry/type.hh>
\n+
31
\n+
32#include "base.cc"
\n+
33#include "simplex.cc"
\n+
34
\n+
35namespace Dune
\n+
36{
\n+
37 namespace RefinementImp
\n+
38 {
\n+
\n+
46 namespace HCubeTriangulation {
\n+
47
\n+
48 // ////////////
\n+
49 //
\n+
50 // Utilities
\n+
51 //
\n+
52
\n+\n+\n+
55
\n+
56 // ////////////////////////////////////
\n+
57 //
\n+
58 // Refine a hypercube with simplices
\n+
59 //
\n+
60
\n+
61 // forward declaration of the iterator base
\n+
62 template<int dimension, class CoordType, int codimension>
\n+\n
64
\n-
76 inline static bool isPrism ( unsigned int topologyId, int dim, int codim = 0 ) noexcept
\n-
77 {
\n-
78 assert( (dim > 0) && (topologyId < numTopologies( dim )) );
\n-
79 assert( (0 <= codim) && (codim < dim) );
\n-
80 return (( (topologyId | 1) & (1u << (dim-codim-1))) != 0);
\n-
81 }
\n-
82
\n-
90 inline static unsigned int baseTopologyId ( unsigned int topologyId, int dim, int codim = 1 ) noexcept
\n-
91 {
\n-
92 assert( (dim >= 0) && (topologyId < numTopologies( dim )) );
\n-
93 assert( (0 <= codim) && (codim <= dim) );
\n-
94 return topologyId & ((1u << (dim-codim)) - 1);
\n-
95 }
\n-
96
\n-
97 } // namespace Impl
\n-
98
\n-
99// the Topology classes are deprecated and will be removed for the 2.8.
\n-
100// Temporarily a header 'deprecated_topology.hh' is provided which will be removed after the 2.9 release.
\n-
101#if __GNUC__ >= 7
\n-
102# pragma GCC diagnostic push
\n-
103# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
\n-
104#endif
\n-\n-
106#if __GNUC__ >= 7
\n-
107# pragma GCC diagnostic pop
\n-
108#endif
\n-
109
\n-
110 // GeometryType
\n-
111 // -------------
\n-
112
\n-
\n-\n-
126 {
\n-
127 public:
\n-
128
\n-
\n-
131 enum
\n-
132 BasicType {
\n-\n-\n-\n-\n-\n-
138 none
\n-
139 };
\n-
\n-
140
\n-
141 private:
\n-
142
\n-
144 unsigned char dim_;
\n-
145
\n-
147 bool none_;
\n-
148
\n-
150 unsigned int topologyId_;
\n-
151
\n-
152 // Internal type used for the Id. The exact nature of this type is kept
\n-
153 // as an implementation detail on purpose. We use a scoped enum here because scoped enums
\n-
154 // can be used as template parameters, but are not implicitly converted to other integral
\n-
155 // types by the compiler. That way, we avoid unfortunate implicit conversion chains, e.g.
\n-
156 // people trying to work with GlobalGeometryTypeIndex, but forgetting to actually call
\n-
157 // GlobalGeometryTypeIndex::index(gt) and just using gt directly.
\n-
158 enum class IdType : std::uint64_t
\n-
159 {};
\n-
160
\n-
161 public:
\n-
162
\n-
193 using Id = IdType;
\n-
194
\n-
\n-
202 constexpr operator Id() const
\n-
203 {
\n-
204 // recreate the exact storage layout that this class is using, making conversion
\n-
205 // extremely cheap
\n-
206 std::uint64_t id = dim_ | (std::uint64_t(none_) << 8) | (std::uint64_t(topologyId_) << 32);
\n-
207 return static_cast<Id>(id);
\n-
208 }
\n-
\n-
209
\n-
\n-
222 constexpr Id toId() const
\n-
223 {
\n-
224 return static_cast<Id>(*this);
\n-
225 }
\n-
\n-
226
\n-
\n-
234 constexpr GeometryType(Id id)
\n-
235 : dim_(static_cast<std::uint64_t>(id) & 0xFF)
\n-
236 , none_(static_cast<std::uint64_t>(id) & 0x100)
\n-
237 , topologyId_(static_cast<std::uint64_t>(id) >> 32)
\n-
238 {}
\n-
\n-
239
\n-
242
\n-
\n-
244 constexpr GeometryType ()
\n-
245 : dim_(0), none_(true), topologyId_(0)
\n-
246 {}
\n-
\n-
247
\n-
\n-
254 constexpr GeometryType(unsigned int topologyId, unsigned int dim, bool isNone)
\n-
255 : dim_(dim), none_(isNone), topologyId_(topologyId)
\n-
256 {}
\n+
65 template<int dimension_, class CoordType>
\n+
\n+\n+
67 {
\n+
68 public:
\n+
69 constexpr static int dimension = dimension_;
\n+
70
\n+
71 typedef CoordType ctype;
\n+
72
\n+
73 template<int codimension>
\n+
74 struct Codim;
\n+\n+
76 typedef FieldVector<CoordType, dimension> CoordVector;
\n+\n+
78 typedef FieldVector<int, dimension+1> IndexVector;
\n+
79
\n+
80 static int nVertices(int nIntervals);
\n+
81 static VertexIterator vBegin(int nIntervals);
\n+
82 static VertexIterator vEnd(int nIntervals);
\n+
83
\n+
84 static int nElements(int nIntervals);
\n+
85 static ElementIterator eBegin(int nIntervals);
\n+
86 static ElementIterator eEnd(int nIntervals);
\n+
87 private:
\n+
88 friend class RefinementIteratorSpecial<dimension, CoordType, 0>;
\n+
89 friend class RefinementIteratorSpecial<dimension, CoordType, dimension>;
\n+
90
\n+\n+
92 };
\n+
\n+
93
\n+
94 template<int dimension, class CoordType>
\n+
95 template<int codimension>
\n+
\n+
96 struct RefinementImp<dimension, CoordType>::Codim
\n+
97 {
\n+
98 class SubEntityIterator;
\n+
99 typedef Dune::MultiLinearGeometry<CoordType,dimension-codimension,dimension> Geometry;
\n+
100 };
\n+
\n+
101
\n+
102 template<int dimension, class CoordType>
\n+
103 int
\n+
\n+\n+
105 nVertices(int nIntervals)
\n+
106 {
\n+
107 return BackendRefinement::nVertices(nIntervals) * factorial(int(dimension));
\n+
108 }
\n
\n+
109
\n+
110 template<int dimension, class CoordType>
\n+\n+
\n+\n+
113 vBegin(int nIntervals)
\n+
114 {
\n+
115 return VertexIterator(nIntervals);
\n+
116 }
\n+
\n+
117
\n+
118 template<int dimension, class CoordType>
\n+\n+
\n+\n+
121 vEnd(int nIntervals)
\n+
122 {
\n+
123 return VertexIterator(nIntervals, true);
\n+
124 }
\n+
\n+
125
\n+
126 template<int dimension, class CoordType>
\n+
127 int
\n+
\n+\n+
129 nElements(int nIntervals)
\n+
130 {
\n+
131 return BackendRefinement::nElements(nIntervals) * factorial(int(dimension));
\n+
132 }
\n+
\n+
133
\n+
134 template<int dimension, class CoordType>
\n+\n+
\n+\n+
137 eBegin(int nIntervals)
\n+
138 {
\n+
139 return ElementIterator(nIntervals);
\n+
140 }
\n+
\n+
141
\n+
142 template<int dimension, class CoordType>
\n+\n+
\n+\n+
145 eEnd(int nIntervals)
\n+
146 {
\n+
147 return ElementIterator(nIntervals, true);
\n+
148 }
\n+
\n+
149
\n+
150 // //////////////
\n+
151 //
\n+
152 // The iterator
\n+
153 //
\n+
154
\n+
155 // vertices
\n+
156 template<int dimension, class CoordType>
\n+
\n+
157 class RefinementIteratorSpecial<dimension, CoordType, dimension>
\n+
158 {
\n+
159 public:
\n+\n+
161 typedef typename Refinement::CoordVector CoordVector;
\n+
162 typedef typename Refinement::template Codim<dimension>::Geometry Geometry;
\n+
163
\n+
164 RefinementIteratorSpecial(int nIntervals, bool end = false);
\n+
165
\n+
166 void increment();
\n+
167
\n+
168 CoordVector coords() const;
\n+
169
\n+
170 Geometry geometry() const;
\n+
171
\n+
172 int index() const;
\n+
173 protected:
\n+
174 typedef typename Refinement::BackendRefinement BackendRefinement;
\n+
175 typedef typename BackendRefinement::template Codim<dimension>::SubEntityIterator BackendIterator;
\n+
176 constexpr static int nKuhnSimplices = factorial(int(dimension));
\n+
177
\n+\n+
179
\n+\n+\n+\n+
183 };
\n+
\n+
184
\n+
185 template<int dimension, class CoordType>
\n+
\n+\n+
187 RefinementIteratorSpecial(int nIntervals, bool end)
\n+
188 : nIntervals_(nIntervals), kuhnIndex(0),
\n+
189 backend(BackendRefinement::vBegin(nIntervals_)),
\n+
190 backendEnd(BackendRefinement::vEnd(nIntervals_))
\n+
191 {
\n+
192 if (end)
\n+
193 kuhnIndex = nKuhnSimplices;
\n+
194 }
\n+
\n+
195
\n+
196 template<int dimension, class CoordType>
\n+
197 void
\n+
\n+\n+\n+
200 {
\n+
201 ++backend;
\n+
202 if (backend == backendEnd)
\n+
203 {
\n+
204 backend = BackendRefinement::vBegin(nIntervals_);
\n+
205 ++kuhnIndex;
\n+
206 }
\n+
207 }
\n+
\n+
208
\n+
209 template<int dimension, class CoordType>
\n+\n+
\n+\n+
212 coords() const
\n+
213 {
\n+
214 return referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
\n+
215 }
\n+
\n+
216
\n+
217 template<int dimension, class CoordType>
\n+\n+
\n+\n+
220 {
\n+
221 std::vector<CoordVector> corners(1);
\n+
222 corners[0] = referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
\n+
223 return Geometry(GeometryTypes::vertex, corners);
\n+
224 }
\n+
\n+
225
\n+
226 template<int dimension, class CoordType>
\n+
227 int
\n+
\n+\n+
229 index() const
\n+
230 {
\n+
231 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index();
\n+
232 }
\n+
\n+
233
\n+
234 // elements
\n+
235 template<int dimension, class CoordType>
\n+
\n+
236 class RefinementIteratorSpecial<dimension, CoordType, 0>
\n+
237 {
\n+
238 public:
\n+\n+\n+\n+
242 typedef typename Refinement::template Codim<0>::Geometry Geometry;
\n+
243
\n+
244 RefinementIteratorSpecial(int nIntervals_, bool end = false);
\n+\n+
246
\n+
247 void increment();
\n+
248
\n+
249 IndexVector vertexIndices() const;
\n+
250 int index() const;
\n+
251 CoordVector coords() const;
\n+
252
\n+
253 Geometry geometry() const;
\n+
254
\n+
255 private:
\n+
256 CoordVector global(const CoordVector &local) const;
\n
257
\n-
\n-
263 constexpr GeometryType(unsigned int topologyId, unsigned int dim)
\n-
264 : dim_(dim), none_(false), topologyId_(topologyId)
\n-
265 {}
\n-
\n-
266
\n-
277 template<class TopologyType,
\n-
278 class = std::void_t<decltype(TopologyType::dimension), decltype(TopologyType::id)>>
\n-
\n-
279 explicit GeometryType(TopologyType t)
\n-
280 : dim_(TopologyType::dimension), none_(false), topologyId_(TopologyType::id)
\n-
281 {
\n-
282 DUNE_UNUSED_PARAMETER(t);
\n-
283 }
\n-
\n-
284
\n-
\n-
291 constexpr bool isVertex() const {
\n-
292 return dim_==0;
\n-
293 }
\n-
\n-
294
\n-
\n-
296 constexpr bool isLine() const {
\n-
297 return dim_==1;
\n-
298 }
\n-
\n-
299
\n-
\n-
301 constexpr bool isTriangle() const {
\n-
302 return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0001;
\n-
303 }
\n-
\n-
304
\n-
\n-
306 constexpr bool isQuadrilateral() const {
\n-
307 return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0011;
\n-
308 }
\n-
\n-
309
\n-
\n-
311 constexpr bool isTetrahedron() const {
\n-
312 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0001;
\n-
313 }
\n-
\n-
314
\n+
258 protected:
\n+\n+
260 typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator;
\n+
261 constexpr static int nKuhnSimplices = factorial(dimension);
\n+
262
\n+\n+
264
\n+\n+\n+\n+
268 };
\n+
\n+
269
\n+
270 template<int dimension, class CoordType>
\n+
\n+\n+
272 RefinementIteratorSpecial(int nIntervals, bool end)
\n+
273 : nIntervals_(nIntervals), kuhnIndex(0),
\n+
274 backend(BackendRefinement::eBegin(nIntervals_)),
\n+
275 backendEnd(BackendRefinement::eEnd(nIntervals_))
\n+
276 {
\n+
277 if (end)
\n+
278 kuhnIndex = nKuhnSimplices;
\n+
279 }
\n+
\n+
280 template<int dimension, class CoordType>
\n+
\n+\n+\n+
283 : nIntervals_(other.nIntervals_), kuhnIndex(other.kuhnIndex),
\n+
284 backend(other.backend),
\n+
285 backendEnd(other.backendEnd)
\n+
286 {}
\n+
\n+
287
\n+
288 template<int dimension, class CoordType>
\n+
289 void
\n+
\n+\n+\n+
292 {
\n+
293 ++backend;
\n+
294 if (backend == backendEnd)
\n+
295 {
\n+
296 backend = BackendRefinement::eBegin(nIntervals_);
\n+
297 ++kuhnIndex;
\n+
298 }
\n+
299 }
\n+
\n+
300
\n+
301 template<int dimension, class CoordType>
\n+\n+
\n+\n+
304 vertexIndices() const
\n+
305 {
\n+
306 IndexVector indices = backend.vertexIndices();
\n+
307
\n+
308 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);
\n+
309 indices += base;
\n+
310
\n+
311 return indices;
\n+
312 }
\n+
\n+
313
\n+
314 template<int dimension, class CoordType>
\n+
315 int
\n
\n-
316 constexpr bool isPyramid() const {
\n-
317 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0011;
\n-
318 }
\n-
\n-
319
\n-
\n-
321 constexpr bool isPrism() const {
\n-
322 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0101;
\n-
323 }
\n-
\n-
324
\n-
\n-
326 constexpr bool isHexahedron() const {
\n-
327 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0111;
\n-
328 }
\n+\n+
317 index() const
\n+
318 {
\n+
319 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index();
\n+
320 }
\n+
\n+
321
\n+
322 template<int dimension, class CoordType>
\n+\n+
\n+\n+
325 coords() const
\n+
326 {
\n+
327 return global(backend.coords());
\n+
328 }
\n
\n
329
\n-
\n-
331 constexpr bool isSimplex() const {
\n-
332 return ! none_ && (topologyId_ | 1) == 1;
\n-
333 }
\n-
\n-
334
\n-
\n-
336 constexpr bool isCube() const {
\n-
337 return ! none_ && ((topologyId_ ^ ((1 << dim_)-1)) >> 1 == 0);
\n-
338 }
\n-
\n+
330 template<int dimension, class CoordType>
\n+\n+
\n+\n+
333 {
\n+
334 const typename BackendIterator::Geometry &bgeo =
\n+
335 backend.geometry();
\n+
336 std::vector<CoordVector> corners(dimension+1);
\n+
337 for(int i = 0; i <= dimension; ++i)
\n+
338 corners[i] = global(bgeo.corner(i));
\n
339
\n-
\n-
341 constexpr bool isConical() const {
\n-
342 return ! none_ && (((topologyId_ & ~1) & (1u << (dim_-1))) == 0);
\n-
343 }
\n-
\n-
344
\n-
\n-
349 constexpr bool isConical(const int& step) const {
\n-
350 return ! none_ && (((topologyId_ & ~1) & (1u << step)) == 0);
\n-
351 }
\n-
\n-
352
\n-
\n-
354 constexpr bool isPrismatic() const {
\n-
355 return ! none_ && (( (topologyId_ | 1) & (1u << (dim_-1))) != 0);
\n-
356 }
\n-
\n-
357
\n-
\n-
362 constexpr bool isPrismatic(const int& step) const {
\n-
363 return ! none_ && (( (topologyId_ | 1) & (1u << step)) != 0);
\n-
364 }
\n-
\n-
365
\n-
\n-
367 constexpr bool isNone() const {
\n-
368 return none_;
\n-
369 }
\n-
\n-
370
\n-
\n-
372 constexpr unsigned int dim() const {
\n-
373 return dim_;
\n-
374 }
\n-
\n-
375
\n-
\n-
377 constexpr unsigned int id() const {
\n-
378 return topologyId_;
\n-
379 }
\n-
\n-
380
\n-
\n-
388 constexpr bool operator==(const GeometryType& other) const {
\n-
389 return ( ( none_ == other.none_ )
\n-
390 && ( ( none_ == true )
\n-
391 || ( ( dim_ == other.dim_ )
\n-
392 && ( (topologyId_ >> 1) == (other.topologyId_ >> 1) )
\n-
393 )
\n-
394 )
\n-
395 );
\n-
396 }
\n-
\n-
397
\n-
\n-
399 constexpr bool operator!=(const GeometryType& other) const {
\n-
400 return ! ((*this)==other);
\n-
401 }
\n-
\n-
402
\n-
\n-
404 constexpr bool operator < (const GeometryType& other) const {
\n-
405 return ( ( none_ < other.none_ )
\n-
406 || ( !( other.none_ < none_ )
\n-
407 && ( ( dim_ < other.dim_ )
\n-
408 || ( (other.dim_ == dim_)
\n-
409 && ((topologyId_ >> 1) < (other.topologyId_ >> 1) )
\n-
410 )
\n-
411 )
\n-
412 )
\n-
413 );
\n-
414 }
\n-
\n-
415
\n-
418 };
\n-
\n-
419
\n-
\n-
421 inline std::ostream& operator<< (std::ostream& s, const GeometryType& a)
\n-
422 {
\n-
423 if (a.isSimplex())
\n-
424 {
\n-
425 s << "(simplex, " << a.dim() << ")";
\n-
426 return s;
\n-
427 }
\n-
428 if (a.isCube())
\n-
429 {
\n-
430 s << "(cube, " << a.dim() << ")";
\n-
431 return s;
\n-
432 }
\n-
433 if (a.isPyramid())
\n-
434 {
\n-
435 s << "(pyramid, 3)";
\n-
436 return s;
\n-
437 }
\n-
438 if (a.isPrism())
\n-
439 {
\n-
440 s << "(prism, 3)";
\n-
441 return s;
\n-
442 }
\n-
443 if (a.isNone())
\n-
444 {
\n-
445 s << "(none, " << a.dim() << ")";
\n-
446 return s;
\n-
447 }
\n-
448 s << "(other [" << a.id() << "], " << a.dim() << ")";
\n-
449 return s;
\n-
450 }
\n-
\n-
451
\n-
452
\n-
454
\n-
\n-
458 namespace GeometryTypes {
\n-
459
\n-
461
\n-
464 inline constexpr GeometryType simplex(unsigned int dim)
\n-
465 {
\n-
466 return GeometryType(0,dim,false);
\n-
467 }
\n-
468
\n-
470
\n-
473 inline constexpr GeometryType cube(unsigned int dim)
\n-
474 {
\n-
475 return GeometryType(((dim>1) ? ((1 << dim) - 1) : 0),dim,false);
\n-
476 }
\n-
477
\n-
479
\n-
482 inline constexpr GeometryType none(unsigned int dim)
\n-
483 {
\n-
484 return GeometryType(0,dim,true);
\n-
485 }
\n-
486
\n-
488 inline constexpr GeometryType conicalExtension(const GeometryType& gt)
\n-
489 {
\n-
490 return GeometryType(gt.id(), gt.dim()+1, gt.isNone());
\n-
491 }
\n-
492
\n-
494 inline constexpr GeometryType prismaticExtension(const GeometryType& gt)
\n-
495 {
\n-
496 return GeometryType(gt.id() | ((1 << gt.dim())), gt.dim()+1, gt.isNone());
\n-
497 }
\n-
498
\n-
499#ifndef __cpp_inline_variables
\n-
500 namespace {
\n-
501#endif
\n-
502
\n-
504
\n-
507 DUNE_INLINE_VARIABLE constexpr GeometryType vertex = GeometryType(0,0,false);
\n-
508
\n-
510
\n-
513 DUNE_INLINE_VARIABLE constexpr GeometryType line = GeometryType(0,1,false);
\n-
514
\n-
516
\n-
519 DUNE_INLINE_VARIABLE constexpr GeometryType triangle = simplex(2);
\n-
520
\n-
522
\n-
525 DUNE_INLINE_VARIABLE constexpr GeometryType quadrilateral = cube(2);
\n-
526
\n-
528
\n-
531 DUNE_INLINE_VARIABLE constexpr GeometryType tetrahedron = simplex(3);
\n-
532
\n-
534
\n-
537 DUNE_INLINE_VARIABLE constexpr GeometryType pyramid = GeometryType(0b0011,3,false);
\n-
538
\n-
540
\n-
543 DUNE_INLINE_VARIABLE constexpr GeometryType prism = GeometryType(0b0101,3,false);
\n-
544
\n-
546
\n-
549 DUNE_INLINE_VARIABLE constexpr GeometryType hexahedron = cube(3);
\n-
550
\n-
551#ifndef __cpp_inline_variables
\n-
552 }
\n-
553#endif
\n-
554
\n-
555 }
\n-
\n-
556
\n-
557 namespace Impl
\n-
558 {
\n-
559
\n-
561 inline constexpr GeometryType getBase(const GeometryType& gt) {
\n-
562 return GeometryType(gt.id() & ((1 << (gt.dim()-1))-1), gt.dim()-1, gt.isNone());
\n-
563 }
\n-
564
\n-
565
\n-
566 // IfGeometryType
\n-
567 // ----------
\n-
568
\n-
569 template< template< GeometryType::Id > class Operation, int dim, GeometryType::Id geometryId = GeometryTypes::vertex >
\n-
570 struct IfGeometryType
\n-
571 {
\n-
572 static constexpr GeometryType geometry = geometryId;
\n-
573 template< class... Args >
\n-
574 static auto apply ( GeometryType gt, Args &&... args )
\n-
575 {
\n-
576 GeometryType lowerGeometry(gt.id() >>1 , gt.dim()-1, gt.isNone());
\n-
577
\n-
578 if( gt.id() & 1 )
\n-
579 return IfGeometryType< Operation, dim-1, GeometryTypes::prismaticExtension(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... );
\n-
580 else
\n-
581 return IfGeometryType< Operation, dim-1, GeometryTypes::conicalExtension(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... );
\n-
582 }
\n-
583 };
\n-
584
\n-
585 template< template< GeometryType::Id > class Operation, GeometryType::Id geometryId >
\n-
586 struct IfGeometryType< Operation, 0, geometryId>
\n-
587 {
\n-
588 template< class... Args >
\n-
589 static auto apply ([[maybe_unused]] GeometryType gt, Args &&... args )
\n-
590 {
\n-
591 return Operation< geometryId >::apply( std::forward< Args >( args )... );
\n-
592 }
\n-
593 };
\n-
594 } // namespace Impl
\n-
595} // namespace Dune
\n-
596
\n-
597#endif // DUNE_GEOMETRY_TYPE_HH
\n-\n+
340 return Geometry(bgeo.type(), corners);
\n+
341 }
\n+
\n+
342
\n+
343 template<int dimension, class CoordType>
\n+\n+\n+
346 global(const CoordVector &local) const
\n+
347 {
\n+
348 return referenceToKuhn(local, getPermutation<dimension>(kuhnIndex));
\n+
349 }
\n+
350
\n+
351 // common
\n+
352 template<int dimension, class CoordType>
\n+
353 template<int codimension>
\n+
\n+
354 class RefinementImp<dimension, CoordType>::Codim<codimension>::SubEntityIterator
\n+
355 : public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
\n+
356 public RefinementIteratorSpecial<dimension, CoordType, codimension>
\n+
357 {
\n+
358 public:
\n+\n+
360 typedef SubEntityIterator This;
\n+
361
\n+
362 SubEntityIterator(int nIntervals, bool end = false);
\n+
363
\n+
364 bool equals(const This &other) const;
\n+
365 protected:
\n+
366 using RefinementIteratorSpecial<dimension, CoordType, codimension>::kuhnIndex;
\n+
367 using RefinementIteratorSpecial<dimension, CoordType, codimension>::backend;
\n+
368 };
\n+
\n+
369
\n+
370#ifndef DOXYGEN
\n+
371 template<int dimension, class CoordType>
\n+
372 template<int codimension>
\n+\n+
374 SubEntityIterator(int nIntervals, bool end)
\n+
375 : RefinementIteratorSpecial<dimension, CoordType, codimension>(nIntervals, end)
\n+
376 {}
\n+
377
\n+
378 template<int dimension, class CoordType>
\n+
379 template<int codimension>
\n+
380 bool
\n+\n+
382 equals(const This &other) const
\n+
383 { return kuhnIndex == other.kuhnIndex && backend == other.backend; }
\n+
384
\n+
385#endif // DOXYGEN
\n+
386
\n+
387 } // namespace HCubeTriangulation
\n+
\n+
388 } // namespace RefinementImp
\n+
389
\n+
390 namespace RefinementImp
\n+
391 {
\n+
392 // ///////////////////////
\n+
393 //
\n+
394 // The refinement traits
\n+
395 //
\n+
396
\n+
397#ifndef DOXYGEN
\n+
398 template<unsigned topologyId, class CoordType, unsigned coerceToId,
\n+
399 int dim>
\n+
400 struct Traits<
\n+
401 topologyId, CoordType, coerceToId, dim,
\n+
402 typename std::enable_if<
\n+
403 (dim >= 2 &&
\n+
404 (GeometryTypes::cube(dim).id() >> 1) ==
\n+
405 (topologyId >> 1) &&
\n+
406 (GeometryTypes::simplex(dim).id() >> 1) ==
\n+
407 (coerceToId >> 1)
\n+
408 )>::type
\n+
409 >
\n+
410 {
\n+
411 typedef HCubeTriangulation::RefinementImp<dim, CoordType> Imp;
\n+
412 };
\n+
413#endif
\n+
414
\n+
415 } // namespace RefinementImp
\n+
416} // namespace Dune
\n+
417
\n+
418#endif // DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
\n+\n+
A unique label for each type of element that can occur in a grid.
\n+
This file contains the parts independent of a particular Refinement implementation.
\n+
This file contains the Refinement implementation for simplices (triangles, tetrahedrons....
\n
Definition affinegeometry.hh:21
\n-
std::ostream & operator<<(std::ostream &s, const GeometryType &a)
Prints the type to an output stream.
Definition type.hh:421
\n-
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
\n-
constexpr GeometryType(unsigned int topologyId, unsigned int dim)
Constructor, using the topologyId (integer) and the dimension.
Definition type.hh:263
\n-
constexpr bool operator<(const GeometryType &other) const
less-than operation for use with maps
Definition type.hh:404
\n-
constexpr bool operator!=(const GeometryType &other) const
Check for inequality.
Definition type.hh:399
\n-
constexpr bool isPyramid() const
Return true if entity is a pyramid.
Definition type.hh:316
\n-
constexpr bool isTetrahedron() const
Return true if entity is a tetrahedron.
Definition type.hh:311
\n-
constexpr bool isPrism() const
Return true if entity is a prism.
Definition type.hh:321
\n-
constexpr bool isVertex() const
Return true if entity is a vertex.
Definition type.hh:291
\n-
constexpr bool operator==(const GeometryType &other) const
Check for equality. This method knows that in dimension 0 and 1 all BasicTypes are equal.
Definition type.hh:388
\n-
constexpr Id toId() const
Create an Id representation of this GeometryType.
Definition type.hh:222
\n-
constexpr bool isConical(const int &step) const
Return true if entity was constructed with a conical product in the chosen step.
Definition type.hh:349
\n-
constexpr unsigned int dim() const
Return dimension of the type.
Definition type.hh:372
\n-
constexpr bool isPrismatic(const int &step) const
Return true if entity was constructed with a prismatic product in the chosen step.
Definition type.hh:362
\n-
constexpr bool isTriangle() const
Return true if entity is a triangle.
Definition type.hh:301
\n-
GeometryType(TopologyType t)
Constructor from static TopologyType class.
Definition type.hh:279
\n-
constexpr GeometryType(unsigned int topologyId, unsigned int dim, bool isNone)
Constructor, using the topologyId (integer), the dimension and a flag for type none.
Definition type.hh:254
\n-
BasicType
Each entity can be tagged by one of these basic types plus its space dimension.
Definition type.hh:132
\n-
@ cube
Cube element in any nonnegative dimension.
Definition type.hh:134
\n-
@ simplex
Simplicial element in any nonnegative dimension.
Definition type.hh:133
\n-
@ pyramid
Four sided pyramid in three dimensions.
Definition type.hh:135
\n-
@ extended
Other, more general topology, representable as topologyId.
Definition type.hh:137
\n-
@ none
Even more general topology, cannot be specified by a topologyId. Two GeometryTypes with 'none' type a...
Definition type.hh:138
\n-
@ prism
Prism element in three dimensions.
Definition type.hh:136
\n-
constexpr GeometryType(Id id)
Reconstruct a Geometry type from a GeometryType::Id.
Definition type.hh:234
\n-
constexpr bool isCube() const
Return true if entity is a cube of any dimension.
Definition type.hh:336
\n-
constexpr GeometryType()
Default constructor, not initializing anything.
Definition type.hh:244
\n-
constexpr bool isConical() const
Return true if entity was constructed with a conical product in the last step.
Definition type.hh:341
\n-
constexpr bool isLine() const
Return true if entity is a line segment.
Definition type.hh:296
\n-
constexpr bool isQuadrilateral() const
Return true if entity is a quadrilateral.
Definition type.hh:306
\n-
constexpr bool isPrismatic() const
Return true if entity was constructed with a prismatic product in the last step.
Definition type.hh:354
\n-
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
\n-
constexpr bool isNone() const
Return true if entity is a singular of any dimension.
Definition type.hh:367
\n-
constexpr bool isHexahedron() const
Return true if entity is a hexahedron.
Definition type.hh:326
\n-
constexpr bool isSimplex() const
Return true if entity is a simplex of any dimension.
Definition type.hh:331
\n-
IdType Id
An integral id representing a GeometryType.
Definition type.hh:193
\n+
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:336
\n+
FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from the reference simplex to some Kuhn simplex.
Definition simplex.cc:394
\n+
Static tag representing a codimension.
Definition dimension.hh:24
\n+
generic geometry implementation based on corner coordinates
Definition multilineargeometry.hh:181
\n+\n+\n+
static VertexIterator vEnd(int nIntervals)
Definition hcubetriangulation.cc:121
\n+
static VertexIterator vBegin(int nIntervals)
Definition hcubetriangulation.cc:113
\n+
static int nElements(int nIntervals)
Definition hcubetriangulation.cc:129
\n+
FieldVector< CoordType, dimension > CoordVector
Definition hcubetriangulation.cc:76
\n+
CoordType ctype
Definition hcubetriangulation.cc:71
\n+
Codim< 0 >::SubEntityIterator ElementIterator
Definition hcubetriangulation.cc:77
\n+
FieldVector< int, dimension+1 > IndexVector
Definition hcubetriangulation.cc:78
\n+
static ElementIterator eBegin(int nIntervals)
Definition hcubetriangulation.cc:137
\n+
static ElementIterator eEnd(int nIntervals)
Definition hcubetriangulation.cc:145
\n+
static constexpr int dimension
Definition hcubetriangulation.cc:69
\n+
Codim< dimension >::SubEntityIterator VertexIterator
Definition hcubetriangulation.cc:75
\n+
static int nVertices(int nIntervals)
Definition hcubetriangulation.cc:105
\n+\n+
Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition hcubetriangulation.cc:99
\n+\n+\n+\n+
Refinement::template Codim< dimension >::Geometry Geometry
Definition hcubetriangulation.cc:162
\n+
BackendRefinement::template Codim< dimension >::SubEntityIterator BackendIterator
Definition hcubetriangulation.cc:175
\n+
Refinement::BackendRefinement BackendRefinement
Definition hcubetriangulation.cc:174
\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:160
\n+\n+
BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator
Definition hcubetriangulation.cc:260
\n+\n+
Refinement::CoordVector CoordVector
Definition hcubetriangulation.cc:241
\n+\n+\n+
Refinement::BackendRefinement BackendRefinement
Definition hcubetriangulation.cc:259
\n+\n+
Refinement::IndexVector IndexVector
Definition hcubetriangulation.cc:240
\n+
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:239
\n+
Refinement::template Codim< 0 >::Geometry Geometry
Definition hcubetriangulation.cc:242
\n+\n+\n+
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:359
\n+
SubEntityIterator This
Definition hcubetriangulation.cc:360
\n+\n
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,564 +1,588 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-type.hh\n+ * _\br_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+hcubetriangulation.cc\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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_TYPE_HH\n-6#define DUNE_GEOMETRY_TYPE_HH\n+5#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC\n+_\b6#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC\n 7\n-12#include \n-13#include \n-14\n-15#include \n-16#include \n-17\n-18#include \n-19#include \n-20#include \n-21#include \n-22\n-23namespace _\bD_\bu_\bn_\be\n-24{\n-25\n-26 namespace Impl\n-27 {\n-28\n-29 enum TopologyConstruction { pyramidConstruction = 0, prismConstruction = 1\n-};\n-30\n-31 // Dynamic Topology Properties\n-32 // ---------------------------\n-33\n-42 inline static unsigned int numTopologies ( int dim ) noexcept\n-43 {\n-44 return (1u << dim);\n-45 }\n-46\n-58 inline bool static isPyramid ( unsigned int topologyId, int dim, int codim =\n-0 ) noexcept\n-59 {\n-60 assert( (dim > 0) && (topologyId < numTopologies( dim )) );\n-61 assert( (0 <= codim) && (codim < dim) );\n-62 return (((topologyId & ~1) & (1u << (dim-codim-1))) == 0);\n-63 }\n+29#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh>\n+30#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+31\n+32#include \"_\bb_\ba_\bs_\be_\b._\bc_\bc\"\n+33#include \"_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\"\n+34\n+35namespace _\bD_\bu_\bn_\be\n+36{\n+37 namespace RefinementImp\n+38 {\n+_\b4_\b6 namespace HCubeTriangulation {\n+47\n+48 // ////////////\n+49 //\n+50 // Utilities\n+51 //\n+52\n+53 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn;\n+54 using _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn;\n+55\n+56 // ////////////////////////////////////\n+57 //\n+58 // Refine a hypercube with simplices\n+59 //\n+60\n+61 // forward declaration of the iterator base\n+62 template\n+_\b6_\b3 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl;\n 64\n-76 inline static bool isPrism ( unsigned int topologyId, int dim, int codim = 0\n-) noexcept\n-77 {\n-78 assert( (dim > 0) && (topologyId < numTopologies( dim )) );\n-79 assert( (0 <= codim) && (codim < dim) );\n-80 return (( (topologyId | 1) & (1u << (dim-codim-1))) != 0);\n-81 }\n-82\n-90 inline static unsigned int baseTopologyId ( unsigned int topologyId, int\n-dim, int codim = 1 ) noexcept\n-91 {\n-92 assert( (dim >= 0) && (topologyId < numTopologies( dim )) );\n-93 assert( (0 <= codim) && (codim <= dim) );\n-94 return topologyId & ((1u << (dim-codim)) - 1);\n-95 }\n-96\n-97 } // namespace Impl\n-98\n-99// the Topology classes are deprecated and will be removed for the 2.8.\n-100// Temporarily a header 'deprecated_topology.hh' is provided which will be\n-removed after the 2.9 release.\n-101#if __GNUC__ >= 7\n-102# pragma GCC diagnostic push\n-103# pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n-104#endif\n-105#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bd_\be_\bp_\br_\be_\bc_\ba_\bt_\be_\bd_\b__\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\b._\bh_\bh>\n-106#if __GNUC__ >= 7\n-107# pragma GCC diagnostic pop\n-108#endif\n+65 template\n+_\b6_\b6 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+67 {\n+68 public:\n+_\b6_\b9 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = dimension_;\n+70\n+_\b7_\b1 typedef CoordType _\bc_\bt_\by_\bp_\be;\n+72\n+73 template\n+74 struct _\bC_\bo_\bd_\bi_\bm;\n+_\b7_\b5 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b7_\b6 typedef FieldVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b7_\b7 typedef typename _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b7_\b8 typedef FieldVector _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+79\n+80 static int _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals);\n+81 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals);\n+82 static _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bv_\bE_\bn_\bd(int nIntervals);\n+83\n+84 static int _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals);\n+85 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bB_\be_\bg_\bi_\bn(int nIntervals);\n+_\b8_\b6 static _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bE_\bn_\bd(int nIntervals);\n+87 private:\n+88 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, 0>;\n+89 friend class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>;\n+90\n+91 typedef _\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+92 };\n+93\n+94 template\n+95 template\n+_\b9_\b6 struct _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm\n+97 {\n+98 class SubEntityIterator;\n+_\b9_\b9 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+_\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+100 };\n+101\n+102 template\n+103 int\n+_\b1_\b0_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+105_\b _\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs(int nIntervals)\n+106 {\n+107 return BackendRefinement::nVertices(nIntervals) * factorial(int\n+(dimension));\n+108 }\n 109\n-110 // GeometryType\n-111 // -------------\n-112\n-_\b1_\b2_\b5 class _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-126 {\n-127 public:\n-128\n-_\b1_\b3_\b1 enum\n-132 _\bB_\ba_\bs_\bi_\bc_\bT_\by_\bp_\be {\n-_\b1_\b3_\b3 _\bs_\bi_\bm_\bp_\bl_\be_\bx,\n-_\b1_\b3_\b4 _\bc_\bu_\bb_\be,\n-_\b1_\b3_\b5 _\bp_\by_\br_\ba_\bm_\bi_\bd,\n-_\b1_\b3_\b6 _\bp_\br_\bi_\bs_\bm,\n-_\b1_\b3_\b7 _\be_\bx_\bt_\be_\bn_\bd_\be_\bd,\n-138 _\bn_\bo_\bn_\be\n-_\b1_\b3_\b9 };\n-140\n-141 private:\n-142\n-144 unsigned char dim_;\n-145\n-147 bool none_;\n-148\n-150 unsigned int topologyId_;\n-151\n-152 // Internal type used for the Id. The exact nature of this type is kept\n-153 // as an implementation detail on purpose. We use a scoped enum here\n-because scoped enums\n-154 // can be used as template parameters, but are not implicitly converted to\n-other integral\n-155 // types by the compiler. That way, we avoid unfortunate implicit\n-conversion chains, e.g.\n-156 // people trying to work with GlobalGeometryTypeIndex, but forgetting to\n-actually call\n-157 // GlobalGeometryTypeIndex::index(gt) and just using gt directly.\n-158 enum class IdType : std::uint64_t\n-159 {};\n-160\n-161 public:\n-162\n-_\b1_\b9_\b3 using Id = IdType;\n-194\n-_\b2_\b0_\b2 constexpr operator _\bI_\bd() const\n+110 template\n+111 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b1_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+113_\b _\bv_\bB_\be_\bg_\bi_\bn(int nIntervals)\n+114 {\n+115 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n+116 }\n+117\n+118 template\n+119 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b2_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+121_\b _\bv_\bE_\bn_\bd(int nIntervals)\n+122 {\n+123 return _\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n+124 }\n+125\n+126 template\n+127 int\n+_\b1_\b2_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+129_\b _\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(int nIntervals)\n+130 {\n+131 return BackendRefinement::nElements(nIntervals) * factorial(int\n+(dimension));\n+132 }\n+133\n+134 template\n+135 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b3_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+137_\b _\be_\bB_\be_\bg_\bi_\bn(int nIntervals)\n+138 {\n+139 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals);\n+140 }\n+141\n+142 template\n+143 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\b1_\b4_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:\n+145_\b _\be_\bE_\bn_\bd(int nIntervals)\n+146 {\n+147 return _\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(nIntervals, true);\n+148 }\n+149\n+150 // //////////////\n+151 //\n+152 // The iterator\n+153 //\n+154\n+155 // vertices\n+156 template\n+_\b1_\b5_\b7 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+158 {\n+159 public:\n+_\b1_\b6_\b0 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b1_\b6_\b1 typedef typename Refinement::CoordVector _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b1_\b6_\b2 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+163\n+164 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end = false);\n+165\n+166 void increment();\n+167\n+168 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+169\n+170 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry() const;\n+171\n+172 int index() const;\n+173 protected:\n+_\b1_\b7_\b4 typedef typename Refinement::BackendRefinement _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b1_\b7_\b5 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b1_\b7_\b6 constexpr static int nKuhnSimplices = factorial(int(dimension));\n+177\n+_\b1_\b7_\b8 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n+179\n+_\b1_\b8_\b0 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n+_\b1_\b8_\b1 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n+_\b1_\b8_\b2 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n+183 };\n+184\n+185 template\n+_\b1_\b8_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+187_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n+188 : nIntervals_(nIntervals), kuhnIndex(0),\n+189 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vBegin(nIntervals_)),\n+190 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::vEnd(nIntervals_))\n+191 {\n+192 if (end)\n+193 kuhnIndex = nKuhnSimplices;\n+194 }\n+195\n+196 template\n+197 void\n+_\b1_\b9_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+199_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+200 {\n+201 ++backend;\n+202 if (backend == backendEnd)\n 203 {\n-204 // recreate the exact storage layout that this class is using, making\n-conversion\n-205 // extremely cheap\n-206 std::uint64_t id = dim_ | (std::uint64_t(none_) << 8) | (std::uint64_t\n-(topologyId_) << 32);\n-207 return static_cast(_\bi_\bd);\n-208 }\n-209\n-_\b2_\b2_\b2 constexpr Id _\bt_\bo_\bI_\bd() const\n-223 {\n-224 return static_cast(*this);\n-225 }\n-226\n-_\b2_\b3_\b4 constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(Id id)\n-235 : dim_(static_cast(_\bi_\bd) & 0xFF)\n-236 , none_(static_cast(_\bi_\bd) & 0x100)\n-237 , topologyId_(static_cast(_\bi_\bd) >> 32)\n-238 {}\n-239\n-242\n-_\b2_\b4_\b4 constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be ()\n-245 : dim_(0), none_(true), topologyId_(0)\n-246 {}\n-247\n-_\b2_\b5_\b4 constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(unsigned int topologyId, unsigned int _\bd_\bi_\bm, bool\n-_\bi_\bs_\bN_\bo_\bn_\be)\n-255 : dim_(_\bd_\bi_\bm), none_(_\bi_\bs_\bN_\bo_\bn_\be), topologyId_(topologyId)\n-256 {}\n+204 backend = BackendRefinement::vBegin(nIntervals_);\n+205 ++kuhnIndex;\n+206 }\n+207 }\n+208\n+209 template\n+210 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b2_\b1_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+212_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+213 {\n+214 return referenceToKuhn(backend.coords(), getPermutation\n+(kuhnIndex));\n+215 }\n+216\n+217 template\n+218 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+_\b2_\b1_\b9 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by ()\n+const\n+220 {\n+221 std::vector corners(1);\n+222 corners[0] = referenceToKuhn(backend.coords(), getPermutation\n+(kuhnIndex));\n+223 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(GeometryTypes::vertex, corners);\n+224 }\n+225\n+226 template\n+227 int\n+_\b2_\b2_\b8 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+229_\b _\bi_\bn_\bd_\be_\bx() const\n+230 {\n+231 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index\n+();\n+232 }\n+233\n+234 // elements\n+235 template\n+_\b2_\b3_\b6 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+237 {\n+238 public:\n+_\b2_\b3_\b9 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b4_\b0 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br;\n+_\b2_\b4_\b1 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br;\n+_\b2_\b4_\b2 typedef typename Refinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by _\bG_\be_\bo_\bm_\be_\bt_\br_\by;\n+243\n+244 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals_, bool end = false);\n+245 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(const _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b> &other);\n+246\n+247 void increment();\n+248\n+249 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br vertexIndices() const;\n+250 int index() const;\n+251 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br coords() const;\n+252\n+253 _\bG_\be_\bo_\bm_\be_\bt_\br_\by geometry() const;\n+254\n+255 private:\n+256 _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br global(const _\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br &local) const;\n 257\n-_\b2_\b6_\b3 constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(unsigned int topologyId, unsigned int _\bd_\bi_\bm)\n-264 : dim_(_\bd_\bi_\bm), none_(false), topologyId_(topologyId)\n-265 {}\n-266\n-277 template>\n-_\b2_\b7_\b9 explicit _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(TopologyType t)\n-280 : dim_(TopologyType::dimension), none_(false), topologyId_(TopologyType::\n-_\bi_\bd)\n-281 {\n-282 DUNE_UNUSED_PARAMETER(t);\n-283 }\n-284\n-_\b2_\b9_\b1 constexpr bool _\bi_\bs_\bV_\be_\br_\bt_\be_\bx() const {\n-292 return dim_==0;\n-293 }\n-294\n-_\b2_\b9_\b6 constexpr bool _\bi_\bs_\bL_\bi_\bn_\be() const {\n-297 return dim_==1;\n+258 protected:\n+_\b2_\b5_\b9 typedef typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b2_\b6_\b0 typedef typename BackendRefinement::template _\bC_\bo_\bd_\bi_\bm_\b<_\b0_\b>_\b:_\b:_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b2_\b6_\b1 constexpr static int nKuhnSimplices = factorial(dimension);\n+262\n+_\b2_\b6_\b3 int _\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_;\n+264\n+_\b2_\b6_\b5 int _\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx;\n+_\b2_\b6_\b6 _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd;\n+_\b2_\b6_\b7 const _\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd;\n+268 };\n+269\n+270 template\n+_\b2_\b7_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+272_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(int nIntervals, bool end)\n+273 : nIntervals_(nIntervals), kuhnIndex(0),\n+274 backend(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eBegin(nIntervals_)),\n+275 backendEnd(_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt::eEnd(nIntervals_))\n+276 {\n+277 if (end)\n+278 kuhnIndex = nKuhnSimplices;\n+279 }\n+280 template\n+_\b2_\b8_\b1 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+282_\b _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(const _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b> &other)\n+283 : nIntervals_(other.nIntervals_), kuhnIndex(other.kuhnIndex),\n+284 backend(other.backend),\n+285 backendEnd(other.backendEnd)\n+286 {}\n+287\n+288 template\n+289 void\n+_\b2_\b9_\b0 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+291_\b _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+292 {\n+293 ++backend;\n+294 if (backend == backendEnd)\n+295 {\n+296 backend = BackendRefinement::eBegin(nIntervals_);\n+297 ++kuhnIndex;\n 298 }\n-299\n-_\b3_\b0_\b1 constexpr bool _\bi_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be() const {\n-302 return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0001;\n-303 }\n-304\n-_\b3_\b0_\b6 constexpr bool _\bi_\bs_\bQ_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl() const {\n-307 return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0011;\n-308 }\n-309\n-_\b3_\b1_\b1 constexpr bool _\bi_\bs_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn() const {\n-312 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0001;\n-313 }\n-314\n-_\b3_\b1_\b6 constexpr bool _\bi_\bs_\bP_\by_\br_\ba_\bm_\bi_\bd() const {\n-317 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0011;\n-318 }\n-319\n-_\b3_\b2_\b1 constexpr bool _\bi_\bs_\bP_\br_\bi_\bs_\bm() const {\n-322 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0101;\n-323 }\n-324\n-_\b3_\b2_\b6 constexpr bool _\bi_\bs_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn() const {\n-327 return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0111;\n+299 }\n+300\n+301 template\n+302 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+_\b3_\b0_\b3 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+304_\b _\bv_\be_\br_\bt_\be_\bx_\bI_\bn_\bd_\bi_\bc_\be_\bs() const\n+305 {\n+306 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br indices = backend.vertexIndices();\n+307\n+308 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);\n+309 indices += base;\n+310\n+311 return indices;\n+312 }\n+313\n+314 template\n+315 int\n+_\b3_\b1_\b6 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+317_\b _\bi_\bn_\bd_\be_\bx() const\n+318 {\n+319 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index\n+();\n+320 }\n+321\n+322 template\n+323 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+_\b3_\b2_\b4 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+325_\b _\bc_\bo_\bo_\br_\bd_\bs() const\n+326 {\n+327 return global(backend.coords());\n 328 }\n 329\n-_\b3_\b3_\b1 constexpr bool _\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx() const {\n-332 return ! none_ && (topologyId_ | 1) == 1;\n-333 }\n-334\n-_\b3_\b3_\b6 constexpr bool _\bi_\bs_\bC_\bu_\bb_\be() const {\n-337 return ! none_ && ((topologyId_ ^ ((1 << dim_)-1)) >> 1 == 0);\n-338 }\n+330 template\n+331 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+_\b3_\b3_\b2 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bg_\be_\bo_\bm_\be_\bt_\br_\by () const\n+333 {\n+334 const typename BackendIterator::Geometry &bgeo =\n+335 backend.geometry();\n+336 std::vector corners(dimension+1);\n+337 for(int i = 0; i <= dimension; ++i)\n+338 corners[i] = global(bgeo.corner(i));\n 339\n-_\b3_\b4_\b1 constexpr bool _\bi_\bs_\bC_\bo_\bn_\bi_\bc_\ba_\bl() const {\n-342 return ! none_ && (((topologyId_ & ~1) & (1u << (dim_-1))) == 0);\n-343 }\n-344\n-_\b3_\b4_\b9 constexpr bool _\bi_\bs_\bC_\bo_\bn_\bi_\bc_\ba_\bl(const int& step) const {\n-350 return ! none_ && (((topologyId_ & ~1) & (1u << step)) == 0);\n-351 }\n-352\n-_\b3_\b5_\b4 constexpr bool _\bi_\bs_\bP_\br_\bi_\bs_\bm_\ba_\bt_\bi_\bc() const {\n-355 return ! none_ && (( (topologyId_ | 1) & (1u << (dim_-1))) != 0);\n-356 }\n-357\n-_\b3_\b6_\b2 constexpr bool _\bi_\bs_\bP_\br_\bi_\bs_\bm_\ba_\bt_\bi_\bc(const int& step) const {\n-363 return ! none_ && (( (topologyId_ | 1) & (1u << step)) != 0);\n-364 }\n-365\n-_\b3_\b6_\b7 constexpr bool _\bi_\bs_\bN_\bo_\bn_\be() const {\n-368 return none_;\n-369 }\n-370\n-_\b3_\b7_\b2 constexpr unsigned int _\bd_\bi_\bm() const {\n-373 return dim_;\n-374 }\n-375\n-_\b3_\b7_\b7 constexpr unsigned int _\bi_\bd() const {\n-378 return topologyId_;\n-379 }\n-380\n-_\b3_\b8_\b8 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& other) const {\n-389 return ( ( none_ == other.none_ )\n-390 && ( ( none_ == true )\n-391 || ( ( dim_ == other.dim_ )\n-392 && ( (topologyId_ >> 1) == (other.topologyId_ >> 1) )\n-393 )\n-394 )\n-395 );\n-396 }\n-397\n-_\b3_\b9_\b9 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& other) const {\n-400 return ! ((*this)==other);\n-401 }\n-402\n-_\b4_\b0_\b4 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b<_\b (const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& other) const {\n-405 return ( ( none_ < other.none_ )\n-406 || ( !( other.none_ < none_ )\n-407 && ( ( dim_ < other.dim_ )\n-408 || ( (other.dim_ == dim_)\n-409 && ((topologyId_ >> 1) < (other.topologyId_ >> 1) )\n-410 )\n-411 )\n-412 )\n-413 );\n-414 }\n-415\n-418 };\n-419\n-_\b4_\b2_\b1 inline std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b (std::ostream& s, const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& a)\n-422 {\n-423 if (a._\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx())\n-424 {\n-425 s << \"(simplex, \" << a._\bd_\bi_\bm() << \")\";\n-426 return s;\n-427 }\n-428 if (a._\bi_\bs_\bC_\bu_\bb_\be())\n-429 {\n-430 s << \"(cube, \" << a._\bd_\bi_\bm() << \")\";\n-431 return s;\n-432 }\n-433 if (a._\bi_\bs_\bP_\by_\br_\ba_\bm_\bi_\bd())\n-434 {\n-435 s << \"(pyramid, 3)\";\n-436 return s;\n-437 }\n-438 if (a._\bi_\bs_\bP_\br_\bi_\bs_\bm())\n-439 {\n-440 s << \"(prism, 3)\";\n-441 return s;\n-442 }\n-443 if (a._\bi_\bs_\bN_\bo_\bn_\be())\n-444 {\n-445 s << \"(none, \" << a._\bd_\bi_\bm() << \")\";\n-446 return s;\n-447 }\n-448 s << \"(other [\" << a._\bi_\bd() << \"], \" << a._\bd_\bi_\bm() << \")\";\n-449 return s;\n-450 }\n-451\n-452\n-454\n-_\b4_\b5_\b8 namespace GeometryTypes {\n-459\n-461\n-464 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be simplex(unsigned int dim)\n-465 {\n-466 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(0,dim,false);\n-467 }\n-468\n-470\n-473 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be cube(unsigned int dim)\n-474 {\n-475 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(((dim>1) ? ((1 << dim) - 1) : 0),dim,false);\n-476 }\n-477\n-479\n-482 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be none(unsigned int dim)\n-483 {\n-484 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(0,dim,true);\n-485 }\n-486\n-488 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be conicalExtension(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt)\n-489 {\n-490 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(gt._\bi_\bd(), gt._\bd_\bi_\bm()+1, gt._\bi_\bs_\bN_\bo_\bn_\be());\n-491 }\n-492\n-494 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be prismaticExtension(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt)\n-495 {\n-496 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(gt._\bi_\bd() | ((1 << gt._\bd_\bi_\bm())), gt._\bd_\bi_\bm()+1, gt._\bi_\bs_\bN_\bo_\bn_\be());\n-497 }\n-498\n-499#ifndef __cpp_inline_variables\n-500 namespace {\n-501#endif\n-502\n-504\n-507 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be vertex = _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-(0,0,false);\n-508\n-510\n-513 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be line = _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(0,1,false);\n-514\n-516\n-519 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be triangle = simplex(2);\n-520\n-522\n-525 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be quadrilateral = cube(2);\n-526\n-528\n-531 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be tetrahedron = simplex(3);\n-532\n-534\n-537 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be pyramid = _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-(0b0011,3,false);\n-538\n-540\n-543 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be prism = _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-(0b0101,3,false);\n-544\n-546\n-549 DUNE_INLINE_VARIABLE constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be hexahedron = cube(3);\n-550\n-551#ifndef __cpp_inline_variables\n-552 }\n-553#endif\n-554\n-555 }\n-556\n-557 namespace Impl\n-558 {\n-559\n-561 inline constexpr _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be getBase(const _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be& gt) {\n-562 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be(gt._\bi_\bd() & ((1 << (gt._\bd_\bi_\bm()-1))-1), gt._\bd_\bi_\bm()-1,\n-gt._\bi_\bs_\bN_\bo_\bn_\be());\n-563 }\n-564\n-565\n-566 // IfGeometryType\n-567 // ----------\n-568\n-569 template< template< GeometryType::Id > class Operation, int dim,\n-_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bI_\bd geometryId = GeometryTypes::vertex >\n-570 struct IfGeometryType\n-571 {\n-572 static constexpr GeometryType geometry = geometryId;\n-573 template< class... Args >\n-574 static auto apply ( GeometryType gt, Args &&... args )\n-575 {\n-576 GeometryType lowerGeometry(gt.id() >>1 , gt.dim()-1, gt.isNone());\n-577\n-578 if( gt.id() & 1 )\n-579 return IfGeometryType< Operation, dim-1, GeometryTypes::prismaticExtension\n-(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... );\n-580 else\n-581 return IfGeometryType< Operation, dim-1, GeometryTypes::conicalExtension\n-(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... );\n-582 }\n-583 };\n-584\n-585 template< template< GeometryType::Id > class Operation, _\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bI_\bd\n-geometryId >\n-586 struct IfGeometryType< Operation, 0, geometryId>\n-587 {\n-588 template< class... Args >\n-589 static auto apply ([[maybe_unused]] GeometryType gt, Args &&... args )\n-590 {\n-591 return Operation< geometryId >::apply( std::forward< Args >( args )... );\n-592 }\n-593 };\n-594 } // namespace Impl\n-595} // namespace Dune\n-596\n-597#endif // DUNE_GEOMETRY_TYPE_HH\n-_\bd_\be_\bp_\br_\be_\bc_\ba_\bt_\be_\bd_\b__\bt_\bo_\bp_\bo_\bl_\bo_\bg_\by_\b._\bh_\bh\n+340 return _\bG_\be_\bo_\bm_\be_\bt_\br_\by(bgeo.type(), corners);\n+341 }\n+342\n+343 template\n+344 typename _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+345 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b>_\b:_\b:\n+346_\b _\bg_\bl_\bo_\bb_\ba_\bl(const CoordVector &local) const\n+347 {\n+348 return referenceToKuhn(local, getPermutation(kuhnIndex));\n+349 }\n+350\n+351 // common\n+352 template\n+353 template\n+_\b3_\b5_\b4 class _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp::_\bC_\bo_\bd_\bi_\bm::\n+SubEntityIterator\n+355 : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>,\n+356 public _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+357 {\n+358 public:\n+_\b3_\b5_\b9 typedef _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b> _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt;\n+_\b3_\b6_\b0 typedef SubEntityIterator _\bT_\bh_\bi_\bs;\n+361\n+_\b3_\b6_\b2 _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end = false);\n+363\n+_\b3_\b6_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &other) const;\n+365 protected:\n+366 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n+kuhnIndex;\n+367 using _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, CoordType, codimension>::\n+backend;\n+368 };\n+369\n+370#ifndef DOXYGEN\n+371 template\n+372 template\n+373 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n+374_\b _\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(int nIntervals, bool end)\n+375 : _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl(nIntervals,\n+end)\n+376 {}\n+377\n+378 template\n+379 template\n+380 bool\n+381 _\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b>_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:\n+382_\b _\be_\bq_\bu_\ba_\bl_\bs(const This &other) const\n+383 { return kuhnIndex == other.kuhnIndex && backend == other.backend; }\n+384\n+385#endif // DOXYGEN\n+386\n+387 } // namespace HCubeTriangulation\n+388 } // namespace RefinementImp\n+389\n+390 namespace RefinementImp\n+391 {\n+392 // ///////////////////////\n+393 //\n+394 // The refinement traits\n+395 //\n+396\n+397#ifndef DOXYGEN\n+398 template\n+400 struct Traits<\n+401 topologyId, CoordType, coerceToId, dim,\n+402 typename std::enable_if<\n+403 (dim >= 2 &&\n+404 (GeometryTypes::cube(dim).id() >> 1) ==\n+405 (topologyId >> 1) &&\n+406 (GeometryTypes::simplex(dim).id() >> 1) ==\n+407 (coerceToId >> 1)\n+408 )>::type\n+409 >\n+410 {\n+411 typedef HCubeTriangulation::RefinementImp Imp;\n+412 };\n+413#endif\n+414\n+415 } // namespace RefinementImp\n+416} // namespace Dune\n+417\n+418#endif // DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC\n+_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\be_\bl_\be_\bm_\be_\bn_\bt_\bs_\b._\bh_\bh\n+_\bt_\by_\bp_\be_\b._\bh_\bh\n+A unique label for each type of element that can occur in a grid.\n+_\bb_\ba_\bs_\be_\b._\bc_\bc\n+This file contains the parts independent of a particular Refinement\n+implementation.\n+_\bs_\bi_\bm_\bp_\bl_\be_\bx_\b._\bc_\bc\n+This file contains the Refinement implementation for simplices (triangles,\n+tetrahedrons....\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-std::ostream & operator<<(std::ostream &s, const GeometryType &a)\n-Prints the type to an output stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:421\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-Unique label for each type of entities that can occur in DUNE grids.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-constexpr GeometryType(unsigned int topologyId, unsigned int dim)\n-Constructor, using the topologyId (integer) and the dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:263\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<\n-constexpr bool operator<(const GeometryType &other) const\n-less-than operation for use with maps\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:404\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n-constexpr bool operator!=(const GeometryType &other) const\n-Check for inequality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:399\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\by_\br_\ba_\bm_\bi_\bd\n-constexpr bool isPyramid() const\n-Return true if entity is a pyramid.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:316\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bT_\be_\bt_\br_\ba_\bh_\be_\bd_\br_\bo_\bn\n-constexpr bool isTetrahedron() const\n-Return true if entity is a tetrahedron.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:311\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\br_\bi_\bs_\bm\n-constexpr bool isPrism() const\n-Return true if entity is a prism.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:321\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bV_\be_\br_\bt_\be_\bx\n-constexpr bool isVertex() const\n-Return true if entity is a vertex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:291\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-constexpr bool operator==(const GeometryType &other) const\n-Check for equality. This method knows that in dimension 0 and 1 all BasicTypes\n-are equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:388\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bt_\bo_\bI_\bd\n-constexpr Id toId() const\n-Create an Id representation of this GeometryType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:222\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bi_\bc_\ba_\bl\n-constexpr bool isConical(const int &step) const\n-Return true if entity was constructed with a conical product in the chosen\n-step.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:349\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bd_\bi_\bm\n-constexpr unsigned int dim() const\n-Return dimension of the type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:372\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\br_\bi_\bs_\bm_\ba_\bt_\bi_\bc\n-constexpr bool isPrismatic(const int &step) const\n-Return true if entity was constructed with a prismatic product in the chosen\n-step.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:362\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bl_\be\n-constexpr bool isTriangle() const\n-Return true if entity is a triangle.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:301\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-GeometryType(TopologyType t)\n-Constructor from static TopologyType class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:279\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-constexpr GeometryType(unsigned int topologyId, unsigned int dim, bool isNone)\n-Constructor, using the topologyId (integer), the dimension and a flag for type\n-none.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:254\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bB_\ba_\bs_\bi_\bc_\bT_\by_\bp_\be\n-BasicType\n-Each entity can be tagged by one of these basic types plus its space dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:132\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bc_\bu_\bb_\be\n-@ cube\n-Cube element in any nonnegative dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:134\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bs_\bi_\bm_\bp_\bl_\be_\bx\n-@ simplex\n-Simplicial element in any nonnegative dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:133\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bp_\by_\br_\ba_\bm_\bi_\bd\n-@ pyramid\n-Four sided pyramid in three dimensions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:135\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\be_\bx_\bt_\be_\bn_\bd_\be_\bd\n-@ extended\n-Other, more general topology, representable as topologyId.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:137\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bn_\bo_\bn_\be\n-@ none\n-Even more general topology, cannot be specified by a topologyId. Two\n-GeometryTypes with 'none' type a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:138\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bp_\br_\bi_\bs_\bm\n-@ prism\n-Prism element in three dimensions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:136\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-constexpr GeometryType(Id id)\n-Reconstruct a Geometry type from a GeometryType::Id.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:234\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bC_\bu_\bb_\be\n-constexpr bool isCube() const\n-Return true if entity is a cube of any dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:336\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n-constexpr GeometryType()\n-Default constructor, not initializing anything.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:244\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bi_\bc_\ba_\bl\n-constexpr bool isConical() const\n-Return true if entity was constructed with a conical product in the last step.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:341\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bL_\bi_\bn_\be\n-constexpr bool isLine() const\n-Return true if entity is a line segment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:296\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bQ_\bu_\ba_\bd_\br_\bi_\bl_\ba_\bt_\be_\br_\ba_\bl\n-constexpr bool isQuadrilateral() const\n-Return true if entity is a quadrilateral.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:306\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bP_\br_\bi_\bs_\bm_\ba_\bt_\bi_\bc\n-constexpr bool isPrismatic() const\n-Return true if entity was constructed with a prismatic product in the last\n-step.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:354\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n-constexpr unsigned int id() const\n-Return the topology id of the type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bN_\bo_\bn_\be\n-constexpr bool isNone() const\n-Return true if entity is a singular of any dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:367\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bH_\be_\bx_\ba_\bh_\be_\bd_\br_\bo_\bn\n-constexpr bool isHexahedron() const\n-Return true if entity is a hexahedron.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:326\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bs_\bS_\bi_\bm_\bp_\bl_\be_\bx\n-constexpr bool isSimplex() const\n-Return true if entity is a simplex of any dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:331\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bI_\bd\n-IdType Id\n-An integral id representing a GeometryType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:193\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bg_\be_\bt_\bP_\be_\br_\bm_\bu_\bt_\ba_\bt_\bi_\bo_\bn\n+FieldVector< int, n > getPermutation(int m)\n+Calculate permutation from it's index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:336\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\bo_\bK_\bu_\bh_\bn\n+FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType,\n+dimension > point, const FieldVector< int, dimension > &kuhn)\n+Map from the reference simplex to some Kuhn simplex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:394\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+Static tag representing a codimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dimension.hh:24\n+_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bL_\bi_\bn_\be_\ba_\br_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+generic geometry implementation based on corner coordinates\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn multilineargeometry.hh:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:63\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bE_\bn_\bd\n+static VertexIterator vEnd(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:121\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bv_\bB_\be_\bg_\bi_\bn\n+static VertexIterator vBegin(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:113\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+static int nElements(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:129\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< CoordType, dimension > CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:76\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bc_\bt_\by_\bp_\be\n+CoordType ctype\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:71\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< 0 >::SubEntityIterator ElementIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:77\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector< int, dimension+1 > IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bB_\be_\bg_\bi_\bn\n+static ElementIterator eBegin(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:137\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\be_\bE_\bn_\bd\n+static ElementIterator eEnd(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:145\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static constexpr int dimension\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:69\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bV_\be_\br_\bt_\be_\bx_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Codim< dimension >::SubEntityIterator VertexIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bn_\bV_\be_\br_\bt_\bi_\bc_\be_\bs\n+static int nVertices(int nIntervals)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:105\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:97\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension >\n+Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:99\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n+int nIntervals_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:178\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n+int kuhnIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:180\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:161\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Refinement::template Codim< dimension >::Geometry Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:162\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+BackendRefinement::template Codim< dimension >::SubEntityIterator\n+BackendIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:175\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+Refinement::BackendRefinement BackendRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:174\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n+BackendIterator backend\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:181\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:160\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n+const BackendIterator backendEnd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:182\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:260\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd\n+BackendIterator backend\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:266\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::CoordVector CoordVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:241\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bb_\ba_\bc_\bk_\be_\bn_\bd_\bE_\bn_\bd\n+const BackendIterator backendEnd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:267\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bk_\bu_\bh_\bn_\bI_\bn_\bd_\be_\bx\n+int kuhnIndex\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:265\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bB_\ba_\bc_\bk_\be_\bn_\bd_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+Refinement::BackendRefinement BackendRefinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:259\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\bs_\b_\n+int nIntervals_\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:263\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+Refinement::IndexVector IndexVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:240\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:239\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bS_\bp_\be_\bc_\bi_\ba_\bl_\b<_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,\n+_\bC_\bo_\bo_\br_\bd_\bT_\by_\bp_\be_\b,_\b _\b0_\b _\b>_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Refinement::template Codim< 0 >::Geometry Geometry\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:242\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other) const\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\bS_\bu_\bb_\bE_\bn_\bt_\bi_\bt_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+SubEntityIterator(int nIntervals, bool end=false)\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt\n+RefinementImp< dimension, CoordType > Refinement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:359\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bH_\bC_\bu_\bb_\be_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bC_\bo_\bd_\bi_\bm_\b<_\b _\bc_\bo_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b>_\b:_\b:\n+_\bT_\bh_\bi_\bs\n+SubEntityIterator This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hcubetriangulation.cc:360\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\b:_\b:_\bS_\bi_\bm_\bp_\bl_\be_\bx_\b:_\b:_\bR_\be_\bf_\bi_\bn_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simplex.cc:433\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00239.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00239.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: topologyfactory.hh File Reference\n+dune-geometry: affinegeometry.hh File Reference\n \n \n \n \n \n \n \n@@ -72,42 +72,43 @@\n
  • dune
  • geometry
  • \n
    \n \n
    \n \n-
    topologyfactory.hh File Reference
    \n+
    affinegeometry.hh File Reference
    \n
    \n
    \n-
    #include <cassert>
    \n-#include <array>
    \n-#include <map>
    \n-#include <memory>
    \n-#include <type_traits>
    \n-#include <vector>
    \n-#include <dune/geometry/type.hh>
    \n-#include <dune/geometry/typeindex.hh>
    \n+\n+

    An implementation of the Geometry interface for affine geometries. \n+More...

    \n+
    #include <cmath>
    \n+#include <dune/common/fmatrix.hh>
    \n+#include <dune/common/fvector.hh>
    \n+#include <dune/geometry/type.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n Classes

    struct  Dune::TopologyFactory< Traits >
     Provide a factory over the generic topologies. More...
     
    struct  Dune::TopologySingletonFactory< Factory >
     A wrapper for a TopologyFactory providing singleton storage. Same usage as TopologyFactory but with empty release method an internal storage. More...
    class  Dune::AffineGeometry< ct, mydim, cdim >
     Implementation of the Geometry interface for affine geometries. More...
     
    \n \n \n \n+\n+\n

    \n Namespaces

    namespace  Dune
     
    namespace  Dune::Geo
     
    \n-
    \n+

    Detailed Description

    \n+

    An implementation of the Geometry interface for affine geometries.

    \n+
    Author
    Martin Nolte
    \n+
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,29 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-topologyfactory.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n+affinegeometry.hh File Reference\n+An implementation of the Geometry interface for affine geometries. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\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-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n-\u00a0 Provide a factory over the generic topologies. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b<_\b _\bF_\ba_\bc_\bt_\bo_\br_\by_\b _\b>\n- A wrapper for a _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by providing singleton storage. Same\n-\u00a0 usage as _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by but with empty release method an internal\n- storage. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b<_\b _\bc_\bt_\b,_\b _\bm_\by_\bd_\bi_\bm_\b,_\b _\bc_\bd_\bi_\bm_\b _\b>\n+\u00a0 Implementation of the Geometry interface for affine geometries. _\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:_\bG_\be_\bo\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 implementation of the Geometry interface for affine geometries.\n+ Author\n+ Martin Nolte\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00239_source.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00239_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-geometry: topologyfactory.hh Source File\n+dune-geometry: affinegeometry.hh Source File\n \n \n \n \n \n \n \n@@ -74,194 +74,689 @@\n \n
    \n \n
    \n \n
    \n-
    topologyfactory.hh
    \n+
    affinegeometry.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_GEOMETRY_TOPOLOGYFACTORY_HH
    \n-
    6#define DUNE_GEOMETRY_TOPOLOGYFACTORY_HH
    \n+
    5#ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH
    \n+
    6#define DUNE_GEOMETRY_AFFINEGEOMETRY_HH
    \n
    7
    \n-
    8#include <cassert>
    \n-
    9
    \n-
    10#include <array>
    \n-
    11#include <map>
    \n-
    12#include <memory>
    \n-
    13#include <type_traits>
    \n-
    14#include <vector>
    \n-
    15
    \n-
    16#include <dune/geometry/type.hh>
    \n-\n-
    18
    \n-
    19namespace Dune
    \n-
    20{
    \n-
    21
    \n-
    40 template <class Traits>
    \n-
    \n-\n+
    13#include <cmath>
    \n+
    14
    \n+
    15#include <dune/common/fmatrix.hh>
    \n+
    16#include <dune/common/fvector.hh>
    \n+
    17
    \n+
    18#include <dune/geometry/type.hh>
    \n+
    19
    \n+
    \n+
    20namespace Dune
    \n+
    21{
    \n+
    22
    \n+
    23 // External Forward Declarations
    \n+
    24 // -----------------------------
    \n+
    25
    \n+
    \n+
    26 namespace Geo
    \n+
    27 {
    \n+
    28
    \n+
    29 template< typename Implementation >
    \n+
    30 class ReferenceElement;
    \n+
    31
    \n+
    32 template< class ctype, int dim >
    \n+\n+
    34
    \n+
    35 template< class ctype, int dim >
    \n+
    36 struct ReferenceElements;
    \n+
    37
    \n+
    38 }
    \n+
    \n+
    39
    \n+
    40
    \n+
    41 namespace Impl
    \n
    42 {
    \n-
    43 // extract types from Traits class
    \n-
    44 static const unsigned int dimension = Traits::dimension;
    \n-
    45 typedef typename Traits::Key Key;
    \n-
    46 typedef typename Traits::Object Object;
    \n-
    47 typedef typename Traits::Factory Factory;
    \n-
    48
    \n-
    \n-
    50 static Object *create ( const Dune::GeometryType &gt, const Key &key )
    \n-
    51 {
    \n-
    52 return Impl::toGeometryTypeIdConstant<dimension>(gt, [&](auto id) {
    \n-
    53 return create<decltype(id)::value>(key);
    \n-
    54 });
    \n-
    55 }
    \n-
    \n-
    57 template< GeometryType::Id geometryId >
    \n-
    \n-
    58 static Object *create ( const Key &key )
    \n-
    59 {
    \n-
    60 return Factory::template createObject< geometryId >( key );
    \n-
    61 }
    \n-
    \n+
    43
    \n+
    44 // FieldMatrixHelper
    \n+
    45 // -----------------
    \n+
    46
    \n+
    47 template< class ct >
    \n+
    48 struct FieldMatrixHelper
    \n+
    49 {
    \n+
    50 typedef ct ctype;
    \n+
    51
    \n+
    52 template< int m, int n >
    \n+
    53 static void Ax ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, n > &x, FieldVector< ctype, m > &ret )
    \n+
    54 {
    \n+
    55 for( int i = 0; i < m; ++i )
    \n+
    56 {
    \n+
    57 ret[ i ] = ctype( 0 );
    \n+
    58 for( int j = 0; j < n; ++j )
    \n+
    59 ret[ i ] += A[ i ][ j ] * x[ j ];
    \n+
    60 }
    \n+
    61 }
    \n
    62
    \n-
    64 template< class Topology >
    \n-
    \n-
    65 static Object *create ( const Key &key )
    \n-
    66 {
    \n-
    67 return Factory::template createObject< Topology >( key );
    \n-
    68 }
    \n-
    \n-
    69
    \n-
    71 static void release( Object *object ) { delete object; }
    \n-
    72 };
    \n-
    \n+
    63 template< int m, int n >
    \n+
    64 static void ATx ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, m > &x, FieldVector< ctype, n > &ret )
    \n+
    65 {
    \n+
    66 for( int i = 0; i < n; ++i )
    \n+
    67 {
    \n+
    68 ret[ i ] = ctype( 0 );
    \n+
    69 for( int j = 0; j < m; ++j )
    \n+
    70 ret[ i ] += A[ j ][ i ] * x[ j ];
    \n+
    71 }
    \n+
    72 }
    \n
    73
    \n-
    74
    \n-
    75
    \n-
    80 template <class Factory>
    \n-
    \n-\n-
    82 {
    \n-
    83 static const unsigned int dimension = Factory::dimension;
    \n-
    84 typedef typename Factory::Key Key;
    \n-
    85 typedef const typename Factory::Object Object;
    \n-
    86
    \n-
    \n-
    88 static Object *create ( const Dune::GeometryType &gt, const Key &key )
    \n-
    89 {
    \n-
    90 assert( gt.id() < numTopologies );
    \n-
    91 return instance().getObject( gt, key );
    \n-
    92 }
    \n-
    \n-
    94 template< GeometryType::Id geometryId >
    \n-
    \n-
    95 static auto create ( const Key &key )
    \n-
    96 -> std::enable_if_t< static_cast<GeometryType>(geometryId).dim() == dimension, Object * >
    \n-
    97 {
    \n-
    98 return instance().template getObject< geometryId >( key );
    \n-
    99 }
    \n-
    \n-
    100
    \n-
    102 template< class Topology >
    \n-
    \n-
    103 static auto create ( const Key &key )
    \n-
    104 -> std::enable_if_t< Topology::dimension == dimension, Object * >
    \n-
    105 {
    \n-
    106 return instance().template getObject< Topology >( key );
    \n-
    107 }
    \n-
    \n-
    108
    \n-
    \n-
    110 static void release ( Object *object )
    \n-
    111 {}
    \n-
    \n-
    112
    \n-
    113 private:
    \n-
    114 struct ObjectDeleter
    \n-
    115 {
    \n-
    116 void operator() ( Object *ptr ) const { Factory::release( ptr ); }
    \n-
    117 };
    \n-
    118
    \n-
    119 static TopologySingletonFactory &instance ()
    \n-
    120 {
    \n-
    121 static TopologySingletonFactory instance;
    \n-
    122 return instance;
    \n-
    123 }
    \n-
    124
    \n-
    125 static const unsigned int numTopologies = (1 << dimension);
    \n-
    126 typedef std::array< std::unique_ptr< Object, ObjectDeleter >, numTopologies > Array;
    \n-
    127 typedef std::map< Key, Array > Storage;
    \n+
    74 template< int m, int n, int p >
    \n+
    75 static void AB ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix< ctype, n, p > &B, FieldMatrix< ctype, m, p > &ret )
    \n+
    76 {
    \n+
    77 for( int i = 0; i < m; ++i )
    \n+
    78 {
    \n+
    79 for( int j = 0; j < p; ++j )
    \n+
    80 {
    \n+
    81 ret[ i ][ j ] = ctype( 0 );
    \n+
    82 for( int k = 0; k < n; ++k )
    \n+
    83 ret[ i ][ j ] += A[ i ][ k ] * B[ k ][ j ];
    \n+
    84 }
    \n+
    85 }
    \n+
    86 }
    \n+
    87
    \n+
    88 template< int m, int n, int p >
    \n+
    89 static void ATBT ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix< ctype, p, m > &B, FieldMatrix< ctype, n, p > &ret )
    \n+
    90 {
    \n+
    91 for( int i = 0; i < n; ++i )
    \n+
    92 {
    \n+
    93 for( int j = 0; j < p; ++j )
    \n+
    94 {
    \n+
    95 ret[ i ][ j ] = ctype( 0 );
    \n+
    96 for( int k = 0; k < m; ++k )
    \n+
    97 ret[ i ][ j ] += A[ k ][ i ] * B[ j ][ k ];
    \n+
    98 }
    \n+
    99 }
    \n+
    100 }
    \n+
    101
    \n+
    102 template< int m, int n >
    \n+
    103 static void ATA_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, n > &ret )
    \n+
    104 {
    \n+
    105 for( int i = 0; i < n; ++i )
    \n+
    106 {
    \n+
    107 for( int j = 0; j <= i; ++j )
    \n+
    108 {
    \n+
    109 ret[ i ][ j ] = ctype( 0 );
    \n+
    110 for( int k = 0; k < m; ++k )
    \n+
    111 ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ];
    \n+
    112 }
    \n+
    113 }
    \n+
    114 }
    \n+
    115
    \n+
    116 template< int m, int n >
    \n+
    117 static void ATA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, n > &ret )
    \n+
    118 {
    \n+
    119 for( int i = 0; i < n; ++i )
    \n+
    120 {
    \n+
    121 for( int j = 0; j <= i; ++j )
    \n+
    122 {
    \n+
    123 ret[ i ][ j ] = ctype( 0 );
    \n+
    124 for( int k = 0; k < m; ++k )
    \n+
    125 ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ];
    \n+
    126 ret[ j ][ i ] = ret[ i ][ j ];
    \n+
    127 }
    \n
    128
    \n-
    129 TopologySingletonFactory () = default;
    \n-
    130
    \n-
    131 std::unique_ptr< Object, ObjectDeleter > &find ( const unsigned int topologyId, const Key &key )
    \n-
    132 {
    \n-
    133 return storage_[ key ][ topologyId ];
    \n-
    134 }
    \n-
    135
    \n-
    136 Object *getObject ( const Dune::GeometryType &gt, const Key &key )
    \n-
    137 {
    \n-
    138 auto &object = find( gt.id(), key );
    \n-
    139 if( !object )
    \n-
    140 object.reset( Factory::create( gt, key ) );
    \n-
    141 return object.get();
    \n-
    142 }
    \n-
    143
    \n-
    144 template< GeometryType::Id geometryId >
    \n-
    145 Object *getObject ( const Key &key )
    \n-
    146 {
    \n-
    147 static constexpr GeometryType geometry = geometryId;
    \n-
    148 auto &object = find( geometry.id(), key );
    \n-
    149 if( !object )
    \n-
    150 object.reset( Factory::template create< geometry >( key ) );
    \n-
    151 return object.get();
    \n-
    152 }
    \n-
    153
    \n-
    154 template< class Topology >
    \n-
    155 Object *getObject ( const Key &key )
    \n-
    156 {
    \n-
    157 auto &object = find( Topology::id, key );
    \n-
    158 if( !object )
    \n-
    159 object.reset( Factory::template create< Topology >( key ) );
    \n-
    160 return object.get();
    \n-
    161 }
    \n-
    162
    \n-
    163 Storage storage_;
    \n-
    164 };
    \n-
    \n-
    165
    \n-
    166}
    \n-
    167
    \n-
    168#endif // #ifndef DUNE_GEOMETRY_TOPOLOGYFACTORY_HH
    \n-
    Helper classes to provide indices for geometrytypes for use in a vector.
    \n-
    A unique label for each type of element that can occur in a grid.
    \n+
    129 ret[ i ][ i ] = ctype( 0 );
    \n+
    130 for( int k = 0; k < m; ++k )
    \n+
    131 ret[ i ][ i ] += A[ k ][ i ] * A[ k ][ i ];
    \n+
    132 }
    \n+
    133 }
    \n+
    134
    \n+
    135 template< int m, int n >
    \n+
    136 static void AAT_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, m, m > &ret )
    \n+
    137 {
    \n+
    138 /*
    \n+
    139 if (m==2) {
    \n+
    140 ret[0][0] = A[0]*A[0];
    \n+
    141 ret[1][1] = A[1]*A[1];
    \n+
    142 ret[1][0] = A[0]*A[1];
    \n+
    143 }
    \n+
    144 else
    \n+
    145 */
    \n+
    146 for( int i = 0; i < m; ++i )
    \n+
    147 {
    \n+
    148 for( int j = 0; j <= i; ++j )
    \n+
    149 {
    \n+
    150 ctype &retij = ret[ i ][ j ];
    \n+
    151 retij = A[ i ][ 0 ] * A[ j ][ 0 ];
    \n+
    152 for( int k = 1; k < n; ++k )
    \n+
    153 retij += A[ i ][ k ] * A[ j ][ k ];
    \n+
    154 }
    \n+
    155 }
    \n+
    156 }
    \n+
    157
    \n+
    158 template< int m, int n >
    \n+
    159 static void AAT ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, m, m > &ret )
    \n+
    160 {
    \n+
    161 for( int i = 0; i < m; ++i )
    \n+
    162 {
    \n+
    163 for( int j = 0; j < i; ++j )
    \n+
    164 {
    \n+
    165 ret[ i ][ j ] = ctype( 0 );
    \n+
    166 for( int k = 0; k < n; ++k )
    \n+
    167 ret[ i ][ j ] += A[ i ][ k ] * A[ j ][ k ];
    \n+
    168 ret[ j ][ i ] = ret[ i ][ j ];
    \n+
    169 }
    \n+
    170 ret[ i ][ i ] = ctype( 0 );
    \n+
    171 for( int k = 0; k < n; ++k )
    \n+
    172 ret[ i ][ i ] += A[ i ][ k ] * A[ i ][ k ];
    \n+
    173 }
    \n+
    174 }
    \n+
    175
    \n+
    176 template< int n >
    \n+
    177 static void Lx ( const FieldMatrix< ctype, n, n > &L, const FieldVector< ctype, n > &x, FieldVector< ctype, n > &ret )
    \n+
    178 {
    \n+
    179 for( int i = 0; i < n; ++i )
    \n+
    180 {
    \n+
    181 ret[ i ] = ctype( 0 );
    \n+
    182 for( int j = 0; j <= i; ++j )
    \n+
    183 ret[ i ] += L[ i ][ j ] * x[ j ];
    \n+
    184 }
    \n+
    185 }
    \n+
    186
    \n+
    187 template< int n >
    \n+
    188 static void LTx ( const FieldMatrix< ctype, n, n > &L, const FieldVector< ctype, n > &x, FieldVector< ctype, n > &ret )
    \n+
    189 {
    \n+
    190 for( int i = 0; i < n; ++i )
    \n+
    191 {
    \n+
    192 ret[ i ] = ctype( 0 );
    \n+
    193 for( int j = i; j < n; ++j )
    \n+
    194 ret[ i ] += L[ j ][ i ] * x[ j ];
    \n+
    195 }
    \n+
    196 }
    \n+
    197
    \n+
    198 template< int n >
    \n+
    199 static void LTL ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype, n, n > &ret )
    \n+
    200 {
    \n+
    201 for( int i = 0; i < n; ++i )
    \n+
    202 {
    \n+
    203 for( int j = 0; j < i; ++j )
    \n+
    204 {
    \n+
    205 ret[ i ][ j ] = ctype( 0 );
    \n+
    206 for( int k = i; k < n; ++k )
    \n+
    207 ret[ i ][ j ] += L[ k ][ i ] * L[ k ][ j ];
    \n+
    208 ret[ j ][ i ] = ret[ i ][ j ];
    \n+
    209 }
    \n+
    210 ret[ i ][ i ] = ctype( 0 );
    \n+
    211 for( int k = i; k < n; ++k )
    \n+
    212 ret[ i ][ i ] += L[ k ][ i ] * L[ k ][ i ];
    \n+
    213 }
    \n+
    214 }
    \n+
    215
    \n+
    216 template< int n >
    \n+
    217 static void LLT ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype, n, n > &ret )
    \n+
    218 {
    \n+
    219 for( int i = 0; i < n; ++i )
    \n+
    220 {
    \n+
    221 for( int j = 0; j < i; ++j )
    \n+
    222 {
    \n+
    223 ret[ i ][ j ] = ctype( 0 );
    \n+
    224 for( int k = 0; k <= j; ++k )
    \n+
    225 ret[ i ][ j ] += L[ i ][ k ] * L[ j ][ k ];
    \n+
    226 ret[ j ][ i ] = ret[ i ][ j ];
    \n+
    227 }
    \n+
    228 ret[ i ][ i ] = ctype( 0 );
    \n+
    229 for( int k = 0; k <= i; ++k )
    \n+
    230 ret[ i ][ i ] += L[ i ][ k ] * L[ i ][ k ];
    \n+
    231 }
    \n+
    232 }
    \n+
    233
    \n+
    234 template< int n >
    \n+
    235 static bool cholesky_L ( const FieldMatrix< ctype, n, n > &A, FieldMatrix< ctype, n, n > &ret, const bool checkSingular = false )
    \n+
    236 {
    \n+
    237 using std::sqrt;
    \n+
    238 for( int i = 0; i < n; ++i )
    \n+
    239 {
    \n+
    240 ctype &rii = ret[ i ][ i ];
    \n+
    241
    \n+
    242 ctype xDiag = A[ i ][ i ];
    \n+
    243 for( int j = 0; j < i; ++j )
    \n+
    244 xDiag -= ret[ i ][ j ] * ret[ i ][ j ];
    \n+
    245
    \n+
    246 // in some cases A can be singular, e.g. when checking local for
    \n+
    247 // outside points during checkInside
    \n+
    248 if( checkSingular && ! ( xDiag > ctype( 0 )) )
    \n+
    249 return false ;
    \n+
    250
    \n+
    251 // otherwise this should be true always
    \n+
    252 assert( xDiag > ctype( 0 ) );
    \n+
    253 rii = sqrt( xDiag );
    \n+
    254
    \n+
    255 ctype invrii = ctype( 1 ) / rii;
    \n+
    256 for( int k = i+1; k < n; ++k )
    \n+
    257 {
    \n+
    258 ctype x = A[ k ][ i ];
    \n+
    259 for( int j = 0; j < i; ++j )
    \n+
    260 x -= ret[ i ][ j ] * ret[ k ][ j ];
    \n+
    261 ret[ k ][ i ] = invrii * x;
    \n+
    262 }
    \n+
    263 }
    \n+
    264
    \n+
    265 // return true for meaning A is non-singular
    \n+
    266 return true;
    \n+
    267 }
    \n+
    268
    \n+
    269 template< int n >
    \n+
    270 static ctype detL ( const FieldMatrix< ctype, n, n > &L )
    \n+
    271 {
    \n+
    272 ctype det( 1 );
    \n+
    273 for( int i = 0; i < n; ++i )
    \n+
    274 det *= L[ i ][ i ];
    \n+
    275 return det;
    \n+
    276 }
    \n+
    277
    \n+
    278 template< int n >
    \n+
    279 static ctype invL ( FieldMatrix< ctype, n, n > &L )
    \n+
    280 {
    \n+
    281 ctype det( 1 );
    \n+
    282 for( int i = 0; i < n; ++i )
    \n+
    283 {
    \n+
    284 ctype &lii = L[ i ][ i ];
    \n+
    285 det *= lii;
    \n+
    286 lii = ctype( 1 ) / lii;
    \n+
    287 for( int j = 0; j < i; ++j )
    \n+
    288 {
    \n+
    289 ctype &lij = L[ i ][ j ];
    \n+
    290 ctype x = lij * L[ j ][ j ];
    \n+
    291 for( int k = j+1; k < i; ++k )
    \n+
    292 x += L[ i ][ k ] * L[ k ][ j ];
    \n+
    293 lij = (-lii) * x;
    \n+
    294 }
    \n+
    295 }
    \n+
    296 return det;
    \n+
    297 }
    \n+
    298
    \n+
    299 // calculates x := L^{-1} x
    \n+
    300 template< int n >
    \n+
    301 static void invLx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n > &x )
    \n+
    302 {
    \n+
    303 for( int i = 0; i < n; ++i )
    \n+
    304 {
    \n+
    305 for( int j = 0; j < i; ++j )
    \n+
    306 x[ i ] -= L[ i ][ j ] * x[ j ];
    \n+
    307 x[ i ] /= L[ i ][ i ];
    \n+
    308 }
    \n+
    309 }
    \n+
    310
    \n+
    311 // calculates x := L^{-T} x
    \n+
    312 template< int n >
    \n+
    313 static void invLTx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n > &x )
    \n+
    314 {
    \n+
    315 for( int i = n; i > 0; --i )
    \n+
    316 {
    \n+
    317 for( int j = i; j < n; ++j )
    \n+
    318 x[ i-1 ] -= L[ j ][ i-1 ] * x[ j ];
    \n+
    319 x[ i-1 ] /= L[ i-1 ][ i-1 ];
    \n+
    320 }
    \n+
    321 }
    \n+
    322
    \n+
    323 template< int n >
    \n+
    324 static ctype spdDetA ( const FieldMatrix< ctype, n, n > &A )
    \n+
    325 {
    \n+
    326 // return A[0][0]*A[1][1]-A[1][0]*A[1][0];
    \n+
    327 FieldMatrix< ctype, n, n > L;
    \n+
    328 cholesky_L( A, L );
    \n+
    329 return detL( L );
    \n+
    330 }
    \n+
    331
    \n+
    332 template< int n >
    \n+
    333 static ctype spdInvA ( FieldMatrix< ctype, n, n > &A )
    \n+
    334 {
    \n+
    335 FieldMatrix< ctype, n, n > L;
    \n+
    336 cholesky_L( A, L );
    \n+
    337 const ctype det = invL( L );
    \n+
    338 LTL( L, A );
    \n+
    339 return det;
    \n+
    340 }
    \n+
    341
    \n+
    342 // calculate x := A^{-1} x
    \n+
    343 template< int n >
    \n+
    344 static bool spdInvAx ( FieldMatrix< ctype, n, n > &A, FieldVector< ctype, n > &x, const bool checkSingular = false )
    \n+
    345 {
    \n+
    346 FieldMatrix< ctype, n, n > L;
    \n+
    347 const bool invertible = cholesky_L( A, L, checkSingular );
    \n+
    348 if( ! invertible ) return invertible ;
    \n+
    349 invLx( L, x );
    \n+
    350 invLTx( L, x );
    \n+
    351 return invertible;
    \n+
    352 }
    \n+
    353
    \n+
    354 template< int m, int n >
    \n+
    355 static ctype detATA ( const FieldMatrix< ctype, m, n > &A )
    \n+
    356 {
    \n+
    357 if( m >= n )
    \n+
    358 {
    \n+
    359 FieldMatrix< ctype, n, n > ata;
    \n+
    360 ATA_L( A, ata );
    \n+
    361 return spdDetA( ata );
    \n+
    362 }
    \n+
    363 else
    \n+
    364 return ctype( 0 );
    \n+
    365 }
    \n+
    366
    \n+
    372 template< int m, int n >
    \n+
    373 static ctype sqrtDetAAT ( const FieldMatrix< ctype, m, n > &A )
    \n+
    374 {
    \n+
    375 using std::abs;
    \n+
    376 using std::sqrt;
    \n+
    377 // These special cases are here not only for speed reasons:
    \n+
    378 // The general implementation aborts if the matrix is almost singular,
    \n+
    379 // and the special implementation provide a stable way to handle that case.
    \n+
    380 if( (n == 2) && (m == 2) )
    \n+
    381 {
    \n+
    382 // Special implementation for 2x2 matrices: faster and more stable
    \n+
    383 return abs( A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ] );
    \n+
    384 }
    \n+
    385 else if( (n == 3) && (m == 3) )
    \n+
    386 {
    \n+
    387 // Special implementation for 3x3 matrices
    \n+
    388 const ctype v0 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 1 ][ 1 ] * A[ 0 ][ 2 ];
    \n+
    389 const ctype v1 = A[ 0 ][ 2 ] * A[ 1 ][ 0 ] - A[ 1 ][ 2 ] * A[ 0 ][ 0 ];
    \n+
    390 const ctype v2 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 1 ][ 0 ] * A[ 0 ][ 1 ];
    \n+
    391 return abs( v0 * A[ 2 ][ 0 ] + v1 * A[ 2 ][ 1 ] + v2 * A[ 2 ][ 2 ] );
    \n+
    392 }
    \n+
    393 else if ( (n == 3) && (m == 2) )
    \n+
    394 {
    \n+
    395 // Special implementation for 2x3 matrices
    \n+
    396 const ctype v0 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 0 ][ 1 ] * A[ 1 ][ 0 ];
    \n+
    397 const ctype v1 = A[ 0 ][ 0 ] * A[ 1 ][ 2 ] - A[ 1 ][ 0 ] * A[ 0 ][ 2 ];
    \n+
    398 const ctype v2 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 0 ][ 2 ] * A[ 1 ][ 1 ];
    \n+
    399 return sqrt( v0*v0 + v1*v1 + v2*v2);
    \n+
    400 }
    \n+
    401 else if( n >= m )
    \n+
    402 {
    \n+
    403 // General case
    \n+
    404 FieldMatrix< ctype, m, m > aat;
    \n+
    405 AAT_L( A, aat );
    \n+
    406 return spdDetA( aat );
    \n+
    407 }
    \n+
    408 else
    \n+
    409 return ctype( 0 );
    \n+
    410 }
    \n+
    411
    \n+
    412 // A^{-1}_L = (A^T A)^{-1} A^T
    \n+
    413 // => A^{-1}_L A = I
    \n+
    414 template< int m, int n >
    \n+
    415 static ctype leftInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, m > &ret )
    \n+
    416 {
    \n+
    417 static_assert((m >= n), "Matrix has no left inverse.");
    \n+
    418 FieldMatrix< ctype, n, n > ata;
    \n+
    419 ATA_L( A, ata );
    \n+
    420 const ctype det = spdInvA( ata );
    \n+
    421 ATBT( ata, A, ret );
    \n+
    422 return det;
    \n+
    423 }
    \n+
    424
    \n+
    425 template< int m, int n >
    \n+
    426 static void leftInvAx ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, m > &x, FieldVector< ctype, n > &y )
    \n+
    427 {
    \n+
    428 static_assert((m >= n), "Matrix has no left inverse.");
    \n+
    429 FieldMatrix< ctype, n, n > ata;
    \n+
    430 ATx( A, x, y );
    \n+
    431 ATA_L( A, ata );
    \n+
    432 spdInvAx( ata, y );
    \n+
    433 }
    \n+
    434
    \n+
    436 template< int m, int n >
    \n+
    437 static ctype rightInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, m > &ret )
    \n+
    438 {
    \n+
    439 static_assert((n >= m), "Matrix has no right inverse.");
    \n+
    440 using std::abs;
    \n+
    441 if( (n == 2) && (m == 2) )
    \n+
    442 {
    \n+
    443 const ctype det = (A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ]);
    \n+
    444 const ctype detInv = ctype( 1 ) / det;
    \n+
    445 ret[ 0 ][ 0 ] = A[ 1 ][ 1 ] * detInv;
    \n+
    446 ret[ 1 ][ 1 ] = A[ 0 ][ 0 ] * detInv;
    \n+
    447 ret[ 1 ][ 0 ] = -A[ 1 ][ 0 ] * detInv;
    \n+
    448 ret[ 0 ][ 1 ] = -A[ 0 ][ 1 ] * detInv;
    \n+
    449 return abs( det );
    \n+
    450 }
    \n+
    451 else
    \n+
    452 {
    \n+
    453 FieldMatrix< ctype, m , m > aat;
    \n+
    454 AAT_L( A, aat );
    \n+
    455 const ctype det = spdInvA( aat );
    \n+
    456 ATBT( A , aat , ret );
    \n+
    457 return det;
    \n+
    458 }
    \n+
    459 }
    \n+
    460
    \n+
    461 template< int m, int n >
    \n+
    462 static bool xTRightInvA ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, n > &x, FieldVector< ctype, m > &y )
    \n+
    463 {
    \n+
    464 static_assert((n >= m), "Matrix has no right inverse.");
    \n+
    465 FieldMatrix< ctype, m, m > aat;
    \n+
    466 Ax( A, x, y );
    \n+
    467 AAT_L( A, aat );
    \n+
    468 // check whether aat is singular and return true if non-singular
    \n+
    469 return spdInvAx( aat, y, true );
    \n+
    470 }
    \n+
    471 };
    \n+
    472
    \n+
    473 } // namespace Impl
    \n+
    474
    \n+
    475
    \n+
    476
    \n+
    482 template< class ct, int mydim, int cdim>
    \n+
    \n+\n+
    484 {
    \n+
    485 public:
    \n+
    486
    \n+
    488 typedef ct ctype;
    \n+
    489
    \n+
    491 static const int mydimension= mydim;
    \n+
    492
    \n+
    494 static const int coorddimension = cdim;
    \n+
    495
    \n+
    497 typedef FieldVector< ctype, mydimension > LocalCoordinate;
    \n+
    498
    \n+
    500 typedef FieldVector< ctype, coorddimension > GlobalCoordinate;
    \n+
    501
    \n+
    503 typedef ctype Volume;
    \n+
    504
    \n+
    506 typedef FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed;
    \n+
    507
    \n+
    509 typedef FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed;
    \n+
    510
    \n+
    512 typedef FieldMatrix< ctype, coorddimension, mydimension > Jacobian;
    \n+
    513
    \n+
    515 typedef FieldMatrix< ctype, mydimension, coorddimension > JacobianInverse;
    \n+
    516
    \n+
    517 private:
    \n+\n+
    520
    \n+\n+
    522
    \n+
    523 // Helper class to compute a matrix pseudo inverse
    \n+
    524 typedef Impl::FieldMatrixHelper< ct > MatrixHelper;
    \n+
    525
    \n+
    526 public:
    \n+
    \n+
    528 AffineGeometry ( const ReferenceElement &refElement, const GlobalCoordinate &origin,
    \n+
    529 const JacobianTransposed &jt )
    \n+
    530 : refElement_(refElement), origin_(origin), jacobianTransposed_(jt)
    \n+
    531 {
    \n+
    532 integrationElement_ = MatrixHelper::template rightInvA< mydimension, coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ );
    \n+
    533 }
    \n+
    \n+
    534
    \n+
    \n+\n+
    537 const JacobianTransposed &jt )
    \n+
    538 : AffineGeometry(ReferenceElements::general( gt ), origin, jt)
    \n+
    539 { }
    \n+
    \n+
    540
    \n+
    542 template< class CoordVector >
    \n+
    \n+
    543 AffineGeometry ( const ReferenceElement &refElement, const CoordVector &coordVector )
    \n+
    544 : refElement_(refElement), origin_(coordVector[0])
    \n+
    545 {
    \n+
    546 for( int i = 0; i < mydimension; ++i )
    \n+
    547 jacobianTransposed_[ i ] = coordVector[ i+1 ] - origin_;
    \n+
    548 integrationElement_ = MatrixHelper::template rightInvA< mydimension, coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ );
    \n+
    549 }
    \n+
    \n+
    550
    \n+
    552 template< class CoordVector >
    \n+
    \n+
    553 AffineGeometry ( Dune::GeometryType gt, const CoordVector &coordVector )
    \n+
    554 : AffineGeometry(ReferenceElements::general( gt ), coordVector)
    \n+
    555 { }
    \n+
    \n+
    556
    \n+
    558 bool affine () const { return true; }
    \n+
    559
    \n+
    561 Dune::GeometryType type () const { return refElement_.type(); }
    \n+
    562
    \n+
    564 int corners () const { return refElement_.size( mydimension ); }
    \n+
    565
    \n+
    \n+
    567 GlobalCoordinate corner ( int i ) const
    \n+
    568 {
    \n+
    569 return global( refElement_.position( i, mydimension ) );
    \n+
    570 }
    \n+
    \n+
    571
    \n+
    573 GlobalCoordinate center () const { return global( refElement_.position( 0, 0 ) ); }
    \n+
    574
    \n+
    \n+\n+
    582 {
    \n+
    583 GlobalCoordinate global( origin_ );
    \n+
    584 jacobianTransposed_.umtv( local, global );
    \n+
    585 return global;
    \n+
    586 }
    \n+
    \n+
    587
    \n+
    \n+\n+
    602 {
    \n+\n+
    604 jacobianInverseTransposed_.mtv( global - origin_, local );
    \n+
    605 return local;
    \n+
    606 }
    \n+
    \n+
    607
    \n+
    \n+
    618 ctype integrationElement ([[maybe_unused]] const LocalCoordinate &local) const
    \n+
    619 {
    \n+
    620 return integrationElement_;
    \n+
    621 }
    \n+
    \n+
    622
    \n+
    \n+
    624 Volume volume () const
    \n+
    625 {
    \n+
    626 return integrationElement_ * refElement_.volume();
    \n+
    627 }
    \n+
    \n+
    628
    \n+
    \n+
    635 const JacobianTransposed &jacobianTransposed ([[maybe_unused]] const LocalCoordinate &local) const
    \n+
    636 {
    \n+
    637 return jacobianTransposed_;
    \n+
    638 }
    \n+
    \n+
    639
    \n+
    \n+\n+
    647 {
    \n+
    648 return jacobianInverseTransposed_;
    \n+
    649 }
    \n+
    \n+
    650
    \n+
    \n+
    657 Jacobian jacobian ([[maybe_unused]] const LocalCoordinate &local) const
    \n+
    658 {
    \n+
    659 return jacobianTransposed_.transposed();
    \n+
    660 }
    \n+
    \n+
    661
    \n+
    \n+
    668 JacobianInverse jacobianInverse ([[maybe_unused]] const LocalCoordinate &local) const
    \n+
    669 {
    \n+
    670 return jacobianInverseTransposed_.transposed();
    \n+
    671 }
    \n+
    \n+
    672
    \n+
    \n+\n+
    674 {
    \n+
    675 return geometry.refElement_;
    \n+
    676 }
    \n+
    \n+
    677
    \n+
    678 private:
    \n+
    679 ReferenceElement refElement_;
    \n+
    680 GlobalCoordinate origin_;
    \n+
    681 JacobianTransposed jacobianTransposed_;
    \n+
    682 JacobianInverseTransposed jacobianInverseTransposed_;
    \n+
    683 ctype integrationElement_;
    \n+
    684 };
    \n+
    \n+
    685
    \n+
    686} // namespace Dune
    \n+
    \n+
    687
    \n+
    688#endif // #ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH
    \n+
    A unique label for each type of element that can occur in a grid.
    \n+
    unspecified-type ReferenceElement
    Returns the type of reference element for the argument type T.
    Definition referenceelements.hh:497
    \n
    Definition affinegeometry.hh:21
    \n-
    Provide a factory over the generic topologies.
    Definition topologyfactory.hh:42
    \n-
    Traits::Factory Factory
    Definition topologyfactory.hh:47
    \n-
    static Object * create(const Dune::GeometryType &gt, const Key &key)
    dynamically create objects
    Definition topologyfactory.hh:50
    \n-
    static const unsigned int dimension
    Definition topologyfactory.hh:44
    \n-
    static Object * create(const Key &key)
    statically create objects
    Definition topologyfactory.hh:58
    \n-
    static void release(Object *object)
    release the object returned by the create methods
    Definition topologyfactory.hh:71
    \n-
    Traits::Key Key
    Definition topologyfactory.hh:45
    \n-
    Traits::Object Object
    Definition topologyfactory.hh:46
    \n-
    A wrapper for a TopologyFactory providing singleton storage. Same usage as TopologyFactory but with e...
    Definition topologyfactory.hh:82
    \n-
    static auto create(const Key &key) -> std::enable_if_t< Topology::dimension==dimension, Object * >
    Definition topologyfactory.hh:103
    \n-
    static Object * create(const Dune::GeometryType &gt, const Key &key)
    Definition topologyfactory.hh:88
    \n-
    static void release(Object *object)
    release the object returned by the create methods
    Definition topologyfactory.hh:110
    \n-
    const Factory::Object Object
    Definition topologyfactory.hh:85
    \n-
    Factory::Key Key
    Definition topologyfactory.hh:84
    \n-
    static auto create(const Key &key) -> std::enable_if_t< static_cast< GeometryType >(geometryId).dim()==dimension, Object * >
    Definition topologyfactory.hh:95
    \n-
    static const unsigned int dimension
    Definition topologyfactory.hh:83
    \n+
    This class provides access to geometric and topological properties of a reference element.
    Definition referenceelement.hh:52
    \n+
    CoordinateField volume() const
    obtain the volume of the reference element
    Definition referenceelement.hh:241
    \n+
    decltype(auto) type(int i, int c) const
    obtain the type of subentity (i,c)
    Definition referenceelement.hh:171
    \n+
    int size(int c) const
    number of subentities of codimension c
    Definition referenceelement.hh:94
    \n+
    decltype(auto) position(int i, int c) const
    position of the barycenter of entity (i,c)
    Definition referenceelement.hh:203
    \n+
    Definition affinegeometry.hh:33
    \n+
    Class providing access to the singletons of the reference elements.
    Definition referenceelements.hh:170
    \n+
    Implementation of the Geometry interface for affine geometries.
    Definition affinegeometry.hh:484
    \n+
    AffineGeometry(const ReferenceElement &refElement, const CoordVector &coordVector)
    Create affine geometry from reference element and a vector of vertex coordinates.
    Definition affinegeometry.hh:543
    \n+
    AffineGeometry(Dune::GeometryType gt, const GlobalCoordinate &origin, const JacobianTransposed &jt)
    Create affine geometry from GeometryType, one vertex, and the Jacobian matrix.
    Definition affinegeometry.hh:536
    \n+
    FieldVector< ctype, mydimension > LocalCoordinate
    Type for local coordinate vector.
    Definition affinegeometry.hh:497
    \n+
    Dune::GeometryType type() const
    Obtain the type of the reference element.
    Definition affinegeometry.hh:561
    \n+
    static const int mydimension
    Dimension of the geometry.
    Definition affinegeometry.hh:491
    \n+
    AffineGeometry(const ReferenceElement &refElement, const GlobalCoordinate &origin, const JacobianTransposed &jt)
    Create affine geometry from reference element, one vertex, and the Jacobian matrix.
    Definition affinegeometry.hh:528
    \n+
    ctype Volume
    Type used for volume.
    Definition affinegeometry.hh:503
    \n+
    JacobianInverse jacobianInverse(const LocalCoordinate &local) const
    Obtain the Jacobian's inverse.
    Definition affinegeometry.hh:668
    \n+
    friend ReferenceElement referenceElement(const AffineGeometry &geometry)
    Definition affinegeometry.hh:673
    \n+
    AffineGeometry(Dune::GeometryType gt, const CoordVector &coordVector)
    Create affine geometry from GeometryType and a vector of vertex coordinates.
    Definition affinegeometry.hh:553
    \n+
    ctype integrationElement(const LocalCoordinate &local) const
    Obtain the integration element.
    Definition affinegeometry.hh:618
    \n+
    FieldMatrix< ctype, mydimension, coorddimension > JacobianInverse
    Type for the inverse Jacobian matrix.
    Definition affinegeometry.hh:515
    \n+
    FieldMatrix< ctype, coorddimension, mydimension > Jacobian
    Type for the Jacobian matrix.
    Definition affinegeometry.hh:512
    \n+
    const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
    Obtain the transposed of the Jacobian's inverse.
    Definition affinegeometry.hh:646
    \n+
    FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed
    Type for the transposed Jacobian matrix.
    Definition affinegeometry.hh:506
    \n+
    GlobalCoordinate corner(int i) const
    Obtain coordinates of the i-th corner.
    Definition affinegeometry.hh:567
    \n+
    int corners() const
    Obtain number of corners of the corresponding reference element.
    Definition affinegeometry.hh:564
    \n+
    LocalCoordinate local(const GlobalCoordinate &global) const
    Evaluate the inverse mapping.
    Definition affinegeometry.hh:601
    \n+
    FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed
    Type for the transposed inverse Jacobian matrix.
    Definition affinegeometry.hh:509
    \n+
    static const int coorddimension
    Dimension of the world space.
    Definition affinegeometry.hh:494
    \n+
    GlobalCoordinate global(const LocalCoordinate &local) const
    Evaluate the mapping.
    Definition affinegeometry.hh:581
    \n+
    GlobalCoordinate center() const
    Obtain the centroid of the mapping's image.
    Definition affinegeometry.hh:573
    \n+
    Jacobian jacobian(const LocalCoordinate &local) const
    Obtain the Jacobian.
    Definition affinegeometry.hh:657
    \n+
    ct ctype
    Type used for coordinates.
    Definition affinegeometry.hh:488
    \n+
    FieldVector< ctype, coorddimension > GlobalCoordinate
    Type for coordinate vector in world space.
    Definition affinegeometry.hh:500
    \n+
    bool affine() const
    Always true: this is an affine geometry.
    Definition affinegeometry.hh:558
    \n+
    const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
    Obtain the transposed of the Jacobian.
    Definition affinegeometry.hh:635
    \n+
    Volume volume() const
    Obtain the volume of the element.
    Definition affinegeometry.hh:624
    \n
    Unique label for each type of entities that can occur in DUNE grids.
    Definition type.hh:126
    \n-
    constexpr unsigned int id() const
    Return the topology id of the type.
    Definition type.hh:377
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,220 +1,798 @@\n dune-geometry\u00a02.9.0\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n-topologyfactory.hh\n+affinegeometry.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// SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_GEOMETRY_TOPOLOGYFACTORY_HH\n-6#define DUNE_GEOMETRY_TOPOLOGYFACTORY_HH\n+5#ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH\n+6#define DUNE_GEOMETRY_AFFINEGEOMETRY_HH\n 7\n-8#include \n-9\n-10#include \n-11#include \n-12#include \n-13#include \n-14#include \n-15\n-16#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh>\n-18\n-19namespace _\bD_\bu_\bn_\be\n-20{\n-21\n-40 template \n-_\b4_\b1 struct _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by\n+13#include \n+14\n+15#include \n+16#include \n+17\n+18#include <_\bd_\bu_\bn_\be_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\by_\bp_\be_\b._\bh_\bh>\n+19\n+_\b2_\b0namespace _\bD_\bu_\bn_\be\n+21{\n+22\n+23 // External Forward Declarations\n+24 // -----------------------------\n+25\n+_\b2_\b6 namespace Geo\n+27 {\n+28\n+29 template< typename Implementation >\n+30 class _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n+31\n+32 template< class ctype, int dim >\n+_\b3_\b3 class _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn;\n+34\n+35 template< class ctype, int dim >\n+36 struct _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs;\n+37\n+38 }\n+39\n+40\n+41 namespace Impl\n 42 {\n-43 // extract types from Traits class\n-_\b4_\b4 static const unsigned int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = Traits::dimension;\n-_\b4_\b5 typedef typename Traits::Key _\bK_\be_\by;\n-_\b4_\b6 typedef typename Traits::Object _\bO_\bb_\bj_\be_\bc_\bt;\n-_\b4_\b7 typedef typename Traits::Factory _\bF_\ba_\bc_\bt_\bo_\br_\by;\n-48\n-_\b5_\b0 static _\bO_\bb_\bj_\be_\bc_\bt *_\bc_\br_\be_\ba_\bt_\be ( const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >, const _\bK_\be_\by &key )\n-51 {\n-52 return Impl::toGeometryTypeIdConstant(gt, [&](auto id) {\n-53 return create(key);\n-54 });\n-55 }\n-57 template< GeometryType::Id geometryId >\n-_\b5_\b8 static _\bO_\bb_\bj_\be_\bc_\bt *_\bc_\br_\be_\ba_\bt_\be ( const _\bK_\be_\by &key )\n-59 {\n-60 return Factory::template createObject< geometryId >( key );\n+43\n+44 // FieldMatrixHelper\n+45 // -----------------\n+46\n+47 template< class ct >\n+48 struct FieldMatrixHelper\n+49 {\n+50 typedef ct ctype;\n+51\n+52 template< int m, int n >\n+53 static void Ax ( const FieldMatrix< ctype, m, n > &A, const FieldVector<\n+ctype, n > &x, FieldVector< ctype, m > &ret )\n+54 {\n+55 for( int i = 0; i < m; ++i )\n+56 {\n+57 ret[ i ] = ctype( 0 );\n+58 for( int j = 0; j < n; ++j )\n+59 ret[ i ] += A[ i ][ j ] * x[ j ];\n+60 }\n 61 }\n 62\n-64 template< class Topology >\n-_\b6_\b5 static _\bO_\bb_\bj_\be_\bc_\bt *_\bc_\br_\be_\ba_\bt_\be ( const _\bK_\be_\by &key )\n-66 {\n-67 return Factory::template createObject< Topology >( key );\n-68 }\n-69\n-_\b7_\b1 static void _\br_\be_\bl_\be_\ba_\bs_\be( _\bO_\bb_\bj_\be_\bc_\bt *object ) { delete object; }\n-72 };\n+63 template< int m, int n >\n+64 static void ATx ( const FieldMatrix< ctype, m, n > &A, const FieldVector<\n+ctype, m > &x, FieldVector< ctype, n > &ret )\n+65 {\n+66 for( int i = 0; i < n; ++i )\n+67 {\n+68 ret[ i ] = ctype( 0 );\n+69 for( int j = 0; j < m; ++j )\n+70 ret[ i ] += A[ j ][ i ] * x[ j ];\n+71 }\n+72 }\n 73\n-74\n-75\n-80 template \n-_\b8_\b1 struct _\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by\n-82 {\n-_\b8_\b3 static const unsigned int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = Factory::dimension;\n-_\b8_\b4 typedef typename Factory::Key _\bK_\be_\by;\n-_\b8_\b5 typedef const typename Factory::Object _\bO_\bb_\bj_\be_\bc_\bt;\n-86\n-_\b8_\b8 static _\bO_\bb_\bj_\be_\bc_\bt *_\bc_\br_\be_\ba_\bt_\be ( const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >, const _\bK_\be_\by &key )\n-89 {\n-90 assert( gt._\bi_\bd() < numTopologies );\n-91 return instance().getObject( gt, key );\n-92 }\n-94 template< GeometryType::Id geometryId >\n-_\b9_\b5 static auto _\bc_\br_\be_\ba_\bt_\be ( const _\bK_\be_\by &key )\n-96 -> std::enable_if_t< static_cast(geometryId).dim() ==\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bO_\bb_\bj_\be_\bc_\bt * >\n-97 {\n-98 return instance().template getObject< geometryId >( key );\n+74 template< int m, int n, int p >\n+75 static void AB ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix<\n+ctype, n, p > &B, FieldMatrix< ctype, m, p > &ret )\n+76 {\n+77 for( int i = 0; i < m; ++i )\n+78 {\n+79 for( int j = 0; j < p; ++j )\n+80 {\n+81 ret[ i ][ j ] = ctype( 0 );\n+82 for( int k = 0; k < n; ++k )\n+83 ret[ i ][ j ] += A[ i ][ k ] * B[ k ][ j ];\n+84 }\n+85 }\n+86 }\n+87\n+88 template< int m, int n, int p >\n+89 static void ATBT ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix<\n+ctype, p, m > &B, FieldMatrix< ctype, n, p > &ret )\n+90 {\n+91 for( int i = 0; i < n; ++i )\n+92 {\n+93 for( int j = 0; j < p; ++j )\n+94 {\n+95 ret[ i ][ j ] = ctype( 0 );\n+96 for( int k = 0; k < m; ++k )\n+97 ret[ i ][ j ] += A[ k ][ i ] * B[ j ][ k ];\n+98 }\n 99 }\n-100\n-102 template< class Topology >\n-_\b1_\b0_\b3 static auto _\bc_\br_\be_\ba_\bt_\be ( const _\bK_\be_\by &key )\n-104 -> std::enable_if_t< Topology::dimension == dimension, Object * >\n-105 {\n-106 return instance().template getObject< Topology >( key );\n-107 }\n-108\n-_\b1_\b1_\b0 static void _\br_\be_\bl_\be_\ba_\bs_\be ( _\bO_\bb_\bj_\be_\bc_\bt *object )\n-111 {}\n-112\n-113 private:\n-114 struct ObjectDeleter\n-115 {\n-116 void operator() ( _\bO_\bb_\bj_\be_\bc_\bt *ptr ) const { Factory::release( ptr ); }\n-117 };\n-118\n-119 static TopologySingletonFactory &instance ()\n+100 }\n+101\n+102 template< int m, int n >\n+103 static void ATA_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix<\n+ctype, n, n > &ret )\n+104 {\n+105 for( int i = 0; i < n; ++i )\n+106 {\n+107 for( int j = 0; j <= i; ++j )\n+108 {\n+109 ret[ i ][ j ] = ctype( 0 );\n+110 for( int k = 0; k < m; ++k )\n+111 ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ];\n+112 }\n+113 }\n+114 }\n+115\n+116 template< int m, int n >\n+117 static void ATA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype,\n+n, n > &ret )\n+118 {\n+119 for( int i = 0; i < n; ++i )\n 120 {\n-121 static TopologySingletonFactory instance;\n-122 return instance;\n-123 }\n-124\n-125 static const unsigned int numTopologies = (1 << _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n-126 typedef std::array< std::unique_ptr< Object, ObjectDeleter >, numTopologies\n-> Array;\n-127 typedef std::map< Key, Array > Storage;\n+121 for( int j = 0; j <= i; ++j )\n+122 {\n+123 ret[ i ][ j ] = ctype( 0 );\n+124 for( int k = 0; k < m; ++k )\n+125 ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ];\n+126 ret[ j ][ i ] = ret[ i ][ j ];\n+127 }\n 128\n-129 TopologySingletonFactory () = default;\n-130\n-131 std::unique_ptr< Object, ObjectDeleter > &find ( const unsigned int\n-topologyId, const _\bK_\be_\by &key )\n-132 {\n-133 return storage_[ key ][ topologyId ];\n-134 }\n-135\n-136 _\bO_\bb_\bj_\be_\bc_\bt *getObject ( const _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be >, const _\bK_\be_\by &key )\n+129 ret[ i ][ i ] = ctype( 0 );\n+130 for( int k = 0; k < m; ++k )\n+131 ret[ i ][ i ] += A[ k ][ i ] * A[ k ][ i ];\n+132 }\n+133 }\n+134\n+135 template< int m, int n >\n+136 static void AAT_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix<\n+ctype, m, m > &ret )\n 137 {\n-138 auto &object = find( gt._\bi_\bd(), key );\n-139 if( !object )\n-140 object.reset( Factory::create( gt, key ) );\n-141 return object.get();\n-142 }\n-143\n-144 template< GeometryType::Id geometryId >\n-145 _\bO_\bb_\bj_\be_\bc_\bt *getObject ( const _\bK_\be_\by &key )\n-146 {\n-147 static constexpr GeometryType geometry = geometryId;\n-148 auto &object = find( geometry.id(), key );\n-149 if( !object )\n-150 object.reset( Factory::template create< geometry >( key ) );\n-151 return object.get();\n-152 }\n-153\n-154 template< class Topology >\n-155 _\bO_\bb_\bj_\be_\bc_\bt *getObject ( const _\bK_\be_\by &key )\n-156 {\n-157 auto &object = find( Topology::id, key );\n-158 if( !object )\n-159 object.reset( Factory::template create< Topology >( key ) );\n-160 return object.get();\n-161 }\n-162\n-163 Storage storage_;\n-164 };\n-165\n-166}\n-167\n-168#endif // #ifndef DUNE_GEOMETRY_TOPOLOGYFACTORY_HH\n-_\bt_\by_\bp_\be_\bi_\bn_\bd_\be_\bx_\b._\bh_\bh\n-Helper classes to provide indices for geometrytypes for use in a vector.\n+138 /*\n+139 if (m==2) {\n+140 ret[0][0] = A[0]*A[0];\n+141 ret[1][1] = A[1]*A[1];\n+142 ret[1][0] = A[0]*A[1];\n+143 }\n+144 else\n+145 */\n+146 for( int i = 0; i < m; ++i )\n+147 {\n+148 for( int j = 0; j <= i; ++j )\n+149 {\n+150 ctype &retij = ret[ i ][ j ];\n+151 retij = A[ i ][ 0 ] * A[ j ][ 0 ];\n+152 for( int k = 1; k < n; ++k )\n+153 retij += A[ i ][ k ] * A[ j ][ k ];\n+154 }\n+155 }\n+156 }\n+157\n+158 template< int m, int n >\n+159 static void AAT ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype,\n+m, m > &ret )\n+160 {\n+161 for( int i = 0; i < m; ++i )\n+162 {\n+163 for( int j = 0; j < i; ++j )\n+164 {\n+165 ret[ i ][ j ] = ctype( 0 );\n+166 for( int k = 0; k < n; ++k )\n+167 ret[ i ][ j ] += A[ i ][ k ] * A[ j ][ k ];\n+168 ret[ j ][ i ] = ret[ i ][ j ];\n+169 }\n+170 ret[ i ][ i ] = ctype( 0 );\n+171 for( int k = 0; k < n; ++k )\n+172 ret[ i ][ i ] += A[ i ][ k ] * A[ i ][ k ];\n+173 }\n+174 }\n+175\n+176 template< int n >\n+177 static void Lx ( const FieldMatrix< ctype, n, n > &L, const FieldVector<\n+ctype, n > &x, FieldVector< ctype, n > &ret )\n+178 {\n+179 for( int i = 0; i < n; ++i )\n+180 {\n+181 ret[ i ] = ctype( 0 );\n+182 for( int j = 0; j <= i; ++j )\n+183 ret[ i ] += L[ i ][ j ] * x[ j ];\n+184 }\n+185 }\n+186\n+187 template< int n >\n+188 static void LTx ( const FieldMatrix< ctype, n, n > &L, const FieldVector<\n+ctype, n > &x, FieldVector< ctype, n > &ret )\n+189 {\n+190 for( int i = 0; i < n; ++i )\n+191 {\n+192 ret[ i ] = ctype( 0 );\n+193 for( int j = i; j < n; ++j )\n+194 ret[ i ] += L[ j ][ i ] * x[ j ];\n+195 }\n+196 }\n+197\n+198 template< int n >\n+199 static void LTL ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype,\n+n, n > &ret )\n+200 {\n+201 for( int i = 0; i < n; ++i )\n+202 {\n+203 for( int j = 0; j < i; ++j )\n+204 {\n+205 ret[ i ][ j ] = ctype( 0 );\n+206 for( int k = i; k < n; ++k )\n+207 ret[ i ][ j ] += L[ k ][ i ] * L[ k ][ j ];\n+208 ret[ j ][ i ] = ret[ i ][ j ];\n+209 }\n+210 ret[ i ][ i ] = ctype( 0 );\n+211 for( int k = i; k < n; ++k )\n+212 ret[ i ][ i ] += L[ k ][ i ] * L[ k ][ i ];\n+213 }\n+214 }\n+215\n+216 template< int n >\n+217 static void LLT ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype,\n+n, n > &ret )\n+218 {\n+219 for( int i = 0; i < n; ++i )\n+220 {\n+221 for( int j = 0; j < i; ++j )\n+222 {\n+223 ret[ i ][ j ] = ctype( 0 );\n+224 for( int k = 0; k <= j; ++k )\n+225 ret[ i ][ j ] += L[ i ][ k ] * L[ j ][ k ];\n+226 ret[ j ][ i ] = ret[ i ][ j ];\n+227 }\n+228 ret[ i ][ i ] = ctype( 0 );\n+229 for( int k = 0; k <= i; ++k )\n+230 ret[ i ][ i ] += L[ i ][ k ] * L[ i ][ k ];\n+231 }\n+232 }\n+233\n+234 template< int n >\n+235 static bool cholesky_L ( const FieldMatrix< ctype, n, n > &A, FieldMatrix<\n+ctype, n, n > &ret, const bool checkSingular = false )\n+236 {\n+237 using std::sqrt;\n+238 for( int i = 0; i < n; ++i )\n+239 {\n+240 ctype &rii = ret[ i ][ i ];\n+241\n+242 ctype xDiag = A[ i ][ i ];\n+243 for( int j = 0; j < i; ++j )\n+244 xDiag -= ret[ i ][ j ] * ret[ i ][ j ];\n+245\n+246 // in some cases A can be singular, e.g. when checking local for\n+247 // outside points during checkInside\n+248 if( checkSingular && ! ( xDiag > ctype( 0 )) )\n+249 return false ;\n+250\n+251 // otherwise this should be true always\n+252 assert( xDiag > ctype( 0 ) );\n+253 rii = sqrt( xDiag );\n+254\n+255 ctype invrii = ctype( 1 ) / rii;\n+256 for( int k = i+1; k < n; ++k )\n+257 {\n+258 ctype x = A[ k ][ i ];\n+259 for( int j = 0; j < i; ++j )\n+260 x -= ret[ i ][ j ] * ret[ k ][ j ];\n+261 ret[ k ][ i ] = invrii * x;\n+262 }\n+263 }\n+264\n+265 // return true for meaning A is non-singular\n+266 return true;\n+267 }\n+268\n+269 template< int n >\n+270 static ctype detL ( const FieldMatrix< ctype, n, n > &L )\n+271 {\n+272 ctype det( 1 );\n+273 for( int i = 0; i < n; ++i )\n+274 det *= L[ i ][ i ];\n+275 return det;\n+276 }\n+277\n+278 template< int n >\n+279 static ctype invL ( FieldMatrix< ctype, n, n > &L )\n+280 {\n+281 ctype det( 1 );\n+282 for( int i = 0; i < n; ++i )\n+283 {\n+284 ctype &lii = L[ i ][ i ];\n+285 det *= lii;\n+286 lii = ctype( 1 ) / lii;\n+287 for( int j = 0; j < i; ++j )\n+288 {\n+289 ctype &lij = L[ i ][ j ];\n+290 ctype x = lij * L[ j ][ j ];\n+291 for( int k = j+1; k < i; ++k )\n+292 x += L[ i ][ k ] * L[ k ][ j ];\n+293 lij = (-lii) * x;\n+294 }\n+295 }\n+296 return det;\n+297 }\n+298\n+299 // calculates x := L^{-1} x\n+300 template< int n >\n+301 static void invLx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n >\n+&x )\n+302 {\n+303 for( int i = 0; i < n; ++i )\n+304 {\n+305 for( int j = 0; j < i; ++j )\n+306 x[ i ] -= L[ i ][ j ] * x[ j ];\n+307 x[ i ] /= L[ i ][ i ];\n+308 }\n+309 }\n+310\n+311 // calculates x := L^{-T} x\n+312 template< int n >\n+313 static void invLTx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n >\n+&x )\n+314 {\n+315 for( int i = n; i > 0; --i )\n+316 {\n+317 for( int j = i; j < n; ++j )\n+318 x[ i-1 ] -= L[ j ][ i-1 ] * x[ j ];\n+319 x[ i-1 ] /= L[ i-1 ][ i-1 ];\n+320 }\n+321 }\n+322\n+323 template< int n >\n+324 static ctype spdDetA ( const FieldMatrix< ctype, n, n > &A )\n+325 {\n+326 // return A[0][0]*A[1][1]-A[1][0]*A[1][0];\n+327 FieldMatrix< ctype, n, n > L;\n+328 cholesky_L( A, L );\n+329 return detL( L );\n+330 }\n+331\n+332 template< int n >\n+333 static ctype spdInvA ( FieldMatrix< ctype, n, n > &A )\n+334 {\n+335 FieldMatrix< ctype, n, n > L;\n+336 cholesky_L( A, L );\n+337 const ctype det = invL( L );\n+338 LTL( L, A );\n+339 return det;\n+340 }\n+341\n+342 // calculate x := A^{-1} x\n+343 template< int n >\n+344 static bool spdInvAx ( FieldMatrix< ctype, n, n > &A, FieldVector< ctype, n\n+> &x, const bool checkSingular = false )\n+345 {\n+346 FieldMatrix< ctype, n, n > L;\n+347 const bool invertible = cholesky_L( A, L, checkSingular );\n+348 if( ! invertible ) return invertible ;\n+349 invLx( L, x );\n+350 invLTx( L, x );\n+351 return invertible;\n+352 }\n+353\n+354 template< int m, int n >\n+355 static ctype detATA ( const FieldMatrix< ctype, m, n > &A )\n+356 {\n+357 if( m >= n )\n+358 {\n+359 FieldMatrix< ctype, n, n > ata;\n+360 ATA_L( A, ata );\n+361 return spdDetA( ata );\n+362 }\n+363 else\n+364 return ctype( 0 );\n+365 }\n+366\n+372 template< int m, int n >\n+373 static ctype sqrtDetAAT ( const FieldMatrix< ctype, m, n > &A )\n+374 {\n+375 using std::abs;\n+376 using std::sqrt;\n+377 // These special cases are here not only for speed reasons:\n+378 // The general implementation aborts if the matrix is almost singular,\n+379 // and the special implementation provide a stable way to handle that case.\n+380 if( (n == 2) && (m == 2) )\n+381 {\n+382 // Special implementation for 2x2 matrices: faster and more stable\n+383 return abs( A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ] );\n+384 }\n+385 else if( (n == 3) && (m == 3) )\n+386 {\n+387 // Special implementation for 3x3 matrices\n+388 const ctype v0 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 1 ][ 1 ] * A[ 0 ][ 2 ];\n+389 const ctype v1 = A[ 0 ][ 2 ] * A[ 1 ][ 0 ] - A[ 1 ][ 2 ] * A[ 0 ][ 0 ];\n+390 const ctype v2 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 1 ][ 0 ] * A[ 0 ][ 1 ];\n+391 return abs( v0 * A[ 2 ][ 0 ] + v1 * A[ 2 ][ 1 ] + v2 * A[ 2 ][ 2 ] );\n+392 }\n+393 else if ( (n == 3) && (m == 2) )\n+394 {\n+395 // Special implementation for 2x3 matrices\n+396 const ctype v0 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 0 ][ 1 ] * A[ 1 ][ 0 ];\n+397 const ctype v1 = A[ 0 ][ 0 ] * A[ 1 ][ 2 ] - A[ 1 ][ 0 ] * A[ 0 ][ 2 ];\n+398 const ctype v2 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 0 ][ 2 ] * A[ 1 ][ 1 ];\n+399 return sqrt( v0*v0 + v1*v1 + v2*v2);\n+400 }\n+401 else if( n >= m )\n+402 {\n+403 // General case\n+404 FieldMatrix< ctype, m, m > aat;\n+405 AAT_L( A, aat );\n+406 return spdDetA( aat );\n+407 }\n+408 else\n+409 return ctype( 0 );\n+410 }\n+411\n+412 // A^{-1}_L = (A^T A)^{-1} A^T\n+413 // => A^{-1}_L A = I\n+414 template< int m, int n >\n+415 static ctype leftInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix<\n+ctype, n, m > &ret )\n+416 {\n+417 static_assert((m >= n), \"Matrix has no left inverse.\");\n+418 FieldMatrix< ctype, n, n > ata;\n+419 ATA_L( A, ata );\n+420 const ctype det = spdInvA( ata );\n+421 ATBT( ata, A, ret );\n+422 return det;\n+423 }\n+424\n+425 template< int m, int n >\n+426 static void leftInvAx ( const FieldMatrix< ctype, m, n > &A, const\n+FieldVector< ctype, m > &x, FieldVector< ctype, n > &y )\n+427 {\n+428 static_assert((m >= n), \"Matrix has no left inverse.\");\n+429 FieldMatrix< ctype, n, n > ata;\n+430 ATx( A, x, y );\n+431 ATA_L( A, ata );\n+432 spdInvAx( ata, y );\n+433 }\n+434\n+436 template< int m, int n >\n+437 static ctype rightInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix<\n+ctype, n, m > &ret )\n+438 {\n+439 static_assert((n >= m), \"Matrix has no right inverse.\");\n+440 using std::abs;\n+441 if( (n == 2) && (m == 2) )\n+442 {\n+443 const ctype det = (A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ]);\n+444 const ctype detInv = ctype( 1 ) / det;\n+445 ret[ 0 ][ 0 ] = A[ 1 ][ 1 ] * detInv;\n+446 ret[ 1 ][ 1 ] = A[ 0 ][ 0 ] * detInv;\n+447 ret[ 1 ][ 0 ] = -A[ 1 ][ 0 ] * detInv;\n+448 ret[ 0 ][ 1 ] = -A[ 0 ][ 1 ] * detInv;\n+449 return abs( det );\n+450 }\n+451 else\n+452 {\n+453 FieldMatrix< ctype, m , m > aat;\n+454 AAT_L( A, aat );\n+455 const ctype det = spdInvA( aat );\n+456 ATBT( A , aat , ret );\n+457 return det;\n+458 }\n+459 }\n+460\n+461 template< int m, int n >\n+462 static bool xTRightInvA ( const FieldMatrix< ctype, m, n > &A, const\n+FieldVector< ctype, n > &x, FieldVector< ctype, m > &y )\n+463 {\n+464 static_assert((n >= m), \"Matrix has no right inverse.\");\n+465 FieldMatrix< ctype, m, m > aat;\n+466 Ax( A, x, y );\n+467 AAT_L( A, aat );\n+468 // check whether aat is singular and return true if non-singular\n+469 return spdInvAx( aat, y, true );\n+470 }\n+471 };\n+472\n+473 } // namespace Impl\n+474\n+475\n+476\n+482 template< class ct, int mydim, int cdim>\n+_\b4_\b8_\b3 class _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+484 {\n+485 public:\n+486\n+_\b4_\b8_\b8 typedef ct _\bc_\bt_\by_\bp_\be;\n+489\n+_\b4_\b9_\b1 static const int _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn= mydim;\n+492\n+_\b4_\b9_\b4 static const int _\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = cdim;\n+495\n+_\b4_\b9_\b7 typedef FieldVector< ctype, mydimension > _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+498\n+_\b5_\b0_\b0 typedef FieldVector< ctype, coorddimension > _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be;\n+501\n+_\b5_\b0_\b3 typedef _\bc_\bt_\by_\bp_\be _\bV_\bo_\bl_\bu_\bm_\be;\n+504\n+_\b5_\b0_\b6 typedef FieldMatrix< ctype, mydimension, coorddimension >\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n+507\n+_\b5_\b0_\b9 typedef FieldMatrix< ctype, coorddimension, mydimension >\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd;\n+510\n+_\b5_\b1_\b2 typedef FieldMatrix< ctype, coorddimension, mydimension > _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n+513\n+_\b5_\b1_\b5 typedef FieldMatrix< ctype, mydimension, coorddimension > _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be;\n+516\n+517 private:\n+519 typedef _\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b<_\b _\bc_\bt_\by_\bp_\be_\b,\n+_\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b> > _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt;\n+520\n+521 typedef _\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs_\b<_\b _\bc_\bt_\by_\bp_\be_\b,_\b _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b _\b> _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs;\n+522\n+523 // Helper class to compute a matrix pseudo inverse\n+524 typedef Impl::FieldMatrixHelper< ct > MatrixHelper;\n+525\n+526 public:\n+_\b5_\b2_\b8 _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt &refElement, const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+&origin,\n+529 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jt )\n+530 : refElement_(refElement), origin_(origin), jacobianTransposed_(jt)\n+531 {\n+532 integrationElement_ = MatrixHelper::template rightInvA< mydimension,\n+coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ );\n+533 }\n+534\n+_\b5_\b3_\b6 _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt, const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &origin,\n+537 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &jt )\n+538 : _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by(_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs::general( gt ), origin, jt)\n+539 { }\n+540\n+542 template< class CoordVector >\n+_\b5_\b4_\b3 _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( const _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt &refElement, const CoordVector\n+&coordVector )\n+544 : refElement_(refElement), origin_(coordVector[0])\n+545 {\n+546 for( int i = 0; i < _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; ++i )\n+547 jacobianTransposed_[ i ] = coordVector[ i+1 ] - origin_;\n+548 integrationElement_ = MatrixHelper::template rightInvA< mydimension,\n+coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ );\n+549 }\n+550\n+552 template< class CoordVector >\n+_\b5_\b5_\b3 _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by ( _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be gt, const CoordVector &coordVector )\n+554 : _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by(_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs::general( gt ), coordVector)\n+555 { }\n+556\n+_\b5_\b5_\b8 bool _\ba_\bf_\bf_\bi_\bn_\be () const { return true; }\n+559\n+_\b5_\b6_\b1 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be _\bt_\by_\bp_\be () const { return refElement_._\bt_\by_\bp_\be(); }\n+562\n+_\b5_\b6_\b4 int _\bc_\bo_\br_\bn_\be_\br_\bs () const { return refElement_._\bs_\bi_\bz_\be( _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn ); }\n+565\n+_\b5_\b6_\b7 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bc_\bo_\br_\bn_\be_\br ( int i ) const\n+568 {\n+569 return _\bg_\bl_\bo_\bb_\ba_\bl( refElement_._\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn( i, _\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn ) );\n+570 }\n+571\n+_\b5_\b7_\b3 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bc_\be_\bn_\bt_\be_\br () const { return _\bg_\bl_\bo_\bb_\ba_\bl( refElement_._\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn( 0,\n+0 ) ); }\n+574\n+_\b5_\b8_\b1 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bg_\bl_\bo_\bb_\ba_\bl ( const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl ) const\n+582 {\n+583 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bg_\bl_\bo_\bb_\ba_\bl( origin_ );\n+584 jacobianTransposed_.umtv( _\bl_\bo_\bc_\ba_\bl, _\bg_\bl_\bo_\bb_\ba_\bl );\n+585 return _\bg_\bl_\bo_\bb_\ba_\bl;\n+586 }\n+587\n+_\b6_\b0_\b1 _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bl_\bo_\bc_\ba_\bl ( const _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bg_\bl_\bo_\bb_\ba_\bl ) const\n+602 {\n+603 _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be _\bl_\bo_\bc_\ba_\bl;\n+604 jacobianInverseTransposed_.mtv( _\bg_\bl_\bo_\bb_\ba_\bl - origin_, _\bl_\bo_\bc_\ba_\bl );\n+605 return _\bl_\bo_\bc_\ba_\bl;\n+606 }\n+607\n+_\b6_\b1_\b8 _\bc_\bt_\by_\bp_\be _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt ([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl)\n+const\n+619 {\n+620 return integrationElement_;\n+621 }\n+622\n+_\b6_\b2_\b4 _\bV_\bo_\bl_\bu_\bm_\be _\bv_\bo_\bl_\bu_\bm_\be () const\n+625 {\n+626 return integrationElement_ * refElement_._\bv_\bo_\bl_\bu_\bm_\be();\n+627 }\n+628\n+_\b6_\b3_\b5 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ([[maybe_unused]] const\n+_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n+636 {\n+637 return jacobianTransposed_;\n+638 }\n+639\n+_\b6_\b4_\b6 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd &_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd ([\n+[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n+647 {\n+648 return jacobianInverseTransposed_;\n+649 }\n+650\n+_\b6_\b5_\b7 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn ([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be &_\bl_\bo_\bc_\ba_\bl) const\n+658 {\n+659 return jacobianTransposed_.transposed();\n+660 }\n+661\n+_\b6_\b6_\b8 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be ([[maybe_unused]] const _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+&_\bl_\bo_\bc_\ba_\bl) const\n+669 {\n+670 return jacobianInverseTransposed_.transposed();\n+671 }\n+672\n+_\b6_\b7_\b3 friend _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt ( const _\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by &geometry )\n+674 {\n+675 return geometry.refElement_;\n+676 }\n+677\n+678 private:\n+679 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt refElement_;\n+680 _\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be origin_;\n+681 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jacobianTransposed_;\n+682 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd jacobianInverseTransposed_;\n+683 _\bc_\bt_\by_\bp_\be integrationElement_;\n+684 };\n+685\n+686} // namespace Dune\n+687\n+688#endif // #ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH\n _\bt_\by_\bp_\be_\b._\bh_\bh\n A unique label for each type of element that can occur in a grid.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+unspecified-type ReferenceElement\n+Returns the type of reference element for the argument type T.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:497\n _\bD_\bu_\bn_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:21\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by\n-Provide a factory over the generic topologies.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:42\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\by\n-Traits::Factory Factory\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:47\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n-static Object * create(const Dune::GeometryType >, const Key &key)\n-dynamically create objects\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:50\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static const unsigned int dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:44\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n-static Object * create(const Key &key)\n-statically create objects\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bl_\be_\ba_\bs_\be\n-static void release(Object *object)\n-release the object returned by the create methods\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:71\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bK_\be_\by\n-Traits::Key Key\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:45\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bb_\bj_\be_\bc_\bt\n-Traits::Object Object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:46\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by\n-A wrapper for a TopologyFactory providing singleton storage. Same usage as\n-TopologyFactory but with e...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:82\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n-static auto create(const Key &key) -> std::enable_if_t< Topology::\n-dimension==dimension, Object * >\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:103\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n-static Object * create(const Dune::GeometryType >, const Key &key)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:88\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\br_\be_\bl_\be_\ba_\bs_\be\n-static void release(Object *object)\n-release the object returned by the create methods\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:110\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bO_\bb_\bj_\be_\bc_\bt\n-const Factory::Object Object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:85\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bK_\be_\by\n-Factory::Key Key\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:84\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n-static auto create(const Key &key) -> std::enable_if_t< static_cast<\n-GeometryType >(geometryId).dim()==dimension, Object * >\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:95\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bo_\bp_\bo_\bl_\bo_\bg_\by_\bS_\bi_\bn_\bg_\bl_\be_\bt_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\by_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static const unsigned int dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn topologyfactory.hh:83\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+This class provides access to geometric and topological properties of a\n+reference element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n+CoordinateField volume() const\n+obtain the volume of the reference element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:241\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bt_\by_\bp_\be\n+decltype(auto) type(int i, int c) const\n+obtain the type of subentity (i,c)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:171\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bs_\bi_\bz_\be\n+int size(int c) const\n+number of subentities of codimension c\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:94\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn\n+decltype(auto) position(int i, int c) const\n+position of the barycenter of entity (i,c)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelement.hh:203\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:33\n+_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs\n+Class providing access to the singletons of the reference elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referenceelements.hh:170\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+Implementation of the Geometry interface for affine geometries.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:484\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+AffineGeometry(const ReferenceElement &refElement, const CoordVector\n+&coordVector)\n+Create affine geometry from reference element and a vector of vertex\n+coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:543\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+AffineGeometry(Dune::GeometryType gt, const GlobalCoordinate &origin, const\n+JacobianTransposed &jt)\n+Create affine geometry from GeometryType, one vertex, and the Jacobian matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:536\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+FieldVector< ctype, mydimension > LocalCoordinate\n+Type for local coordinate vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:497\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bt_\by_\bp_\be\n+Dune::GeometryType type() const\n+Obtain the type of the reference element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:561\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bm_\by_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static const int mydimension\n+Dimension of the geometry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:491\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+AffineGeometry(const ReferenceElement &refElement, const GlobalCoordinate\n+&origin, const JacobianTransposed &jt)\n+Create affine geometry from reference element, one vertex, and the Jacobian\n+matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:528\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bV_\bo_\bl_\bu_\bm_\be\n+ctype Volume\n+Type used for volume.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:503\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n+JacobianInverse jacobianInverse(const LocalCoordinate &local) const\n+Obtain the Jacobian's inverse.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:668\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bl_\be_\bm_\be_\bn_\bt\n+friend ReferenceElement referenceElement(const AffineGeometry &geometry)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:673\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by\n+AffineGeometry(Dune::GeometryType gt, const CoordVector &coordVector)\n+Create affine geometry from GeometryType and a vector of vertex coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:553\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bE_\bl_\be_\bm_\be_\bn_\bt\n+ctype integrationElement(const LocalCoordinate &local) const\n+Obtain the integration element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:618\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be\n+FieldMatrix< ctype, mydimension, coorddimension > JacobianInverse\n+Type for the inverse Jacobian matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:515\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+FieldMatrix< ctype, coorddimension, mydimension > Jacobian\n+Type for the Jacobian matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:512\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n+const JacobianInverseTransposed & jacobianInverseTransposed(const\n+LocalCoordinate &local) const\n+Obtain the transposed of the Jacobian's inverse.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:646\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n+FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed\n+Type for the transposed Jacobian matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:506\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br\n+GlobalCoordinate corner(int i) const\n+Obtain coordinates of the i-th corner.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:567\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\br_\bn_\be_\br_\bs\n+int corners() const\n+Obtain number of corners of the corresponding reference element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:564\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bl_\bo_\bc_\ba_\bl\n+LocalCoordinate local(const GlobalCoordinate &global) const\n+Evaluate the inverse mapping.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:601\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bI_\bn_\bv_\be_\br_\bs_\be_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n+FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed\n+Type for the transposed inverse Jacobian matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:509\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bo_\bo_\br_\bd_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static const int coorddimension\n+Dimension of the world space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:494\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bg_\bl_\bo_\bb_\ba_\bl\n+GlobalCoordinate global(const LocalCoordinate &local) const\n+Evaluate the mapping.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:581\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\be_\bn_\bt_\be_\br\n+GlobalCoordinate center() const\n+Obtain the centroid of the mapping's image.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:573\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+Jacobian jacobian(const LocalCoordinate &local) const\n+Obtain the Jacobian.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:657\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bc_\bt_\by_\bp_\be\n+ct ctype\n+Type used for coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:488\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bG_\bl_\bo_\bb_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be\n+FieldVector< ctype, coorddimension > GlobalCoordinate\n+Type for coordinate vector in world space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:500\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\ba_\bf_\bf_\bi_\bn_\be\n+bool affine() const\n+Always true: this is an affine geometry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:558\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n+const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local)\n+const\n+Obtain the transposed of the Jacobian.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:635\n+_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bf_\bf_\bi_\bn_\be_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\b:_\b:_\bv_\bo_\bl_\bu_\bm_\be\n+Volume volume() const\n+Obtain the volume of the element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn affinegeometry.hh:624\n _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be\n Unique label for each type of entities that can occur in DUNE grids.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:126\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bo_\bm_\be_\bt_\br_\by_\bT_\by_\bp_\be_\b:_\b:_\bi_\bd\n-constexpr unsigned int id() const\n-Return the topology id of the type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type.hh:377\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00251.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00251.html", "unified_diff": "@@ -204,15 +204,15 @@\n
    GeometryTypes::cube(2), 2>
    \n
    {
    \n
    typedef SquaringTheCircle::RefinementImp<CoordType> Imp;
    \n
    };
    \n
    }
    \n
    This namespace contains the implementation of Refinement.
    Definition base.cc:29
    \n If you implement a template class, you have to specialise struct RefinementImp::Traits for every possible combination of topologyId and coerceToId that your implementation supports.\n-
  • #include \"refinement/squaringthecircle.cc\" from refinement.hh.
  • \n+
  • #include \"refinement/squaringthecircle.cc\" from refinement.hh.
  • \n \n

    This is enough to integrate your implementation into the Refinement system. You probably want to include it into VirtualRefinement also.

    \n

    \n Namespaces

    \n

    Function Documentation

    \n \n

    ◆ refinementIntervals()

    \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a00254.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00254.html", "unified_diff": "@@ -397,16 +397,16 @@\n )\n \n \n \n
    \n \n

    Algorithm to reduce vertex order information.

    \n-
    \n-\n+
    Parameters
    \n \n \n \n \n
    inBeginStart of the range of ids to reduce.
    inEndEnd of the range of ids to reduce.
    outItStart of the sequence where to store the result.
    \n
    \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a01083.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01083.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::Geo::ReferenceElement< Implementation > Class Template Reference
    \n
    \n
    \n \n

    This class provides access to geometric and topological properties of a reference element. \n More...

    \n \n-

    #include <dune/geometry/referenceelement.hh>

    \n+

    #include <dune/geometry/referenceelement.hh>

    \n
    \n Inheritance diagram for Dune::Geo::ReferenceElement< Implementation >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -887,16 +887,16 @@\n
    \n \n

    The dimension of the reference element.

    \n \n
    \n
    \n
    The documentation for this class was generated from the following files:\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a01087.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01087.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-geometry-doc/doxygen/a01091.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01091.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::Geo::ReferenceElements< ctype_, dim > Struct Template Reference
    \n \n
    \n \n

    Class providing access to the singletons of the reference elements. \n More...

    \n \n-

    #include <dune/geometry/referenceelements.hh>

    \n+

    #include <dune/geometry/referenceelements.hh>

    \n \n \n \n \n \n \n@@ -389,16 +389,16 @@\n
    \n \n

    The dimension of the contained reference elements.

    \n \n
    \n \n
    The documentation for this struct was generated from the following files:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a01099.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01099.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::AffineGeometry< ct, mydim, cdim > Class Template Reference
    \n \n
    \n \n

    Implementation of the Geometry interface for affine geometries. \n More...

    \n \n-

    #include <dune/geometry/affinegeometry.hh>

    \n+

    #include <dune/geometry/affinegeometry.hh>

    \n

    \n Public Types

    using ctype = ctype_
     The coordinate field type of the contained reference elements.
     
    using CoordinateField = ctype
    \n \n \n \n \n \n@@ -995,15 +995,15 @@\n
    \n \n

    Dimension of the geometry.

    \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-geometry-doc/doxygen/a01103.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01103.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::AxisAlignedCubeGeometry< CoordType, dim, coorddim > Class Template Reference
    \n \n
    \n \n

    A geometry implementation for axis-aligned hypercubes. \n More...

    \n \n-

    #include <dune/geometry/axisalignedcubegeometry.hh>

    \n+

    #include <dune/geometry/axisalignedcubegeometry.hh>

    \n

    \n Public Types

    typedef ct ctype
     Type used for coordinates.
     
    typedef FieldVector< ctype, mydimensionLocalCoordinate
    \n \n \n \n \n \n@@ -900,15 +900,15 @@\n
    \n \n

    Dimension of the cube element.

    \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-geometry-doc/doxygen/a01159.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01159.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Dim< dim > Struct Template Reference
    \n \n
    \n \n

    Static tag representing a dimension. \n More...

    \n \n-

    #include <dune/geometry/dimension.hh>

    \n+

    #include <dune/geometry/dimension.hh>

    \n
    \n Inheritance diagram for Dune::Dim< dim >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -117,15 +117,15 @@\n \n

    \n Public Types

    typedef CoordType ctype
     Type used for single coordinate coefficients.
     
    typedef FieldVector< ctype, dim > LocalCoordinate
    \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-geometry-doc/doxygen/a01163.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01163.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Codim< codim > Struct Template Reference
    \n \n
    \n \n

    Static tag representing a codimension. \n More...

    \n \n-

    #include <dune/geometry/dimension.hh>

    \n+

    #include <dune/geometry/dimension.hh>

    \n
    \n Inheritance diagram for Dune::Codim< codim >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -123,15 +123,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-geometry-doc/doxygen/a01167.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01167.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::GeneralVertexOrder< dim, Index_ > Class Template Reference
    \n \n
    \n \n

    Class providing information on the ordering of vertices. \n More...

    \n \n-

    #include <dune/geometry/generalvertexorder.hh>

    \n+

    #include <dune/geometry/generalvertexorder.hh>

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

    \n Classes

    class  iterator
     Iterate over the vertex indices of some sub-entity. More...
     
    \n@@ -417,15 +417,15 @@\n
    \n \n

    export the dimension of the entity we provide information for

    \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-geometry-doc/doxygen/a01171.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01171.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::GeneralVertexOrder< dim, Index_ >::iterator Class Reference
    \n \n
    \n \n

    Iterate over the vertex indices of some sub-entity. \n More...

    \n \n-

    #include <dune/geometry/generalvertexorder.hh>

    \n+

    #include <dune/geometry/generalvertexorder.hh>

    \n
    \n Inheritance diagram for Dune::GeneralVertexOrder< dim, Index_ >::iterator:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -341,15 +341,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-geometry-doc/doxygen/a01175.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01175.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::MultiLinearGeometryTraits< ct > Struct Template Reference
    \n \n
    \n \n

    default traits class for MultiLinearGeometry \n More...

    \n \n-

    #include <dune/geometry/multilineargeometry.hh>

    \n+

    #include <dune/geometry/multilineargeometry.hh>

    \n \n \n \n \n \n \n@@ -176,15 +176,15 @@\n
    \n \n

    tolerance to numerical algorithms

    \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-geometry-doc/doxygen/a01179.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01179.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::MultiLinearGeometryTraits< ct >::CornerStorage< mydim, cdim > Struct Template Reference
    \n \n
    \n \n

    template specifying the storage for the corners \n More...

    \n \n-

    #include <dune/geometry/multilineargeometry.hh>

    \n+

    #include <dune/geometry/multilineargeometry.hh>

    \n

    \n Classes

    struct  CornerStorage
     template specifying the storage for the corners More...
     
    struct  hasSingleGeometryType
    \n \n \n \n

    \n Public Types

    typedef std::vector< FieldVector< ct, cdim > > Type
     
    \n

    Detailed Description

    \n@@ -143,15 +143,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-geometry-doc/doxygen/a01183.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01183.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::MultiLinearGeometryTraits< ct >::hasSingleGeometryType< dim > Struct Template Reference
    \n \n
    \n \n

    will there be only one geometry type for a dimension? \n More...

    \n \n-

    #include <dune/geometry/multilineargeometry.hh>

    \n+

    #include <dune/geometry/multilineargeometry.hh>

    \n \n \n \n \n \n \n@@ -149,15 +149,15 @@\n \n

    \n Static Public Attributes

    static const bool v = false
     
    static const unsigned int topologyId = ~0u
     
    \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-geometry-doc/doxygen/a01187.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01187.html", "unified_diff": "@@ -85,15 +85,15 @@\n
    Dune::MultiLinearGeometry< ct, mydim, cdim, Traits > Class Template Reference
    \n \n
    \n \n

    generic geometry implementation based on corner coordinates \n More...

    \n \n-

    #include <dune/geometry/multilineargeometry.hh>

    \n+

    #include <dune/geometry/multilineargeometry.hh>

    \n
    \n Inheritance diagram for Dune::MultiLinearGeometry< ct, mydim, cdim, Traits >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -1521,15 +1521,15 @@\n
    \n \n

    geometry 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-geometry-doc/doxygen/a01191.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01191.html", "unified_diff": "@@ -76,15 +76,15 @@\n \n
    Dune::MultiLinearGeometry< ct, mydim, cdim, Traits >::JacobianInverseTransposed Class Reference
    \n \n
    \n \n-

    #include <dune/geometry/multilineargeometry.hh>

    \n+

    #include <dune/geometry/multilineargeometry.hh>

    \n
    \n Inheritance diagram for Dune::MultiLinearGeometry< ct, mydim, cdim, Traits >::JacobianInverseTransposed:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -211,15 +211,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-geometry-doc/doxygen/a01195.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01195.html", "unified_diff": "@@ -84,15 +84,15 @@\n
    Dune::CachedMultiLinearGeometry< ct, mydim, cdim, Traits > Class Template Reference
    \n \n
    \n \n

    Implement a MultiLinearGeometry with additional caching. \n More...

    \n \n-

    #include <dune/geometry/multilineargeometry.hh>

    \n+

    #include <dune/geometry/multilineargeometry.hh>

    \n
    \n Inheritance diagram for Dune::CachedMultiLinearGeometry< ct, mydim, cdim, Traits >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -1479,15 +1479,15 @@\n
    \n \n

    geometry 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-geometry-doc/doxygen/a01199.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01199.html", "unified_diff": "@@ -76,29 +76,29 @@\n
    Dune::QuadratureOrderOutOfRange Class Reference
    \n \n
    \n \n

    Exception thrown if a desired QuadratureRule is not available, because the requested order is to high. \n More...

    \n \n-

    #include <dune/geometry/quadraturerules.hh>

    \n+

    #include <dune/geometry/quadraturerules.hh>

    \n
    \n Inheritance diagram for Dune::QuadratureOrderOutOfRange:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n \"\"\n \n
    \n

    Detailed Description

    \n

    Exception thrown if a desired QuadratureRule is not available, because the requested order is to high.

    \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-geometry-doc/doxygen/a01203.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01203.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::QuadraturePoint< ct, dim > Class Template Reference
    \n \n
    \n \n

    Single evaluation point in a quadrature rule. \n More...

    \n \n-

    #include <dune/geometry/quadraturerules.hh>

    \n+

    #include <dune/geometry/quadraturerules.hh>

    \n \n \n \n \n \n \n@@ -341,15 +341,15 @@\n \n

    \n Public Types

    typedef ct Field
     Number type used for coordinates and quadrature weights.
     
    typedef Dune::FieldVector< ct, dim > Vector
    \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-geometry-doc/doxygen/a01207.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01207.html", "unified_diff": "@@ -84,15 +84,15 @@\n
    Dune::QuadratureRule< ct, dim > Class Template Reference
    \n \n
    \n \n

    Abstract base class for quadrature rules. \n More...

    \n \n-

    #include <dune/geometry/quadraturerules.hh>

    \n+

    #include <dune/geometry/quadraturerules.hh>

    \n
    \n Inheritance diagram for Dune::QuadratureRule< ct, dim >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -474,15 +474,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-geometry-doc/doxygen/a01211.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01211.html", "unified_diff": "@@ -78,21 +78,21 @@\n
    Dune::QuadratureRuleFactory< ctype, dim > Class Template Reference
    \n \n
    \n \n

    Factory class for creation of quadrature rules, depending on GeometryType, order and QuadratureType. \n More...

    \n \n-

    #include <dune/geometry/quadraturerules.hh>

    \n+

    #include <dune/geometry/quadraturerules.hh>

    \n

    Detailed Description

    \n
    template<typename ctype, int dim>
    \n class Dune::QuadratureRuleFactory< ctype, dim >

    Factory class for creation of quadrature rules, depending on GeometryType, order and QuadratureType.

    \n

    The whole class is private and can only be accessed by the singleton container class QuadratureRules.

    \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-geometry-doc/doxygen/a01215.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01215.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::QuadratureRules< ctype, dim > Class Template Reference
    \n \n
    \n \n

    A container for all quadrature rules of dimension dim \n More...

    \n \n-

    #include <dune/geometry/quadraturerules.hh>

    \n+

    #include <dune/geometry/quadraturerules.hh>

    \n \n \n \n \n \n \n@@ -230,15 +230,15 @@\n
    \n \n

    select the appropriate QuadratureRule for GeometryType t and order p

    \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-geometry-doc/doxygen/a01219.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01219.html", "unified_diff": "@@ -75,17 +75,17 @@\n
    \n \n
    Dune::QuadratureRuleFactory< ctype, 0 > Class Template Reference
    \n
    \n
    \n \n-

    #include <dune/geometry/quadraturerules.hh>

    \n+

    #include <dune/geometry/quadraturerules.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-geometry-doc/doxygen/a01223.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01223.html", "unified_diff": "@@ -75,17 +75,17 @@\n
    \n \n
    Dune::QuadratureRuleFactory< ctype, 1 > Class Template Reference
    \n
    \n
    \n \n-

    #include <dune/geometry/quadraturerules.hh>

    \n+

    #include <dune/geometry/quadraturerules.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-geometry-doc/doxygen/a01227.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01227.html", "unified_diff": "@@ -75,17 +75,17 @@\n
    \n \n
    Dune::QuadratureRuleFactory< ctype, 2 > Class Template Reference
    \n
    \n
    \n \n-

    #include <dune/geometry/quadraturerules.hh>

    \n+

    #include <dune/geometry/quadraturerules.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-geometry-doc/doxygen/a01231.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01231.html", "unified_diff": "@@ -75,17 +75,17 @@\n
    \n \n
    Dune::QuadratureRuleFactory< ctype, 3 > Class Template Reference
    \n
    \n
    \n \n-

    #include <dune/geometry/quadraturerules.hh>

    \n+

    #include <dune/geometry/quadraturerules.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-geometry-doc/doxygen/a01239.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01239.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::Geo::ReferenceElement< Implementation >::Codim< codim > Struct Template Reference
    \n \n
    \n \n

    Collection of types depending on the codimension. \n More...

    \n \n-

    #include <dune/geometry/referenceelement.hh>

    \n+

    #include <dune/geometry/referenceelement.hh>

    \n

    \n Static Public Member Functions

    static unsigned maxOrder (const GeometryType &t, QuadratureType::Enum qt=QuadratureType::GaussLegendre)
     maximum quadrature order for given geometry type and quadrature type
     
    static const QuadratureRulerule (const GeometryType &t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre)
    \n \n \n \n \n

    \n Public Types

    using Geometry = implementation-defined
     type of geometry embedding a subentity into the reference element
     
    \n@@ -113,15 +113,15 @@\n
    \n \n

    type of geometry embedding a subentity into the reference element

    \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-geometry-doc/doxygen/a01259.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01259.html", "unified_diff": "@@ -412,15 +412,15 @@\n
    \n \n

    Know your own 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-geometry-doc/doxygen/a01263.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01263.html", "unified_diff": "@@ -101,15 +101,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-geometry-doc/doxygen/a01267.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01267.html", "unified_diff": "@@ -98,15 +98,15 @@\n CoordTypeCoordinate type of the refined element \n codimensionCodimension of the iterator\n \n \n \n

    This is the base class for SubEntityIterators. We have to use this construct because RefinementImp<...>::codim<...> cannot be specialized without first specializing RefinementImp.

    \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-geometry-doc/doxygen/a01271.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01271.html", "unified_diff": "@@ -161,15 +161,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-geometry-doc/doxygen/a01275.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01275.html", "unified_diff": "@@ -200,15 +200,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-geometry-doc/doxygen/a01279.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01279.html", "unified_diff": "@@ -265,15 +265,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-geometry-doc/doxygen/a01283.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01283.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-geometry-doc/doxygen/a01287.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01287.html", "unified_diff": "@@ -395,15 +395,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-geometry-doc/doxygen/a01291.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01291.html", "unified_diff": "@@ -101,15 +101,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-geometry-doc/doxygen/a01295.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01295.html", "unified_diff": "@@ -452,15 +452,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-geometry-doc/doxygen/a01299.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01299.html", "unified_diff": "@@ -513,15 +513,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-geometry-doc/doxygen/a01303.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01303.html", "unified_diff": "@@ -196,15 +196,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-geometry-doc/doxygen/a01307.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01307.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-geometry-doc/doxygen/a01311.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01311.html", "unified_diff": "@@ -402,15 +402,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-geometry-doc/doxygen/a01315.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01315.html", "unified_diff": "@@ -101,15 +101,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-geometry-doc/doxygen/a01319.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01319.html", "unified_diff": "@@ -452,15 +452,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-geometry-doc/doxygen/a01323.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01323.html", "unified_diff": "@@ -491,15 +491,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-geometry-doc/doxygen/a01327.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01327.html", "unified_diff": "@@ -196,15 +196,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-geometry-doc/doxygen/a01331.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01331.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-geometry-doc/doxygen/a01335.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01335.html", "unified_diff": "@@ -402,15 +402,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-geometry-doc/doxygen/a01339.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01339.html", "unified_diff": "@@ -101,15 +101,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-geometry-doc/doxygen/a01343.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01343.html", "unified_diff": "@@ -452,15 +452,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-geometry-doc/doxygen/a01347.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01347.html", "unified_diff": "@@ -491,15 +491,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-geometry-doc/doxygen/a01351.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01351.html", "unified_diff": "@@ -196,15 +196,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-geometry-doc/doxygen/a01355.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01355.html", "unified_diff": "@@ -395,15 +395,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-geometry-doc/doxygen/a01359.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01359.html", "unified_diff": "@@ -101,15 +101,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-geometry-doc/doxygen/a01363.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01363.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-geometry-doc/doxygen/a01367.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01367.html", "unified_diff": "@@ -384,15 +384,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-geometry-doc/doxygen/a01371.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01371.html", "unified_diff": "@@ -503,15 +503,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-geometry-doc/doxygen/a01375.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01375.html", "unified_diff": "@@ -152,15 +152,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-geometry-doc/doxygen/a01379.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01379.html", "unified_diff": "@@ -81,15 +81,15 @@\n
    Dune::TopologyFactory< Traits > Struct Template Reference
    \n \n
    \n \n

    Provide a factory over the generic topologies. \n More...

    \n \n-

    #include <dune/geometry/topologyfactory.hh>

    \n+

    #include <dune/geometry/topologyfactory.hh>

    \n \n \n \n \n \n \n@@ -328,15 +328,15 @@\n \n

    \n Public Types

    typedef Traits::Key Key
     
    typedef Traits::Object Object
     
    \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-geometry-doc/doxygen/a01383.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01383.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::TopologySingletonFactory< Factory > Struct Template Reference
    \n \n
    \n \n

    A wrapper for a TopologyFactory providing singleton storage. Same usage as TopologyFactory but with empty release method an internal storage. \n More...

    \n \n-

    #include <dune/geometry/topologyfactory.hh>

    \n+

    #include <dune/geometry/topologyfactory.hh>

    \n \n \n \n \n \n \n@@ -309,15 +309,15 @@\n \n

    \n Public Types

    typedef Factory::Key Key
     
    typedef const Factory::Object Object
     
    \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-geometry-doc/doxygen/a01391.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01391.html", "unified_diff": "@@ -80,15 +80,15 @@\n
    Dune::GeometryType Class Reference
    \n \n
    \n \n

    Unique label for each type of entities that can occur in DUNE grids. \n More...

    \n \n-

    #include <dune/geometry/type.hh>

    \n+

    #include <dune/geometry/type.hh>

    \n \n \n \n

    \n Public Types

    enum  BasicType {
    \n   simplex\n , cube\n , pyramid\n@@ -1059,15 +1059,15 @@\n

    Create an Id representation of this GeometryType.

    \n

    The returned Id encapsulates the whole information of this GeometryType into an enum suitable for being used as template parameter. The GeometryType can be reconstructed from the Id using GeometryType{id}.

    \n

    This function was mainly introduced to support older GCC versions (<10.2). There the implicit conversion from GeometryType to Id failed if a pure r-value template argument based on a static class member was used. (See dune/geometry/test/test-geometrytype-id.cc)

    \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-geometry-doc/doxygen/a01403.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01403.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::LocalGeometryTypeIndex Class Reference
    \n \n
    \n \n

    Compute per-dimension indices for geometry types. \n More...

    \n \n-

    #include <dune/geometry/typeindex.hh>

    \n+

    #include <dune/geometry/typeindex.hh>

    \n \n \n \n \n \n \n@@ -193,15 +193,15 @@\n
    \n \n

    compute the geometry type for the given local index and 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-geometry-doc/doxygen/a01407.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01407.html", "unified_diff": "@@ -79,15 +79,15 @@\n
    Dune::GlobalGeometryTypeIndex Class Reference
    \n \n
    \n \n

    Compute indices for geometry types, taking the dimension into account. \n More...

    \n \n-

    #include <dune/geometry/typeindex.hh>

    \n+

    #include <dune/geometry/typeindex.hh>

    \n

    \n Static Public Member Functions

    static constexpr std::size_t size (std::size_t dim)
     Compute total number of geometry types for the given dimension.
     
    static constexpr std::size_t index (const GeometryType &gt)
    \n \n \n \n \n \n@@ -183,15 +183,15 @@\n \n

    Compute total number of geometry types up to and including the given dimension.

    \n

    This includes irregular geometry types such as \"None\".

    \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-geometry-doc/doxygen/a01411.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01411.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-geometry-doc/doxygen/a01415.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01415.html", "unified_diff": "@@ -73,15 +73,15 @@\n \n \n
    \n
    Dune::VirtualRefinementSubEntityIteratorSpecial< dimension, CoordType, dimension > 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-geometry-doc/doxygen/a01419.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01419.html", "unified_diff": "@@ -161,15 +161,15 @@\n \n

    \n Static Public Member Functions

    static constexpr std::size_t offset (std::size_t dim)
     Compute the starting index for a given dimension including irregular geometry types.
     
    static constexpr std::size_t size (std::size_t maxdim)
    \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-geometry-doc/doxygen/a01423.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01423.html", "unified_diff": "@@ -367,15 +367,15 @@\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-geometry-doc/doxygen/a01427.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01427.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-geometry-doc/doxygen/a01431.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01431.html", "unified_diff": "@@ -110,15 +110,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-geometry-doc/doxygen/a01435.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01435.html", "unified_diff": "@@ -181,15 +181,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-geometry-doc/doxygen/a01439.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01439.html", "unified_diff": "@@ -344,15 +344,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-geometry-doc/doxygen/a01443.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01443.html", "unified_diff": "@@ -579,15 +579,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-geometry-doc/doxygen/a01447.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01447.html", "unified_diff": "@@ -341,15 +341,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-geometry-doc/doxygen/a01451.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01451.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-geometry-doc/doxygen/a01455.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01455.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-geometry-doc/doxygen/a01459.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01459.html", "unified_diff": "@@ -207,15 +207,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-geometry-doc/doxygen/a01463.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01463.html", "unified_diff": "@@ -121,15 +121,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-geometry-doc/doxygen/a01467.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01467.html", "unified_diff": "@@ -121,15 +121,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-geometry-doc/doxygen/a01471.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01471.html", "unified_diff": "@@ -121,15 +121,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-geometry-doc/doxygen/a01475.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01475.html", "unified_diff": "@@ -82,15 +82,15 @@\n
    Dune::VirtualRefinement< dimension, CoordType > Class Template Referenceabstract
    \n \n
    \n \n

    VirtualRefinement base class. \n More...

    \n \n-

    #include <dune/geometry/virtualrefinement.hh>

    \n+

    #include <dune/geometry/virtualrefinement.hh>

    \n
    \n Inheritance diagram for Dune::VirtualRefinement< dimension, CoordType >:
    \n
    \n
    \"Inheritance
    \n \n \"\"\n \"\"\n@@ -607,16 +607,16 @@\n \n \n
    \n \n
    \n
    \n
    The documentation for this class was generated from the following files:\n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/a01479.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a01479.html", "unified_diff": "@@ -76,21 +76,21 @@\n
    Dune::VirtualRefinement< dimension, CoordType >::Codim< codimension > Struct Template Reference
    \n \n
    \n \n

    codim database of VirtualRefinement \n More...

    \n \n-

    #include <dune/geometry/virtualrefinement.hh>

    \n+

    #include <dune/geometry/virtualrefinement.hh>

    \n

    Detailed Description

    \n
    template<int dimension, class CoordType>
    \n template<int codimension>
    \n struct Dune::VirtualRefinement< dimension, CoordType >::Codim< codimension >

    codim database of VirtualRefinement

    \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-geometry-doc/doxygen/dir_000004_000006.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/dir_000004_000006.html", "unified_diff": "@@ -69,14 +69,14 @@\n \n
    \n \n
    \n \n \n+

    geometry → refinement Relation

    File in dune/geometryIncludes file in dune/geometry/refinement
    refinement.hhbase.cc
    refinement.hhhcube.cc
    refinement.hhhcubetriangulation.cc
    refinement.hhprismtriangulation.cc
    refinement.hhpyramidtriangulation.cc
    refinement.hhsimplex.cc
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/dir_18620fa9f137864b479f21357cfac10d.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/dir_18620fa9f137864b479f21357cfac10d.html", "unified_diff": "@@ -95,54 +95,54 @@\n  refinement\n  \n  utility\n  \n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n+\n \n-\n-\n+\n+\n \n-\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

     affinegeometry.hh
     An implementation of the Geometry interface for affine geometries.
     affinegeometry.hh
     An implementation of the Geometry interface for affine geometries.
     
     axisalignedcubegeometry.hh
     A geometry implementation for axis-aligned hypercubes.
     axisalignedcubegeometry.hh
     A geometry implementation for axis-aligned hypercubes.
     
     deprecated_topology.hh
     deprecated_topology.hh
     
     dimension.hh
     dimension.hh
     
     generalvertexorder.hh
     generalvertexorder.hh
     
     multilineargeometry.hh
     multilineargeometry.hh
     
     quadraturerules.hh
     quadraturerules.hh
     
     referenceelement.hh
     referenceelement.hh
     
     referenceelementimplementation.cc
     referenceelementimplementation.cc
     
     referenceelementimplementation.hh
     referenceelementimplementation.hh
     
     referenceelements.hh
     referenceelements.hh
     
     refinement.hh
     This file simply includes all Refinement implementations so you don't have to do them separately.
     refinement.hh
     This file simply includes all Refinement implementations so you don't have to do them separately.
     
     topologyfactory.hh
     topologyfactory.hh
     
     type.hh
     A unique label for each type of element that can occur in a grid.
     type.hh
     A unique label for each type of element that can occur in a grid.
     
     typeindex.hh
     Helper classes to provide indices for geometrytypes for use in a vector.
     typeindex.hh
     Helper classes to provide indices for geometrytypes for use in a vector.
     
     virtualrefinement.cc
     This file contains the virtual wrapper around refinement.
     virtualrefinement.cc
     This file contains the virtual wrapper around refinement.
     
     virtualrefinement.hh
     This file contains the virtual wrapper around refinement.
     virtualrefinement.hh
     This file contains the virtual wrapper around refinement.
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/dir_428ed1c935e77406fcbfdccd4ee3f7a2.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/dir_428ed1c935e77406fcbfdccd4ee3f7a2.html", "unified_diff": "@@ -84,15 +84,15 @@\n \"\"\n \"\"\n
    \n \n \n \n-\n+\n \n

    \n Files

     typefromvertexcount.hh
     typefromvertexcount.hh
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/dir_b609f53bbb5e26b8e9292001c59476a3.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/dir_b609f53bbb5e26b8e9292001c59476a3.html", "unified_diff": "@@ -87,26 +87,26 @@\n \n \n \n \n \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

     base.cc
     This file contains the parts independent of a particular Refinement implementation.
     
     hcube.cc
     This file contains the Refinement implementation for hypercubes (quadrilaterals, hexahedrons, etc.).
     hcube.cc
     This file contains the Refinement implementation for hypercubes (quadrilaterals, hexahedrons, etc.).
     
     hcubetriangulation.cc
     This file contains the Refinement implementation for triangulating hypercubes (quadrilateral -> triangle, hexahedron -> tetrahedron)
     hcubetriangulation.cc
     This file contains the Refinement implementation for triangulating hypercubes (quadrilateral -> triangle, hexahedron -> tetrahedron)
     
     prismtriangulation.cc
     prismtriangulation.cc
     
     pyramidtriangulation.cc
     pyramidtriangulation.cc
     
     simplex.cc
     This file contains the Refinement implementation for simplices (triangles, tetrahedrons...)
     simplex.cc
     This file contains the Refinement implementation for simplices (triangles, tetrahedrons...)
     
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/dune-geometry.tag.gz", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/dune-geometry.tag.gz", "unified_diff": null, "details": [{"source1": "dune-geometry.tag", "source2": "dune-geometry.tag", "unified_diff": null, "details": [{"source1": "dune-geometry.tag", "source2": "dune-geometry.tag", "unified_diff": "@@ -1,162 +1,162 @@\n \n \n \n referenceelementspage.txt\n /build/reproducible-path/dune-geometry-2.9.0/doc/appl/refelements/\n- a00035.html\n+ a00008.html\n \n \n mainpage.txt\n /build/reproducible-path/dune-geometry-2.9.0/doc/doxygen/\n a00164.html\n \n \n modules.txt\n /build/reproducible-path/dune-geometry-2.9.0/doc/doxygen/\n a00167.html\n \n \n affinegeometry.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00233.html\n- dune/geometry/type.hh\n+ a00239.html\n+ dune/geometry/type.hh\n Dune::AffineGeometry\n Dune\n Dune::Geo\n \n \n axisalignedcubegeometry.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00227.html\n- dune/geometry/referenceelements.hh\n- dune/geometry/type.hh\n+ a00212.html\n+ dune/geometry/referenceelements.hh\n+ dune/geometry/type.hh\n Dune::AxisAlignedCubeGeometry\n Dune\n \n \n deprecated_topology.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00170.html\n+ a00218.html\n \n \n dimension.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00197.html\n+ a00176.html\n Dune::Dim\n Dune::Codim\n Dune\n \n \n generalvertexorder.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00182.html\n- type.hh\n- dune/geometry/referenceelements.hh\n+ a00194.html\n+ type.hh\n+ dune/geometry/referenceelements.hh\n Dune::GeneralVertexOrder\n Dune::GeneralVertexOrder::iterator\n Dune\n \n \n multilineargeometry.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00194.html\n- dune/geometry/affinegeometry.hh\n- dune/geometry/referenceelements.hh\n- dune/geometry/type.hh\n+ a00173.html\n+ dune/geometry/affinegeometry.hh\n+ dune/geometry/referenceelements.hh\n+ dune/geometry/type.hh\n Dune::MultiLinearGeometryTraits\n Dune::MultiLinearGeometryTraits::CornerStorage\n Dune::MultiLinearGeometryTraits::hasSingleGeometryType\n Dune::MultiLinearGeometry\n Dune::MultiLinearGeometry::JacobianInverseTransposed\n Dune::CachedMultiLinearGeometry\n Dune\n \n \n quadraturerules.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00224.html\n- dune/geometry/type.hh\n- dune/geometry/typeindex.hh\n+ a00179.html\n+ dune/geometry/type.hh\n+ dune/geometry/typeindex.hh\n Dune::QuadratureOrderOutOfRange\n Dune::QuadraturePoint\n Dune::QuadratureRule\n Dune::QuadratureRules\n Dune::QuadratureRuleFactory\n Dune::QuadratureRuleFactory< ctype, 0 >\n Dune::QuadratureRuleFactory< ctype, 1 >\n Dune::QuadratureRuleFactory< ctype, 2 >\n Dune::QuadratureRuleFactory< ctype, 3 >\n Dune\n Dune::QuadratureType\n \n #define\n DUNE_INCLUDING_IMPLEMENTATION\n- a00224.html\n+ a00179.html\n a0aeda817d7161b7c1afd8dd15ff12f17\n \n \n \n \n referenceelement.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00230.html\n- dune/geometry/type.hh\n+ a00215.html\n+ dune/geometry/type.hh\n Dune::Geo::ReferenceElement\n Dune::Geo::ReferenceElement::Codim\n Dune\n Dune::Geo\n \n \n referenceelementimplementation.cc\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00173.html\n- dune/geometry/referenceelementimplementation.hh\n+ a00188.html\n+ dune/geometry/referenceelementimplementation.hh\n Dune\n Dune::Geo\n \n \n referenceelementimplementation.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00203.html\n- dune/geometry/referenceelement.hh\n- dune/geometry/affinegeometry.hh\n- dune/geometry/type.hh\n+ a00170.html\n+ dune/geometry/referenceelement.hh\n+ dune/geometry/affinegeometry.hh\n+ dune/geometry/type.hh\n Dune\n Dune::Geo\n \n \n referenceelements.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00191.html\n- dune/geometry/dimension.hh\n- dune/geometry/type.hh\n- dune/geometry/referenceelement.hh\n- dune/geometry/referenceelementimplementation.hh\n+ a00185.html\n+ dune/geometry/dimension.hh\n+ dune/geometry/type.hh\n+ dune/geometry/referenceelement.hh\n+ dune/geometry/referenceelementimplementation.hh\n Dune::Geo::ReferenceElements\n Dune\n Dune::Geo\n Dune::Transitional\n \n \n refinement.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00188.html\n+ a00200.html\n refinement/base.cc\n- refinement/hcube.cc\n- refinement/simplex.cc\n- refinement/hcubetriangulation.cc\n- refinement/prismtriangulation.cc\n- refinement/pyramidtriangulation.cc\n+ refinement/hcube.cc\n+ refinement/simplex.cc\n+ refinement/hcubetriangulation.cc\n+ refinement/prismtriangulation.cc\n+ refinement/pyramidtriangulation.cc\n \n \n base.cc\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/refinement/\n a00221.html\n- dune/geometry/type.hh\n+ dune/geometry/type.hh\n Dune::RefinementImp::Traits\n Dune::RefinementIntervals\n Dune::StaticRefinement\n Dune::StaticRefinement::Codim\n Dune\n Dune::RefinementImp\n \n@@ -166,127 +166,127 @@\n ab8232ef779e57c3676c54a73bd759f72\n \n \n \n \n hcube.cc\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/refinement/\n- a00206.html\n- dune/geometry/referenceelements.hh\n- dune/geometry/axisalignedcubegeometry.hh\n+ a00230.html\n+ dune/geometry/referenceelements.hh\n+ dune/geometry/axisalignedcubegeometry.hh\n base.cc\n Dune::RefinementImp::HCube::RefinementImp\n Dune::RefinementImp::HCube::RefinementImp::Codim\n Dune::RefinementImp::HCube::RefinementSubEntityIteratorSpecial\n Dune::RefinementImp::HCube::RefinementSubEntityIteratorSpecial< dimension, CoordType, dimension >\n Dune::RefinementImp::HCube::RefinementSubEntityIteratorSpecial< dimension, CoordType, 0 >\n Dune::RefinementImp::HCube::RefinementImp::Codim< codimension >\n Dune\n Dune::RefinementImp\n Dune::RefinementImp::HCube\n \n #define\n DUNE_GEOMETRY_REFINEMENT_HCUBE_CC\n- a00206.html\n+ a00230.html\n a2be7a03e64dedaaa1cf5c7c8e2a9cf60\n \n \n \n \n hcubetriangulation.cc\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/refinement/\n- a00209.html\n- dune/geometry/referenceelements.hh\n- dune/geometry/type.hh\n+ a00236.html\n+ dune/geometry/referenceelements.hh\n+ dune/geometry/type.hh\n base.cc\n- simplex.cc\n+ simplex.cc\n Dune::RefinementImp::HCubeTriangulation::RefinementImp\n Dune::RefinementImp::HCubeTriangulation::RefinementImp::Codim\n Dune::RefinementImp::HCubeTriangulation::RefinementIteratorSpecial< dimension, CoordType, dimension >\n Dune::RefinementImp::HCubeTriangulation::RefinementIteratorSpecial< dimension, CoordType, 0 >\n Dune::RefinementImp::HCubeTriangulation::RefinementImp::Codim< codimension >\n Dune\n Dune::RefinementImp\n Dune::RefinementImp::HCubeTriangulation\n \n #define\n DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC\n- a00209.html\n+ a00236.html\n a3fe24de9b756cd18f014979a41cb0843\n \n \n \n \n prismtriangulation.cc\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/refinement/\n- a00212.html\n- dune/geometry/referenceelements.hh\n- dune/geometry/type.hh\n+ a00227.html\n+ dune/geometry/referenceelements.hh\n+ dune/geometry/type.hh\n base.cc\n- simplex.cc\n+ simplex.cc\n Dune::RefinementImp::PrismTriangulation::RefinementImp\n Dune::RefinementImp::PrismTriangulation::RefinementImp::Codim\n Dune::RefinementImp::PrismTriangulation::RefinementIteratorSpecial< dimension, CoordType, dimension >\n Dune::RefinementImp::PrismTriangulation::RefinementIteratorSpecial< dimension, CoordType, 0 >\n Dune::RefinementImp::PrismTriangulation::RefinementImp::Codim< codimension >\n Dune\n Dune::RefinementImp\n Dune::RefinementImp::PrismTriangulation\n \n #define\n DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC\n- a00212.html\n+ a00227.html\n ae56eb72b98f97f57cc224eb9b4394ef8\n \n \n \n \n pyramidtriangulation.cc\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/refinement/\n- a00215.html\n- dune/geometry/referenceelements.hh\n- dune/geometry/type.hh\n+ a00224.html\n+ dune/geometry/referenceelements.hh\n+ dune/geometry/type.hh\n base.cc\n- simplex.cc\n+ simplex.cc\n Dune::RefinementImp::PyramidTriangulation::RefinementImp\n Dune::RefinementImp::PyramidTriangulation::RefinementImp::Codim\n Dune::RefinementImp::PyramidTriangulation::RefinementIteratorSpecial< dimension, CoordType, dimension >\n Dune::RefinementImp::PyramidTriangulation::RefinementIteratorSpecial< dimension, CoordType, 0 >\n Dune::RefinementImp::PyramidTriangulation::RefinementImp::Codim< codimension >\n Dune\n Dune::RefinementImp\n Dune::RefinementImp::PyramidTriangulation\n \n #define\n DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC\n- a00215.html\n+ a00224.html\n a5f431ee98541c17b3d9aea2dbc726941\n \n \n \n \n simplex.cc\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/refinement/\n- a00218.html\n- dune/geometry/multilineargeometry.hh\n- dune/geometry/referenceelements.hh\n- dune/geometry/type.hh\n+ a00233.html\n+ dune/geometry/multilineargeometry.hh\n+ dune/geometry/referenceelements.hh\n+ dune/geometry/type.hh\n base.cc\n Dune::RefinementImp::Simplex::RefinementImp\n Dune::RefinementImp::Simplex::RefinementImp::Codim\n Dune::RefinementImp::Simplex::RefinementIteratorSpecial< dimension, CoordType, dimension >\n Dune::RefinementImp::Simplex::RefinementIteratorSpecial< dimension, CoordType, 0 >\n Dune::RefinementImp::Simplex::RefinementImp::Codim< codimension >\n Dune\n Dune::RefinementImp\n Dune::RefinementImp::Simplex\n \n #define\n DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC\n- a00218.html\n+ a00233.html\n a944407dc4f6f9a372b10b69bbb5a0792\n \n \n \n int\n factorial\n a00266.html\n@@ -370,52 +370,52 @@\n afd47205aa1691498b073d9681fb23f6d\n (FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)\n \n \n \n topologyfactory.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00239.html\n- dune/geometry/type.hh\n- dune/geometry/typeindex.hh\n+ a00209.html\n+ dune/geometry/type.hh\n+ dune/geometry/typeindex.hh\n Dune::TopologyFactory\n Dune::TopologySingletonFactory\n Dune\n \n \n type.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00236.html\n- dune/geometry/deprecated_topology.hh\n+ a00203.html\n+ dune/geometry/deprecated_topology.hh\n Dune::GeometryType\n Dune\n Dune::GeometryTypes\n \n \n typeindex.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00179.html\n- type.hh\n+ a00191.html\n+ type.hh\n Dune::LocalGeometryTypeIndex\n Dune::GlobalGeometryTypeIndex\n Dune\n \n \n typefromvertexcount.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/utility/\n- a00185.html\n- dune/geometry/type.hh\n+ a00206.html\n+ dune/geometry/type.hh\n Dune\n \n \n virtualrefinement.cc\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00176.html\n- type.hh\n- refinement.hh\n+ a00197.html\n+ type.hh\n+ refinement.hh\n Dune::VirtualRefinementSubEntityIteratorSpecial< dimension, CoordType, dimension >\n Dune::VirtualRefinementSubEntityIteratorSpecial< dimension, CoordType, 0 >\n Dune::VirtualRefinement::Codim< codimension >\n Dune::VirtualRefinementSubEntityIteratorBackSpecial< dimension, CoordType, dimension >\n Dune::VirtualRefinementSubEntityIteratorBackSpecial< dimension, CoordType, 0 >\n Dune::VirtualRefinement::SubEntityIteratorBack\n Dune::VirtualRefinementImp\n@@ -425,26 +425,26 @@\n Dune::RefinementBuilder\n Dune::RefinementBuilder< 1, CoordType >\n Dune::RefinementBuilder< 3, CoordType >\n Dune\n \n #define\n DUNE_GEOMETRY_VIRTUALREFINEMENT_CC\n- a00176.html\n+ a00197.html\n ac82d420bff6cce87d06ad71b4f1cb0c8\n \n \n \n \n virtualrefinement.hh\n /build/reproducible-path/dune-geometry-2.9.0/dune/geometry/\n- a00200.html\n- refinement.hh\n- type.hh\n- virtualrefinement.cc\n+ a00182.html\n+ refinement.hh\n+ type.hh\n+ virtualrefinement.cc\n Dune::VirtualRefinement\n Dune::VirtualRefinement::Codim\n Dune\n \n \n Dune::AffineGeometry\n a01099.html\n"}]}]}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/files.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/files.html", "unified_diff": "@@ -78,38 +78,38 @@\n   appl\n  refelements\n  doxygen\n   dune\n   geometry\n   refinement\n  base.ccThis file contains the parts independent of a particular Refinement implementation \n- hcube.ccThis file contains the Refinement implementation for hypercubes (quadrilaterals, hexahedrons, etc.) \n- hcubetriangulation.ccThis file contains the Refinement implementation for triangulating hypercubes (quadrilateral -> triangle, hexahedron -> tetrahedron) \n- prismtriangulation.cc\n- pyramidtriangulation.cc\n- simplex.ccThis file contains the Refinement implementation for simplices (triangles, tetrahedrons...) \n+ hcube.ccThis file contains the Refinement implementation for hypercubes (quadrilaterals, hexahedrons, etc.) \n+ hcubetriangulation.ccThis file contains the Refinement implementation for triangulating hypercubes (quadrilateral -> triangle, hexahedron -> tetrahedron) \n+ prismtriangulation.cc\n+ pyramidtriangulation.cc\n+ simplex.ccThis file contains the Refinement implementation for simplices (triangles, tetrahedrons...) \n   utility\n- typefromvertexcount.hh\n- affinegeometry.hhAn implementation of the Geometry interface for affine geometries \n- axisalignedcubegeometry.hhA geometry implementation for axis-aligned hypercubes \n- deprecated_topology.hh\n- dimension.hh\n- generalvertexorder.hh\n- multilineargeometry.hh\n- quadraturerules.hh\n- referenceelement.hh\n- referenceelementimplementation.cc\n- referenceelementimplementation.hh\n- referenceelements.hh\n- refinement.hhThis file simply includes all Refinement implementations so you don't have to do them separately \n- topologyfactory.hh\n- type.hhA unique label for each type of element that can occur in a grid \n- typeindex.hhHelper classes to provide indices for geometrytypes for use in a vector \n- virtualrefinement.ccThis file contains the virtual wrapper around refinement \n- virtualrefinement.hhThis file contains the virtual wrapper around refinement \n+ typefromvertexcount.hh\n+ affinegeometry.hhAn implementation of the Geometry interface for affine geometries \n+ axisalignedcubegeometry.hhA geometry implementation for axis-aligned hypercubes \n+ deprecated_topology.hh\n+ dimension.hh\n+ generalvertexorder.hh\n+ multilineargeometry.hh\n+ quadraturerules.hh\n+ referenceelement.hh\n+ referenceelementimplementation.cc\n+ referenceelementimplementation.hh\n+ referenceelements.hh\n+ refinement.hhThis file simply includes all Refinement implementations so you don't have to do them separately \n+ topologyfactory.hh\n+ type.hhA unique label for each type of element that can occur in a grid \n+ typeindex.hhHelper classes to provide indices for geometrytypes for use in a vector \n+ virtualrefinement.ccThis file contains the virtual wrapper around refinement \n+ virtualrefinement.hhThis file contains the virtual wrapper around refinement \n \n \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n"}, {"source1": "./usr/share/doc/libdune-geometry-doc/doxygen/globals.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/globals.html", "unified_diff": "@@ -67,21 +67,21 @@\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-geometry-doc/doxygen/globals_defs.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/globals_defs.html", "unified_diff": "@@ -67,21 +67,21 @@\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-geometry-doc/doxygen/a00035.html", "source2": "./usr/share/doc/libdune-geometry-doc/doxygen/a00008.html", "comments": ["Files identical despite different names"], "unified_diff": null}]}]}]}]}